// ------------------------------------------------------------------------- // ----- CbmPsdIdealDigitizer source file ----- // ----- Created 15/05/12 by Alla & SELIM & FLORIAN ----- // ------------------------------------------------------------------------- #include #include #include "TClonesArray.h" #include "FairRootManager.h" #include "FairLogger.h" #include "CbmPsdDigi.h" #include "CbmPsdIdealDigitizer.h" #include "CbmPsdPoint.h" #include "TMath.h" using std::cout; using std::endl; using std::map; using std::pair; // ----- Default constructor ------------------------------------------- CbmPsdIdealDigitizer::CbmPsdIdealDigitizer() : FairTask("Ideal Psd Digitizer",1), fNDigis(0), fPointArray(NULL), fDigiArray(NULL) { // 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!"; //FLORIAN return kFATAL; } // Get input array fPointArray = (TClonesArray*) ioman->GetObject("PsdPoint"); if ( ! fPointArray ) { LOG(fatal) << "CbmPsdIdealDigitizer::Init: No PSDPoint array!"; //FLORIAN return kERROR; } // Create and register output array fDigiArray = new TClonesArray("CbmPsdDigi", 1000); ioman->Register("PsdDigi", "PSD", fDigiArray, IsOutputBranchPersistent("PsdDigi")); cout << "-I- CbmPsdIdealDigitizer: Intialisation successfull " << kSUCCESS<< endl; return kSUCCESS; } // ------------------------------------------------------------------------- // ----- Public method Exec -------------------------------------------- void CbmPsdIdealDigitizer::Exec(Option_t* /*opt*/) { cout<<" CbmPsdIdealDigitizer::Exec begin "<, double> edepmap; // Loop over PsdPoints Int_t nPoints = fPointArray->GetEntriesFast(); cout<<" nPoints "<At(iPoint); if ( ! point ) continue; // Detector ID //modID = point->GetModuleID(); // !!!!! correction SELIM: scintID <-> modID !!!!!! //scinID = point->GetDetectorID(); //edep[sec][modID] += point->GetEnergyLoss(); modID = point->GetModuleID(); //marina 1-44 (45) scinID = point->GetDetectorID();//1-60 //sec = (Int_t)((scinID-1)/6); //marina 0-9 sec = (Int_t)((scinID-1)/6)+1; //marina 1-10 auto insert_result = edepmap.insert( std::make_pair(std::make_pair(modID, sec), point->GetEnergyLoss())); if (!insert_result.second) { // this entry has existed before (*insert_result.first).second += point->GetEnergyLoss(); } //edep[sec-1][modID-1] += (Double_t) point->GetEnergyLoss(); //cout <<"MARINA modID,scinID " < 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=1; imod<50; imod++) //SELIM: 49 modules, including central & corner modules (rejected in analysis/flow/eventPlane.cxx) /* for (Int_t imod=0; imodDelete(); } ClassImp(CbmPsdIdealDigitizer)