FairRoot/PandaRoot
PndGemFindTracks.cxx
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndGemFindTracks source file -----
3 // ----- Created 19.03.2009 by R. Karabowicz -----
4 // ----- according to the PndDchFindTracks -----
5 // -------------------------------------------------------------------------
6 
7 
8 // Pnd includes
9 #include "PndGemFindTracks.h"
10 #include "PndGemTrackFinder.h"
11 #include "PndGemDigiPar.h"
12 
13 #include "FairRootManager.h"
14 #include "FairRunAna.h"
15 #include "FairRuntimeDb.h"
16 #include "FairBaseParSet.h"
17 
18 // ROOT includes
19 #include "TClonesArray.h"
20 
21 #include "PndTrack.h"
22 #include "PndTrackCand.h"
23 #include "PndTrackCandHit.h"
24 
25 #include <iomanip>
26 
27 // c++ includes
28 using std::cout;
29 using std::endl;
30 using std::setw;
31 
32 // c++ declaration
33 class iostream;
34 
35 // Pnd declaration
36 class FairBaseParSet;
37 class PndGemHit;
38 class PndGemDigi;
39 class PndTrack;
40 class PndTrackCand;
41 //class PndTrackCandHit;
42 
43 // ----- Default constructor -------------------------------------------
45  fDigiPar = NULL;
46  fFinder = NULL;
47  fGemHitOrDigiArray = NULL;
48  fTrackArray = NULL;
49  fTrackCandArray = NULL;
50  fNofTracks = 0;
51  fUseHitOrDigi = "hit";
52 
53  fTTime = 0.;
54  fTNofTracks = 0;
55  fTNofEvents = 0;
56 }
57 // -------------------------------------------------------------------------
58 
59 
60 // ----- Standard constructor ------------------------------------------
62  const char* title, // //[R.K.03/2017] unused variable(s)
64  : FairTask(name) {
65  fDigiPar = NULL;
66  fFinder = finder;
67  fGemHitOrDigiArray = NULL;
68  fTrackArray = NULL;
69  fTrackCandArray = NULL;
70  fNofTracks = 0;
71  fUseHitOrDigi = "hit";
72 
73  fTTime = 0.;
74  fTNofTracks = 0;
75  fTNofEvents = 0;
76  SetTitle(title);
77 }
78 // -------------------------------------------------------------------------
79 
80 
81 
82 // ----- Destructor ----------------------------------------------------
84  fTrackArray ->Delete();
85  fTrackCandArray->Delete();
86 }
87 // -------------------------------------------------------------------------
88 
89 
90 
91 // ----- Public method Init (abstract in base class) --------------------
92 InitStatus PndGemFindTracks::Init() {
93 
94  // Check for Track finder
95  if( !fFinder ) {
96  cout << "-W- PndGemFindTracks::Init: No track finder selected!" << endl;
97  return kERROR;
98  }
99 
100  // Get and check FairRootManager
101  FairRootManager* ioman = FairRootManager::Instance();
102  if( !ioman ) {
103  cout << "-E- PndGemFindTracks::Init: "
104  << "RootManager not instantised!" << endl;
105  return kFATAL;
106  }
107 
108  if("hit" == fUseHitOrDigi) {
109  cout << "-I- PndGemFindTracks::Init: Works on hits!" << endl;
110 
111  // Get Gem hit Array
112  fGemHitOrDigiArray = (TClonesArray*) ioman->GetObject("GEMHit");
113  if ( !fGemHitOrDigiArray ) {
114  cout << "-W- PndGemFindTracks::Init: No PndGemHit array!" << endl;
115  return kERROR;
116  }
117  }
118 
119  if("digi" == fUseHitOrDigi) {
120  cout << "-I- PndGemFindTracks::Init: Works on digis!" << endl;
121 
122  // Get Gem digi Array
123  fGemHitOrDigiArray = (TClonesArray*) ioman->GetObject("GEMDigi");
124  if ( !fGemHitOrDigiArray ) {
125  cout << "-W- PndGemFindTracks::Init: No PndGemDigi array!" << endl;
126  return kERROR;
127  }
128  }
129 
130  // Create and register PndTrack array
131  fTrackArray = new TClonesArray("PndTrack",100);
132  ioman->Register("GEMTrack", "Gem Tracks", fTrackArray, kTRUE);
133 
134  // Create and register PndTrackCand array
135  fTrackCandArray = new TClonesArray("PndTrackCand",100);
136  ioman->Register("GEMTrackCand", "Gem Track Cands", fTrackCandArray, kTRUE);
137 
138  // Call the Init method of the track finder
139  fFinder->Init();
140 
141  cout << "-I- " << fName.Data() << "::Init(). There are " << fDigiPar->GetNStations() << " GEM stations." << endl;
142  cout << "-I- " << fName.Data() << "::Init(). Initialization succesfull." << endl;
143 
144  return kSUCCESS;
145 }
146 // -------------------------------------------------------------------------
147 
148 
149 
150 // ----- SetParContainers -------------------------------------------------
152  FairRunAna* ana = FairRunAna::Instance();
153  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
154  rtdb->getContainer("FairBaseParSet");
155  rtdb->getContainer("PndGeoPassivePar");
156 
157  fDigiPar = (PndGemDigiPar*) rtdb->getContainer("PndGemDetectors");
158 }
159 // -------------------------------------------------------------------------
160 
161 
162 
163 // ----- Public method Exec --------------------------------------------
164 void PndGemFindTracks::Exec(Option_t*) {
165 
166  fTimer.Start();
167 
168  fTrackArray->Delete();
169  fTrackCandArray->Delete();
170 
172 
173 
174  fTimer.Stop();
175  fTTime += fTimer.RealTime();
177  fTNofEvents += 1;
178 }
179 // -------------------------------------------------------------------------
180 
181 
182 
183 // ----- Public method Finish ------------------------------------------
185  fTrackArray->Delete();
186  fTrackCandArray->Delete();
187 
188  cout << "-------------------- " << fName.Data() << " : Summary ---------------------" << endl;
189  cout << " Events: " << setw(10) << fTNofEvents << endl;
190  cout << " Tracks: " << setw(10) << fTNofTracks << " ( " << (Double_t)fTNofTracks/((Double_t)fTNofEvents) << " per event )" << endl;
191  cout << " Time: " << setw(10) << fTTime << " ( " << fTTime/((Double_t)fTNofEvents) << " per event )" << endl;
192  cout << " ( " << fTTime/((Double_t)fTNofTracks) << " per track )" << endl;
193  cout << "---------------------------------------------------------------------" << endl;
194 
195  fFinder->Finish();
196 }
197 // -------------------------------------------------------------------------
198 
199 
200 
201 
virtual Int_t DoFind(TClonesArray *hitOrDigiArray, TClonesArray *trackArray, TClonesArray *trackCandArray)=0
TClonesArray * fTrackCandArray
Output array of PndTrackCands.
virtual InitStatus Init()
TClonesArray * fTrackArray
Output array of PndTracks.
virtual void Finish()
Abstract base class for concrete Gem track finding algorithm.
Int_t fNofTracks
Number of created tracks.
Digitization Parameter Class for GEM part.
Definition: PndGemDigiPar.h:31
PndStraightLineTrackFinderTask * finder
TClonesArray * fGemHitOrDigiArray
h_MC_angle SetTitle("MC truth: opening angle of #pi^{0}")
Double_t
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
virtual void Finish()
PndGemDigiPar * fDigiPar
virtual void Init()
Int_t GetNStations()
Definition: PndGemDigiPar.h:45
TString name
virtual void Exec(Option_t *opt)
virtual ~PndGemFindTracks()
virtual void SetParContainers()
TString fUseHitOrDigi
Choose use hits or digis, default: hits.
ClassImp(PndAnaContFact)
PndGemTrackFinder * fFinder
Pointer to TrackFinder concrete class.
Task class for track finding in the Gem.