// ------------------------------------------------------------------------- // ----- CbmPsdIdealDigitizer source file ----- // ----- Created 15/05/12 by Alla & modified by SELIM ----- // ------------------------------------------------------------------------- #include #include "TClonesArray.h" #include "FairRootManager.h" #include "FairLogger.h" #include "CbmPsdDigi.h" #include "CbmPsdIdealDigitizer.h" //#include "CbmZdcPoint.h" #include "CbmPsdPoint.h" #include "TMath.h" using std::cout; using std::endl; // ----- Default constructor ------------------------------------------- CbmPsdIdealDigitizer::CbmPsdIdealDigitizer() : FairTask("Ideal Psd Digitizer",1), fPointArray(NULL), fDigiArray(NULL), fNDigis(0) { // Reset(); } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- CbmPsdIdealDigitizer::~CbmPsdIdealDigitizer() { if ( fDigiArray ) { fDigiArray->Delete(); delete fDigiArray; } } // ------------------------------------------------------------------------- // ----- Public method Init -------------------------------------------- InitStatus CbmPsdIdealDigitizer::Init() { // Get RootManager FairRootManager* ioman = FairRootManager::Instance(); if ( ! ioman ) { LOG(FATAL) << "CbmPsdIdealDigitizer::Init: RootManager not instantised!" << FairLogger::endl; // SELIM: precaution return kFATAL; } // Get input array //fPointArray = (TClonesArray*) ioman->GetObject("ZDCPoint"); fPointArray = (TClonesArray*) ioman->GetObject("PsdPoint"); if ( ! fPointArray ) { LOG(FATAL) << "CbmPsdIdealDigitizer::Init: No PSDPoint array!" << FairLogger::endl; // SELIM: precaution return kERROR; } // Create and register output array fDigiArray = new TClonesArray("CbmPsdDigi", 1000); ioman->Register("PsdDigi", "PSD", fDigiArray, kTRUE); cout << "-I- CbmPsdIdealDigitizer: Intialisation successfull " << kSUCCESS<< endl; return kSUCCESS; } // ------------------------------------------------------------------------- // ----- Public method Exec -------------------------------------------- void CbmPsdIdealDigitizer::Exec(Option_t* opt) { cout<<" CbmPsdIdealDigitizer::Exec begin "<GetEntriesFast(); cout<<" nPoints "<At(iPoint); point = (CbmPsdPoint*) fPointArray->At(iPoint); if ( ! point ) continue; // Detector ID modID = point->GetModuleID(); // SELIM: correction scintID <-> modID !!!!!! scinID = point->GetDetectorID(); sec = Int_t((scinID - 1)/6) + 1; // SELIM: section number from 1 -> 10 edep[sec][modID] += (Double_t) point->GetEnergyLoss(); // SELIM: overcast in double! //if ( sec > modID_max) modID_max = sec; //if ( sec < modID_min) modID_min = sec; }// Loop over MCPoints //cout << "modID in: " << modID_min << ", " << modID_max << endl; for (Int_t imod=0; imod<100; imod++) // SELIM: can include up to 100 modules { for (Int_t isec=0; isec<100; isec++) { if (edep[isec][imod]>0.) { new ((*fDigiArray)[fNDigis]) CbmPsdDigi(isec, imod, edep[isec][imod]); fNDigis++; } } // section }//module // Event summary cout << "-I- CbmPsdIdealDigitizer: " <Delete(); } ClassImp(CbmPsdIdealDigitizer)