26#include "FairRootManager.h"
27#include "FairRunAna.h"
28#include "FairRuntimeDb.h"
33#include "TClonesArray.h"
43using std::setprecision;
45using std::stringstream;
49 : FairTask(
"GlobalFindTracksEvents")
55 , fGlobalTracks(nullptr)
56 , fStsTrackArray(nullptr)
57 , fMuchTrackArray(nullptr)
58 , fTrdTrackArray(nullptr)
59 , fTofTrackArray(nullptr)
94 pair<UInt_t, UInt_t> result;
108 nEvents =
fEvents->GetEntriesFast();
109 LOG(debug) << GetName() <<
": reading time slice with " << nEvents <<
" events ";
110 for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
113 nHits += result.first;
114 nTracks += result.second;
120 nHits = result.first;
121 nTracks = result.second;
127 logOut << setw(20) << left << GetName() <<
" [";
128 logOut << fixed << setw(8) << setprecision(1) << right << timer.RealTime() * 1000. <<
" ms] ";
129 logOut <<
"TS " <<
fNofTs;
130 if (
fEvents) logOut <<
", events " << nEvents;
131 logOut <<
", hits " << nHits <<
", tracks " << nTracks;
132 LOG(info) << logOut.str();
137 fTime += timer.RealTime();
146 LOG(info) <<
"=====================================";
147 LOG(info) << GetName() <<
": initialising";
150 FairRootManager* ioman = FairRootManager::Instance();
154 fEvents =
dynamic_cast<TClonesArray*
>(ioman->GetObject(
"CbmEvent"));
156 LOG(warn) << GetName() <<
": No event array! Will process entire tree.";
160 fStsHits = (TClonesArray*) ioman->GetObject(
"StsHit");
165 fMvdHits = (TClonesArray*) ioman->GetObject(
"MvdHit");
167 LOG(error) << GetName() <<
": Use of MVD hits selected, but no hit branch present! "
168 <<
"Tracking will be done without MVD hits.";
171 LOG(info) << GetName() <<
": including MVD hits in tracking";
176 ioman->Register(
"GlobalTrack",
"Global",
fGlobalTracks, IsOutputBranchPersistent(
"GlobalTrack"));
178 ioman->Register(
"StsTrack",
"STS",
fStsTrackArray, IsOutputBranchPersistent(
"StsTrack"));
180 ioman->Register(
"MuchTrack",
"MUCH",
fMuchTrackArray, IsOutputBranchPersistent(
"MuchTrack"));
182 ioman->Register(
"TrdTrack",
"TRD",
fTrdTrackArray, IsOutputBranchPersistent(
"TrdTrack"));
184 ioman->Register(
"TofTrack",
"TOF",
fTofTrackArray, IsOutputBranchPersistent(
"TofTrack"));
188 LOG(fatal) << GetName() <<
": no track finding engine selected!";
191 LOG(info) << GetName() <<
": Use track finder " <<
fFinder->GetName();
204 LOG(info) << GetName() <<
": successfully initialised.";
205 LOG(info) <<
"=====================================\n";
215 LOG(info) <<
"\n=====================================";
216 LOG(info) << GetName() <<
": Run summary";
217 LOG(info) <<
"Time slices : " <<
fNofTs;
218 LOG(info) <<
"Hits / TS : " << fixed << setprecision(2) << Double_t(
fNofHits) / Double_t(
fNofTs);
219 LOG(info) <<
"Tracks / TS : " << fixed << setprecision(2) << Double_t(
fNofTracks) / Double_t(
fNofTs);
221 LOG(info) <<
"Time per TS : " << 1000. *
fTime / Double_t(
fNofTs) <<
" ms ";
223 LOG(info) <<
"Events processed : " <<
fNofEvents;
226 LOG(info) <<
"Time per event : " << 1000. *
fTime / Double_t(
fNofEvents) <<
" ms ";
228 LOG(info) <<
"=====================================";
243 Int_t eventNumber = (
event ?
event->GetNumber() :
fNofEvents);
260 LOG(debug) <<
"+ " << setw(20) << GetName() <<
": Event " << setw(6) << right << eventNumber <<
", real time "
261 << fixed << setprecision(6) <<
fTimer.RealTime() <<
" s, STS hits: " << setw(5) << nHits
262 <<
", tracks: " << setw(4) << nTracks <<
" (TS: STS hits " << setw(7) <<
nHitsTs <<
", tracks " << setw(6)
263 <<
nTracksTs <<
") MUCH " << setw(4) << nHitsMuch <<
" TRD: " << setw(4) << nHitsTrd <<
" TOF: " << setw(4)
264 << nHitsTof <<
" Total: " << setw(5) << (nHits + nHitsMuch + nHitsTrd + nHitsTof);
266 return std::make_pair(nHits, nTracks);
ClassImp(CbmConverterManager)
Data class for a reconstructed hit in the STS.
Data class for STS tracks.
Class characterising one event by a collection of links (indices) to data objects,...
Task class for finding Global, STS, MUCH, TRD and TOF tracks in an event.
CbmL1GlobalTrackFinder * fFinder
virtual ~CbmL1GlobalFindTracksEvents()
CbmL1GlobalFindTracksEvents(CbmL1GlobalTrackFinder *finder=nullptr, Bool_t useMvd=kFALSE)
std::pair< UInt_t, UInt_t > ProcessEvent(CbmEvent *event)
Process one event or timeslice.
TClonesArray * fGlobalTracks
Input array of STS hits.
TClonesArray * fTrdTrackArray
Output array of CbmMuchTracks.
Double_t fTime
Total real time used for good events.
Int_t fNofEvents
Number of events with success.
TClonesArray * fMuchTrackArray
Output array of CbmStsTracks.
Double_t fNofHits
Number of hits.
TClonesArray * fStsHits
Input array of MVD hits.
TClonesArray * fMvdHits
Array of CbmEvent objects.
TStopwatch fTimer
Output array of CbmTofTracks.
virtual void Exec(Option_t *opt)
TClonesArray * fTofTrackArray
Output array of CbmTrdTracks.
Double_t fNofTracks
Number of tracks created.
virtual InitStatus Init()
TClonesArray * fStsTrackArray
Output array of CbmGlobalTracks.
void SetGlobalTracksArray(TClonesArray *tracks)
void SetMuchTracksArray(TClonesArray *tracks)
void SetStsTracksArray(TClonesArray *tracks)
void SetTrdTracksArray(TClonesArray *tracks)
virtual Int_t FindTracks(CbmEvent *event)
void SetTofTracksArray(TClonesArray *tracks)
void SetMvdHitArray(TClonesArray *hits)
void SetStsHitArray(TClonesArray *hits)