// ------------------------------------------------------------------------- // ----- PndMvdPidIdealTask source file ----- // ----- Created 11/07/07 by T.Baldauf ----- // ------------------------------------------------------------------------- // libc includes #include #include // Root includes #include "TROOT.h" #include "TString.h" #include "TClonesArray.h" #include "TParticlePDG.h" #include "TObject.h" #include "TH1.h" #include "TH2.h" #include "TCanvas.h" // framework includes #include "CbmRootManager.h" #include "PndMvdPidIdealTask.h" #include "CbmRunAna.h" #include "CbmRuntimeDb.h" #include "../mcstack/CbmMCTrack.h" // PndMvd includes #include "PndMvdMCPoint.h" #include "PndMvdPidCand.h" // #include "PndMvdHit.h" //test #include "MvdPid/PndMvdPidLikelihood.h" // ----- Default constructor ------------------------------------------- PndMvdPidIdealTask::PndMvdPidIdealTask() : CbmTask("Digitization task for PANDA PndMvd") { fBranchName = "MVDPoint"; ftrunc=0; } PndMvdPidIdealTask::PndMvdPidIdealTask(Double_t trunc) : CbmTask("Digitization task for PANDA PndMvd") { fBranchName = "MVDPoint"; ftrunc=trunc; } // ----- Destructor ---------------------------------------------------- PndMvdPidIdealTask::~PndMvdPidIdealTask() { } // ----- Public method Init -------------------------------------------- InitStatus PndMvdPidIdealTask::Init() { // Get RootManager CbmRootManager* ioman = CbmRootManager::Instance(); if ( ! ioman ) { std::cout << "-E- PndMvdPidIdealTask::Init: "<< "RootManager not instantiated!" << std::endl; return kFATAL; } // Get input array fPointArray = (TClonesArray*) ioman->GetObject(fBranchName); if ( ! fPointArray ) { std::cout << "-W- PndMvdPidIdealTask::Init: "<< "No "<GetObject("MCTrack"); if(fMcArray==0) { std::cout << "-W- PndMvdPidIdealTask::Init: "<< "No McTruth array!" << std::endl; return kERROR; } // Create and register output array fTrackOutputArray = new TClonesArray("PndMvdPidCand"); ioman->Register("PndMvdPidCand", "PndMvd ideal tracklets", fTrackOutputArray, kTRUE); return kSUCCESS; } // ------------------------------------------------------------------------- void PndMvdPidIdealTask::SetParContainers() { // Get Base Container CbmRunAna* ana = CbmRunAna::Instance(); CbmRuntimeDb* rtdb=ana->GetRuntimeDb(); } //----------------Exec---------------- void PndMvdPidIdealTask::Exec(Option_t* opt) { if ( ! fTrackOutputArray ) Fatal("Exec", "No fTrackOutputArray"); fTrackOutputArray->Clear(); //-------Map erzeugen--------------------------------------------------------- std::map trackS; Int_t nmc1=fPointArray->GetEntriesFast(); Int_t nmc2=fMcArray->GetEntriesFast(); //-------Auswertung der Hits-------------------------------------------------- Int_t nPndMvdHits=fPointArray->GetEntriesFast(); for(Int_t iPndMvdHit=0;iPndMvdHitAt(iPndMvdHit); Int_t imc = mvdpoint->GetTrackID(); // if(imc < 0) continue; // cut off secondaries if(trackS[imc]==0) { CbmMCTrack* mct=(CbmMCTrack*)fMcArray->At(imc); if(mct == 0) { std::cout<<"PndMvdPidIdealTask::Exec(): tracknumber "<setTrack(imc,mct->GetPdgCode()); } mvdpoint->Momentum(vecPFront); diffVec.SetXYZ( (mvdpoint->GetXOut()-mvdpoint->GetX()), (mvdpoint->GetYOut()-mvdpoint->GetY()), (mvdpoint->GetZOut()-mvdpoint->GetZ())); dx=diffVec.Mag(); if(dx>0) trackS[imc]->addHit(mvdpoint->GetEnergyLoss(), dx, vecPFront.Mag()); }//end pointloop //-------Zuordnung------------------------------------------------------------ for(std::map::iterator it=trackS.begin();it!=trackS.end();it++) {//looping over previously filled PndMvdPidCands PndMvdPidLikelihood::CalcLikelihood(it->second); it->second->getMean(meanImp,meanE); if(fVerbose > 1)std::cout< 1)std::cout<second->getTrack(tracK,pdG); if(fVerbose > 1)std::cout<GetEntriesFast(); new ((*fTrackOutputArray)[size]) PndMvdPidCand(*(it->second)); } } // ------------------------------------------------------------------------- ClassImp(PndMvdPidIdealTask)