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