///////////////////////////////////////////////////////////// // // PndEmcHdrFiller // // Filler of PndEmcHeader // // Created 21/04/07 by S.Spataro // /////////////////////////////////////////////////////////////// #include "TClonesArray.h" #include "TLorentzVector.h" #include "CbmRootManager.h" #include "PndEmcHdrFiller.h" #include "PndEmcHeader.h" #include "EmcDigi.h" #include "EmcCluster.h" // ----- Default constructor ------------------------------------------- PndEmcHdrFiller::PndEmcHdrFiller() : CbmTask("EMC Header Filler") { } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- PndEmcHdrFiller::~PndEmcHdrFiller() { } // ------------------------------------------------------------------------- // ----- Public method Init -------------------------------------------- InitStatus PndEmcHdrFiller::Init() { cout << " INITIALIZATION *********************" << endl; // Get RootManager CbmRootManager* ioman = CbmRootManager::Instance(); if ( ! ioman ) { cout << "-E- PndEmcHdrFiller::Init: " << "RootManager not instantiated!" << endl; return kFATAL; } // Get input array fDigiArray = (TClonesArray*) ioman->GetObject("EmcDigi"); if ( ! fDigiArray ) { cout << "-W- PndEmcHdrFiller::Init: " << "No EmcDigi array!" << endl; } fCluArray = (TClonesArray*) ioman->GetObject("EmcCluster"); if ( ! fCluArray ) { cout << "-W- PndEmcHdrFiller::Init: " << "No EmcCluster array!" << endl; } // Create and register output array fHdrArray = new TClonesArray("PndEmcHeader"); ioman->Register("EmcHeader","Emc",fHdrArray,kTRUE); cout << "-I- PndEmcHdrFiller: Intialization successfull" << endl; return kSUCCESS; } // ------------------------------------------------------------------------- // ----- Public method Exec -------------------------------------------- void PndEmcHdrFiller::Exec(Option_t* opt) { // Initial reset of parameters Double32_t fDigiEnergy = 0.; Double32_t fCluEnergy = 0.; Int_t nDigiMult = 0; Int_t nCluMult = 0; EmcDigi *digi; fHdrArray->Clear(); if ( fDigiArray ) // Loop over EmcDigi points { for (Int_t iDigi=0; iDigi< (fDigiArray->GetEntriesFast()) ; iDigi++) { digi = (EmcDigi*) fDigiArray->At(iDigi); fDigiEnergy += digi->GetEnergy(); nDigiMult++; } } // end of EmcDigi loop EmcCluster *cluster; TLorentzVector sum_clu(0., 0., 0., 0.), single_clu(0., 0., 0., 0.); TVector3 mom_clu(0., 0., 0.); if ( fCluArray ) // Loop over EmcCluster points { for (Int_t iClu=0; iClu< (fCluArray->GetEntriesFast()) ; iClu++) { cluster = (EmcCluster*) fCluArray->At(iClu); fCluEnergy += cluster->energy(); nCluMult++; mom_clu.SetMagThetaPhi(cluster->energy(), cluster->theta(), cluster->phi()); single_clu.SetVectM(mom_clu, 0.); sum_clu = sum_clu + single_clu; } } // end of EmcCluster loop // Register EmcHeader AddHit(fDigiEnergy, nDigiMult, fCluEnergy, nCluMult, sum_clu.Vect()); } // ------------------------------------------------------------------------- // ----- Private method AddHit -------------------------------------------- PndEmcHeader* PndEmcHdrFiller::AddHit(Double32_t ene_digi, Int_t mult_digi, Double32_t ene_clu, Int_t mult_clu, TVector3 p_clu){ // It fills the PndEmcHeader category TClonesArray& clref = *fHdrArray; Int_t size = clref.GetEntriesFast(); PndEmcHeader(ene_digi, mult_digi, ene_clu, mult_clu, p_clu).Print(); return new(clref[size]) PndEmcHeader(ene_digi, mult_digi, ene_clu, mult_clu, p_clu); } // ---- ClassImp(PndEmcHdrFiller)