BmnRoot
Loading...
Searching...
No Matches
BmnGlobalTracking.h
Go to the documentation of this file.
1/* * \file BmnGlobalTracking.h
2 * \author Sergey Merts <Sergey.Merts@gmail.com>
3 * \date 2014
4 * \brief BMN task for global track reconstruction.
5 *
6 * Output is reconstructed global tracks BmnGlobalTrack
7 * Hit-to-track merger attaches the TOF hit finally the track is refitted.
8 **/
9
10#ifndef BmnGlobalTracking_H_
11#define BmnGlobalTracking_H_
12
13#include "BmnCSCHit.h"
14#include "BmnCSCStationSet.h"
15#include "BmnDchHit.h"
16#include "BmnDchTrack.h"
17#include "BmnGemTrack.h"
18#include "BmnGlobalTrack.h"
19#include "BmnHit.h"
20#include "BmnKalmanFilter.h"
21#include "BmnScWallEvent.h"
22#include "BmnSiliconHit.h"
23#include "BmnSiliconStationSet.h"
24#include "BmnTask.h"
25#include "BmnVertex.h"
26#include "CbmKFTrack.h"
27#include "CbmMCTrack.h"
28#include "CbmStsHit.h"
29#include "CbmStsTrack.h"
30#include "CbmTofPoint.h"
31#include "CbmVertex.h"
32#include "FairMCPoint.h"
33#include "FairRootManager.h"
34#include "FairRunAna.h"
35#include "FairRuntimeDb.h"
36#include "TClonesArray.h"
37#include "TFitResult.h"
38#include "TFitResultPtr.h"
39#include "TGraph.h"
40#include "TH1F.h"
41#include "TH2F.h"
42#include "TMath.h"
43
44#include <TStopwatch.h>
45#include <string>
46#include <vector>
47using namespace std;
48
49class BmnGlobalTracking : public BmnTask
50{
51 public:
56 BmnGlobalTracking(Bool_t isExp, Bool_t doAlign);
57
62
66 virtual InitStatus Init();
67
71 virtual void Exec(Option_t* opt);
72
76 virtual void Finish();
77
78 virtual void OnlineWrite(const std::unique_ptr<TTree>& resultTree);
79
80 void SetDoAlign(Bool_t a) { fDoAlign = a; };
81
82 const Short_t GetDoAlign() const { return fDoAlign; };
83
84 void SetRunNumber(Int_t r) { fRunId = r; }
85
86 void SetPeriodNumber(Short_t p) { fPeriod = p; }
87
88 void SetInnerTracksBranchName(TString name) { fInnerTrackBranchName = name; }
89
90 private:
91 /*
92 * \brief Calculate length of the global track
93 */
94 Double_t CalculateLength(CbmStsTrack* tr);
95
96 // INPUT ARRAYS
97 TClonesArray* fInnerTracks;
98 TClonesArray* fGemTracks;
99 TClonesArray* fGemVertex;
100 TClonesArray* fGemHits;
101 TClonesArray* fSilHits;
102 TClonesArray* fCscHits;
103 TClonesArray* fDchTracks;
104 TClonesArray* fDchHits;
105 TClonesArray* fTof1Hits;
106 TClonesArray* fTof2Hits;
107 TClonesArray* fGemLowerCluster;
108
109 TClonesArray* fEvHead;
110 TClonesArray* fMCTracks;
111
112 TClonesArray* fStsHits;
113 TClonesArray* fStsTracks;
114 TClonesArray* fGlobalTracks;
115
116 BmnScWallEvent* fScWall;
117
118 TString fInnerTrackBranchName;
119
120 Short_t fPeriod;
121 Bool_t fIsExp;
122 Bool_t fDoAlign;
123
124 Int_t fEventNo; // event counter
125 Int_t fRunId;
126
127 Int_t fPDG; // PDG hypothesis
128 Float_t fChiSqCut; // Chi square cut for hit to be attached to track.
129
130 BmnVertex* fVertex;
131 CbmVertex* fVertexL1;
132
133 BmnKalmanFilter* fKalman;
134 Double_t fTime;
135
136 const static Int_t nModTof700 = 60;
137 const static Int_t nStripsTof700 = 32;
138 Float_t timeShiftsTof700[nModTof700][nStripsTof700];
139
140 const static Int_t nGemSt = 7;
141 Float_t qCalib_a0[nGemSt];
142 Float_t qCalib_b0[nGemSt];
143 Float_t qCalib_a1[nGemSt];
144 Float_t qCalib_b1[nGemSt];
145
146 TF1* fitMeanPosResX_tof400;
147 TF1* fitMeanPosResY_tof400;
148 TF1* fitMeanNegResX_tof400;
149 TF1* fitMeanNegResY_tof400;
150 TF1* fitSigmaPosResX_tof400;
151 TF1* fitSigmaPosResY_tof400;
152 TF1* fitSigmaNegResX_tof400;
153 TF1* fitSigmaNegResY_tof400;
154
155 TF1* fitMeanPosResX_tof700;
156 TF1* fitMeanPosResY_tof700;
157 TF1* fitMeanNegResX_tof700;
158 TF1* fitMeanNegResY_tof700;
159 TF1* fitSigmaPosResX_tof700;
160 TF1* fitSigmaPosResY_tof700;
161 TF1* fitSigmaNegResX_tof700;
162 TF1* fitSigmaNegResY_tof700;
163
164 TFile* fTOF400_file;
165 TFile* fTOF700_file;
166 TFile* fCalib1_file;
167 TFile* fCalib2_file;
168
169 Long_t fNMatchedDch1;
170 Long_t fNMatchedDch2;
171 Long_t fNMatchedTof400;
172 Long_t fNMatchedTof700;
173 Long_t fNMatchedNearCsc;
174 Long_t fNMatchedFarCsc;
175 Long_t fNInnerTracks;
176 Long_t fNGoodInnerTracks;
177 Long_t fNGoodGlobalTracks;
178
179 void PrintStatistics();
180
181 BmnStatus MatchingTOF700();
182 BmnStatus MatchingTOF400();
183 BmnStatus MatchingScWall();
184 BmnStatus MatchingFarCsc();
185 BmnStatus MatchingDCH(BmnGlobalTrack* tr);
186 BmnStatus MatchingDCH(BmnGlobalTrack* tr, Int_t num);
187 // BmnStatus MatchingCSC(BmnGlobalTrack* glTr, vector<Int_t> stations);
188 BmnStatus MatchingCSC(BmnGlobalTrack* glTr);
189
190 map<Float_t, pair<Int_t, Int_t>> FindPairsTof400(TClonesArray* tracks,
191 TClonesArray* hits,
192 Float_t xCut,
193 Float_t yCut);
194 map<Float_t, pair<Int_t, Int_t>> FindPairsTof700(TClonesArray* tracks,
195 TClonesArray* hits,
196 Float_t xCut,
197 Float_t yCut);
198 Int_t FindNearestHit(FairTrackParam* par, TClonesArray* hits, Float_t xCut, Float_t yCut);
199 Int_t FindNearestHit(FairTrackParam* par, TClonesArray* hits, Float_t xCut, Float_t yCut, vector<Int_t> stations);
200
201 BmnStatus Refit(BmnGlobalTrack* tr);
202 Double_t MagFieldIntegral(FairTrackParam& par, Double_t zMin, Double_t zMax, Double_t step);
203 BmnStatus UpdateMomentum(BmnGlobalTrack* tr);
204
206
207 void CalcdQdn(BmnGlobalTrack* tr);
208
209 ClassDef(BmnGlobalTracking, 1);
210};
211
212#endif /* BmnGlobalTracking_H_ */
BmnStatus
Definition BmnEnums.h:24
void SetDoAlign(Bool_t a)
BmnGlobalTracking(Bool_t isExp, Bool_t doAlign)
virtual void Exec(Option_t *opt)
Inherited from FairTask.
BmnGlobalTracking()
Constructor.
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
Write task resul to tree.
virtual InitStatus Init()
Inherited from FairTask.
void SetRunNumber(Int_t r)
const Short_t GetDoAlign() const
void SetInnerTracksBranchName(TString name)
virtual void Finish()
Inherited from FairTask.
void SetPeriodNumber(Short_t p)
virtual ~BmnGlobalTracking()
Destructor.
Class for Bmn ScWall data container in event.
BmnTask.
Definition BmnTask.h:13
STL namespace.