BmnRoot
Loading...
Searching...
No Matches
BmnTrackingQaExp.cxx
Go to the documentation of this file.
1
9#include "BmnTrackingQaExp.h"
10
12#include "BmnDchHit.h"
13#include "BmnDchTrack.h"
14#include "BmnEnums.h"
15#include "BmnGemStripHit.h"
16#include "BmnGlobalTrack.h"
17#include "BmnHistManager.h"
18#include "BmnMath.h"
19#include "BmnSiBTHit.h"
20#include "BmnSiliconHit.h"
21#include "BmnTofHit.h"
22#include "BmnUtils.h"
23#include "CbmBaseHit.h"
24#include "CbmStsTrack.h"
25#include "CbmVertex.h"
26#include "FairRunAna.h"
27#include "TClonesArray.h"
28#include "TF1.h"
29#include "TH1.h"
30#include "TH2F.h"
31
32#include <fstream>
33#include <iostream>
34
36using lit::Split;
37
38BmnTrackingQaExp::BmnTrackingQaExp(TString name, UInt_t periodId, BmnSetup stp)
39 : BmnQaBase(name, 1)
40 , fPeriodId(periodId)
41 , fRunId(0)
42 , fSetup(stp)
43 , fGlobalTracks(nullptr)
44 , fStsTracks(nullptr)
45 , fSiBTTracks(nullptr)
46 , fStsHits(nullptr)
47 , fGemHits(nullptr)
48 , fSilHits(nullptr)
49 , fSiBTHits(nullptr)
50 , fTof400Hits(nullptr)
51 , fTof700Hits(nullptr)
52 , fCscHits(nullptr)
53 , fDchTracks(nullptr)
54 , fDstEventHeader(nullptr)
55 ,
56 // fConfigGem(gemConf),
57 // fConfigSil(silConf),
58 // fConfigCsc(cscConf),
59 fNItersSinceUpdate(0)
60{}
61
63
65{
66 fHM = new BmnHistManager();
69 if (fMonitorMode) {
72 fTicksLastUpdate = chrono::system_clock::now();
73 } else {
74 }
76 ReadDataBranches();
77 CreateHistograms();
78 if (fMonitorMode) {
80 fReport->Register("/");
82 // fServer->SetTimer(50, kFALSE);
83 } else {
84 }
85 return kSUCCESS;
86}
87
88void BmnTrackingQaExp::Exec(Option_t* opt)
89{
90 if (fEventNo % 5000 == 0)
91 printf("EventCnt: %8d EventId: %8d RunId: %6u\n", fEventNo, fEventId, fRunId);
92 fEventNo++;
93 ProcessGlobal();
94 if (fMonitorMode) {
95 fNItersSinceUpdate++;
96 fServer->ProcessRequests();
97 chrono::time_point<chrono::system_clock> now = chrono::system_clock::now();
98 chrono::seconds time = chrono::duration_cast<chrono::seconds>(now - fTicksLastUpdate);
99 // time_t tt = chrono::system_clock::to_time_t(now);
100 // printf("\ntime %s\n", ctime(&tt));
101 if ((time > fTimeToUpdate) || (fNItersSinceUpdate > fNItersToUpdate)) {
102 fReport->CallDraw();
103 if (fVerbose)
104 printf("Draw! iters %d\n", fNItersSinceUpdate);
105 fTicksLastUpdate = now;
106 fNItersSinceUpdate = 0;
107 }
108 }
109 fPrevRunId = fRunId;
110}
111
113{
114 // fHM->WriteToFile();
115 if (!fMonitorMode) {
116 // fReport = new BmnTrackingQaExpReport(fOutName);
117 fReport->CallDraw();
119 } else
120 fReport->CallDraw();
121 // fServer->SetTimer(50, kFALSE);
122}
123
124void BmnTrackingQaExp::ReadDataBranches()
125{
126 FairRootManager* ioman = FairRootManager::Instance();
127 if (nullptr == ioman)
128 Fatal("Init", "BmnRootManager is not instantiated");
129
130 fGlobalTracks = (TClonesArray*)ioman->GetObject("BmnGlobalTrack");
131 fStsTracks = (TClonesArray*)ioman->GetObject("StsVector");
132
133 fStsHits = (TClonesArray*)ioman->GetObject("StsHit");
134
135 fTof400Hits = (TClonesArray*)ioman->GetObject("BmnTof400Hit");
136 fTof700Hits = (TClonesArray*)ioman->GetObject("BmnTof700Hit");
137 fDchTracks = (TClonesArray*)ioman->GetObject("BmnDchTrack");
138 fDstEventHeader = static_cast<DstEventHeader*>(ioman->GetObject("DstEventHeader."));
139
140 if (fInnerTrackerSetup[kSILICON]) {
141 fSilHits = (TClonesArray*)ioman->GetObject("BmnSiliconHit");
142 // fSilDetector = make_unique<BmnSiliconStationSet>(fConfigSil);
143 fSilDetector = BmnSiliconStationSet::Create(fPeriodId, fSetup);
144 fReport->AddStationSet(kSILICON, static_cast<void*>(fSilDetector.get()));
145 }
146
147 if (fInnerTrackerSetup[kGEM]) {
148 fGemHits = (TClonesArray*)ioman->GetObject("BmnGemStripHit");
149 // fGemDetector = make_unique<BmnGemStripStationSet>(fConfigGem);
150 fGemDetector = BmnGemStripStationSet::Create(fPeriodId, fSetup);
151 static_cast<BmnTrackingQaExpReport*>(fReport)->AddStationSet(kGEM, static_cast<void*>(fGemDetector.get()));
152 }
153
154 if (fInnerTrackerSetup[kCSC]) {
155 fCscHits = (TClonesArray*)ioman->GetObject("BmnCSCHit");
156 // fCscDetector = make_unique<BmnCSCStationSet>(fConfigCsc);
157 fCscDetector = BmnCSCStationSet::Create(fPeriodId, fSetup);
158 cout << fCscDetector->GetNStations() << " stations" << endl;
159 static_cast<BmnTrackingQaExpReport*>(fReport)->AddStationSet(kCSC, static_cast<void*>(fCscDetector.get()));
160 }
161
162 if (fInnerTrackerSetup[kCSC]) {
163 fVspHits = (TClonesArray*)ioman->GetObject("BmnVSPHit");
164 // fCscDetector = make_unique<BmnCSCStationSet>(fConfigCsc);
165 fVspDetector = BmnVSPStationSet::Create(fPeriodId, fSetup);
166 cout << fVspDetector->GetNStations() << " stations" << endl;
167 static_cast<BmnTrackingQaExpReport*>(fReport)->AddStationSet(kVSP, static_cast<void*>(fVspDetector.get()));
168 }
169
170 fSiBTHits = (TClonesArray*)ioman->GetObject("BmnSiBTHit");
171 fSiBTTracks = (TClonesArray*)ioman->GetObject("BmnBeamTrack");
172
173 fVertexL1 = (CbmVertex*)ioman->GetObject("PrimaryVertex.");
174
175 printf("\nBRANCHES READ\n\n");
176}
177
178void BmnTrackingQaExp::CreateHistograms()
179{
180 // Number of points distributions
181 // const Float_t minNofPoints = -0.5;
182
183 // Create number of object histograms
184 CreateH1("NGlobTr", "Number of Global tracks", "Counter", 20, 0, 20);
185 CreateH1("NInnTr", "Number of Inner tracks", "Counter", 20, 0, 20);
186
187 CreateH1("NGemHits", "Number of GEM hits", "Counter", 50, 0, 50);
188 CreateH1("NVspHits", "Number of VSP hits", "Counter", 50, 0, 50);
189 CreateH1("NSilHits", "Number of Si hits", "Counter", 50, 0, 50);
190 CreateH1("NTof400Hits", "Number of Tof400 hits", "Counter", 50, 0, 50);
191 CreateH1("NTof700Hits", "Number of Tof700 hits", "Counter", 200, 0, 200);
192 CreateH1("NsCSC1Hits", "Number of hits in small CSC1", "Counter", 50, 0, 50);
193 CreateH1("NsCSC2Hits", "Number of hits in small CSC2", "Counter", 50, 0, 50);
194 CreateH1("NsCSC3Hits", "Number of hits in small CSC3", "Counter", 50, 0, 50);
195 CreateH1("NsCSC4Hits", "Number of hits in small CSC4", "Counter", 50, 0, 50);
196 CreateH1("NlCSC5Hits", "Number of hits in 1st large CSC", "Counter", 50, 0, 50);
197 CreateH1("NlCSC6Hits", "Number of hits in 2nd large CSC", "Counter", 50, 0, 50);
198 CreateH1("NSiBTHits", "Number of SiBT hits", "Counter", 50, 0, 50);
199
200 CreateH1("VertX", "V_{x}, cm", "Counter", 200, -5.0, 5.0);
201 CreateH1("VertY", "V_{y}, cm", "Counter", 200, -5.0, 5.0);
202 CreateH1("VertZ", "V_{z}, cm", "Counter", 200, -10.0, 10.0);
203 CreateH2("VertXY", "V_{x}, cm", "V_{y}, cm", "", 200, -5.0, 5.0, 200, -5.0, 5.0);
204 CreateH2("VertZX", "V_{z}, cm", "V_{x}, cm", "", 200, -20.0, 20.0, 200, -5.0, 5.0);
205 CreateH2("VertZY", "V_{z}, cm", "V_{y}, cm", "", 200, -20.0, 20.0, 200, -5.0, 5.0);
206 CreateH2("VertX_vs_Ntracks", "Number of tracks", "V_{x}, cm", "", 20, 0, 20, 200, -5.0, 5.0);
207 CreateH2("VertY_vs_Ntracks", "Number of tracks", "V_{y}, cm", "", 20, 0, 20, 200, -5.0, 5.0);
208 CreateH2("VertZ_vs_Ntracks", "Number of tracks", "V_{z}, cm", "", 20, 0, 20, 200, -10.0, 10.0);
209 CreateH1("NtrInVertex", "Number of tracks in vertex", "Counter", 10, 0.0, 10.0);
210
211 CreateH1("Rigidity", "P/Q, GeV/c/Q", "", 200, -10.0, 10.0);
212
213 CreateH2("banana_tof400", "P_{rec}/Q, GeV/c", "#beta_{rec}", "", 200, -4, 10, 200, 0.0, 1.1);
214 CreateH2("banana_tof700", "P_{rec}/Q, GeV/c", "#beta_{rec}", "", 200, -4, 10, 200, 0.0, 1.1);
215 // SiBT
216 // all hits in Event
217 CreateH2("x_vs_y_SiBT_st0", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
218 CreateH2("x_vs_y_SiBT_st1", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
219 CreateH2("x_vs_y_SiBT_st2", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
220 // mean position of hits weighted with signals in the layers
221 CreateH2("x_vs_y_SiBT_st0_meanInEvent", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
222 CreateH2("x_vs_y_SiBT_st1_meanInEvent", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
223 CreateH2("x_vs_y_SiBT_st2_meanInEvent", "x cm", "y cm", "", 250, -5, 5, 250, -5, 5);
224 // number of hits in event for each station
225 CreateH1("NumberOfHitsInEvent_st0", "NHits", "", 20, 0, 20);
226 CreateH1("NumberOfHitsInEvent_st1", "NHits", "", 20, 0, 20);
227 CreateH1("NumberOfHitsInEvent_st2", "NHits", "", 20, 0, 20);
228 // tracks coordinates and angles
229 // CreateH2("SiBTTracks_FirstXY", "x cm", "y cm", "", 200, -10, 10, 200, -10, 10);
230 // CreateH2("SiBTTracks_LastXY", "x cm", "y cm", "", 200, -10, 10, 200, -10, 10);
231 // CreateH2("SiBTTracksFirstTx_Ty", "Tx", "Ty", "", 150, -0.1, 0.1, 150, -0.1, 0.1);
232 // CreateH2("SiBTTracksLastTx_Ty", "Tx", "Ty", "", 150, -0.1, 0.1, 150, -0.1, 0.1);
233 CreateH2("VertexX_vs_SiBTTracksX", "vertex: x cm", "sibt: x cm", "", 200, -5, 5, 200, -5, 5);
234 CreateH2("VertexY_vs_SiBTTracksY", "vertex: y cm", "sibt: y cm", "", 200, -5, 5, 200, -5, 5);
235
236 // hits residuals
237 for (Int_t iSt = 0; iSt < 9; ++iSt) {
238 CreateH1(Form("ResX_%dst", iSt), "ResX, cm", "Counter", 100, -0.5, 0.5);
239 CreateH1(Form("ResY_%dst", iSt), "ResY, cm", "Counter", 100, -0.5, 0.5);
240 }
241 if (fInnerTrackerSetup[kSILICON])
242 CreateStripHits(fSilDetector, kSILICON);
243 if (fInnerTrackerSetup[kGEM])
244 CreateStripHits(fGemDetector, kGEM);
245 if (fInnerTrackerSetup[kCSC])
246 CreateStripHits(fCscDetector, kCSC);
247 if (fInnerTrackerSetup[kVSP])
248 CreateStripHits(fVspDetector, kVSP);
251
252 printf("\nHISTOGRAMS CREATED!\n\n");
253}
254
255void BmnTrackingQaExp::ProcessGlobal()
256{
257 fRunId = fDstEventHeader->GetRunId();
258 fEventId = fDstEventHeader->GetEventId();
259 if (fRunId != fPrevRunId) {
260 printf("run id change %u -> %u\n", fPrevRunId, fRunId);
261 fHM->ResetHists();
262 }
263
264 if (fVertexL1 != nullptr) {
265 if (fVertexL1->GetNTracks() > 1) {
266 fHM->H1("VertX")->Fill(fVertexL1->GetX());
267 fHM->H1("VertY")->Fill(fVertexL1->GetY());
268 fHM->H1("VertZ")->Fill(fVertexL1->GetZ());
269 fHM->H1("VertXY")->Fill(fVertexL1->GetX(), fVertexL1->GetY());
270 fHM->H1("VertZX")->Fill(fVertexL1->GetZ(), fVertexL1->GetX());
271 fHM->H1("VertZY")->Fill(fVertexL1->GetZ(), fVertexL1->GetY());
272 fHM->H1("VertX_vs_Ntracks")->Fill(fVertexL1->GetNTracks(), fVertexL1->GetX());
273 fHM->H1("VertY_vs_Ntracks")->Fill(fVertexL1->GetNTracks(), fVertexL1->GetY());
274 fHM->H1("VertZ_vs_Ntracks")->Fill(fVertexL1->GetNTracks(), fVertexL1->GetZ());
275 fHM->H1("NtrInVertex")->Fill(fVertexL1->GetNTracks());
276 }
277 }
278
279 if (fGlobalTracks) {
280 fHM->H1("NGlobTr")->Fill(fGlobalTracks->GetEntriesFast());
281
282 for (Int_t iTrack = 0; iTrack < fGlobalTracks->GetEntriesFast(); iTrack++) {
283 BmnGlobalTrack* glTrack = (BmnGlobalTrack*)(fGlobalTracks->At(iTrack));
284 if (!glTrack)
285 continue;
286
287 FairTrackParam* pf = glTrack->GetParamFirst();
288
289 fHM->H1("Rigidity")->Fill(1.0 / pf->GetQp());
290
291 // TOF400
292 if (glTrack->GetTof1HitIndex() != -1) {
293 fHM->H2("banana_tof400")->Fill(glTrack->GetP(), glTrack->GetBeta(1));
294 }
295 // TOF700
296 if (glTrack->GetTof2HitIndex() != -1) {
297 fHM->H2("banana_tof700")->Fill(glTrack->GetP(), glTrack->GetBeta(2));
298 }
299 // CSC
300 // if (glTrack->GetCscHitIndex(0) != -1) {
301 // BmnHit* cscHit = (BmnHit*) fCscHits->At(glTrack->GetCscHitIndex(0));
302 // }
303 // DCH1
304 if (glTrack->GetDch1TrackIndex() != -1) {
305 BmnDchTrack* dchTr = (BmnDchTrack*)fDchTracks->At(glTrack->GetDch1TrackIndex());
306 if (dchTr) {
307 ;
308 }
309 }
310 // DCH2
311 if (glTrack->GetDch2TrackIndex() != -1) {
312 BmnDchTrack* dchTr = (BmnDchTrack*)fDchTracks->At(glTrack->GetDch2TrackIndex());
313 if (dchTr) {
314 ;
315 }
316 }
317 }
318 }
319
320 // SiBT
321 if (fSiBTHits) {
322 fHM->H1("NSiBTHits")->Fill(fSiBTHits->GetEntriesFast());
323 Double_t x[3] = {0};
324 Double_t y[3] = {0};
325 Double_t AllEnergy[3] = {0};
326 Double_t TotalSignal = 0;
327 Int_t siBT_station = 0;
328 Int_t NumberOfHitsInStation[3] = {0};
329 for (Int_t iSiBTHit = 0; iSiBTHit < fSiBTHits->GetEntriesFast(); ++iSiBTHit) {
330 BmnSiBTHit* hit = dynamic_cast<BmnSiBTHit*>(fSiBTHits->At(iSiBTHit));
331 siBT_station = hit->GetStation();
332
333 fHM->H2(Form("x_vs_y_SiBT_st%d", siBT_station))->Fill(hit->GetX(), hit->GetY());
334
336 x[siBT_station] += hit->GetX() * TotalSignal;
337 y[siBT_station] += hit->GetY() * TotalSignal;
338
339 NumberOfHitsInStation[siBT_station]++;
340
341 AllEnergy[siBT_station] += TotalSignal;
342 }
343 if (NumberOfHitsInStation[0] != 0)
344 fHM->H2("x_vs_y_SiBT_st0_meanInEvent")->Fill(x[0] / AllEnergy[0], y[0] / AllEnergy[0]);
345 if (NumberOfHitsInStation[1] != 0)
346 fHM->H2("x_vs_y_SiBT_st1_meanInEvent")->Fill(x[1] / AllEnergy[1], y[1] / AllEnergy[1]);
347 if (NumberOfHitsInStation[2] != 0)
348 fHM->H2("x_vs_y_SiBT_st2_meanInEvent")->Fill(x[2] / AllEnergy[2], y[2] / AllEnergy[2]);
349
350 fHM->H1("NumberOfHitsInEvent_st0")->Fill(NumberOfHitsInStation[0]);
351 fHM->H1("NumberOfHitsInEvent_st1")->Fill(NumberOfHitsInStation[1]);
352 fHM->H1("NumberOfHitsInEvent_st2")->Fill(NumberOfHitsInStation[2]);
353 }
354
355 if (fSiBTTracks) {
356 FairTrackParam* /*paramFirst, * */ paramLast;
357 for (Int_t iSiBTTrack = 0; iSiBTTrack < fSiBTTracks->GetEntriesFast(); ++iSiBTTrack) {
358 BmnTrack* track = dynamic_cast<BmnTrack*>(fSiBTTracks->At(iSiBTTrack));
359 // paramFirst = track->GetParamFirst();
360 paramLast = track->GetParamLast();
361 // fHM->H2("SiBTTracks_FirstXY")->Fill(paramFirst->GetX(), paramFirst->GetY());
362 // fHM->H2("SiBTTracks_LastXY")->Fill(paramLast->GetX(), paramLast->GetY());
363 // fHM->H2("SiBTTracksFirstTx_Ty")->Fill(paramFirst->GetTx(), paramFirst->GetTy());
364 // fHM->H2("SiBTTracksLastTx_Ty")->Fill(paramLast->GetTx(), paramLast->GetTy());
365 if (fVertexL1 != nullptr) {
366 if (fVertexL1->GetNTracks() > 1) {
367 fHM->H2("VertexX_vs_SiBTTracksX")->Fill(fVertexL1->GetX(), paramLast->GetX());
368 fHM->H2("VertexY_vs_SiBTTracksY")->Fill(fVertexL1->GetY(), paramLast->GetY());
369 }
370 }
371 }
372 }
373 if (fSilHits) {
374 fHM->H1("NSilHits")->Fill(fSilHits->GetEntriesFast());
375 FillStripHits(kSILICON, fSilHits);
376 }
377 if (fGemHits) {
378 fHM->H1("NGemHits")->Fill(fGemHits->GetEntriesFast());
379 FillStripHits(kGEM, fGemHits);
380 }
381 if (fCscHits) {
382 Int_t numberOfHits[6]{};
383 for (Int_t iHit = 0; iHit < fCscHits->GetEntriesFast(); ++iHit) {
384 BmnHit* cscHit = dynamic_cast<BmnHit*>(fCscHits->At(iHit));
385 numberOfHits[cscHit->GetStation()]++;
386 }
387 fHM->H1("NsCSC1Hits")->Fill(numberOfHits[0]);
388 fHM->H1("NsCSC2Hits")->Fill(numberOfHits[1]);
389 fHM->H1("NsCSC3Hits")->Fill(numberOfHits[2]);
390 fHM->H1("NsCSC4Hits")->Fill(numberOfHits[3]);
391 fHM->H1("NlCSC5Hits")->Fill(numberOfHits[4]);
392 fHM->H1("NlCSC6Hits")->Fill(numberOfHits[5]);
393
394 FillStripHits(kCSC, fCscHits);
395 }
396 if (fVspHits) {
397 fHM->H1("NVspHits")->Fill(fVspHits->GetEntriesFast());
398 FillStripHits(kVSP, fVspHits);
399 }
400 if (fTof400Hits) {
401 fHM->H1("NTof400Hits")->Fill(fTof400Hits->GetEntriesFast());
402 FillTofHits(fTof400Hits, kTOF1);
403 }
404 if (fTof700Hits) {
405 fHM->H1("NTof700Hits")->Fill(fTof700Hits->GetEntriesFast());
406 FillTofHits(fTof700Hits, kTOF701);
407 }
408 if (fStsTracks) {
409 fHM->H1("NInnTr")->Fill(fStsTracks->GetEntriesFast());
410 }
411}
412
414{
415 printf("ResetSiBT DST\n");
416 fHM->H2("x_vs_y_SiBT_st0")->Reset();
417 fHM->H2("x_vs_y_SiBT_st1")->Reset();
418 fHM->H2("x_vs_y_SiBT_st2")->Reset();
419 fHM->H2("x_vs_y_SiBT_st0_meanInEvent")->Reset();
420 fHM->H2("x_vs_y_SiBT_st1_meanInEvent")->Reset();
421 fHM->H2("x_vs_y_SiBT_st2_meanInEvent")->Reset();
422 // fHM->H2("SiBTTracks_LastXY")->Reset();
423 // fHM->H2("SiBTTracks_FirstXY")->Reset();
424 // fHM->H2("SiBTTracksLastTx_Ty")->Reset();
425 // fHM->H2("SiBTTracksFirstTx_Ty")->Reset();
426 fHM->H2("VertexX_vs_SiBTTracksX")->Reset();
427 fHM->H2("VertexY_vs_SiBTTracksY")->Reset();
428 fHM->H2("NumberOfHitsInEvent_st0")->Reset();
429 fHM->H2("NumberOfHitsInEvent_st1")->Reset();
430 fHM->H2("NumberOfHitsInEvent_st2")->Reset();
431}
432
434{
435 fServer->Register("/", this);
436 // TString path = "/" + fTitle + "/";
437 string path = string("/") + fName.Data() + "_cmd/";
438 string cmd = string("/") + fName.Data() + "/->ResetSiBT()";
439 string cmdTitle = path + "ResetSiBT";
440 fServer->RegisterCommand(cmdTitle.data(), cmd.data(), "button;");
441}
442
444{
445 TString detName;
447 detName = detName + "_X_Y";
448 CreateH2(detName.Data(), "x cm", "y cm", "", QA_COORD_BINS, -230, 230, QA_COORD_BINS, -200, 200);
449}
450
451void BmnTrackingQaExp::FillTofHits(TClonesArray* tof_hits, DetectorId detId)
452{
453 TString detName;
455 detName = detName + "_X_Y";
456 for (Int_t iHit = 0; iHit < tof_hits->GetEntriesFast(); ++iHit) {
457 BmnTofHit* hit = dynamic_cast<BmnTofHit*>(tof_hits->At(iHit));
458 fHM->H2(detName)->Fill(hit->GetX(), hit->GetY());
459 }
460}
Global function to define the track acceptance. Used in QA.
FairTask for tracking performance calculation.
DetectorId
@ kSILICON
@ kGEM
@ kVSP
@ kTOF1
@ kCSC
@ kTOF701
BmnSetup
Definition BmnEnums.h:89
static unique_ptr< BmnCSCStationSet > Create(Int_t period, Int_t stp=0)
static void GetSystemNameCaps(DetectorId det, TString &name)
static unique_ptr< BmnGemStripStationSet > Create(Int_t period, Int_t stp=0)
Int_t GetTof2HitIndex() const
Int_t GetDch2TrackIndex() const
Double_t GetBeta(Int_t tofID) const
Int_t GetTof1HitIndex() const
Int_t GetDch1TrackIndex() const
Histogram manager.
void ResetHists()
Reset all histograms.
TH2 * H2(const TString &name) const
Return pointer to TH2 histogram.
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
Short_t GetStation() const
Definition BmnHit.h:45
Bool_t fMonitorMode
Definition BmnQaBase.h:157
void CreateStripHits(SST &ss, DetectorId detId)
Definition BmnQaBase.h:134
Int_t fEventId
Definition BmnQaBase.h:162
void CreateH1(const string &name, const string &xTitle, const string &yTitle, Int_t nofBins, Double_t minBin, Double_t maxBin)
BmnSimulationReport * fReport
Definition BmnQaBase.h:155
void CreateH2(const string &name, const string &xTitle, const string &yTitle, const string &zTitle, Int_t nofBinsX, Double_t minBinX, Double_t maxBinX, Int_t nofBinsY, Double_t minBinY, Double_t maxBinY)
TString fOutName
Definition BmnQaBase.h:150
string fOutputDir
Definition BmnQaBase.h:153
void FillStripHits(DetectorId detId, TClonesArray *hits)
BmnHistManager * fHM
Definition BmnQaBase.h:152
UInt_t fPrevRunId
Definition BmnQaBase.h:160
THttpServer * fServer
Definition BmnQaBase.h:149
Int_t fEventNo
Definition BmnQaBase.h:161
void SetMonitorMode(const Bool_t mm)
Definition BmnReport.h:69
void CallDraw()
Definition BmnReport.h:53
void SetObjServer(THttpServer *s)
Definition BmnReport.h:70
void Register(string path)
Double_t GetStripTotalSignalInUpperLayer()
Definition BmnSiBTHit.h:52
Double_t GetStripTotalSignalInLowerLayer()
Definition BmnSiBTHit.h:48
static unique_ptr< BmnSiliconStationSet > Create(Int_t period, Int_t stp=0)
void SetHM(BmnHistManager *hm)
void Create(BmnHistManager *histManager, const string &outputDir)
Main function which creates report data.
void AddStationSet(DetectorId id, void *ss)
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:72
Double_t GetP()
Definition BmnTrack.h:80
FairTrackParam * GetParamLast()
Definition BmnTrack.h:76
Create report for tracking QA.
BmnTrackingQaExp()
Constructor.
virtual ~BmnTrackingQaExp()
Destructor.
void FillTofHits(TClonesArray *tof_hits, DetectorId detId)
virtual InitStatus Init()
Derived from FairTask.
virtual void Finish()
Derived from FairTask.
virtual void Exec(Option_t *opt)
Derived from FairTask.
void CreateTofHits(DetectorId detId)
static unique_ptr< BmnVSPStationSet > Create(Int_t period, Int_t stp=0)
Double_t GetZ() const
Definition CbmVertex.h:60
Double_t GetX() const
Definition CbmVertex.h:58
Int_t GetNTracks() const
Definition CbmVertex.h:63
Double_t GetY() const
Definition CbmVertex.h:59
UInt_t GetEventId()
void SetDefaultDrawStyle()
#define QA_COORD_BINS
Definition BmnQaBase.h:32
string FindAndReplace(const string &name, const string &oldSubstr, const string &newSubstr)
Definition BmnUtils.cxx:20
vector< string > Split(const string &name, char delimiter)
Definition BmnUtils.cxx:27