FairRoot/PandaRoot
PndGemIdealPatternRecoTask.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndGemIdealPatternRecoTask source file -----
3 // ----- Based on PndDchFindTracks 27/01/08 by A. Bubak -----
4 // ----- according to the CbmStsFindTracks -----
5 // -------------------------------------------------------------------------
6 
7 
8 // Pnd includes
10 
11 #include "FairRootManager.h"
12 #include "FairRunAna.h"
13 #include "FairRuntimeDb.h"
14 #include "FairBaseParSet.h"
15 
16 // ROOT includes
17 #include "TClonesArray.h"
18 
19 #include<iostream>
20 #include"assert.h"
21 
22 #include"PndMCTrack.h"
23 #include"PndTrackCand.h"
24 #include"PndDetectorList.h"
25 #include"PndGemHit.h"
26 #include"PndGemMCPoint.h"
27 
28 // ----- Default constructor -------------------------------------------
30  fMCTrackArr = NULL;
31  fGemHitArr = NULL;
32  fGemPointArr = NULL;
33  fPndTrackCandArr = NULL;
34 }
35 // -------------------------------------------------------------------------
36 
37 
38 
39 // -------------------------------------------------------------------------
40 
41 
42 
43 // ----- Destructor ----------------------------------------------------
45  fMCTrackArr->Delete();
46  fGemHitArr->Delete();
47  fGemPointArr->Delete();
48  fPndTrackCandArr->Delete();
49  if(fMCTrackArr != NULL) delete fMCTrackArr;
50  if(fGemHitArr != NULL) delete fGemHitArr;
51  if(fGemPointArr != NULL) delete fGemPointArr;
52  if(fPndTrackCandArr != NULL) delete fPndTrackCandArr;
53 }
54 // -------------------------------------------------------------------------
55 
56 
57 
58 // ----- Public method Init (abstract in base class) --------------------
60 
61  // Get and check FairRootManager
62  FairRootManager* ioman = FairRootManager::Instance();
63  if( !ioman ) {
64  std::cout << "-E- PndGemIdealPatternRecoTask::Init: "
65  << "RootManager not instantised!" << std::endl;
66  return kFATAL;
67  }
68 
69  fMCTrackArr = (TClonesArray*) ioman->GetObject("MCTrack");
70  if ( !fMCTrackArr ) {
71  std::cout << "-W- PndGemIdealPatternRecoTask::Init: No MCTrack array!" << std::endl;
72  return kERROR;
73  }
74 
75  fGemPointArr = (TClonesArray*) ioman->GetObject("GEMPoint");
76  if ( !fGemPointArr ) {
77  std::cout << "-W- PndGemIdealPatternRecoTask::Init: No PndGemPoint array!" << std::endl;
78  return kERROR;
79  }
80  fGemHitArr = (TClonesArray*) ioman->GetObject("GEMHit");
81  if ( !fGemHitArr ) {
82  std::cout << "-W- PndGemIdealPatternRecoTask::Init: No PndGemHit array!" << std::endl;
83  return kERROR;
84  }
85 
86  // Create and register GemTrack array
87  fPndTrackCandArr = new TClonesArray("PndTrackCand",100);
88  ioman->Register("GemPndTrackCand", "Gem", fPndTrackCandArr , kTRUE);
89 
90  std::cout << "PndGemIdealPatternRecoTask::Init() finished" << std::endl;
91  return kSUCCESS;
92 
93 }
94 // -------------------------------------------------------------------------
95 
96 
97 
98 // ----- SetParContainers -------------------------------------------------
100  FairRunAna* ana = FairRunAna::Instance();
101  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
102  rtdb->getContainer("FairBaseParSet");
103  rtdb->getContainer("PndGeoPassivePar");
104 }
105 // -------------------------------------------------------------------------
106 
107 
108 
109 // ----- Public method Exec --------------------------------------------
111  fPndTrackCandArr->Delete();
112 
113  std::map<int,PndTrackCand*> cands;
114 
115  int nhits = fGemHitArr->GetEntriesFast();
116  int npoints = fGemPointArr->GetEntriesFast();
117  for(int ihit=0;ihit<nhits;++ihit){
118  PndGemHit* gemHit = (PndGemHit*)fGemHitArr->At(ihit);
119  FairHit * hit = gemHit;
120  int index = hit->GetRefIndex();
121  assert(index<npoints);
122  PndGemMCPoint *gemPoint = (PndGemMCPoint*)fGemPointArr->At(index);
123  FairMCPoint *point = gemPoint;
124  int trackId = point->GetTrackID();
125  if(cands[trackId]==NULL) {
126  cands[trackId] = new PndTrackCand;
127  // cands[trackId]->setMcTrackId(trackId);
128  //PndMCTrack *myMCTrack = (PndMCTrack*)fMCTrackArr->At(trackId); //[R.K. 03/2017] unused variable?
129  //int pdg = myMCTrack->GetPdgCode(); //[R.K.02/2017] Unused variable?
130  //double charge; //[R.K. 01/2017] unused variable?
131  //if(pdg<100000000){ //[R.K. 01/2017] unused variable?
132  //charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge()/3.; //[R.K. 01/2017] unused variable?
133  //} //[R.K. 01/2017] unused variable?
134  //else{ //[R.K. 01/2017] unused variable?
135  //charge = 0.; //[R.K. 01/2017] unused variable?
136  //} //[R.K. 01/2017] unused variable?
137 
138  }
139  cands[trackId]->AddHit(FairRootManager::Instance()->GetBranchId("GEMHit"),ihit,gemHit->GetPosition().Mag());
140  }
141 
142  for(std::map<int,PndTrackCand*>::iterator iter=cands.begin();
143  iter!=cands.end();++iter){
144  int nentries = fPndTrackCandArr->GetEntriesFast();
145  if(iter->second->GetNHits()>0) new ((*fPndTrackCandArr)[nentries]) PndTrackCand(*(iter->second));
146  delete iter->second;
147  }
148 }
149 // -------------------------------------------------------------------------
150 
151 
152 
153 
154 
virtual void Exec(Option_t *opt)
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
Task class for track finding.
TVector3 GetPosition() const
Definition: PndGemHit.h:71
ClassImp(PndAnaContFact)
PndSdsMCPoint * hit
Definition: anasim.C:70
PndSdsMCPoint * point
Definition: anaLmdCluster.C:72