FairRoot/PandaRoot
PndMdtTrkProducerIdeal.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndMdtTrkProducerIdeal source file -----
3 // ----- Created 12/06/08 by S.Spataro -----
4 // -------------------------------------------------------------------------
5 
7 
8 #include "PndMdtTrk.h"
9 #include "PndMdtHit.h"
10 #include "PndMdtPoint.h"
11 
12 #include "FairRootManager.h"
13 #include "FairDetector.h"
14 #include "FairRun.h"
15 #include "FairRuntimeDb.h"
16 #include "PndMCTrack.h"
17 
18 #include "TClonesArray.h"
19 #include "TGeoManager.h"
20 #include "TGeoVolume.h"
21 #include "TGeoNode.h"
22 #include "TGeoMatrix.h"
23 #include "TVector3.h"
24 #include "TRandom.h"
25 
26 #include <iostream>
27 
28 using std::cout;
29 using std::endl;
30 
31 // ----- Default constructor -------------------------------------------
33  FairTask("Ideal MDT Tracklet Producer") {
34 
35 }
36 // -------------------------------------------------------------------------
37 
38 // ----- Destructor ----------------------------------------------------
40 // -------------------------------------------------------------------------
41 
42 
43 
44 // ----- Public method Init --------------------------------------------
46 
47  cout << "-I- PndMdtTrkProducerIdeal::Init: "
48  << "INITIALIZATION *********************" << endl;
49 
50  //FairRun* sim = FairRun::Instance(); //[R.K. 01/2017] unused variable?
51  //FairRuntimeDb* rtdb=sim->GetRuntimeDb(); //[R.K. 01/2017] unused variable?
52 
53  // Get RootManager
54  FairRootManager* ioman = FairRootManager::Instance();
55  if ( ! ioman ) {
56  cout << "-E- PndMdtTrkProducerIdeal::Init: "
57  << "RootManager not instantiated!" << endl;
58  return kFATAL;
59  }
60 
61  // Get input array
62  fMCArray = (TClonesArray*) ioman->GetObject("MCTrack");
63  if ( ! fMCArray ) {
64  cout << "-W- PndMdtTrkProducerIdeal::Init: "
65  << "No MCTrack array!" << endl;
66  return kERROR;
67  }
68 
69  fPointArray = (TClonesArray*) ioman->GetObject("MdtPoint");
70  if ( ! fPointArray ) {
71  cout << "-W- PndMdtTrkProducerIdeal::Init: "
72  << "No MdtPoint array!" << endl;
73  return kERROR;
74  }
75 
76  fHitArray = (TClonesArray*) ioman->GetObject("MdtHit");
77  if ( ! fHitArray ) {
78  cout << "-W- PndMdtTrkProducerIdeal::Init: "
79  << "No MdtHit array!" << endl;
80  return kERROR;
81  }
82 
83  // Create and register output array
84  fTrkArray = new TClonesArray("PndMdtTrk");
85 
86  ioman->Register("MdtTrk","Mdt",fTrkArray,kTRUE);
87 
88  cout << "-I- PndMdtTrkProducerIdeal: Intialization successfull" << endl;
89 
90  return kSUCCESS;
91 
92 }
93 // -------------------------------------------------------------------------
94 
95 
96 
97 // ----- Public method Exec --------------------------------------------
99 
100  // Reset output array
101  if ( ! fTrkArray ) Fatal("Exec", "No TrkArray");
102 
103  fTrkArray->Clear();
104 
105  Int_t nHits = fHitArray->GetEntriesFast();
106  if (nHits==0) return; // exit if the event contains no Mdt hits
107 
108  PndMCTrack *mcTrack = NULL;
109  PndMdtHit *mdtHit = NULL;
110  PndMdtPoint *mdtPoint = NULL;
111 
112  // Loop over MCTrack
113  Int_t nMCTrack = fMCArray->GetEntriesFast();
114 
115  for (Int_t iMc=0; iMc<nMCTrack; iMc++) {
116  mcTrack = (PndMCTrack*) fMCArray->At(iMc);
117  if (mcTrack->GetNPoints(kMDT)==0) continue;
118 
119  PndMdtTrk *mdtTrk = new PndMdtTrk();
120  Int_t mdtCount = 0;
121  for (Int_t iHit=0; iHit<nHits; iHit++) {
122  mdtHit = (PndMdtHit*) fHitArray->At(iHit);
123  mdtPoint = (PndMdtPoint*)fPointArray->At(mdtHit->GetRefIndex());
124  if (mdtPoint->GetTrackID()!= iMc) continue;
125 
126  mdtTrk->SetHitIndex(mdtHit->GetLayerID(), iHit);
127  if (mdtTrk->GetModule()==0)
128  {
129  mdtTrk->SetModule(mdtHit->GetModule());
130  }
131  else if (mdtHit->GetModule()!= mdtTrk->GetModule())
132  {
133  mdtTrk->SetModule(10);
134  }
135 
136  mdtCount++;
137  } // end of MdtHit loop
138 
139  mdtTrk->SetHitCount(mdtCount);
140  if (mdtCount>0) AddTrk(mdtTrk);
141 
142  } // end of MCTrack loop
143 
144 }
145 // -------------------------------------------------------------------------
146 
147 // ----- Private method AddTrk --------------------------------------------
149  // Creates a new hit in the TClonesArray.
150 
151  TClonesArray& trkRef = *fTrkArray;
152  Int_t size = trkRef.GetEntriesFast();
153  return new(trkRef[size]) PndMdtTrk(*track);
154 }
155 // ----
156 
157 
PndMdtTrk * AddTrk(PndMdtTrk *track)
Short_t GetLayerID() const
Definition: PndMdtHit.h:34
PndRiemannTrack track
Definition: RiemannTest.C:33
Int_t GetNPoints(DetectorId detId) const
Definition: PndMCTrack.cxx:120
Int_t GetModule() const
Definition: PndMdtTrk.h:48
void SetHitIndex(Int_t lay, Int_t trackId)
Definition: PndMdtTrk.h:88
int nHits
Definition: RiemannTest.C:16
void SetModule(Int_t mod)
Definition: PndMdtTrk.h:66
void SetHitCount(Int_t hit)
Definition: PndMdtTrk.h:62
virtual void Exec(Option_t *opt)
Short_t GetModule() const
Definition: PndMdtHit.h:32
ClassImp(PndAnaContFact)