BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnTof700Qa.cxx
Go to the documentation of this file.
1#include "BmnTof700Qa.h"
2
3#include "BmnFieldMap.h"
4#include "BmnGlobalTrack.h"
5#include "BmnNewFieldMap.h"
6#include "CbmStsTrack.h"
7#include "TMath.h"
8#include "UniRun.h"
9
10#include <TFile.h>
11#include <TStopwatch.h>
12#include <fstream>
13
14using namespace TMath;
15
16static Double_t fWorkTime = 0.0;
17
19{
20 fStsTracks = nullptr;
21 fGlobalTracks = nullptr;
22 fKalman = nullptr;
23 fTof700Hits = nullptr;
25 fKalmanType = 2; // 1 - L1 KF, 2 - Lebedev's KF
27 fEventId = 0;
28}
29
31{
32
33 TStopwatch sw;
34 sw.Start();
35
36 FairRootManager* ioman = FairRootManager::Instance();
37 if (!ioman)
38 Fatal("Init", "FairRootManager is not instantiated");
39
40 /*CbmStsDigiScheme* digiScheme = */ CbmStsDigiScheme::Instance(4); // for L1 KF
42
43 fTof700Hits = (TClonesArray*)ioman->GetObject("BmnTof700Hit");
44 fStsTracks = (TClonesArray*)ioman->GetObject("StsVector");
45 fStsHits = (TClonesArray*)ioman->GetObject("StsHit");
46 fGlobalTracks = (TClonesArray*)ioman->GetObject("BmnGlobalTrack");
47 fVertex = (CbmVertex*)ioman->GetObject("PrimaryVertex.");
48
50
51 ifstream infile("tof700_strip_time_shifts.txt");
52
53 Int_t m, s, n;
54 Float_t sh;
55 while (infile >> m >> s >> n >> sh) {
56 timeShifts[m][s] = sh;
57 }
58
59 sw.Stop();
60 fWorkTime += sw.RealTime();
61 return kSUCCESS;
62}
63
65{
66
67 TStopwatch sw;
68 sw.Start();
69
70 // Int_t modOrder[58] = {
71 // 0, 1, 4, 7, 10, 13, 6, 30, 24, 32, 26, 34, 28, 52,
72 // 14, 15, 16, 17, 18, 19, 36, 39, 37, 40, 38, 41,
73 // 3, 12, 2, 5, 8, 11, 20, 31, 25, 33, 27, 35, 29, 51,
74 // 42, 43, 44, 45, 46, 47,
75 // 53, 54, 55, 56, 57, 58,
76 // 22, 21, 23,
77 // 48, 49, 50
78 // };
79
80 Float_t dx[nModules] = {+0.13, +0.15, -0.21, -0.28, +0.09, -0.29, -0.13, -0.28, -0.14, -0.08, -0.07, -0.13,
81 -0.30, -0.26, +0.36, +0.24, +0.33, +0.46, -0.06, +0.09, -0.07, +0.36, -0.23, +0.18,
82 +0.05, -0.38, +0.16, +0.26, +0.28, -0.21, -0.06, -0.29, -0.03, -0.45, +0.04, -0.33,
83 +0.16, +0.15, +0.38, +0.19, +0.54, +0.68, -0.16, -0.04, +0.10, +0.23, -0.13, +0.00,
84 -0.10, +0.56, +0.50, -0.18, +0.18, +0.44, +0.50, +0.39, +0.29, +0.37, +0.01};
85
86 Float_t dy[nModules] = {-0.06, -0.08, -0.32, -0.25, -0.13, -0.31, -0.18, -0.19, -0.34, -0.45, -0.21, -0.34,
87 -0.22, -0.21, -0.09, -0.22, -0.29, -0.28, -0.02, -0.15, -0.34, -0.17, -0.08, -0.01,
88 -0.05, -0.09, +0.01, -0.06, +0.12, +0.00, -0.08, -0.20, -0.05, -0.07, +0.13, +0.00,
89 -0.03, +0.02, +0.09, -0.07, +0.13, +0.21, -0.12, -0.16, -0.04, -0.02, +0.05, -0.04,
90 -0.10, +0.19, +0.10, +0.04, +0.16, -0.01, -0.25, -0.29, -0.16, -0.02, -0.20};
91
92 if (!IsActive())
93 return;
94
95 cout << "Event ID: " << fEventId++ << endl;
96
97 if (fVertex->GetNTracks() < 2)
98 return;
99 if (fVertex->GetZ() < -0.5 || fVertex->GetZ() > 0.5)
100 return;
101 if (fVertex->GetX() < -1.0 || fVertex->GetX() > 1.5)
102 return;
103 if (fVertex->GetY() < -1.0 || fVertex->GetY() > 1.2)
104 return;
105
106 // for STS
107 for (Int_t iTr = 0; iTr < fStsTracks->GetEntriesFast(); ++iTr) {
108 CbmStsTrack* track = (CbmStsTrack*)fStsTracks->At(iTr);
109
110 if (track->GetNStsHits() < 5)
111 continue;
112
113 FairTrackParam parF = *(track->GetParamFirst());
114 Int_t pdg = 2212;
115 Float_t mom = 0.0;
116 if (fIsField) {
117 mom = 1.0 / parF.GetQp();
118 pdg = (mom > 0) ? 2212 : -211;
119 }
120
121 // FairTrackParam parL1 = *(track->GetParamLast());
122 // FairTrackParam parL2 = *(track->GetParamLast());
123
124 // PropagateToZ(&parL1, 400, pdg, 1);
125 // PropagateToZ(&parL2, 400, pdg, 2);
126
127 // fHistoManager->H2("Compare_X")->Fill(parL1.GetX(), parL2.GetX());
128 // fHistoManager->H2("Compare_Y")->Fill(parL1.GetY(), parL2.GetY());
129 // fHistoManager->H2("Compare_Tx")->Fill(parL1.GetTx(), parL2.GetTx());
130 // fHistoManager->H2("Compare_Ty")->Fill(parL1.GetTy(), parL2.GetTy());
131 // fHistoManager->H2("Compare_P")->Fill(1.0 / parL1.GetQp(), 1.0 / parL2.GetQp());
132
133 Double_t length = 0.0;
134
135 if (PropagateToZ(&parF, fVertex->GetZ(), pdg, fKalmanType, &length) == kFALSE)
136 continue;
137
138 // if (fKalman->TGeoTrackPropagate(&parF, fVertex->GetZ(), pdg, nullptr, nullptr, kTRUE) == kBMNERROR) continue;
139 if (TMath::Sqrt(TMath::Sq(parF.GetX() - fVertex->GetX()) + TMath::Sq(parF.GetY() - fVertex->GetY())) > 1.0)
140 continue;
141
142 // ADD LOOP OVER HITS TO CALCULATE CBMSTSTRACK LENGTH ====>
143 CbmStsHit* cbmhit = (CbmStsHit*)fStsHits->At(track->GetStsHitIndex(0));
144 Double_t xPrev = cbmhit->GetX();
145 Double_t yPrev = cbmhit->GetY();
146 Double_t zPrev = cbmhit->GetZ();
147 for (Int_t iHit = 1; iHit < track->GetNStsHits(); ++iHit) {
148 cbmhit = (CbmStsHit*)fStsHits->At(track->GetStsHitIndex(iHit));
149 length += Sqrt(Sq(cbmhit->GetX() - xPrev) + Sq(cbmhit->GetY() - yPrev) + Sq(cbmhit->GetZ() - zPrev));
150 xPrev = cbmhit->GetX();
151 yPrev = cbmhit->GetY();
152 zPrev = cbmhit->GetZ();
153 }
154 //<====
155
156 FairTrackParam parL = *(track->GetParamLast());
157 Float_t minResX = 100.0;
158 Float_t minResY = 100.0;
159 Int_t minIdx = -1;
160 for (Int_t iH = 0; iH < fTof700Hits->GetEntriesFast(); ++iH) {
161 BmnTofHit* hit = (BmnTofHit*)fTof700Hits->At(iH);
162 Int_t mod = ((hit->GetDetectorID() & 0x0000FF00) >> 8) - 1;
163 // Double_t hitX = hit->GetX();
164 // Double_t hitY = hit->GetY();
165 Double_t hitZ = hit->GetZ(); // -dz[mod];
166 PropagateToZ(&parL, hitZ, pdg, fKalmanType);
167 // if (fKalman->TGeoTrackPropagate(&parL, hitZ, pdg, nullptr, nullptr) == kBMNERROR) continue;
168 Float_t resX = parL.GetX() - hit->GetX() - GetDxMom(&parL) - dx[mod];
169 Float_t resY = parL.GetY() - hit->GetY() - GetDyMom(&parL) - dy[mod];
170 if (Abs(resX) > 3.0 * GetSigxMom(&parL) || Abs(resY) > 3.0 * GetSigxMom(&parL))
171 continue;
172 if (Abs(resX) < minResX && Abs(resY) < minResY) {
173 minResX = resX;
174 minResY = resY;
175 minIdx = iH;
176 }
177 }
178 if (minIdx == -1)
179 continue;
180
181 FairTrackParam minParL = *(track->GetParamLast());
182 BmnTofHit* minHit = (BmnTofHit*)fTof700Hits->At(minIdx);
183 if (PropagateToZ(&minParL, minHit->GetZ(), pdg, fKalmanType, &length) == kFALSE)
184 continue;
185 Int_t mod = ((minHit->GetDetectorID() & 0x0000FF00) >> 8) - 1;
186 Int_t strip = (minHit->GetDetectorID() & 0x000000FF) - 1;
187
188 // fHistoManager->H1(Form("TOF700_ResidX_%d", mod))->Fill(minResX);
189 // fHistoManager->H1(Form("TOF700_ResidY_%d", mod))->Fill(minResY);
190 // fHistoManager->H2(Form("TOF700_dx_tx_%d", mod))->Fill(minParL.GetTx(), minResX);
191
192 if (fIsField) {
193
194 mom = 1.0 / parF.GetQp();
195 Float_t time = minHit->GetTimeStamp() + timeShifts[mod][strip];
196 Float_t beta = length / time / (TMath::C() * 1e-7);
197 Float_t m2 = mom * mom * (1.0 / beta / beta - 1.0);
198
199 fHistoManager->H2("TOF700_Banan_total")->Fill(mom, beta);
200 fHistoManager->H2("TOF700_M2_total")->Fill(mom, m2);
201 fHistoManager->H2("TOF700_dx_mom_total")->Fill(mom, minResX);
202 fHistoManager->H2("TOF700_dy_mom_total")->Fill(mom, minResY);
203
204 // cout << minHit->GetLength() << " " << minHit->GetTimeStamp() << " " << TMath::C() * 1e-7 << endl;
205 // cout << minResX << " " << minResY << " " << mom << " " << m2 << " " << beta << endl;
206
207 if (mom > 0.0 && mom < 5.0 && m2 > 0.5 && m2 < 1.5) { // p
208 // fHistoManager->H1("TOF700_proton_ResidX_total")->Fill(resX);
209 // fHistoManager->H1("TOF700_proton_ResidY_total")->Fill(resY);
210 fHistoManager->H1(Form("TOF700_proton_ResidX_%d", mod))->Fill(minResX);
211 fHistoManager->H1(Form("TOF700_proton_ResidY_%d", mod))->Fill(minResY);
212 fHistoManager->H2("TOF700_proton_dx_mom_total")->Fill(mom, minResX);
213 fHistoManager->H2("TOF700_proton_dy_mom_total")->Fill(mom, minResY);
214 // fHistoManager->H2(Form("TOF700_proton_Banan_%d", mod))->Fill(mom, beta);
215 // fHistoManager->H2("TOF700_proton_Mass2_modules")->Fill(mod, m2);
216 // fHistoManager->H2(Form("TOF700_proton_Mass2_strips_%d", mod))->Fill(strip, m2);
217 // fHistoManager->H2("TOF700_proton_Banan_total")->Fill(mom, beta);
218 // fHistoManager->H2("TOF700_proton_Mass2_total")->Fill(mom, m2);
219 // fHistoManager->H2("TOF700_proton_dx_tx_total")->Fill(par.GetTx(), resX);
220 fHistoManager->H2(Form("TOF700_proton_dx_tx_%d", mod))->Fill(minParL.GetTx(), minResX);
221 }
222
223 if (mom > 0.0 && mom < 6.0 && m2 > 3.0 && m2 < 5.5) { // d
224 // fHistoManager->H1("TOF700_deutron_ResidX_total")->Fill(resX);
225 // fHistoManager->H1("TOF700_deutron_ResidY_total")->Fill(resY);
226 fHistoManager->H1(Form("TOF700_deutron_ResidX_%d", mod))->Fill(minResX);
227 fHistoManager->H1(Form("TOF700_deutron_ResidY_%d", mod))->Fill(minResY);
228 // fHistoManager->H2(Form("TOF700_deutron_Banan_%d", mod))->Fill(mom, beta);
229 fHistoManager->H2("TOF700_deutron_dx_mom_total")->Fill(mom, minResX);
230 fHistoManager->H2("TOF700_deutron_dy_mom_total")->Fill(mom, minResY);
231 // fHistoManager->H2("TOF700_deutron_Mass2_modules")->Fill(mod, m2);
232 // fHistoManager->H2(Form("TOF700_deutron_Mass2_strips_%d", mod))->Fill(strip, m2);
233 // fHistoManager->H2("TOF700_deutron_Banan_total")->Fill(mom, track->GetBeta(2));
234 // fHistoManager->H2("TOF700_deutron_Mass2_total")->Fill(mom, m2);
235 // fHistoManager->H2("TOF700_deutron_dx_tx_total")->Fill(par.GetTx(), resX);
236 fHistoManager->H2(Form("TOF700_deutron_dx_tx_%d", mod))->Fill(minParL.GetTx(), minResX);
237 }
238
239 if (mom > 0.0 && mom < 3.5 && m2 > -0.2 && m2 < 0.2) { // pi+
240 // fHistoManager->H1("TOF700_piPlus_ResidX_total")->Fill(resX);
241 // fHistoManager->H1("TOF700_piPlus_ResidY_total")->Fill(resY);
242 fHistoManager->H1(Form("TOF700_piPlus_ResidX_%d", mod))->Fill(minResX);
243 fHistoManager->H1(Form("TOF700_piPlus_ResidY_%d", mod))->Fill(minResY);
244 // fHistoManager->H2(Form("TOF700_piPlus_Banan_%d", mod))->Fill(mom, beta);
245 fHistoManager->H2("TOF700_piPlus_dx_mom_total")->Fill(mom, minResX);
246 fHistoManager->H2("TOF700_piPlus_dy_mom_total")->Fill(mom, minResY);
247 // fHistoManager->H2("TOF700_piPlus_Mass2_modules")->Fill(mod, m2);
248 // fHistoManager->H2(Form("TOF700_piPlus_Mass2_strips_%d", mod))->Fill(strip, m2);
249 // fHistoManager->H2("TOF700_piPlus_Banan_total")->Fill(mom, track->GetBeta(2));
250 // fHistoManager->H2("TOF700_piPlus_Mass2_total")->Fill(mom, m2);
251 // fHistoManager->H2("TOF700_piPlus_dx_tx_total")->Fill(par.GetTx(), resX);
252 fHistoManager->H2(Form("TOF700_piPlus_dx_tx_%d", mod))->Fill(minParL.GetTx(), minResX);
253 }
254
255 if (mom > -3.5 && mom < 0.0 && m2 > -0.2 && m2 < 0.2) { // pi-
256 // fHistoManager->H1("TOF700_piMinus_ResidX_total")->Fill(resX);
257 // fHistoManager->H1("TOF700_piMinus_ResidY_total")->Fill(resY);
258 fHistoManager->H1(Form("TOF700_piMinus_ResidX_%d", mod))->Fill(minResX);
259 fHistoManager->H1(Form("TOF700_piMinus_ResidY_%d", mod))->Fill(minResY);
260 // fHistoManager->H2(Form("TOF700_piMinus_Banan_%d", mod))->Fill(mom, beta);
261 fHistoManager->H2("TOF700_piMinus_dx_mom_total")->Fill(mom, minResX);
262 fHistoManager->H2("TOF700_piMinus_dy_mom_total")->Fill(mom, minResY);
263 // fHistoManager->H2("TOF700_piMinus_Mass2_modules")->Fill(mod, m2);
264 // fHistoManager->H2(Form("TOF700_piMinus_Mass2_strips_%d", mod))->Fill(strip, m2);
265 // fHistoManager->H2("TOF700_piMinus_Banan_total")->Fill(mom, track->GetBeta(2));
266 // fHistoManager->H2("TOF700_piMinus_Mass2_total")->Fill(mom, m2);
267 // fHistoManager->H2("TOF700_piMinus_dx_tx_total")->Fill(par.GetTx(), resX);
268 fHistoManager->H2(Form("TOF700_piMinus_dx_tx_%d", mod))->Fill(minParL.GetTx(), minResX);
269 }
270 }
271 }
272
273 sw.Stop();
274 fWorkTime += sw.RealTime();
275}
276
278{
279
280 TStopwatch sw;
281 sw.Start();
282
283 FairRootManager::Instance()->GetOutFile()->cd();
284 TDirectory* tof700Dir = FairRootManager::Instance()->GetOutFile()->mkdir("TOF700");
285
286 // for (Int_t i = 0; i < nModules; ++i) {
287 // //fHistoManager->H1(Form("TOF700_dx_tx_%d", i))->Fit("pol1", "QSR", "", -0.5, 0.5);
288 // //fHistoManager->H1(Form("TOF700_ResidX_%d", i))->Fit("gaus", "QSR", "", -2, 2);
289 // //fHistoManager->H1(Form("TOF700_ResidY_%d", i))->Fit("gaus", "QSR", "", -2, 2);
290 // }
291
292 tof700Dir->cd();
293 fHistoManager->WriteToFile();
294
295 sw.Stop();
296 fWorkTime += sw.RealTime();
297 printf("Work time of BmnTof700Qa: %4.2f sec.\n", fWorkTime);
298}
299
300void BmnTof700Qa::PropagateToZ(FairTrackParam* par, Double_t zDst, Int_t pdg, Int_t kalmanType)
301{
302 if (kalmanType == 1) { // L1 KF
303 CbmKFTrack kftr = CbmKFTrack(*par);
304 kftr.SetPID(pdg);
305 kftr.Extrapolate(zDst);
306 kftr.GetTrackParam(*par);
307 } else if (kalmanType == 2) { // Lebedev's KF
308 fKalman->TGeoTrackPropagate(par, zDst, pdg, nullptr, nullptr);
309 }
310}
311
312Bool_t BmnTof700Qa::PropagateToZ(FairTrackParam* par, Double_t zDst, Int_t pdg, Int_t kalmanType, Double_t* len)
313{
314 Double_t lenPrev = *len;
315 CbmKFTrack kftr = CbmKFTrack(*par);
316 kftr.SetPID(pdg);
317 Int_t n = 10; // number of steps
318 Double_t zLength = zDst - par->GetZ();
319 Double_t step = zLength / n;
320 Double_t xPrev = par->GetX();
321 Double_t yPrev = par->GetY();
322 Double_t zPrev = par->GetZ();
323 Double_t z = zPrev;
324 for (Int_t i = 0; i < n; ++i) {
325 z += step;
326 if (kalmanType == 1) { // L1 KF
327 kftr.Extrapolate(z);
328 kftr.GetTrackParam(*par);
329 } else if (kalmanType == 2) { // Lebedev's KF
330 if (fKalman->TGeoTrackPropagate(par, z, pdg, nullptr, nullptr) == kBMNERROR)
331 return kFALSE;
332 }
333 if (len)
334 *len += Sqrt(Sq(par->GetX() - xPrev) + Sq(par->GetY() - yPrev) + Sq(par->GetZ() - zPrev));
335 xPrev = par->GetX();
336 yPrev = par->GetY();
337 zPrev = par->GetZ();
338 }
339 if (Abs(*len - lenPrev) < 1.0)
340 return kFALSE;
341 else
342 return kTRUE;
343}
344
346{
347
348 // fHistoManager->Create2 <TH2F>("Compare_X", "; X, L1; X, Leb", 400, -100.0, 100.0, 400, -100.0, 100.0);
349 // fHistoManager->Create2 <TH2F>("Compare_Y", "; Y, L1; Y, Leb", 400, -100.0, 100.0, 400, -100.0, 100.0);
350 // fHistoManager->Create2 <TH2F>("Compare_Tx", "; Tx, L1; Tx, Leb", 400, -1.0, 1.0, 400, -1.0, 1.0);
351 // fHistoManager->Create2 <TH2F>("Compare_Ty", "; Ty, L1; Ty, Leb", 400, -1.0, 1.0, 400, -1.0, 1.0);
352 // fHistoManager->Create2 <TH2F>("Compare_P", "; P, L1; P, Leb", 400, -5.0, 10.0, 400, -5.0, 10.0);
353
354 fHistoManager->Create2<TH2F>("TOF700_Banan_total", "Total #beta vs rigidity; rigidity, GeV/c/Q; #beta", 800, -5.0,
355 10.0, 800, 0.2, 1.1);
356 fHistoManager->Create2<TH2F>("TOF700_M2_total", "Total m^{2} vs rigidity; rigidity, GeV/c/Q; m^{2}, GeV/c^{2}", 800,
357 -5.0, 10.0, 800, -0.5, 10);
358 fHistoManager->Create2<TH2F>("TOF700_dx_mom_total", "Total dX vs rigidity; rigidity, GeV/c/Q; dX, cm", 800, -5.0,
359 10.0, 800, -5.0, 5.0);
360 fHistoManager->Create2<TH2F>("TOF700_dy_mom_total", "Total dY vs rigidity; rigidity, GeV/c/Q; dY, cm", 800, -5.0,
361 10.0, 800, -5.0, 5.0);
362
363 fHistoManager->Create2<TH2F>("TOF700_proton_dx_mom_total", "Total dX vs rigidity; rigidity, GeV/c/Q; dX, cm", 800,
364 -5.0, 10.0, 800, -5.0, 5.0);
365 fHistoManager->Create2<TH2F>("TOF700_proton_dy_mom_total", "Total dY vs rigidity; rigidity, GeV/c/Q; dY, cm", 800,
366 -5.0, 10.0, 800, -5.0, 5.0);
367
368 fHistoManager->Create2<TH2F>("TOF700_deutron_dx_mom_total", "Total dX vs rigidity; rigidity, GeV/c/Q; dX, cm", 800,
369 -5.0, 10.0, 800, -5.0, 5.0);
370 fHistoManager->Create2<TH2F>("TOF700_deutron_dy_mom_total", "Total dY vs rigidity; rigidity, GeV/c/Q; dY, cm", 800,
371 -5.0, 10.0, 800, -5.0, 5.0);
372
373 fHistoManager->Create2<TH2F>("TOF700_piMinus_dx_mom_total", "Total dX vs rigidity; rigidity, GeV/c/Q; dX, cm", 800,
374 -5.0, 10.0, 800, -5.0, 5.0);
375 fHistoManager->Create2<TH2F>("TOF700_piMinus_dy_mom_total", "Total dY vs rigidity; rigidity, GeV/c/Q; dY, cm", 800,
376 -5.0, 10.0, 800, -5.0, 5.0);
377
378 fHistoManager->Create2<TH2F>("TOF700_piPlus_dx_mom_total", "Total dX vs rigidity; rigidity, GeV/c/Q; dX, cm", 800,
379 -5.0, 10.0, 800, -5.0, 5.0);
380 fHistoManager->Create2<TH2F>("TOF700_piPlus_dy_mom_total", "Total dY vs rigidity; rigidity, GeV/c/Q; dY, cm", 800,
381 -5.0, 10.0, 800, -5.0, 5.0);
382
383 // fHistoManager->Create1 <TH1F>("TOF700_proton_ResidX_total", "Total residuals in X coordinate; dX, cm; N", 100,
384 // -5.0, 5.0); fHistoManager->Create1 <TH1F>("TOF700_proton_ResidY_total", "Total residuals in Y coordinate; dY, cm;
385 // N", 100, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_proton_Banan_total", "Total #beta vs rigidity;
386 // rigidity, GeV/c/Q; #beta", 400, -5.0, 10.0, 400, 0.2, 1.1); fHistoManager->Create2
387 // <TH2F>("TOF700_proton_Mass2_total", "Total m^{2} vs rigidity; rigidity, GeV/c/Q; m^{2}", 400, -5.0, 10.0, 400,
388 // -0.5, 10.0); fHistoManager->Create2 <TH2F>("TOF700_proton_dx_tx_total", "Total dX vs Tx; t_{x}; dx, cm", 400,
389 // -0.5, 0.5, 400, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_proton_Mass2_modules", "m^{2} vs module; module
390 // number; m^{2}", 60, 0, 60, 400, -0.5, 1.5);
391
392 // fHistoManager->Create1 <TH1F>("TOF700_deutron_ResidX_total", "Total residuals in X coordinate; dX, cm; N", 100,
393 // -5.0, 5.0); fHistoManager->Create1 <TH1F>("TOF700_deutron_ResidY_total", "Total residuals in Y coordinate; dY,
394 // cm; N", 100, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_deutron_Banan_total", "Total #beta vs rigidity;
395 // rigidity, GeV/c/Q; #beta", 400, -5.0, 10.0, 400, 0.2, 1.1); fHistoManager->Create2
396 // <TH2F>("TOF700_deutron_Mass2_total", "Total m^{2} vs rigidity; rigidity, GeV/c/Q; m^{2}", 400, -5.0, 10.0, 400,
397 // -0.5, 10.0); fHistoManager->Create2 <TH2F>("TOF700_deutron_dx_tx_total", "Total dX vs Tx; t_{x}; dx, cm", 400,
398 // -0.5, 0.5, 400, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_deutron_Mass2_modules", "m^{2} vs module;
399 // module number; m^{2}", 60, 0, 60, 400, -0.5, 1.5);
400
401 // fHistoManager->Create1 <TH1F>("TOF700_piMinus_ResidX_total", "Total residuals in X coordinate; dX, cm; N", 100,
402 // -5.0, 5.0); fHistoManager->Create1 <TH1F>("TOF700_piMinus_ResidY_total", "Total residuals in Y coordinate; dY,
403 // cm; N", 100, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_piMinus_Banan_total", "Total #beta vs rigidity;
404 // rigidity, GeV/c/Q; #beta", 400, -5.0, 10.0, 400, 0.2, 1.1); fHistoManager->Create2
405 // <TH2F>("TOF700_piMinus_Mass2_total", "Total m^{2} vs rigidity; rigidity, GeV/c/Q; m^{2}", 400, -5.0, 10.0, 400,
406 // -0.5, 10.0); fHistoManager->Create2 <TH2F>("TOF700_piMinus_dx_tx_total", "Total dX vs Tx; t_{x}; dx, cm", 400,
407 // -0.5, 0.5, 400, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_piMinus_Mass2_modules", "m^{2} vs module;
408 // module number; m^{2}", 60, 0, 60, 400, -0.5, 1.5);
409
410 // fHistoManager->Create1 <TH1F>("TOF700_piPlus_ResidX_total", "Total residuals in X coordinate; dX, cm; N", 100,
411 // -5.0, 5.0); fHistoManager->Create1 <TH1F>("TOF700_piPlus_ResidY_total", "Total residuals in Y coordinate; dY, cm;
412 // N", 100, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_piPlus_Banan_total", "Total #beta vs rigidity;
413 // rigidity, GeV/c/Q; #beta", 400, -5.0, 10.0, 400, 0.2, 1.1); fHistoManager->Create2
414 // <TH2F>("TOF700_piPlus_Mass2_total", "Total m^{2} vs rigidity; rigidity, GeV/c/Q; m^{2}", 400, -5.0, 10.0, 400,
415 // -0.5, 10.0); fHistoManager->Create2 <TH2F>("TOF700_piPlus_dx_tx_total", "Total dX vs Tx; t_{x}; dx, cm", 400,
416 // -0.5, 0.5, 400, -5.0, 5.0); fHistoManager->Create2 <TH2F>("TOF700_piPlus_Mass2_modules", "m^{2} vs module; module
417 // number; m^{2}", 60, 0, 60, 400, -0.5, 1.5);
418
419 for (Int_t i = 0; i < nModules; ++i) {
420
421 // fHistoManager->Create1 <TH1F>(Form("TOF700_ResidX_%d", i), Form("Residuals in X coordinate for module %d; dX,
422 // cm; N", i), 100, -5.0, 5.0); fHistoManager->Create1 <TH1F>(Form("TOF700_ResidY_%d", i), Form("Residuals in Y
423 // coordinate for module %d; dY, cm; N", i), 100, -5.0, 5.0); fHistoManager->Create2
424 // <TH2F>(Form("TOF700_dx_tx_%d", i), Form("dX vs Tx for module %d; t_{x}; dx, cm", i), 400, -0.5, 0.5, 400,
425 // -5.0, 5.0);
426
427 // fHistoManager->Create2 <TH2F>(Form("TOF700_proton_Mass2_strips_%d", i), Form("m^{2} vs strips for module %d;
428 // strip number; m^{2}", i), 32, 0, 32, 100, -0.5, 1.5);
429 fHistoManager->Create1<TH1F>(Form("TOF700_proton_ResidX_%d", i),
430 Form("Residuals in X coordinate for module %d; dX, cm; N", i), 100, -5.0, 5.0);
431 fHistoManager->Create1<TH1F>(Form("TOF700_proton_ResidY_%d", i),
432 Form("Residuals in Y coordinate for module %d; dY, cm; N", i), 100, -5.0, 5.0);
433 fHistoManager->Create2<TH2F>(Form("TOF700_proton_dx_tx_%d", i),
434 Form("dX vs Tx for module %d; t_{x}; dx, cm", i), 400, -0.5, 0.5, 400, -5.0, 5.0);
435 // fHistoManager->Create2 <TH2F>(Form("TOF700_proton_Banan_%d", i), Form("#beta vs rigidity for module %d;
436 // rigidity, GeV/c/Q; #beta", i), 400, -5.0, 10.0, 400, 0.2, 1.1);
437
438 // fHistoManager->Create2 <TH2F>(Form("TOF700_deutron_Mass2_strips_%d", i), Form("m^{2} vs strips for module %d;
439 // strip number; m^{2}", i), 32, 0, 32, 100, -0.5, 1.5);
440 fHistoManager->Create1<TH1F>(Form("TOF700_deutron_ResidX_%d", i),
441 Form("Residuals in X coordinate for module %d; dX, cm; N", i), 100, -5.0, 5.0);
442 fHistoManager->Create1<TH1F>(Form("TOF700_deutron_ResidY_%d", i),
443 Form("Residuals in Y coordinate for module %d; dY, cm; N", i), 100, -5.0, 5.0);
444 fHistoManager->Create2<TH2F>(Form("TOF700_deutron_dx_tx_%d", i),
445 Form("dX vs Tx for module %d; t_{x}; dx, cm", i), 400, -0.5, 0.5, 400, -5.0, 5.0);
446 // fHistoManager->Create2 <TH2F>(Form("TOF700_deutron_Banan_%d", i), Form("#beta vs rigidity for module %d;
447 // rigidity, GeV/c/Q; #beta", i), 400, -5.0, 10.0, 400, 0.2, 1.1);
448
449 // fHistoManager->Create2 <TH2F>(Form("TOF700_piMinus_Mass2_strips_%d", i), Form("m^{2} vs strips for module %d;
450 // strip number; m^{2}", i), 32, 0, 32, 100, -0.5, 1.5);
451 fHistoManager->Create1<TH1F>(Form("TOF700_piMinus_ResidX_%d", i),
452 Form("Residuals in X coordinate for module %d; dX, cm; N", i), 100, -5.0, 5.0);
453 fHistoManager->Create1<TH1F>(Form("TOF700_piMinus_ResidY_%d", i),
454 Form("Residuals in Y coordinate for module %d; dY, cm; N", i), 100, -5.0, 5.0);
455 fHistoManager->Create2<TH2F>(Form("TOF700_piMinus_dx_tx_%d", i),
456 Form("dX vs Tx for module %d; t_{x}; dx, cm", i), 400, -0.5, 0.5, 400, -5.0, 5.0);
457 // fHistoManager->Create2 <TH2F>(Form("TOF700_piMinus_Banan_%d", i), Form("#beta vs rigidity for module %d;
458 // rigidity, GeV/c/Q; #beta", i), 400, -5.0, 10.0, 400, 0.2, 1.1);
459
460 // fHistoManager->Create2 <TH2F>(Form("TOF700_piPlus_Mass2_strips_%d", i), Form("m^{2} vs strips for module %d;
461 // strip number; m^{2}", i), 32, 0, 32, 100, -0.5, 1.5);
462 fHistoManager->Create1<TH1F>(Form("TOF700_piPlus_ResidX_%d", i),
463 Form("Residuals in X coordinate for module %d; dX, cm; N", i), 100, -5.0, 5.0);
464 fHistoManager->Create1<TH1F>(Form("TOF700_piPlus_ResidY_%d", i),
465 Form("Residuals in Y coordinate for module %d; dY, cm; N", i), 100, -5.0, 5.0);
466 fHistoManager->Create2<TH2F>(Form("TOF700_piPlus_dx_tx_%d", i),
467 Form("dX vs Tx for module %d; t_{x}; dx, cm", i), 400, -0.5, 0.5, 400, -5.0, 5.0);
468 // fHistoManager->Create2 <TH2F>(Form("TOF700_piPlus_Banan_%d", i), Form("#beta vs rigidity for module %d;
469 // rigidity, GeV/c/Q; #beta", i), 400, -5.0, 10.0, 400, 0.2, 1.1); fHistoManager->Create1
470 // <TH1F>(Form("TOF700_Mass2_%d", i), Form("m^{2} for module %d; rigidity, GeV/c/Q; m^{2}", i), 400,
471 // -0.5, 10.0);
472 }
473}
474
475Float_t BmnTof700Qa::GetDxMom(FairTrackParam* par)
476{
477 // DX PROTONS
478 // 3.70/x^0.28-2.10
479 // DX PI-MINUS
480 //-7.61/(-x)^0.15+5.85
481
482 Float_t mom = 1.0 / par->GetQp();
483
484 return (mom > 0) ? 3.70 / TMath::Power(mom, 0.28) - 2.10 : -7.61 / TMath::Power(-1.0 * mom, 0.15) + 5.85;
485}
486
487Float_t BmnTof700Qa::GetDyMom(FairTrackParam* par)
488{
489 // DY PROTONS
490 // -1.56/x^0.94+0.18
491 // DY PI-MINUS
492 // +10.81/(-x)^0.05-9.53
493
494 Float_t mom = 1.0 / par->GetQp();
495
496 return (mom > 0) ? -1.56 / TMath::Power(mom, 0.94) + 0.18 : 10.81 / TMath::Power(-1.0 * mom, 0.05) - 9.53;
497}
498
500{
501 // SIGMA DX DEUTERONS
502 // 0.66/x^1.21+1.00
503 // SIGMA DX PI-MINUS
504 //-1.01/x^1.00+0.86
505
506 Float_t mom = 1.0 / par->GetQp();
507
508 return (mom > 0) ? 0.66 / TMath::Power(mom, 1.21) + 1.00 : -1.01 / TMath::Power(mom, 1.00) + 0.86;
509}
510
512{
513 // SIGMA DY DEUTERONS
514 // 0.98/x^1.20+0.57
515 // SIGMA DY PI-MINUS
516 // -0.87/x^1.00+0.58
517
518 Float_t mom = 1.0 / par->GetQp();
519
520 return (mom > 0) ? 0.98 / TMath::Power(mom, 1.20) + 0.57 : -0.87 / TMath::Power(mom, 1.00) + 0.58;
521}
static Double_t fWorkTime
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
bool Bool_t
int Int_t
float Float_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
void Fatal(const char *location, const char *msgfmt,...)
char * Form(const char *fmt,...)
@ kBMNERROR
Error.
Definition BmnEnums.h:95
BmnKalmanFilter * fKalman
Definition BmnTof700Qa.h:49
Bool_t fIsField
Definition BmnTof700Qa.h:45
TClonesArray * fStsTracks
Definition BmnTof700Qa.h:52
void CreateHistograms()
Int_t fEventId
Definition BmnTof700Qa.h:47
BmnQaHistoManager * fHistoManager
Definition BmnTof700Qa.h:57
Float_t GetSigyMom(FairTrackParam *par)
TClonesArray * fStsHits
Definition BmnTof700Qa.h:51
Bool_t PropagateToZ(FairTrackParam *par, Double_t zDst, Int_t pdg, Int_t kalmanType, Double_t *len)
Float_t GetSigxMom(FairTrackParam *par)
CbmVertex * fVertex
Definition BmnTof700Qa.h:54
Float_t GetDxMom(FairTrackParam *par)
BmnTof700Qa()
Default constructor.
TClonesArray * fGlobalTracks
Definition BmnTof700Qa.h:53
Int_t fKalmanType
Definition BmnTof700Qa.h:44
Float_t GetDyMom(FairTrackParam *par)
static const Int_t nModules
Definition BmnTof700Qa.h:65
virtual InitStatus Init()
TClonesArray * fTof700Hits
Definition BmnTof700Qa.h:50
virtual void Exec(Option_t *opt)
Float_t timeShifts[nModules][nStrips]
Definition BmnTof700Qa.h:67
virtual void Finish()
Int_t Extrapolate(Double_t z, Double_t *QP0=0, Bool_t line=false)
Access to i-th hit.
void GetTrackParam(FairTrackParam &track)
void SetPID(Int_t pidHypo)
static CbmStsDigiScheme * Instance(int version=1)
FairTrackParam * GetParamLast()
Definition CbmStsTrack.h:70
Int_t GetNStsHits() const
Accessors.
Definition CbmStsTrack.h:60
Int_t GetStsHitIndex(Int_t iHit) const
Definition CbmStsTrack.h:62
FairTrackParam * GetParamFirst()
Definition CbmStsTrack.h:69
CbmVertex.h.
Definition CbmVertex.h:21
virtual Bool_t cd()
virtual TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE)
Double_t RealTime()
void Start(Bool_t reset=kTRUE)
void Stop()
double beta(double x, double y)
*brief user defined string literal for JSON values *sa std::size_t n
Definition json.hpp:20362
constexpr Double_t C()
Double_t Power(Double_t x, Double_t y)
Double_t Sq(Double_t x)
Double_t Sqrt(Double_t x)
Double_t Abs(Double_t d)