CbmRoot
Loading...
Searching...
No Matches
CbmStsFindTracks.cxx
Go to the documentation of this file.
1/* Copyright (C) 2005-2019 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese, Denis Bertini [committer], Florian Uhlig */
4
5// -------------------------------------------------------------------------
6// ----- CbmStsFindTracks source file -----
7// ----- Created 02/02/05 by V. Friese -----
8// -------------------------------------------------------------------------
9// Includes from STS
10#include "CbmStsFindTracks.h"
11
12#include "CbmStsHit.h"
13#include "CbmStsTrack.h"
15
16// Includes from base
17#include "FairField.h"
18#include "FairRootManager.h"
19#include "FairRunAna.h"
20#include "FairRuntimeDb.h"
21
22// Includes from ROOT
23#include "TClonesArray.h"
24
25// Includes from C++
26#include <iomanip>
27#include <iostream>
28
29
30using std::fixed;
31using std::left;
32using std::right;
33using std::setprecision;
34using std::setw;
35
36// ----- Default constructor -------------------------------------------
38 : FairTask("STSFindTracks")
39 , fUseMvd(kFALSE)
40 , fGeoPar(NULL)
41 , fDigiPar(NULL)
42 ,
43 // fDigiScheme(new CbmStsDigiScheme()),
44 fField(NULL)
45 , fFinder(new CbmStsTrackFinderIdeal(1))
46 , fMvdHits(NULL)
47 , fStsHits(NULL)
48 , fTracks(NULL)
49 , fTimer()
50 , fNEvents(0)
51 , fNEventsFailed(0)
52 , fTime(0.)
53 , fNTracks(0.)
54{
55 fVerbose = 1;
56}
57// -------------------------------------------------------------------------
58
59
60// ----- Standard constructor ------------------------------------------
61CbmStsFindTracks::CbmStsFindTracks(Int_t iVerbose, CbmStsTrackFinder* finder, Bool_t useMvd, const char* name)
62 : FairTask(name, iVerbose)
63 , fUseMvd(useMvd)
64 , fGeoPar(NULL)
65 , fDigiPar(NULL)
66 ,
67 // fDigiScheme(new CbmStsDigiScheme()),
68 fField(NULL)
69 , fFinder(NULL)
70 , fMvdHits(NULL)
71 , fStsHits(NULL)
72 , fTracks(NULL)
73 , fTimer()
74 , fNEvents(0)
75 , fNEventsFailed(0)
76 , fTime(0.)
77 , fNTracks(0.)
78{
79 if (finder)
80 fFinder = finder;
81 else
82 fFinder = new CbmStsTrackFinderIdeal(iVerbose);
83}
84// -------------------------------------------------------------------------
85
86
87// ----- Destructor ----------------------------------------------------
89{
90 // if ( fDigiScheme ) delete fDigiScheme;
91 fTracks->Delete();
92 if (fFinder) delete fFinder;
93}
94// -------------------------------------------------------------------------
95
96
97// ----- Virtual public method Exec ------------------------------------
98void CbmStsFindTracks::Exec(Option_t* /*opt*/)
99{
100
101 fTimer.Start();
102
103 fTracks->Delete();
104 Int_t nTracks = fFinder->DoFind();
106 // for (Int_t iTrack=0; iTrack<fTracks->GetEntriesFast(); iTrack++) {
107 // CbmStsTrack* track = (CbmStsTrack*) fTracks->At(iTrack);
108 // track->SortHits();
109 // }
110
111 fTimer.Stop();
112
113 // --- Event log
114 LOG(info) << "+ " << setw(20) << GetName() << ": Event " << setw(6) << right << fNEvents << ", real time " << fixed
115 << setprecision(6) << fTimer.RealTime() << " s, hits: " << fStsHits->GetEntriesFast()
116 << ", tracks: " << nTracks;
117
118
119 fNEvents++;
120 fTime += fTimer.RealTime();
121 fNTracks += Double_t(nTracks);
122}
123// -------------------------------------------------------------------------
124
125
126// ----- Private virtual method SetParContainers -----------------------
128{
129
130 // Get run and runtime database
131 FairRunAna* run = FairRunAna::Instance();
132 if (!run) LOG(fatal) << GetName() << " SetParContainers: No analysis run";
133
134 FairRuntimeDb* db = run->GetRuntimeDb();
135 if (!db) LOG(fatal) << GetName() << " SetParContainers: No runtime database";
136
137 // Get STS geometry parameter container
138 fGeoPar = (CbmGeoStsPar*) db->getContainer("CbmGeoStsPar");
139
140 // Get STS digitisation parameter container
141 fDigiPar = (CbmStsDigiPar*) db->getContainer("CbmStsDigiPar");
142}
143// -------------------------------------------------------------------------
144
145
146// ----- Private virtual method Init ------------------------------------
148{
149
150 LOG(info) << "---------------------------------------------";
151 LOG(info) << " Initialising " << GetName() << " ....";
152
153 // Get input hit arrays
154 FairRootManager* ioman = FairRootManager::Instance();
155 if (!ioman) LOG(fatal) << GetName() << " Init: No FairRootManager";
156 fStsHits = (TClonesArray*) ioman->GetObject("StsHit");
157 if (!fStsHits) {
158 LOG(error) << GetName() << "::Init: No StsHit array!";
159 return kERROR;
160 }
161 if (fUseMvd) {
162 fMvdHits = (TClonesArray*) ioman->GetObject("MvdHit");
163 if (!fMvdHits) {
164 LOG(warning) << GetName() << " Init: No MVD hits available!";
165 LOG(warning) << GetName() << " Init: Running track finding without MVD hits";
166 }
167 }
168
169 // Create and register output array STSTrack
170 fTracks = new TClonesArray("CbmStsTrack", 100);
171 ioman->Register("StsTrack", "STS", fTracks, IsOutputBranchPersistent("StsTrack"));
172
173 // Build digitisation scheme
174 /*
175 if ( fDigiScheme->Init(fGeoPar, fDigiPar) ) {
176 if (fVerbose == 1 || fVerbose == 2) fDigiScheme->Print(kFALSE);
177 else if (fVerbose > 2) fDigiScheme->Print(kTRUE);
178 cout << "-I- "
179 << "STS digitisation scheme succesfully initialised" << endl;
180 cout << " Stations: " << fDigiScheme->GetNStations()
181 << ", Sectors: " << fDigiScheme->GetNSectors() << ", Channels: "
182 << fDigiScheme->GetNChannels() << endl;
183 }
184 */
185
186 // Check for Track finder
187 if (!fFinder) {
188 LOG(error) << GetName() << "::Init: No track finder selected!";
189 return kERROR;
190 }
191 LOG(info) << GetName() << " Track finder engine " << fFinder->GetName() << " selected";
192
193 // Set members of track finder and verbosity and initialise track finder
194 //fFinder->SetDigiScheme(fDigiScheme);
199 fFinder->SetVerbose(fVerbose);
200 fFinder->Init();
201
202 // Screen output
203 LOG(info) << GetName() << " intialised ";
204 LOG(info) << "---------------------------------------------";
205
206 return kSUCCESS;
207}
208// -------------------------------------------------------------------------
209
210
211// ----- Virtual private method Finish ---------------------------------
213{
214
215 fFinder->Finish();
216
217 LOG(info);
218 LOG(info) << "============================================================";
219 LOG(info) << "===== " << GetName() << ": Run summary ";
220 LOG(info) << "===== ";
221 LOG(info) << "===== Good events : " << setw(6) << fNEvents;
222 LOG(info) << "===== Failed events : " << setw(6) << fNEventsFailed;
223 LOG(info) << "===== Average time : " << setprecision(4) << setw(8) << right << fTime / Double_t(fNEvents) << " s";
224 LOG(info) << "===== ";
225 LOG(info) << "===== Found tracks per event : " << fixed << setprecision(0) << fNTracks / Double_t(fNEvents);
226 LOG(info) << "============================================================";
227}
228// -------------------------------------------------------------------------
229
230
ClassImp(CbmConverterManager)
Data class for a reconstructed hit in the STS.
Data class for STS tracks.
virtual void SetParContainers()
CbmStsTrackFinder * fFinder
CbmGeoStsPar * fGeoPar
TClonesArray * fStsHits
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
virtual void Finish()
TClonesArray * fMvdHits
TClonesArray * fTracks
CbmStsDigiPar * fDigiPar
MC-based track finding in the STS.
void SetMvdHitArray(TClonesArray *hits)
virtual void Init()
virtual Int_t DoFind()=0
void SetTrackArray(TClonesArray *tracks)
void SetField(FairField *field)
void FillEloss()
Calculate the median energy loss for the tracks and fill the respective data members.
void SetVerbose(Int_t verbose)
void SetStsHitArray(TClonesArray *hits)
virtual void Finish()