BmnRoot
Loading...
Searching...
No Matches
CbmStsFindTracks.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- CbmStsFindTracks source file -----
3// ----- Created 02/02/05 by V. Friese -----
4// -------------------------------------------------------------------------
5// Includes from STS
6#include "CbmStsFindTracks.h"
7#include "CbmL1StsTrackFinder.h"
8#include "CbmStsHit.h"
9#include "CbmStsTrack.h"
10#include "CbmStsTrackFinderIdeal.h"
11
12// Includes from base
13#include "FairField.h"
14#include "FairRootManager.h"
15#include "FairRunAna.h"
16#include "FairRuntimeDb.h"
17
18// Includes from ROOT
19#include "TClonesArray.h"
20
21// Includes from C++
22#include <iostream>
23#include <iomanip>
24
25using namespace std;
26
27
28// ----- Default constructor -------------------------------------------
30: BmnTask("STSFindTracks", 1),
31 fUseMvd(kFALSE),
32 fGeoPar(nullptr),
33 fDigiPar(nullptr),
34 //AZ fDigiScheme(new CbmStsDigiScheme()),
35 fDigiScheme(CbmStsDigiScheme::Instance()),
36 fField(nullptr),
37 fFinder(nullptr),
38 fMvdHits(nullptr),
39 fStsHits(nullptr),
40 fTracks(nullptr),
41 fTimer(),
42 fNEvents(0),
43 fNEventsFailed(0),
44 fTime(0.),
45 fNTracks(0.),
46 finderName("CbmStsTrackFinderIdeal")
47{}
48
49// ----- Standard constructor ------------------------------------------
51 const TString& sFinderName,
52 Bool_t useMvd, const char* name)
53: BmnTask(name, iVerbose),
54 fUseMvd(useMvd),
55 fGeoPar(nullptr),
56 fDigiPar(nullptr),
57 //AZ fDigiScheme(new CbmStsDigiScheme()),
58 fDigiScheme(CbmStsDigiScheme::Instance()),
59 fField(nullptr),
60 fFinder(nullptr),
61 fMvdHits(nullptr),
62 fStsHits(nullptr),
63 fTracks(nullptr),
64 fTimer(),
65 fNEvents(0),
66 fNEventsFailed(0),
67 fTime(0.),
68 fNTracks(0.),
69 finderName(sFinderName)
70{}
71
72// ----- Destructor ----------------------------------------------------
74 //AZ if ( fDigiScheme ) delete fDigiScheme;
75 fTracks->Delete();
76 if ( fFinder) delete fFinder;
77}
78
79
80// ----- Virtual public method Exec ------------------------------------
81void CbmStsFindTracks::Exec(Option_t* opt) {
82 if (!IsActive()) return;
83
84 fTimer.Start();
85
86 fTracks->Delete();
87 Int_t nTracks = fFinder->DoFind();
88 for (Int_t iTrack=0; iTrack<fTracks->GetEntriesFast(); iTrack++) {
89 CbmStsTrack* track = (CbmStsTrack*) fTracks->At(iTrack);
90 track->SortHits();
91 }
92
93 fTimer.Stop();
94 if ( fVerbose )
95 cout << "+ " << setw(15) << left << fName << ": " << setprecision(4)
96 << setw(8) << fixed << right << fTimer.RealTime()
97 << " s, tracks found " << nTracks << endl;
98
99 fNEvents++;
100 fTime += fTimer.RealTime();
101 fNTracks += Double_t(nTracks);
102}
103
104
105// ----- Private virtual method SetParContainers -----------------------
106void CbmStsFindTracks::SetParContainers() {
107
108 // Get run and runtime database
109 FairRunAna* run = FairRunAna::Instance();
110 if ( ! run ) Fatal("SetParContainers", "No analysis run");
111
112 FairRuntimeDb* db = run->GetRuntimeDb();
113 if ( ! db ) Fatal("SetParContainers", "No runtime database");
114
115 // Get STS geometry parameter container
116 fGeoPar = (CbmGeoStsPar*) db->getContainer("CbmGeoStsPar");
117
118 // Get STS digitisation parameter container
119 fDigiPar = (CbmStsDigiPar*) db->getContainer("CbmStsDigiPar");
120}
121
122
123void CbmStsFindTracks::InitFinder()
124{
125 if(finderName == "CbmStsTrackFinderIdeal")
126 fFinder = new CbmStsTrackFinderIdeal(fVerbose);
127 else if(finderName == "CbmL1StsTrackFinder")
128 fFinder = new CbmL1StsTrackFinder();
129 else
130 LOG(error) << "Cannot initialize finder. Invalid finder name: " << finderName;
131}
132
133void CbmStsFindTracks::BuildDigitisationScheme()
134{
135 if ( fDigiScheme->Init(fGeoPar, fDigiPar) ) {
136 if (fVerbose == 1 || fVerbose == 2) fDigiScheme->Print(kFALSE);
137 else if (fVerbose > 2) fDigiScheme->Print(kTRUE);
138 cout << "-I- "
139 << "STS digitisation scheme succesfully initialised" << endl;
140 cout << " Stations: " << fDigiScheme->GetNStations()
141 << ", Sectors: " << fDigiScheme->GetNSectors() << ", Channels: "
142 << fDigiScheme->GetNChannels() << endl;
143 }
144}
145
146// ----- Private virtual method Init ------------------------------------
147InitStatus CbmStsFindTracks::Init()
148{
149 cout << endl;
150 cout << "---------------------------------------------" << endl;
151 cout << "-I- Initialising " << GetName() << " ...." << endl;
152
153 InitFinder();
154
155 // Get input hit arrays
156 FairRootManager* ioman = FairRootManager::Instance();
157 if ( ! ioman ) Fatal("Init", "No FairRootManager");
158 fStsHits = (TClonesArray*) ioman->GetObject("StsHit");
159 if ( ! fStsHits ) {
160 cout << "-E- "<< GetName() << "::Init: No StsHit array!" << endl;
161 return kERROR;
162 }
163 if ( fUseMvd ) {
164 fMvdHits = (TClonesArray*) ioman->GetObject("MvdHit");
165 if ( ! fMvdHits ) {
166 cout << "-W- " << GetName() << "::Init: No MVD hits available!"
167 << endl;
168 cout << " Running track finding without MVD hits" << endl;
169 }
170 }
171
172 // Create and register output array STSTrack
173 fTracks = new TClonesArray("CbmStsTrack",100);
174 ioman->Register("StsTrack", "STS", fTracks, kTRUE);
175
176 BuildDigitisationScheme();
177
178 // Check for Track finder
179 if (! fFinder) {
180 cout << "-E- " << GetName() << "::Init: No track finder selected!"
181 << endl;
182 return kERROR;
183 }
184 cout << "-I- Track finder engine " << fFinder->GetName()
185 << " selected" << endl;
186
187
188 // Set members of track finder and verbosity and initialise track finder
189 fFinder->SetDigiScheme(fDigiScheme);
190 fFinder->SetField(fField);
191 fFinder->SetMvdHitArray(fMvdHits);
192 fFinder->SetStsHitArray(fStsHits);
193 fFinder->SetTrackArray(fTracks);
194 fFinder->SetVerbose(fVerbose);
195 fFinder->Init();
196
197 // Screen output
198 cout << "-I- " << GetName() << " intialised " << endl;
199 cout << "---------------------------------------------" << endl;
200
201 return kSUCCESS;
202}
203
204void CbmStsFindTracks::OnlineWrite(const std::unique_ptr<TTree>& resultTree)
205{
206 if (!IsActive()) return;
207
208 resultTree->Branch("StsTrack", &fTracks);
209 resultTree->Fill();
210}
211
212
213// ----- Virtual private method Finish ---------------------------------
214void CbmStsFindTracks::Finish() {
215
216 fFinder->Finish();
217
218 if (fVerbose > 0) {
219 cout << endl;
220 cout << "============================================================"
221 << endl;
222 cout << "===== " << GetName() << ": Run summary " << endl;
223 cout << "===== " << endl;
224 cout << "===== Good events : " << setw(6) << fNEvents << endl;
225 cout << "===== Failed events : " << setw(6) << fNEventsFailed << endl;
226 cout << "===== Average time : " << setprecision(4) << setw(8) << right
227 << fTime / Double_t(fNEvents) << " s" << endl;
228 cout << "===== " << endl;
229 cout << "===== Found tracks per event : " << fixed << setprecision(0)
230 << fNTracks / Double_t(fNEvents) << endl;
231 cout << "============================================================"
232 << endl;
233 }
234 printf("Work time of CbmStsFindTracks: %4.2f sec.\n", fTime);
235
236}
237// -------------------------------------------------------------------------
BmnSsdDigitizeParameters * fDigiPar
Digitisation parameters.
BmnTask.
Definition BmnTask.h:13
void Print(Bool_t kLong=kFALSE)
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
Write task resul to tree.
virtual void Exec(Option_t *opt)
void SetMvdHitArray(TClonesArray *hits)
virtual void Init()
virtual Int_t DoFind()=0
void SetTrackArray(TClonesArray *tracks)
void SetField(FairField *field)
void SetVerbose(Int_t verbose)
void SetStsHitArray(TClonesArray *hits)
virtual void Finish()
void SetDigiScheme(CbmStsDigiScheme *scheme)
void SortHits()
-clang-format
STL namespace.