BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnQaOffline.cxx
Go to the documentation of this file.
1#include "BmnQaOffline.h"
2
3#include "BmnGlobalTrack.h"
4
5#include <GeoSetup.h>
6#include <UniRun.h>
7
9
11 : fBmnHeader(nullptr)
12 , fDstHeader(nullptr)
13 , fChainDst(nullptr)
14 , fSiliconHits(nullptr)
15 , fSiliconTracks(nullptr)
16 , fGemHits(nullptr)
17 , fGemTracks(nullptr)
18 , fCscHits(nullptr)
19 , fTof400Hits(nullptr)
20 , fTof700Hits(nullptr)
21 , fDchTracks(nullptr)
22 , fMwpcTracks(nullptr)
23 , fDchHits(nullptr)
24 , fMwpcHits(nullptr)
25 , fVertex(nullptr)
26 , fGlobalTracks(nullptr)
27 , period(0)
28 , fRunId(0)
30 , fDetGem(nullptr)
31 , fDetCsc(nullptr)
32 , fDetSilicon(nullptr)
33{
34 isDstRead = ReadDstTree(file);
35}
36
38{
39 fChainDst = new TChain("bmndata");
40 fChainDst->Add(fileDst.Data());
41
42 // Get dst header ...
43 fChainDst->SetBranchAddress("DstEventHeader.", &fDstHeader);
44 fChainDst->GetEntry(0);
45
46 fChainDst->SetBranchAddress("BmnDchHit", &fDchHits);
47 fChainDst->SetBranchAddress("BmnMwpcHit", &fMwpcHits);
48 fChainDst->SetBranchAddress("BmnTof400Hit", &fTof400Hits);
49 fChainDst->SetBranchAddress("BmnTof700Hit", &fTof700Hits);
50 fChainDst->SetBranchAddress("BmnCSCHit", &fCscHits);
51 fChainDst->SetBranchAddress("BmnSiliconHit", &fSiliconHits);
52 fChainDst->SetBranchAddress("BmnSiliconTrack", &fSiliconTracks);
53 fChainDst->SetBranchAddress("BmnGemStripHit", &fGemHits);
54 fChainDst->SetBranchAddress("BmnGemTrack", &fGemTracks);
55 fChainDst->SetBranchAddress("BmnDchTrack", &fDchTracks);
56 fChainDst->SetBranchAddress("BmnMwpcTrack", &fMwpcTracks);
57 fChainDst->SetBranchAddress("BmnGlobalTrack", &fGlobalTracks);
58 fChainDst->SetBranchAddress("BmnVertex", &fVertex);
59
60 if (fileDst.IsNull() || fChainDst->GetEntries() == 0)
61 return kFALSE;
62 else
63 return kTRUE;
64}
65
67{
68 cout << " BmnQaOffline::Init() " << endl;
69
70 ioman = FairRootManager::Instance();
71
72 fBmnHeader = static_cast<BmnEventHeader*>(ioman->GetObject("BmnEventHeader."));
73 if (fBmnHeader) {
74 printf("BmnEventHeader. found\n");
75 fRunId = fBmnHeader->GetRunId();
76 } else {
77 fDstHeader = static_cast<DstEventHeader*>(ioman->GetObject("DstEventHeader."));
78 printf("DstEventHeader. found\n");
79 fRunId = fDstHeader->GetRunId();
80 }
81 // Get general info on period and exp. setup, detectors and trigger been
82 period = fSteering->GetRunAndSetupByRunId(fRunId).first;
83 setup = fSteering->GetRunAndSetupByRunId(fRunId).second;
84 nDets = fSteering->GetDetectors(period, setup)
85 .size(); // Number of detectors should be set for a certain run / setup extension
86 Int_t nTrigs = fSteering->GetTriggers(period, setup)
87 .size(); // Number of triggers should be set for a certain run / setup extension
88
89 prefix = TString::Format("RUN%d_SETUP_%s_", period, setup.Data());
90
91 // Initialize some detector geometries ...
92 fSteering->SetGeometriesByRunId(fRunId, fDetGem, fDetSilicon, fDetCsc);
93
94 // Read input arrays with det. and trig. info ...
96 TRIGGERS = new TClonesArray*[nTrigs];
97
98 for (Int_t iDet = 0; iDet < nDets; iDet++)
99 DETECTORS[iDet] = (TClonesArray*)ioman->GetObject(fSteering->GetDetectors(period, setup)[iDet].Data());
100
101 for (Int_t iTrigger = 0; iTrigger < nTrigs; iTrigger++)
102 TRIGGERS[iTrigger] = (TClonesArray*)ioman->GetObject(fSteering->GetTriggers(period, setup)[iTrigger].Data());
103
104 nCoordinate = fSteering->GetNumberOfDets(period, setup, "coordinate");
105 nTime = fSteering->GetNumberOfDets(period, setup, "time");
106 nCalorimeter = fSteering->GetNumberOfDets(period, setup, "calorimeter");
107
109 for (Int_t iDet = 0; iDet < nCoordinate; iDet++)
110 coordinate[iDet] = new BmnCoordinateDetQa(fSteering->GetDetectors(period, setup)[iDet], fRunId);
111
112 time = new BmnTimeDetQa*[nTime];
113 for (Int_t iDet = nCoordinate; iDet < nCoordinate + nTime; iDet++)
114 time[iDet - nCoordinate] = new BmnTimeDetQa(fSteering->GetDetectors(period, setup)[iDet], fRunId);
115
117 for (Int_t iDet = nCoordinate + nTime; iDet < nCoordinate + nTime + nCalorimeter; iDet++)
118 calorimeter[iDet - nCoordinate - nTime] =
119 new BmnCalorimeterDetQa(fSteering->GetDetectors(period, setup)[iDet], fRunId);
120
121 for (Int_t iDet = 0; iDet < nTrigs; iDet++)
122 fTrigCorr[TRIGGERS[iDet]] = fSteering->GetTriggers(period, setup)[iDet];
123
124 if (fTrigCorr.size() != 0)
126
127 // Dst
128 dst = new BmnDstQa(fRunId);
129
130 GeoSetup gSetup;
131 string setupTag = gSetup.GetLastApprovedSetupTag(TString::Format("run%d", period).Data());
132 Int_t res_code = gSetup.LoadSetupToGeoManager(setupTag);
133 if (res_code != 0) {
134 cout << "Geometry '" << setupTag << "' can't be loaded from the Geometry Database" << endl;
135 exit(-1);
136 }
138 isField = (*db->GetFieldVoltage() > 10.) ? kTRUE : kFALSE;
139
140 return kSUCCESS;
141}
142
144{
145 vector<TString> detectors;
146
147 // TRIGGERS are considered as a whole detector when saving to output file
148 for (Int_t iDet = 0; iDet < nDets; iDet++)
149 detectors.push_back(fSteering->GetDetectors(period, setup)[iDet]);
150 detectors.push_back("TRIGGERS");
151
152 // Fill a vector with histo managers
153 vector<BmnQaHistoManager*> managers;
154 for (Int_t iDet = 0; iDet < nCoordinate; iDet++)
155 managers.push_back(coordinate[iDet]->GetManager());
156
157 for (Int_t iDet = 0; iDet < nTime; iDet++)
158 managers.push_back(time[iDet]->GetManager());
159
160 for (Int_t iDet = 0; iDet < nCalorimeter; iDet++)
161 managers.push_back(calorimeter[iDet]->GetManager());
162
163 managers.push_back(triggers->GetManager());
164
165 TDirectory** directories = new TDirectory*[nDets + 1];
166 for (Int_t iDet = 0; iDet < nDets + 1; iDet++) {
167 directories[iDet] = ioman->GetOutFile()->mkdir(detectors[iDet].Data());
168 directories[iDet]->cd();
169 managers[iDet]->WriteToFile();
170 }
171
172 ioman->GetOutFile()->mkdir("DST")->cd();
173 dst->GetManager()->WriteToFile();
174
175 // Delete detector classes and its histo classes
176 for (Int_t iDet = 0; iDet < nCoordinate; iDet++)
177 delete coordinate[iDet];
178
179 for (Int_t iDet = 0; iDet < nTime; iDet++)
180 delete time[iDet];
181
182 for (Int_t iDet = 0; iDet < nCalorimeter; iDet++)
183 delete calorimeter[iDet];
184
185 delete triggers;
186 delete dst;
187}
188
190{
191 if (isDstRead) {
192 if (fCurrentEvent > fChainDst->GetEntries() - 1)
193 return;
194 else
195 fChainDst->GetEntry(fCurrentEvent);
196 }
198 if (fCurrentEvent % 1000 == 0)
199 cout << "Event# = " << fCurrentEvent << endl;
200
201 if (isDstRead) {
202 vector<TString> dets = {"MWPC", "SILICON", "GEM", "CSC", "TOF400", "TOF700", "DCH"};
203 vector<TClonesArray*> hits = {fMwpcHits, fSiliconHits, fGemHits, fCscHits, fTof400Hits, fTof700Hits, fDchHits};
204
205 for (size_t iDet = 0; iDet < dets.size(); iDet++)
206 for (size_t iHit = 0; iHit < dets.size(); iHit++) {
207 if (iDet != iHit)
208 continue;
209
210 doHitsDistributions(hits[iHit], dst, dets[iDet]);
211 }
212
217
218 for (auto hit : hits) {
219 doOccupancy(hit);
221 }
222 }
223
224 // Coord. dets
225 for (Int_t iDet = 0; iDet < nCoordinate; iDet++) {
226 TString detName = fSteering->GetDetectors(period, setup)[iDet];
227 TClonesArray* detData = DETECTORS[iDet];
228 BmnCoordinateDetQa* detQa = coordinate[iDet];
229
230 if (detName.Contains("GEM")) {
231 GetDistributionOfFiredStrips<BmnGemStripDigit>(detData, detQa, prefix + detName); // histos 1
232 GetDistributionOfFiredStripsVsSignal<BmnGemStripDigit>(detData, detQa, prefix + detName); // histos 2
233 } else if (detName.Contains("SILICON")) {
234 GetDistributionOfFiredStrips<BmnSiliconDigit>(detData, detQa, prefix + detName);
235 } else if (detName.Contains("CSC")) {
236 GetDistributionOfFiredStrips<BmnCSCDigit>(detData, detQa, prefix + detName);
237 }
238 }
239
240 // Time dets
241 for (Int_t iDet = nCoordinate; iDet < nCoordinate + nTime; iDet++) {
242 TString detName = fSteering->GetDetectors(period, setup)[iDet];
243 TClonesArray* detData = DETECTORS[iDet];
244 BmnTimeDetQa* detQa = time[iDet - nCoordinate];
245
246 if (detName.Contains("TOF400")) {
247 GetCommonInfo<BmnTof1Digit>(detData, detQa, prefix + detName);
248 GetTofInfo<BmnTof1Digit>(detData, detQa, prefix + detName);
249 } else if (detName.Contains("TOF700")) {
250 GetCommonInfo<BmnTof2Digit>(detData, detQa, prefix + detName);
251 GetTofInfo<BmnTof2Digit>(detData, detQa, prefix + detName);
252 } else if (detName.Contains("DCH")) {
253 GetCommonInfo<BmnDchDigit>(detData, detQa, prefix + detName);
254 GetMwpcDchInfo<BmnDchDigit>(detData, detQa, prefix + detName);
255 } else if (detName.Contains("MWPC")) {
256 GetCommonInfo<BmnMwpcDigit>(detData, detQa, prefix + detName);
257 GetMwpcDchInfo<BmnMwpcDigit>(detData, detQa, prefix + detName);
258 }
259 }
260
261 // Calorim. dets
262 for (Int_t iDet = nCoordinate + nTime; iDet < nCoordinate + nTime + nCalorimeter; iDet++) {
263 TString detName = fSteering->GetDetectors(period, setup)[iDet];
264 TClonesArray* detData = DETECTORS[iDet];
266
267 if (detName.Contains("ECAL")) {
268 GetCommonInfo<BmnECALDigit>(detData, detQa, prefix + detName);
269 } else if (detName.Contains("ZDC")) {
270 GetCommonInfo<BmnZDCDigit>(detData, detQa, prefix + detName);
271 }
272 }
273
274 // Trig. dets
275 for (auto it : fTrigCorr)
276 GetCommonInfo<BmnTrigDigit>(it.first, triggers, it.second);
277
278 if (fCurrentEvent == fChainDst->GetEntries() - 1) {
281 }
282}
283
284// Functions to be used when getting previously filled histos
285// Coordinate detectors
286
287// Histos 1
288
289template<class T>
291 BmnCoordinateDetQa* detHistoClass,
292 TString detName)
293{
294 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
295 T* dig = (T*)digiArray->UncheckedAt(iDig);
296 Int_t module = dig->GetModule();
297 Int_t station = dig->GetStation();
298 Int_t layer = dig->GetStripLayer();
299 detHistoClass->GetManager()
300 ->H1(TString::Format("%s_1d, Distribution of fired strips, Stat %d Mod %d Lay %d", detName.Data(), station,
301 module, layer))
302 ->Fill(dig->GetStripNumber());
303 }
304}
305
306// Histos 2
307
308template<class T>
310 BmnCoordinateDetQa* detHistoClass,
311 TString detName)
312{
313 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
314 T* dig = (T*)digiArray->UncheckedAt(iDig);
315 Int_t module = dig->GetModule();
316 Int_t station = dig->GetStation();
317 Int_t layer = dig->GetStripLayer();
318 detHistoClass->GetManager()
319 ->H2(TString::Format("%s_2d, Distribution of fired strips vs. signal, Stat %d Mod %d Lay %d",
320 detName.Data(), station, module, layer))
321 ->Fill(dig->GetStripNumber(), dig->GetStripSignal());
322 }
323}
324
325// Time detectors
326
327template<class T>
328void BmnQaOffline::GetCommonInfo(TClonesArray* digiArray, BmnTimeDetQa* detHistoClass, TString detName)
329{
330 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
331 T* dig = (T*)digiArray->UncheckedAt(iDig);
332 detHistoClass->GetManager()
333 ->H1(TString::Format("%s_1d, Distribution of planes", detName.Data()))
334 ->Fill(dig->GetPlane());
335 detHistoClass->GetManager()
336 ->H1(TString::Format("%s_1d, Distribution of times", detName.Data()))
337 ->Fill(dig->GetTime());
338 }
339}
340
341template<class T>
342void BmnQaOffline::GetMwpcDchInfo(TClonesArray* digiArray, BmnTimeDetQa* detHistoClass, TString detName)
343{
344 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
345 T* dig = (T*)digiArray->UncheckedAt(iDig);
346 detHistoClass->GetManager()
347 ->H1(TString::Format("%s_1d, Distribution of wires", detName.Data()))
348 ->Fill(dig->GetWireNumber());
349 }
350}
351
352template<class T>
353void BmnQaOffline::GetTofInfo(TClonesArray* digiArray, BmnTimeDetQa* detHistoClass, TString detName)
354{
355 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
356 T* dig = (T*)digiArray->UncheckedAt(iDig);
357 detHistoClass->GetManager()
358 ->H1(TString::Format("%s_1d, Distribution of strips", detName.Data()))
359 ->Fill(dig->GetStrip());
360 detHistoClass->GetManager()
361 ->H1(TString::Format("%s_1d, Distribution of amplitudes", detName.Data()))
362 ->Fill(dig->GetAmplitude());
363 }
364}
365
366// Calorim. detectors
367
368template<class T>
370{
371 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
372 T* dig = (T*)digiArray->UncheckedAt(iDig);
373 detHistoClass->GetManager()
374 ->H1(TString::Format("%s_1d, Distribution of iX", detName.Data()))
375 ->Fill(dig->GetIX());
376 detHistoClass->GetManager()
377 ->H1(TString::Format("%s_1d, Distribution of iY", detName.Data()))
378 ->Fill(dig->GetIY());
379 detHistoClass->GetManager()->H1(TString::Format("%s_1d, Distribution of X", detName.Data()))->Fill(dig->GetX());
380 detHistoClass->GetManager()->H1(TString::Format("%s_1d, Distribution of Y", detName.Data()))->Fill(dig->GetY());
381 detHistoClass->GetManager()
382 ->H1(TString::Format("%s_1d, Distribution of channels", detName.Data()))
383 ->Fill(dig->GetChannel());
384 detHistoClass->GetManager()
385 ->H1(TString::Format("%s_1d, Distribution of amplitudes", detName.Data()))
386 ->Fill(dig->GetAmp());
387 }
388}
389
390// Trigger detectors
391
392template<class T>
393void BmnQaOffline::GetCommonInfo(TClonesArray* digiArray, BmnTrigDetQa* detHistoClass, TString detName)
394{
395 for (Int_t iDig = 0; iDig < digiArray->GetEntriesFast(); iDig++) {
396 T* dig = (T*)digiArray->UncheckedAt(iDig);
397 detHistoClass->GetManager()
398 ->H1(TString::Format("%sTRIGGERS_1d, %s, Distribution of inn. channels", prefix.Data(), detName.Data()))
399 ->Fill(dig->GetMod());
400 detHistoClass->GetManager()
401 ->H1(TString::Format("%sTRIGGERS_1d, %s, Distribution of times", prefix.Data(), detName.Data()))
402 ->Fill(dig->GetTime());
403 detHistoClass->GetManager()
404 ->H1(TString::Format("%sTRIGGERS_1d, %s, Distribution of amplitudes", prefix.Data(), detName.Data()))
405 ->Fill(dig->GetAmp());
406 }
407}
408
409// Dst
410
412{
413 if (!fGlobalTracks)
414 return;
415
416 const Int_t nDims = 3;
417 TString dim[nDims] = {"X", "Y", "Z"};
418
419 dst->GetManager()
420 ->H1(Form("%sDST_1d, Distribution of total multiplicity", prefix.Data()))
421 ->Fill(fGlobalTracks->GetEntriesFast());
422
423 for (Int_t iTrack = 0; iTrack < fGlobalTracks->GetEntriesFast(); iTrack++) {
424 BmnGlobalTrack* track = (BmnGlobalTrack*)fGlobalTracks->UncheckedAt(iTrack);
425 dst->GetManager()
426 ->H1(Form("%sDST_1d, Distribution of momenta", prefix.Data()))
427 ->Fill(1. / track->GetParamFirst()->GetQp());
428 dst->GetManager()->H1(Form("%sDST_1d, Distribution of Nhits", prefix.Data()))->Fill(track->GetNHits());
429
430 FairTrackParam* parFirst = track->GetParamFirst();
431 FairTrackParam* parLast = track->GetParamLast();
432
433 Double_t xyzFirst[nDims] = {parFirst->GetX(), parFirst->GetY(), parFirst->GetZ()};
434 Double_t xyzLast[nDims] = {parLast->GetX(), parLast->GetY(), parLast->GetZ()};
435
436 Double_t txtyFirst[] = {parFirst->GetTx(), parFirst->GetTy()};
437 Double_t txtyLast[] = {parLast->GetTx(), parLast->GetTy()};
438
439 for (Int_t iDim = 0; iDim < nDims; iDim++) {
440 dst->GetManager()
441 ->H1(Form("%sDST_1d, Distribution of start%s", prefix.Data(), dim[iDim].Data()))
442 ->Fill(xyzFirst[iDim]);
443 if (!dim[iDim].Contains("Z"))
444 dst->GetManager()
445 ->H1(Form("%sDST_1d, Distribution of start T%s", prefix.Data(), dim[iDim].Data()))
446 ->Fill(txtyFirst[iDim]);
447 dst->GetManager()
448 ->H1(Form("%sDST_1d, Distribution of last%s", prefix.Data(), dim[iDim].Data()))
449 ->Fill(xyzLast[iDim]);
450 if (!dim[iDim].Contains("Z"))
451 dst->GetManager()
452 ->H1(Form("%sDST_1d, Distribution of last T%s", prefix.Data(), dim[iDim].Data()))
453 ->Fill(txtyLast[iDim]);
454 }
455 }
456
457 if (fSiliconTracks)
458 for (Int_t iTrack = 0; iTrack < fSiliconTracks->GetEntriesFast(); iTrack++) {
459 BmnSiliconTrack* track = (BmnSiliconTrack*)fSiliconTracks->UncheckedAt(iTrack);
460 dst->GetManager()
461 ->H1(Form("%sDST_1d, Distribution of Nhits, %s track", prefix.Data(), "SILICON"))
462 ->Fill(track->GetNHits());
463 }
464
465 if (fGemTracks)
466 for (Int_t iTrack = 0; iTrack < fGemTracks->GetEntriesFast(); iTrack++) {
467 BmnGemTrack* track = (BmnGemTrack*)fGemTracks->UncheckedAt(iTrack);
468 dst->GetManager()
469 ->H1(Form("%sDST_1d, Distribution of Nhits, %s track", prefix.Data(), "GEM"))
470 ->Fill(track->GetNHits());
471 }
472
473 if (fVertex)
474 dst->GetManager()
475 ->H2(Form("%sDST_2d, Vp_{z} vs. Ntracks", prefix.Data()))
476 ->Fill(fGlobalTracks->GetEntriesFast(), ((CbmVertex*)fVertex->UncheckedAt(0))->GetZ());
477}
478
479void BmnQaOffline::doHitsDistributions(TClonesArray* hitsArray, BmnDstQa* detHistoClass, TString detName)
480{
481 const Int_t nDims = 3;
482 TString dim[nDims] = {"X", "Y", "Z"};
483
484 if (!hitsArray)
485 return;
486
487 // Basic distributions: coordinates and errors (all detectors)
488 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
489 BmnHit* hit = (BmnHit*)hitsArray->UncheckedAt(iHit);
490
491 for (Int_t iDim = 0; iDim < nDims; iDim++) {
492 detHistoClass->GetManager()
493 ->H1(Form("%sDST_1d, %s, Distribution of %s", prefix.Data(), detName.Data(), dim[iDim].Data()))
494 ->Fill((iDim == 0) ? hit->GetX()
495 : (iDim == 1) ? hit->GetY()
496 : hit->GetZ());
497 if (iDim == 2)
498 continue;
499 detHistoClass->GetManager()
500 ->H1(Form("%sDST_1d, %s, Distribution of d%s", prefix.Data(), detName.Data(), dim[iDim].Data()))
501 ->Fill((iDim == 0) ? hit->GetDx() : hit->GetDy());
502 }
503 }
504
505 // Specific distributions for SILICON, GEM and CSC
506 if (detName.Contains("SILICON"))
507 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
508 BmnSiliconHit* hit = (BmnSiliconHit*)hitsArray->UncheckedAt(iHit);
509
510 detHistoClass->GetManager()
511 ->H1(Form("%sDST_1d, %s, Distribution of X cluster size", prefix.Data(), detName.Data()))
513 detHistoClass->GetManager()
514 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster size", prefix.Data(), detName.Data()))
516
517 detHistoClass->GetManager()
518 ->H1(Form("%sDST_1d, %s, Distribution of X cluster signals", prefix.Data(), detName.Data()))
520 detHistoClass->GetManager()
521 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster signals", prefix.Data(), detName.Data()))
523 }
524 else if (detName.Contains("GEM"))
525 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
526 BmnGemStripHit* hit = (BmnGemStripHit*)hitsArray->UncheckedAt(iHit);
527
528 detHistoClass->GetManager()
529 ->H1(Form("%sDST_1d, %s, Distribution of X cluster size", prefix.Data(), detName.Data()))
531 detHistoClass->GetManager()
532 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster size", prefix.Data(), detName.Data()))
534
535 detHistoClass->GetManager()
536 ->H1(Form("%sDST_1d, %s, Distribution of X cluster signals", prefix.Data(), detName.Data()))
538 detHistoClass->GetManager()
539 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster signals", prefix.Data(), detName.Data()))
541 }
542 else if (detName.Contains("CSC"))
543 for (Int_t iHit = 0; iHit < hitsArray->GetEntriesFast(); iHit++) {
544 BmnCSCHit* hit = (BmnCSCHit*)hitsArray->UncheckedAt(iHit);
545
546 detHistoClass->GetManager()
547 ->H1(Form("%sDST_1d, %s, Distribution of X cluster size", prefix.Data(), detName.Data()))
549 detHistoClass->GetManager()
550 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster size", prefix.Data(), detName.Data()))
552
553 detHistoClass->GetManager()
554 ->H1(Form("%sDST_1d, %s, Distribution of X cluster signals", prefix.Data(), detName.Data()))
556 detHistoClass->GetManager()
557 ->H1(Form("%sDST_1d, %s, Distribution of X' cluster signals", prefix.Data(), detName.Data()))
559 }
560}
561
562BmnHit* BmnQaOffline::MatchDetector(FairTrackParam* parTrack, TClonesArray* hits, Bool_t doUpdate, Int_t detNum)
563{
564 FairTrackParam minPar;
565 Double_t minDX = DBL_MAX;
566 Double_t minDY = DBL_MAX;
567 BmnHit* minHit = nullptr;
568 Double_t xCut = 5.0;
569 Double_t yCut = 5.0;
570 Int_t pdg = 2212;
571
572 Double_t minZ = DBL_MAX;
573 BmnKalmanFilter* kalman = new BmnKalmanFilter();
574
575 map<Double_t, FairTrackParam> zParamMap;
576 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
577 BmnHit* hit = (BmnHit*)hits->At(iHit);
578 if (!hit)
579 continue;
580 if (hit->GetStation() != detNum)
581 continue;
582 minZ = Min(minZ, hit->GetZ());
583 zParamMap[hit->GetZ()] = FairTrackParam();
584 }
585 FairTrackParam par(*parTrack);
586 kalman->TGeoTrackPropagate(&par, minZ, pdg, NULL, NULL, isField);
587
588 for (map<Double_t, FairTrackParam>::iterator it = zParamMap.begin(); it != zParamMap.end(); ++it) {
589 (*it).second = par;
590 kalman->TGeoTrackPropagate(&(*it).second, (*it).first, pdg, NULL, NULL, isField);
591 }
592
593 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); ++iHit) {
594 BmnHit* hit = (BmnHit*)hits->At(iHit);
595 if (!hit)
596 continue;
597 if (hit->GetStation() != detNum)
598 continue;
599 if (zParamMap.find(hit->GetZ()) == zParamMap.end()) {
600 std::cout << "-E- CbmLitNearestHitTofMerger::DoMerge: Z position " << hit->GetZ()
601 << " not found in map. Something is wrong.\n";
602 }
603 FairTrackParam tpar(zParamMap[hit->GetZ()]);
604 Double_t dX = tpar.GetX() - hit->GetX();
605 Double_t dY = tpar.GetY() - hit->GetY();
606 if (Abs(dX) < xCut && Abs(dY) < yCut && Abs(dX) < minDX && Abs(dY) < minDY) {
607 minHit = hit;
608 minDX = dX;
609 minDY = dY;
610 minPar = tpar;
611 }
612 }
613
614 *(parTrack) = par;
615
616 if (minHit) {
617 *(parTrack) = minPar;
618 if (doUpdate) {
619 Double_t chi = 0;
620 kalman->Update(parTrack, minHit, chi);
621 }
622 }
623 delete kalman;
624
625 return minHit;
626}
627
629{
630 for (Int_t iTrack = 0; iTrack < fGemTracks->GetEntriesFast(); iTrack++) {
631 BmnGemTrack* track = (BmnGemTrack*)fGemTracks->UncheckedAt(iTrack);
632
633 const Int_t ndets = 4;
634 const Int_t nSeqs = 4;
635 TString dets[ndets] = {"CSC", "DCH1", "TOF700", "DCH2"};
636 TClonesArray* detSequence[ndets][nSeqs] = {{fDchHits, fTof700Hits, fDchHits, fCscHits},
640
641 Int_t idx[ndets][nSeqs] = {{0, -1, 1, 0}, {0, -1, 1, 0}, {0, 0, 1, -1}, {0, 0, -1, 1}};
642 Bool_t doUpdate[ndets][nSeqs] = {{kTRUE, kFALSE, kTRUE, kFALSE},
644 {kTRUE, kTRUE, kTRUE, kFALSE},
645 {kTRUE, kTRUE, kFALSE, kFALSE}};
646
647 for (Int_t iDet = 0; iDet < ndets; iDet++) {
648 FairTrackParam parLast(*(track->GetParamLast()));
649 if (MatchDetector(&parLast, detSequence[iDet][0], doUpdate[iDet][0], idx[iDet][0]))
650 if (MatchDetector(&parLast, detSequence[iDet][1], doUpdate[iDet][1], idx[iDet][1]))
651 if (MatchDetector(&parLast, detSequence[iDet][2], doUpdate[iDet][2], idx[iDet][2])) {
652 BmnHit* hit = MatchDetector(&parLast, detSequence[iDet][3], doUpdate[iDet][3], idx[iDet][3]);
653 dst->GetManager()
654 ->H1(Form("%sDST_1d, hAllNo%s", prefix.Data(), dets[iDet].Data()))
655 ->Fill(1.0 / parLast.GetQp());
656 dst->GetManager()
657 ->H2(Form("%sDST_2d, hAllNo%sXY", prefix.Data(), dets[iDet].Data()))
658 ->Fill(parLast.GetX(), parLast.GetY());
659 if (hit) {
660 dst->GetManager()
661 ->H1(Form("%sDST_1d, hAllYes%s", prefix.Data(), dets[iDet].Data()))
662 ->Fill(1.0 / parLast.GetQp());
663 dst->GetManager()
664 ->H2(Form("%sDST_2d, hAllYes%sXY", prefix.Data(), dets[iDet].Data()))
665 ->Fill(parLast.GetX(), parLast.GetY());
666 }
667 }
668 }
669 }
670}
671
673{
674 const Int_t ndets = 4;
675 TString dets[ndets] = {"CSC", "DCH1", "TOF700", "DCH2"};
676
677 for (Int_t iDet = 0; iDet < ndets; iDet++) {
678 TH1F* denom1 = (TH1F*)dst->GetManager()->H1(Form("%sDST_1d, hAllNo%s", prefix.Data(), dets[iDet].Data()));
679 denom1->Sumw2();
680
681 TH1F* nom1 = (TH1F*)dst->GetManager()->H1(Form("%sDST_1d, hAllYes%s", prefix.Data(), dets[iDet].Data()));
682 nom1->Sumw2();
683
684 TH1F* eff1 = (TH1F*)dst->GetManager()->H1(Form("%sDST_1d, hEff%s", prefix.Data(), dets[iDet].Data()));
685 eff1->Divide(nom1, denom1);
686 eff1->Scale(100);
687 eff1->SetMaximum(110);
688 eff1->SetMinimum(0);
689
690 TH2F* denom2 = (TH2F*)dst->GetManager()->H2(Form("%sDST_2d, hAllNo%sXY", prefix.Data(), dets[iDet].Data()));
691 denom2->Sumw2();
692
693 TH2F* nom2 = (TH2F*)dst->GetManager()->H2(Form("%sDST_2d, hAllYes%sXY", prefix.Data(), dets[iDet].Data()));
694 nom2->Sumw2();
695
696 TH2F* eff2 = (TH2F*)dst->GetManager()->H2(Form("%sDST_2d, hEff%sXY", prefix.Data(), dets[iDet].Data()));
697 eff2->Divide(nom2, denom2);
698 }
699}
700
702{
703 const Int_t ndets = 8;
704 TString dets[ndets] = {"MWPC", "SILICON", "GEM", "CSC", "TOF400", "DCH1", "TOF700", "DCH2"};
705
706 TClonesArray* detSequence[ndets] = {fMwpcHits, fSiliconHits, fGemHits, fCscHits,
708
709 // Residuals ...
710 for (Int_t iDet = 0; iDet < ndets; iDet++) {
711 if (!detSequence[iDet])
712 continue;
713 for (Int_t iHit = 0; iHit < detSequence[iDet]->GetEntriesFast(); iHit++) {
714 BmnHit* hit = (BmnHit*)detSequence[iDet]->UncheckedAt(iHit);
715
716 if (dets[iDet].Contains("DCH")) {
717 dets[iDet] = (hit->GetStation() == 0) ? "DCH1" : "DCH2";
718 dst->GetManager()
719 ->H1(Form("%sDST_1d, hResX%s", prefix.Data(), dets[iDet].Data()))
720 ->Fill(hit->GetResX());
721 dst->GetManager()
722 ->H1(Form("%sDST_1d, hResY%s", prefix.Data(), dets[iDet].Data()))
723 ->Fill(hit->GetResY());
724 } else {
725 dst->GetManager()
726 ->H1(Form("%sDST_1d, hResX%s", prefix.Data(), dets[iDet].Data()))
727 ->Fill(hit->GetResX());
728 dst->GetManager()
729 ->H1(Form("%sDST_1d, hResY%s", prefix.Data(), dets[iDet].Data()))
730 ->Fill(hit->GetResY());
731 }
732 }
733 }
734
735 // Pulls ...
736 for (Int_t iGlob = 0; iGlob < fGlobalTracks->GetEntriesFast(); iGlob++) {
737 BmnGlobalTrack* glTrack = (BmnGlobalTrack*)fGlobalTracks->UncheckedAt(iGlob);
738
739 BmnKalmanFilter* kalman = new BmnKalmanFilter();
740 Int_t pdg = 2212;
741
742 FairTrackParam* first = glTrack->GetParamFirst(); // param. estimation
743
744 // DCH pulls ...
745 for (Int_t iHit = 0; iHit < fDchHits->GetEntriesFast(); iHit++) {
746 BmnHit* hit = (BmnHit*)fDchHits->UncheckedAt(iHit);
747
748 // BmnTrack* track = (BmnTrack*) fDchTracks->UncheckedAt(hit->GetIndex());
749
750 Double_t X = hit->GetX();
751 Double_t dX = hit->GetDx();
752
753 Double_t Y = hit->GetY();
754 Double_t dY = hit->GetDy();
755
756 FairTrackParam par(*first);
757 kalman->TGeoTrackPropagate(&par, hit->GetZ(), pdg, nullptr, nullptr, isField);
758
759 TString det = (hit->GetStation() == 0) ? "DCH1" : "DCH2";
760 dst->GetManager()->H1(Form("%sDST_1d, hPullX%s", prefix.Data(), det.Data()))->Fill(((par.GetX() - X) / dX));
761 dst->GetManager()->H1(Form("%sDST_1d, hPullY%s", prefix.Data(), det.Data()))->Fill(((par.GetY() - Y) / dY));
762 }
763
764 vector<TString> trackDets = {"MWPC", "SILICON", "GEM"};
765 vector<TClonesArray*> tracks = {fMwpcTracks, fSiliconTracks, fGemTracks};
766 vector<TClonesArray*> trackHits = {fMwpcHits, fSiliconHits, fGemHits};
767
768 for (auto detector : trackDets) {
769 if (detector.Contains("MWPC")) // FIXME
770 continue;
771
772 Int_t idx = glTrack->GetGemTrackIndex();
773 Int_t idxArr = detector.Contains("MWPC") ? 0 : detector.Contains("SILICON") ? 1 : 2;
774
775 if (idx != -1) {
776 BmnTrack* track = (BmnTrack*)tracks[idxArr]->UncheckedAt(idx);
777
778 for (Int_t iHit = 0; iHit < track->GetNHits(); iHit++) {
779 BmnHit* hit = (BmnHit*)trackHits[idxArr]->UncheckedAt(track->GetHitIndex(iHit));
780
781 Double_t X = hit->GetX();
782 Double_t dX = hit->GetDx();
783
784 Double_t Y = hit->GetY();
785 Double_t dY = hit->GetDy();
786
787 FairTrackParam par(*first);
788 kalman->TGeoTrackPropagate(&par, hit->GetZ(), pdg, nullptr, nullptr, isField);
789
790 dst->GetManager()
791 ->H1(Form("%sDST_1d, hPullX%s", prefix.Data(), detector.Data()))
792 ->Fill(((par.GetX() - X) / dX));
793 dst->GetManager()
794 ->H1(Form("%sDST_1d, hPullY%s", prefix.Data(), detector.Data()))
795 ->Fill(((par.GetY() - Y) / dY));
796 }
797 }
798 }
799
800 vector<TString> hitDets = {"CSC", "TOF400", "TOF700"};
801 vector<TClonesArray*> hits = {fCscHits, fTof400Hits, fTof700Hits};
802
803 for (auto detector : hitDets) {
804 Int_t idx = detector.Contains("TOF400") ? glTrack->GetTof1HitIndex() : glTrack->GetTof2HitIndex();
805 Int_t idxArr = detector.Contains("CSC") ? 0 : detector.Contains("TOF400") ? 1 : 2;
806
807 if (idx != -1) {
808 BmnHit* hit = (BmnHit*)hits[idxArr]->UncheckedAt(idx);
809
810 Double_t X = hit->GetX();
811 Double_t dX = hit->GetDx();
812
813 Double_t Y = hit->GetY();
814 Double_t dY = hit->GetDy();
815
816 FairTrackParam par(*first);
817 kalman->TGeoTrackPropagate(&par, hit->GetZ(), pdg, nullptr, nullptr, isField);
818
819 dst->GetManager()
820 ->H1(Form("%sDST_1d, hPullX%s", prefix.Data(), detector.Data()))
821 ->Fill(((par.GetX() - X) / dX));
822 dst->GetManager()
823 ->H1(Form("%sDST_1d, hPullY%s", prefix.Data(), detector.Data()))
824 ->Fill(((par.GetY() - Y) / dY));
825 }
826 }
827 delete kalman;
828 }
829}
830
832{
833 if (!hits)
834 return;
835
836 const Double_t zBorder = 500.; // FIXME
837 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); iHit++) {
838 BmnHit* hit = (BmnHit*)hits->UncheckedAt(iHit);
839
840 Double_t x = hit->GetX();
841 Double_t y = hit->GetY();
842 Double_t z = hit->GetZ();
843
844 TString className = (TString)hit->GetName();
845 TString detName = (className.Contains("Gem")) ? "GEM"
846 : (className.Contains("Silicon")) ? "SILICON"
847 : (className.Contains("CSC")) ? "CSC"
848 : "";
849
850 if (detName.IsNull()) {
851 if (className.Contains("Tof") && (z < zBorder))
852 detName = "TOF400";
853 else if (className.Contains("Tof") && (z > zBorder))
854 detName = "TOF700";
855 }
856
857 if (detName.Contains("GEM")) {
858 for (Int_t iStat = 0; iStat < fDetGem->GetNStations(); iStat++)
859 if (hit->GetStation() == iStat)
860 dst->GetManager()
861 ->H2(Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), detName.Data(), iStat))
862 ->Fill(x, y);
863 } else if (detName.Contains("SILICON")) {
864 for (Int_t iStat = 0; iStat < fDetSilicon->GetNStations(); iStat++)
865 if (hit->GetStation() == iStat)
866 dst->GetManager()
867 ->H2(Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), detName.Data(), iStat))
868 ->Fill(x, y);
869 } else if (detName.Contains("CSC")) {
870 for (Int_t iStat = 0; iStat < fDetCsc->GetNStations(); iStat++)
871 if (hit->GetStation() == iStat)
872 dst->GetManager()
873 ->H2(Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), detName.Data(), iStat))
874 ->Fill(x, y);
875 } else if (detName.Contains("TOF400") || detName.Contains("TOF700"))
876 dst->GetManager()->H2(Form("%sDST_2d, hOccupancy%s", prefix.Data(), detName.Data()))->Fill(x, y);
877 }
878}
879
881{
882 const Int_t ndets = 5;
883 TString dets[ndets] = {"SILICON", "GEM", "CSC", "TOF400", "TOF700"};
884
885 for (Int_t iDet = 0; iDet < ndets; iDet++) {
886 if (dets[iDet].Contains("GEM"))
887 for (Int_t iStat = 0; iStat < fDetGem->GetNStations(); iStat++)
888 changeHistoContent((TH2F*)dst->GetManager()->H2(
889 Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), dets[iDet].Data(), iStat)));
890
891 else if (dets[iDet].Contains("SILICON"))
892 for (Int_t iStat = 0; iStat < fDetSilicon->GetNStations(); iStat++)
893 changeHistoContent((TH2F*)dst->GetManager()->H2(
894 Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), dets[iDet].Data(), iStat)));
895
896 else if (dets[iDet].Contains("CSC"))
897 for (Int_t iStat = 0; iStat < fDetCsc->GetNStations(); iStat++)
898 changeHistoContent((TH2F*)dst->GetManager()->H2(
899 Form("%sDST_2d, hOccupancy%s, stat %d", prefix.Data(), dets[iDet].Data(), iStat)));
900
901 else
903 (TH2F*)dst->GetManager()->H2(Form("%sDST_2d, hOccupancy%s", prefix.Data(), dets[iDet].Data())));
904 }
905}
906
908{
909 for (Int_t iBinX = 0; iBinX < h->GetNbinsX() + 1; iBinX++)
910 for (Int_t iBinY = 1; iBinY < h->GetNbinsY() + 1; iBinY++) {
911 Double_t wX = h->GetXaxis()->GetBinWidth(iBinX);
912 Double_t wY = h->GetYaxis()->GetBinWidth(iBinY);
913 Double_t content = h->GetBinContent(iBinX, iBinY);
914
915 content /= (wX * wY * fCurrentEvent);
916 h->SetBinContent(iBinX, iBinY, content);
917 }
918}
919
921{
922 if (!hits)
923 return;
924
925 const Int_t nLayers = 2; // X and X'
926 TString layers[nLayers] = {"X", "X'"};
927
928 for (Int_t iHit = 0; iHit < hits->GetEntriesFast(); iHit++) {
929 BmnHit* hit = (BmnHit*)hits->UncheckedAt(iHit);
930
931 TString className = (TString)hit->GetName();
932 TString detName = (className.Contains("Gem")) ? "GEM"
933 : (className.Contains("Silicon")) ? "SILICON"
934 : (className.Contains("CSC")) ? "CSC"
935 : "";
936
937 if (detName.IsNull())
938 continue;
939
940 if (detName.Contains("GEM")) {
941 BmnGemStripHit* gemHit = (BmnGemStripHit*)hit;
942 dst->GetManager()
943 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
944 layers[0].Data()))
945 ->Fill(gemHit->GetClusterSizeInLowerLayer());
946 dst->GetManager()
947 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
948 layers[1].Data()))
949 ->Fill(gemHit->GetClusterSizeInUpperLayer());
950 } else if (detName.Contains("SILICON")) {
951 BmnSiliconHit* silHit = (BmnSiliconHit*)hit;
952 dst->GetManager()
953 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
954 layers[0].Data()))
955 ->Fill(silHit->GetClusterSizeInLowerLayer());
956 dst->GetManager()
957 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
958 layers[1].Data()))
959 ->Fill(silHit->GetClusterSizeInUpperLayer());
960 } else if (detName.Contains("CSC")) {
961 BmnCSCHit* cscHit = (BmnCSCHit*)hit;
962 dst->GetManager()
963 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
964 layers[0].Data()))
965 ->Fill(cscHit->GetClusterSizeInLowerLayer());
966 dst->GetManager()
967 ->H1(Form("%sDST_1d, Ave. strip value per hit in %s (%s)", prefix.Data(), detName.Data(),
968 layers[1].Data()))
969 ->Fill(cscHit->GetClusterSizeInUpperLayer());
970 }
971 }
972}
973
975{
976 if (!fGlobalTracks)
977 return;
978
979 const Int_t nLayers = 2; // X and X'
980 TString layers[nLayers] = {"X", "X'"};
981
982 vector<TString> trackDets = {"SILICON", "GEM"};
983 vector<TClonesArray*> tracks = {fSiliconTracks, fGemTracks};
984 vector<TClonesArray*> trackHits = {fSiliconHits, fGemHits};
985
986 for (Int_t iTrack = 0; iTrack < fGlobalTracks->GetEntriesFast(); iTrack++) {
987 BmnGlobalTrack* glTrack = (BmnGlobalTrack*)fGlobalTracks->UncheckedAt(iTrack);
988
989 // // Get CSC ...
990 // Int_t idxCsc = glTrack->GetCscHitIndex(0);
991 // if (idxCsc != -1) {
992 // BmnCSCHit* hit = (BmnCSCHit*)fCscHits->UncheckedAt(idxCsc);
993 // for (Int_t iLayer = 0; iLayer < nLayers; iLayer++) {
994 // dst->GetManager()
995 // ->H1(
996 // Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), "CSC",
997 // layers[0].Data()))
998 // ->Fill(hit->GetClusterSizeInLowerLayer());
999 // dst->GetManager()
1000 // ->H1(
1001 // Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), "CSC",
1002 // layers[1].Data()))
1003 // ->Fill(hit->GetClusterSizeInUpperLayer());
1004 // }
1005 // }
1006
1007 for (auto detector : trackDets) {
1008 Int_t idx = glTrack->GetGemTrackIndex();
1009 Int_t idxArr = detector.Contains("SILICON") ? 0 : 1;
1010
1011 if (idx == -1)
1012 continue;
1013
1014 BmnTrack* track = (BmnTrack*)tracks[idxArr]->UncheckedAt(idx);
1015
1016 Double_t sumLower = 0.;
1017 Double_t sumUpper = 0.;
1018
1019 if (detector.Contains("SILICON")) {
1020 for (Int_t iHit = 0; iHit < track->GetNHits(); iHit++) {
1021 BmnSiliconHit* hit = (BmnSiliconHit*)trackHits[idxArr]->UncheckedAt(track->GetHitIndex(iHit));
1022 sumLower += hit->GetClusterSizeInLowerLayer();
1023 sumUpper += hit->GetClusterSizeInUpperLayer();
1024 }
1025 for (Int_t iLayer = 0; iLayer < nLayers; iLayer++) {
1026 dst->GetManager()
1027 ->H1(Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), detector.Data(),
1028 layers[0].Data()))
1029 ->Fill(sumLower / track->GetNHits());
1030 dst->GetManager()
1031 ->H1(Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), detector.Data(),
1032 layers[1].Data()))
1033 ->Fill(sumUpper / track->GetNHits());
1034 }
1035 } else {
1036 for (Int_t iHit = 0; iHit < track->GetNHits(); iHit++) {
1037 BmnGemStripHit* hit = (BmnGemStripHit*)trackHits[idxArr]->UncheckedAt(track->GetHitIndex(iHit));
1038 sumLower += hit->GetClusterSizeInLowerLayer();
1039 sumUpper += hit->GetClusterSizeInUpperLayer();
1040 }
1041 for (Int_t iLayer = 0; iLayer < nLayers; iLayer++) {
1042 dst->GetManager()
1043 ->H1(Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), detector.Data(),
1044 layers[0].Data()))
1045 ->Fill(sumLower / track->GetNHits());
1046 dst->GetManager()
1047 ->H1(Form("%sDST_1d, Ave. strip value per track in %s (%s)", prefix.Data(), detector.Data(),
1048 layers[1].Data()))
1049 ->Fill(sumUpper / track->GetNHits());
1050 }
1051 }
1052 }
1053 }
1054}
const UInt_t dim
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
char * Form(const char *fmt,...)
Double_t GetStripTotalSignalInLowerLayer()
Strip layer characteristics of the hit (total signal, cluster size, strip position as the cluster mea...
Definition BmnCSCHit.cxx:20
Double_t GetStripTotalSignalInUpperLayer()
Definition BmnCSCHit.cxx:26
Int_t GetClusterSizeInLowerLayer()
Definition BmnCSCHit.cxx:32
Int_t GetClusterSizeInUpperLayer()
Definition BmnCSCHit.cxx:38
BmnQaHistoManager * GetManager()
BmnQaHistoManager * GetManager()
BmnQaHistoManager * GetManager()
Definition BmnDstQa.h:28
Int_t GetClusterSizeInUpperLayer()
Double_t GetStripTotalSignalInUpperLayer()
Int_t GetClusterSizeInLowerLayer()
Double_t GetStripTotalSignalInLowerLayer()
Strip layer characteristics of the hit (total signal, cluster size, strip position as the cluster mea...
BmnGlobalTrack.h.
Int_t GetTof2HitIndex() const
Int_t GetGemTrackIndex() const
Accessors.
Int_t GetTof1HitIndex() const
TH2 * H2(const TString &name) const
Return pointer to TH2 histogram.
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
Double_t GetResX()
Definition BmnHit.h:40
Double_t GetResY()
Definition BmnHit.h:41
Short_t GetStation() const
Definition BmnHit.h:35
BmnStatus TGeoTrackPropagate(FairTrackParam *par, Double_t zOut, Int_t pdg, vector< Double_t > *F, Double_t *length, Bool_t isField)
BmnStatus Update(FairTrackParam *par, const BmnHit *hit, Double_t &chiSq)
Int_t nCalorimeter
Bool_t isDstRead
TChain * fChainDst
void GetCommonInfo(TClonesArray *, BmnTimeDetQa *, TString)
TClonesArray * fGemTracks
TClonesArray ** DETECTORS
void doOccupancy(TClonesArray *)
void doResidualsPullsAnal()
void GetDistributionOfFiredStripsVsSignal(TClonesArray *, BmnCoordinateDetQa *, TString)
BmnSiliconStationSet * fDetSilicon
TClonesArray * fCscHits
BmnCSCStationSet * fDetCsc
TClonesArray * fDchTracks
void doAverageStripValuePerTrack()
virtual InitStatus Init()
BmnHit * MatchDetector(FairTrackParam *, TClonesArray *, Bool_t, Int_t)
void doHitsDistributions(TClonesArray *, BmnDstQa *, TString)
Int_t nCoordinate
Bool_t ReadDstTree(TString)
BmnEventHeader * fBmnHeader
static Int_t fCurrentEvent
void doEfficiencyAnal()
TClonesArray ** TRIGGERS
void changeHistoContent(TH2F *)
void GetDistributionOfFiredStrips(TClonesArray *, BmnCoordinateDetQa *, TString)
TClonesArray * fMwpcHits
void GetMwpcDchInfo(TClonesArray *, BmnTimeDetQa *, TString)
map< TClonesArray *, TString > fTrigCorr
TClonesArray * fSiliconTracks
virtual void Exec(Option_t *opt)
void GetTofInfo(TClonesArray *, BmnTimeDetQa *, TString)
TClonesArray * fVertex
void doMatchingAnal()
void doAverageStripValuePerHit(TClonesArray *)
TClonesArray * fTof400Hits
BmnCalorimeterDetQa ** calorimeter
void doOccupancyAnal()
BmnCoordinateDetQa ** coordinate
BmnDstQa * dst
TClonesArray * fGlobalTracks
DstEventHeader * fDstHeader
TClonesArray * fSiliconHits
BmnTimeDetQa ** time
TClonesArray * fDchHits
FairRootManager * ioman
BmnTrigDetQa * triggers
TClonesArray * fGemHits
virtual void Finish()
BmnGemStripStationSet * fDetGem
TClonesArray * fTof700Hits
TClonesArray * fMwpcTracks
void GetBasicTrackDistributions()
BmnOfflineQaSteering * fSteering
Double_t GetStripTotalSignalInLowerLayer()
Strip layer characteristics of the hit (total signal, cluster size, strip position as the cluster mea...
Double_t GetStripTotalSignalInUpperLayer()
Int_t GetClusterSizeInLowerLayer()
Int_t GetClusterSizeInUpperLayer()
BmnQaHistoManager * GetManager()
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:63
Int_t GetNHits() const
Accessors.
Definition BmnTrack.h:49
Int_t GetHitIndex(Int_t iHit) const
Definition BmnTrack.h:51
FairTrackParam * GetParamLast()
Definition BmnTrack.h:65
BmnQaHistoManager * GetManager()
CbmVertex.h.
Definition CbmVertex.h:21
GeoSetup class.
Definition GeoSetup.h:40
int LoadSetupToGeoManager(string_view setup_tag)
Load selected geometry setup from the Local Geometry Database and create gGeoManager instance.
Definition GeoSetup.cxx:512
string GetLastApprovedSetupTag(string_view tag_prefix)
Get tag for the last approved setup corresponding to the pattern.
Definition GeoSetup.cxx:122
virtual Double_t GetBinWidth(Int_t bin) const
virtual Bool_t cd()
virtual Int_t GetNbinsY() const
TAxis * GetXaxis()
virtual Int_t GetNbinsX() const
virtual void SetMaximum(Double_t maximum=-1111)
TAxis * GetYaxis()
virtual Int_t Fill(const char *name, Double_t w)
virtual void SetMinimum(Double_t minimum=-1111)
virtual Bool_t Divide(const TH1 *h1)
virtual void Scale(Double_t c1=1, Option_t *option="")
virtual void Sumw2(Bool_t flag=kTRUE)
virtual Int_t Fill(const char *namex, const char *namey, Double_t w)
void SetBinContent(Int_t bin, Double_t content) override
virtual Double_t GetBinContent(Int_t bin) const
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
TObject * UncheckedAt(Int_t i) const
const char * Data() const
Bool_t IsNull() const
static TString Format(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
UniRun.h Class for the table: run_.
Definition UniRun.h:21
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161
double * GetFieldVoltage()
get field voltage of the current run
Definition UniRun.h:121
Double_t Min(Double_t a, Double_t b)
Double_t Abs(Double_t d)