11 #include "TClonesArray.h"
12 #include "TParticlePDG.h"
15 #include "FairRootManager.h"
17 #include "FairRunAna.h"
18 #include "FairRuntimeDb.h"
25 #include "../../genfit/GFTrack.h"
26 #include "../../genfit/GFTrackCand.h"
34 FairTask(
"Digitization task for PANDA PndHyp")
52 FairRootManager* ioman = FairRootManager::Instance();
54 std::cout <<
"-E- PndHypIdealTrackingTask::Init: "<<
"RootManager not instantiated!" << std::endl;
58 fHitArray = (TClonesArray*) ioman->GetObject(
"HYPHit");
60 std::cout <<
"-W- PndHypIdealTrackingTask::Init: "<<
"No fHitarray!" << std::endl;
65 std::cout <<
"-W- PndMvdIdealTrackingTask::Init: "<<
"No fClusterStripArray!" << std::endl;
70 std::cout <<
"-W- PndMvdIdealTrackingTask::Init: "<<
"No fDigiStripArray array!" << std::endl;
73 fPointArray = (TClonesArray*) ioman->GetObject(
"HypPoint");
76 std::cout <<
"-W- PndHypStripHitProducer::Init: "
77 <<
"No MVDPoint array!" << std::endl;
84 std::cout <<
"-W- PndHypIdealTrackingTask::Init: "<<
"No McTruth array!" << std::endl;
89 ioman->Register(
"HypTrackCand",
"PndHyp ideal tracklets",
fTrackOutputArray, kTRUE);
98 FairRunAna* ana = FairRunAna::Instance();
99 FairRuntimeDb*
rtdb=ana->GetRuntimeDb();
111 std::map<Int_t, PndMCTrack*> mcmap;
113 for(Int_t imc=0;imc<nmc;++imc){
121 std::map<Int_t, GFTrackCand*> trackMap;
123 Int_t nPndHypHits=
fHitArray->GetEntriesFast();
124 cout<<nPndHypHits<<endl;
127 for(Int_t iHit=0;iHit<nPndHypHits;++iHit)
130 Int_t clustid=hit->GetRefIndex();
131 Int_t digiid,pointid,MCid;
147 MCid = point->GetTrackID();
161 if(trackMap[MCid]==0)
165 trackMap[MCid]=
new ((*fTrackOutputArray)[size])
GFTrackCand();
168 if( mcmap[MCid]==0)
continue;
170 pdgcode = mcmap[MCid]->GetPdgCode();
173 TParticlePDG pdgpart(pdgcode);
174 Int_t mcCharge = (Int_t)pdgpart.Charge();
176 TVector3 vtx = mcmap[MCid]->GetStartVertex();
177 TVector3
mom = mcmap[MCid]->GetMomentum();
181 Double_t dxdz = invp*mom.x()*mom.z();
182 Double_t dydz = invp*mom.y()*mom.z();
183 Double_t sigx = 0.01, sigy = 0.01, sigdxdz = 0.01, sigdydz = 0.01, siginvp = 0.01;
191 if(
fVerbose>1) std::cout<<
"PndHypIdealTrackingTask::Exec(), Particle Info: "
192 <<pdgpart.GetName()<<
" ("<<pdgcode<<
") Q="<<mcCharge<<std::endl;
196 trackMap[MCid]->setInverted(
false);
207 trackMap[MCid]->addHit(3,iHit);
216 <<
" Tracks created"<<std::endl;
226 return (2/
TMath::Sqrt(p.Px()*p.Px() + p.Py()*p.Py()));
232 return (p.Mag()/
TMath::Sqrt(p.Px()*p.Px() + p.Py()*p.Py()));
Class to store the Digis which belong to one cluster This class holds the information which Digi belo...
virtual InitStatus Init()
static T Sqrt(const T &x)
TClonesArray * fPointArray
TVector3 GetMomentum() const
virtual void SetParContainers()
virtual void Exec(Option_t *opt)
TClonesArray * fDigiStripArray
~PndHypIdealTrackingTask()
TClonesArray * fTrackOutputArray
Int_t GetBotIndex() const
TClonesArray * fClusterStripArray
Track candidate – a list of cluster indices.
PndHypIdealTrackingTask()
Double_t GetTrackDip(PndMCTrack *myTrack)
Base class for Digi information.
Double_t GetTrackCurvature(PndMCTrack *myTrack)
TClonesArray * fMctruthArray