// ------------------------------------------------------------------------- // ----- MvdMCClusterTask source file ----- // ----- Created 20/03/07 by R.Kliemt ----- // ------------------------------------------------------------------------- // libc includes #include // Root includes #include "TROOT.h" #include "TString.h" #include "TClonesArray.h" #include "TParticlePDG.h" #include "TRandom.h" // framework includes #include "CbmRootManager.h" #include "MvdMCClusterTask.h" #include "CbmRunAna.h" #include "CbmRuntimeDb.h" #include "../mcstack/CbmMCTrack.h" #include "CbmHit.h" // Mvd includes #include "MvdCluster.h" #include "MvdPoint.h" // ----- Default constructor ------------------------------------------- MvdMCClusterTask::MvdMCClusterTask() : CbmTask("Digitization task for PANDA Mvd") { fBranchName = "MvdPoint"; } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- MvdMCClusterTask::~MvdMCClusterTask() { } // ----- Public method Init -------------------------------------------- InitStatus MvdMCClusterTask::Init() { // Get RootManager CbmRootManager* ioman = CbmRootManager::Instance(); if ( ! ioman ) { std::cout << "-E- MvdMCClusterTask::Init: " << "RootManager not instantiated!" << std::endl; return kFATAL; } // Get input array fPointArray = (TClonesArray*) ioman->GetObject(fBranchName); if ( ! fPointArray ) { std::cout << "-W- MvdMCClusterTask::Init: "<< "No "<GetObject("MCTrack"); if(fMctruthArray==0) { std::cout << "-W- MvdMCClusterTask::Init: No McTruth array!" << std::endl; return kERROR; } // Create and register output array fClusterOutputArray = new TClonesArray("MvdCluster"); ioman->Register("MvdCluster", "Mvd ideal Clusters", fClusterOutputArray, kTRUE); return kSUCCESS; } // ------------------------------------------------------------------------- void MvdMCClusterTask::SetParContainers() { // Get Base Container CbmRunAna* ana = CbmRunAna::Instance(); CbmRuntimeDb* rtdb=ana->GetRuntimeDb(); } // ----- Public method Exec -------------------------------------------- void MvdMCClusterTask::Exec(Option_t* opt) { // Fills MvdClusters with the MC Truth // TODO filling of RecoHits, together with the sensor plane if ( ! fClusterOutputArray ) Fatal("Exec", "No fClusterOutputArray"); fClusterOutputArray->Clear(); // const TVector3 BField(0,0,2); // // CREATE MONTECARLO MAP // std::map mcmap; // Int_t nmc=fMctruthArray->GetEntriesFast(); // for(int imc=0;imcAt(imc); // mcmap[imc]=mc; // } // BUILD RECOHITS std::map clusterMap; Int_t nMvdHits=fPointArray->GetEntriesFast(); for(Int_t iMvdHit=0;iMvdHitAt(iMvdHit); int trackid=aMvdPoint->GetTrackID(); // cut on secondaries (deltas) etc if(trackid<0)continue; TVector3 pos; TVector3 dpos(0.005,0.005,0.005); aMvdPoint->Position(pos); smear(pos,dpos); // here we shall distinguish between strip and pixel sensorsaveOutput() // wait for better geometry access int size = fClusterOutputArray->GetEntriesFast(); MvdCluster* cluster = new ((*fClusterOutputArray)[size]) MvdCluster(aMvdPoint->GetDetectorID(), pos, dpos, aMvdPoint->GetTrackID()); }//end for MvdiMvdHit std::cout<GetEntriesFast() <<" Clusters created"<Gaus(0,sigx); sigy=gRandom->Gaus(0,sigy); sigz=gRandom->Gaus(0,sigz); x += sigx; y += sigy; z += sigz; pos.SetXYZ(x,y,z); return; } ClassImp(MvdMCClusterTask)