CbmRoot
Loading...
Searching...
No Matches
CbmLitFitTracksParallel.cxx
Go to the documentation of this file.
1/* Copyright (C) 2013-2014 GSI/JINR-LIT, Darmstadt/Dubna
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Andrey Lebedev [committer] */
4
12
13#include "CbmStsTrack.h"
14#include "CbmTrack.h"
15#include "FairRootManager.h"
16#include "FairTrackParam.h"
17#include "TClonesArray.h"
25
26#include <algorithm>
27#include <cassert>
28#include <iostream>
29#include <vector>
30
31using std::cout;
32using std::endl;
33using std::for_each;
34using std::vector;
35
37 : FairTask()
38 , fGlobalTracks(NULL)
39 , fStsTracks(NULL)
40 , fMuchTracks(NULL)
41 , fTrdTracks(NULL)
42 , fMuchPixelHits(NULL)
43 , fMuchStrawHits(NULL)
44 , fTrdHits(NULL)
45{
46}
47
49
51{
53
54 fFitWatch.Reset();
55 fFitWithIOWatch.Reset();
56
57 return kSUCCESS;
58}
59
61{
62 static Int_t eventNo = 0;
63 std::cout << "CbmLitFitTracksParallel::Exec: eventNo=" << eventNo++ << std::endl;
64
65 DoFit();
66}
67
69
71{
72 FairRootManager* ioman = FairRootManager::Instance();
73 assert(ioman != NULL);
74
75 fGlobalTracks = (TClonesArray*) ioman->GetObject("GlobalTrack");
76 fStsTracks = (TClonesArray*) ioman->GetObject("StsTrack");
77 fMuchTracks = (TClonesArray*) ioman->GetObject("MuchTrack");
78 fTrdTracks = (TClonesArray*) ioman->GetObject("TrdTrack");
79 fMuchPixelHits = (TClonesArray*) ioman->GetObject("MuchPixelHit");
80 fMuchStrawHits = (TClonesArray*) ioman->GetObject("MuchStrawHit");
81 fTrdHits = (TClonesArray*) ioman->GetObject("TrdHit");
82}
83
85{
86 static Bool_t isTrd = fTrdTracks != NULL;
87 static Bool_t isMuch = fMuchTracks != NULL;
88
89 static Bool_t firstTime = true;
91 if (firstTime) {
92 if (isTrd) {
94 }
95 else if (isMuch) {
97 }
98 firstTime = false;
99 }
100
101 fFitWithIOWatch.Start(kFALSE);
102
103 // Convert input data
104 vector<lit::parallel::LitScalTrack*> ltracks;
105 vector<lit::parallel::LitScalPixelHit*> lhits;
106 if (isTrd) {
109 }
110 else if (isMuch) {
113 }
114
115 // Replace first track parameter of the converted tracks with the last STS track parameter
116 Int_t nofTracks = ltracks.size();
117 for (Int_t iTrack = 0; iTrack < nofTracks; iTrack++) {
118 lit::parallel::LitScalTrack& track = *ltracks[iTrack];
119 Int_t stsTrackId = track.GetPreviousTrackId();
120 CbmStsTrack* stsTrack = static_cast<CbmStsTrack*>(fStsTracks->At(stsTrackId));
123 track.SetParamFirst(lpar);
124 }
125
126 fFitWatch.Start(kFALSE);
127 // Int_t nofTracks = ltracks.size();
128 for (Int_t iTrack = 0; iTrack < nofTracks; iTrack++) {
129 lit::parallel::LitScalTrack& track = *ltracks[iTrack];
130 LitTrackFitter(track, layout);
131 }
132 fFitWatch.Stop();
133
134 // Replace first and last track parameters for the fitted track
135 for (Int_t iTrack = 0; iTrack < nofTracks; iTrack++) {
136 lit::parallel::LitScalTrack& track = *ltracks[iTrack];
137 CbmTrack* cbmTrack =
138 (isTrd) ? static_cast<CbmTrack*>(fTrdTracks->At(iTrack)) : static_cast<CbmTrack*>(fMuchTracks->At(iTrack));
139 FairTrackParam firstParam, lastParam;
142 cbmTrack->SetParamFirst(&firstParam);
143 cbmTrack->SetParamLast(&lastParam);
144 }
145
146 // Clear memory
147 for_each(ltracks.begin(), ltracks.end(), DeleteObject());
148 for_each(lhits.begin(), lhits.end(), DeleteObject());
149 ltracks.clear();
150 lhits.clear();
151
152 fFitWithIOWatch.Stop();
153}
154
156{
157 cout << "CbmLitFitTracksParallel::PrintStopwatchStatistics: " << endl;
158 cout << "fit without IO: counts=" << fFitWatch.Counter() << ", real=" << fFitWatch.RealTime() / fFitWatch.Counter()
159 << "/" << fFitWatch.RealTime() << " s, cpu=" << fFitWatch.CpuTime() / fFitWatch.Counter() << "/"
160 << fFitWatch.CpuTime() << endl;
161 cout << "fit with IO: counts=" << fFitWithIOWatch.Counter()
162 << ", real=" << fFitWithIOWatch.RealTime() / fFitWithIOWatch.Counter() << "/" << fFitWithIOWatch.RealTime()
163 << " s, cpu=" << fFitWithIOWatch.CpuTime() / fFitWithIOWatch.Counter() << "/" << fFitWithIOWatch.CpuTime()
164 << endl;
165}
Class for conversion between CBMROOT data classes and littrack parallel data classes.
ClassImp(CbmLitFitTracksParallel)
Task to fit TRD and MUCH tracks using parallel track fit algorithms.
Tracking geometry constructor.
Data class for STS tracks.
Detector layout class.
Base class for scalar pixel hits.
Scalar track data class.
Kalman filter based track fit.
int Int_t
bool Bool_t
static void CbmTrackArrayToLitScalTrackArray(const TClonesArray *tracks, const vector< lit::parallel::LitScalPixelHit * > &lhits, vector< lit::parallel::LitScalTrack * > &ltracks)
Convert array of CbmTrack to array of LitScalTrack.
static void LitTrackParamScalToFairTrackParam(const lit::parallel::LitTrackParamScal *lpar, FairTrackParam *par)
Convert LitTrackParamScal to FairTrackParam.
static void FairTrackParamToLitTrackParamScal(const FairTrackParam *par, lit::parallel::LitTrackParamScal *lpar)
Convert FairTrackParam to LitTrackParamScal.
static void CbmPixelHitArrayToLitScalPixelHitArray(const TClonesArray *hits, vector< lit::parallel::LitScalPixelHit * > &lhits)
Convert CbmPixelHit array to LitScalPixelHit arra.
void PrintStopwatchStatistics()
Print stopwatch statistics.
void ReadDataBranches()
Read data branches.
virtual void Finish()
Derived from FairTask.
virtual void Exec(Option_t *opt)
Derived from FairTask.
virtual ~CbmLitFitTracksParallel()
Destructor.
void DoFit()
Performs track fit.
virtual InitStatus Init()
Derived from FairTask.
static CbmLitTrackingGeometryConstructor * Instance()
Return pointer to singleton object.
void GetMuchLayoutScal(lit::parallel::LitDetectorLayoutScal &layout)
Return MUCH detector layout for parallel MUCH tracking in scalar format.
void GetTrdLayoutScal(lit::parallel::LitDetectorLayoutScal &layout)
Return TRD detector layout for TRD parallel tracking in scalar format.
const FairTrackParam * GetParamLast() const
Definition CbmTrack.h:69
void SetParamFirst(const FairTrackParam *par)
Definition CbmTrack.h:86
void SetParamLast(const FairTrackParam *par)
Definition CbmTrack.h:87
Scalar track data class.
const LitTrackParamScal & GetParamFirst() const
Returns first parameter of the track.
unsigned short GetPreviousTrackId() const
Return Previous track index.
const LitTrackParamScal & GetParamLast() const
Returns last parameter of the track.
void SetParamFirst(const LitTrackParamScal &param)
Sets first track parameter.