BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
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
26
using namespace
std
;
27
28
// ----- Default constructor -------------------------------------------
29
CbmStsFindTracks::CbmStsFindTracks
()
30
:
BmnTask
(
"STSFindTracks"
, 1)
31
,
fUseMvd
(
kFALSE
)
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)
44
,
fNEventsFailed
(0)
45
,
fTime
(0.)
46
,
fNTracks
(0.)
47
,
finderName
(
"CbmStsTrackFinderIdeal"
)
48
{}
49
50
// ----- Standard constructor ------------------------------------------
51
CbmStsFindTracks::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)
66
,
fNEventsFailed
(0)
67
,
fTime
(0.)
68
,
fNTracks
(0.)
69
,
finderName
(sFinderName)
70
{}
71
72
// ----- Destructor ----------------------------------------------------
73
CbmStsFindTracks::~CbmStsFindTracks
()
74
{
75
// AZ if ( fDigiScheme ) delete fDigiScheme;
76
fTracks
->Delete();
77
if
(
fFinder
)
78
delete
fFinder
;
79
}
80
81
// ----- Virtual public method Exec ------------------------------------
82
void
CbmStsFindTracks::Exec
(
Option_t
* opt)
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 -----------------------
107
void
CbmStsFindTracks::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
126
void
CbmStsFindTracks::InitFinder
()
127
{
128
if
(
finderName
==
"CbmStsTrackFinderIdeal"
)
129
fFinder
=
new
CbmStsTrackFinderIdeal
(fVerbose);
130
else
if
(
finderName
==
"CbmL1StsTrackFinder"
)
131
fFinder
=
new
CbmL1StsTrackFinder
();
132
else
133
LOG(error) <<
"Cannot initialize finder. Invalid finder name: "
<<
finderName
;
134
}
135
136
void
CbmStsFindTracks::BuildDigitisationScheme
()
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 ------------------------------------
151
InitStatus
CbmStsFindTracks::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
180
BuildDigitisationScheme
();
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
205
void
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 ---------------------------------
215
void
CbmStsFindTracks::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_t
bool Bool_t
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
TClonesArray.h
Fatal
void Fatal(const char *location, const char *msgfmt,...)
BmnTask::BmnTask
BmnTask()
Default constructor.
Definition
BmnTask.cxx:3
CbmGeoStsPar
Definition
CbmGeoStsPar.h:8
CbmL1StsTrackFinder
Definition
CbmL1StsTrackFinder.h:26
CbmStsDigiPar
Definition
CbmStsDigiPar.h:31
CbmStsDigiScheme
Definition
CbmStsDigiScheme.h:36
CbmStsFindTracks::SetParContainers
virtual void SetParContainers()
Get parameter containers.
Definition
CbmStsFindTracks.cxx:107
CbmStsFindTracks::fTime
Double_t fTime
Number of events with failure.
Definition
CbmStsFindTracks.h:79
CbmStsFindTracks::fMvdHits
TClonesArray * fMvdHits
TrackFinder concrete class.
Definition
CbmStsFindTracks.h:73
CbmStsFindTracks::CbmStsFindTracks
CbmStsFindTracks()
Default constructor.
Definition
CbmStsFindTracks.cxx:29
CbmStsFindTracks::fStsHits
TClonesArray * fStsHits
Input array of MVD hits.
Definition
CbmStsFindTracks.h:74
CbmStsFindTracks::OnlineWrite
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
Write task resul to tree.
Definition
CbmStsFindTracks.cxx:205
CbmStsFindTracks::fTimer
TStopwatch fTimer
Output array of CbmStsTracks.
Definition
CbmStsFindTracks.h:76
CbmStsFindTracks::fNEvents
Int_t fNEvents
Definition
CbmStsFindTracks.h:77
CbmStsFindTracks::fDigiPar
CbmStsDigiPar * fDigiPar
STS geometry parameters.
Definition
CbmStsFindTracks.h:69
CbmStsFindTracks::fNTracks
Double_t fNTracks
Total real time used for good events.
Definition
CbmStsFindTracks.h:80
CbmStsFindTracks::fFinder
CbmStsTrackFinder * fFinder
Magnetic field.
Definition
CbmStsFindTracks.h:72
CbmStsFindTracks::InitFinder
void InitFinder()
Definition
CbmStsFindTracks.cxx:126
CbmStsFindTracks::fGeoPar
CbmGeoStsPar * fGeoPar
Definition
CbmStsFindTracks.h:68
CbmStsFindTracks::fTracks
TClonesArray * fTracks
Input array of STS hits.
Definition
CbmStsFindTracks.h:75
CbmStsFindTracks::fNEventsFailed
Int_t fNEventsFailed
Number of events with success.
Definition
CbmStsFindTracks.h:78
CbmStsFindTracks::finderName
TString finderName
Number of tracks created.
Definition
CbmStsFindTracks.h:81
CbmStsFindTracks::Exec
virtual void Exec(Option_t *opt)
Task execution.
Definition
CbmStsFindTracks.cxx:82
CbmStsFindTracks::Init
virtual InitStatus Init()
Initialisation at beginning of each event.
Definition
CbmStsFindTracks.cxx:151
CbmStsFindTracks::fDigiScheme
CbmStsDigiScheme * fDigiScheme
STS digitisation parameters.
Definition
CbmStsFindTracks.h:70
CbmStsFindTracks::Finish
virtual void Finish()
Finish at the end of each event.
Definition
CbmStsFindTracks.cxx:215
CbmStsFindTracks::BuildDigitisationScheme
void BuildDigitisationScheme()
Definition
CbmStsFindTracks.cxx:136
CbmStsFindTracks::fField
FairField * fField
STS digitisation scheme.
Definition
CbmStsFindTracks.h:71
CbmStsFindTracks::~CbmStsFindTracks
virtual ~CbmStsFindTracks()
Destructor.
Definition
CbmStsFindTracks.cxx:73
CbmStsFindTracks::fUseMvd
Bool_t fUseMvd
Definition
CbmStsFindTracks.h:67
CbmStsTrackFinderIdeal
Definition
CbmStsTrackFinderIdeal.h:23
CbmStsTrack
Definition
CbmStsTrack.h:28
CbmStsTrack::SortHits
void SortHits()
Public method SortHits Sorts the hits in downstream direction and writes the hit indizes into the mem...
Definition
CbmStsTrack.cxx:76
TClonesArray
TString
std
Definition
json.hpp:4446
CbmStsFindTracks.h
reconstruction
cat
CbmStsFindTracks.cxx
Generated on
for BmnRoot by
1.17.0