13#include "BmnGemStripHit.h"
14#include "BmnGemTrack.h"
15#include "BmnGlobalTrack.h"
16#include "BmnHistManager.h"
21#include "BmnSiliconHit.h"
22#include "BmnTrackMatch.h"
25#include "CbmBaseHit.h"
26#include "CbmGlobalTrack.h"
27#include "CbmMCTrack.h"
28#include "CbmStsTrack.h"
30#include "FairMCEventHeader.h"
31#include "FairMCPoint.h"
32#include "FairRunAna.h"
33#include "TClonesArray.h"
35#include "TFitResult.h"
48 : FairTask(
"BmnPidQA", 1)
50 , fStorageName(storageName)
60 , fVelocRangeMin(1.5e+8)
61 , fVelocRangeMax(3.2e+8)
62 , fVelocRangeBins(500)
71 , fNHitsRangeBins(500)
75 db = TDatabasePDG::Instance();
78 db->AddParticle(
"D",
"D", 1.876123928,
true, 0, 3,
"Core", 1000010020, 1000010020, 1000010020);
79 db->AddParticle(
"T",
"T", 2.809432115,
true, 0, 3,
"Core", 1000010030, 1000010030, 1000010030);
80 db->AddParticle(
"He3",
"He3", 2.809413523,
true, 0, 6,
"Core", 1000020030, 1000020030, 1000020030);
81 db->AddParticle(
"He4",
"He4", 3.728401326,
true, 0, 6,
"Core", 1000020040, 1000020040, 1000020040);
84 Int_t pdg = EnumToPdg(iSort);
85 TParticlePDG* iParticle = db->GetParticle(pdg);
86 fParticles.push_back(iParticle);
87 Double_t mass = iParticle->Mass();
88 if (fMassTable.count(mass) == 0) {
89 fMassTable.insert(pair<Double_t, string>(mass, iParticle->GetName()));
90 fPidStatistics400.insert(pair<
string, vector<Int_t>>(iParticle->GetName(), vector<Int_t>(4, 0)));
93 fPidStatistics700 = fPidStatistics400;
121 report->
Create(fHM, fOutputDir);
126 cout <<
"Name" <<
'\t' <<
"Total" <<
'\t' <<
"True" <<
'\t' <<
"False" << endl;
127 cout <<
"TOF400 stat" << endl;
128 PidStatisticsPrint400();
130 cout <<
"TOF700 stat" << endl;
131 PidStatisticsPrint700();
134void BmnPidQa::ReadDataBranches()
137 FairRootManager* ioman = FairRootManager::Instance();
138 cout <<
"ReadDataBranches()" << endl;
140 Fatal(
"Init",
"BmnRootManager is not instantiated");
142 fMCTracks = (TClonesArray*)ioman->GetObject(
"MCTrack");
143 if (NULL == fMCTracks)
144 Fatal(
"Init",
"No MCTrack array!");
146 fGlobalTracks = (TClonesArray*)ioman->GetObject(
"BmnGlobalTrack");
147 fGlobalTrackMatches = (TClonesArray*)ioman->GetObject(
"BmnGlobalTrackMatch");
149 fTof400Hits = (TClonesArray*)ioman->GetObject(
"BmnTof400Hit");
150 fTof700Hits = (TClonesArray*)ioman->GetObject(
"BmnTof700Hit");
153void BmnPidQa::CreateH1(
const string& name,
154 const string& xTitle,
155 const string& yTitle,
160 TH1F* h =
new TH1F(
name.c_str(),
string(name +
";" + xTitle +
";" + yTitle).c_str(), nofBins, minBin, maxBin);
164void BmnPidQa::CreateH2(
const string& name,
165 const string& xTitle,
166 const string& yTitle,
167 const string& zTitle,
175 TH2F* h =
new TH2F(
name.c_str(), (name +
";" + xTitle +
";" + yTitle +
";" + zTitle).c_str(), nofBinsX, minBinX,
176 maxBinX, nofBinsY, minBinY, maxBinY);
180void BmnPidQa::CreateTrackHitsHistogram(
const string& detName)
182 string type[] = {
"All",
"True",
"Fake",
"TrueOverAll",
"FakeOverAll"};
183 Double_t
min[] = {0., 0., 0., 0., 0.};
184 Double_t
max[] = {20, 20, 20, 1., 1.};
185 Int_t bins[] = {20, 20, 20, 20, 20};
186 for (Int_t
i = 0;
i < 5;
i++) {
187 string xTitle = (
i == 3 ||
i == 4) ?
"Ratio" :
"Number of hits";
188 string histName =
"hth_" + detName +
"_TrackHits_" +
type[
i];
189 CreateH1(histName.c_str(), xTitle,
"Yeild", bins[
i],
min[
i],
max[
i]);
193void BmnPidQa::CreateHistograms()
196 cout <<
"CreateHistograms()" << endl;
197 CreateH2(
"Banana-plot TOF-400",
"TOF-400 P_{rec}/q, GeV/c/e",
"Beta, c",
"N", fPRangeBins * 3, fPRangeMin,
198 fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
199 CreateH2(
"Banana-plot TOF-700",
"TOF-700 P_{rec}/q, GeV/c/e",
"Beta, c",
"N", fPRangeBins * 3, fPRangeMin,
200 fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
202 for (
auto iter = fMassTable.begin(); iter != fMassTable.end(); ++iter) {
203 string nameOfParticle = (*iter).second;
204 cout <<
"Particle name is " << nameOfParticle << endl;
209 CreateH2(
"Total velocity from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
210 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
212 CreateH2(
"Total velocity from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
213 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
217 CreateH2(
"Total time from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
218 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
220 CreateH2(
"Total time from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
221 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
224 CreateH1(
"TOF-400 total_vs_P for " + nameOfParticle,
"True total, P_{rec}/q, GeV/c/e",
"N", fPRangeBins,
225 fPRangeMin, fPRangeMax);
226 CreateH1(
"TOF-700 total_vs_P for " + nameOfParticle,
"True total, P_{rec}/q, GeV/c",
"N", fPRangeBins,
227 fPRangeMin, fPRangeMax);
229 CreateH1(
"TOF-400 true_vs_P for " + nameOfParticle,
"Pid hits, P_{rec}/q, GeV/c/e",
"N", fPRangeBins,
230 fPRangeMin, fPRangeMax);
231 CreateH1(
"TOF-700 true_vs_P for " + nameOfParticle,
"Pid hits, P_{rec}/q, GeV/c/e",
"N", fPRangeBins,
232 fPRangeMin, fPRangeMax);
234 CreateH1(
"TOF-400 false_vs_P for " + nameOfParticle,
"Pid miss, P_{rec}/q, GeV/c/e",
"N", fPRangeBins,
235 fPRangeMin, fPRangeMax);
236 CreateH1(
"TOF-700 false_vs_P for " + nameOfParticle,
"Pid miss, P_{rec}/q, GeV/c/e",
"N", fPRangeBins,
237 fPRangeMin, fPRangeMax);
239 CreateH1(
"TOF-400 true-false_vs_P for " + nameOfParticle,
"Contamination, P_{rec}/q, GeV/c/e",
"tof400, %",
240 fPRangeBins, fPRangeMin, fPRangeMax);
241 CreateH1(
"TOF-700 true-false_vs_P for " + nameOfParticle,
"Contamination, P_{rec}/q, GeV/c/e",
"tof700, %",
242 fPRangeBins, fPRangeMin, fPRangeMax);
247 CreateH2(
"True velocity from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
248 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
250 CreateH2(
"True velocity from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
251 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
253 CreateH2(
"False velocity from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
254 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
256 CreateH2(
"False velocity from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Velocity, m/s",
257 "N", fPRangeBins * 3, fPRangeMin, fPRangeMax, fVelocRangeBins, fVelocRangeMin, fVelocRangeMax);
261 CreateH2(
"True time from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
262 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
264 CreateH2(
"True time from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
265 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
267 CreateH2(
"False time from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
268 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
270 CreateH2(
"False time from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Time, ns",
"N",
271 fPRangeBins * 3, fPRangeMin, fPRangeMax, fTimeRangeBins, fTimeRangeMin, fTimeRangeMax);
275 fMassRangeMax = (*iter).first * (*iter).first * 3;
277 CreateH2(
"Total mass^2 from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
278 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
280 CreateH2(
"Total mass^2 from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
281 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
283 CreateH2(
"True mass^2 from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
284 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
286 CreateH2(
"True mass^2 from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
287 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
289 CreateH2(
"False mass^2 from P TOF-400 for " + nameOfParticle,
"TOF-400 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
290 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
292 CreateH2(
"False mass^2 from P TOF-700 for " + nameOfParticle,
"TOF-700 P_{rec}/q, GeV/c/e",
"Mass, GeV^2",
"N",
293 fPRangeBins * 3, fPRangeMin, fPRangeMax, fMassRangeBins, fMassRangeMin, fMassRangeMax);
295 CreateH2(
"TOF-400 total rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{total}",
296 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
297 CreateH2(
"TOF-700 total rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{total}",
298 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
299 CreateH2(
"TOF-400 true rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{true}",
300 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
301 CreateH2(
"TOF-700 true rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{true}",
302 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
303 CreateH2(
"TOF-400 false rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{false}",
304 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
305 CreateH2(
"TOF-700 false rigidity-momentum for " + nameOfParticle,
"P_{rec}/q, GeV/c/e",
"Beta, c",
"N_{false}",
306 fPRangeBins * 3, fPRangeMin, fPRangeMax, fBetaRangeBins * 2, fBetaRangeMin, fBetaRangeMax);
325 CreateH1(
"TOF-400 total_vs_NOfHits for " + nameOfParticle,
"True total, N_{of hits}",
"N", fNHitsRangeBins,
326 fNHitsRangeMin, fNHitsRangeMax);
327 CreateH1(
"TOF-700 total_vs_NOfHits for " + nameOfParticle,
"True total, N_{of hits}",
"N", fNHitsRangeBins,
328 fNHitsRangeMin, fNHitsRangeMax);
330 CreateH1(
"TOF-400 true_vs_NOfHits for " + nameOfParticle,
"Pid hits, N_{of hits}",
"N", fNHitsRangeBins,
331 fNHitsRangeMin, fNHitsRangeMax);
332 CreateH1(
"TOF-700 true_vs_NOfHits for " + nameOfParticle,
"Pid hits, N_{of hits}",
"N", fNHitsRangeBins,
333 fNHitsRangeMin, fNHitsRangeMax);
335 CreateH1(
"TOF-400 false_vs_NOfHits for " + nameOfParticle,
"Pid miss, N_{of hits}",
"N", fNHitsRangeBins,
336 fNHitsRangeMin, fNHitsRangeMax);
337 CreateH1(
"TOF-700 false_vs_NOfHits for " + nameOfParticle,
"Pid miss, N_{of hits}",
"N", fNHitsRangeBins,
338 fNHitsRangeMin, fNHitsRangeMax);
340 CreateH1(
"TOF-400 true-false_vs_NOfHits for " + nameOfParticle,
"Contamination, N_{of hits}",
"tof400, %",
341 fNHitsRangeBins, fNHitsRangeMin, fNHitsRangeMax);
342 CreateH1(
"TOF-700 true-false_vs_NOfHits for " + nameOfParticle,
"Contamination, N_{of hits}",
"tof700, %",
343 fNHitsRangeBins, fNHitsRangeMin, fNHitsRangeMax);
347void BmnPidQa::ProcessGlobal()
349 for (Int_t iTrack = 0; iTrack < fGlobalTracks->GetEntriesFast(); iTrack++) {
356 if (glTrack->
GetBeta(1) > -999.0)
357 fHM->
H2(
"Banana-plot TOF-400")->Fill(glTrack->
GetP(), glTrack->
GetBeta(1));
359 if (glTrack->
GetBeta(2) > -999.0)
360 fHM->
H2(
"Banana-plot TOF-700")->Fill(glTrack->
GetP(), glTrack->
GetBeta(2));
382 Double_t velocity(0);
387 if ((glTrack->
GetBeta(1) > -999.0)) {
391 Double_t mass = glTrack->
GetMass2(1);
393 if (indexTOF400 != -1) {
396 time = (hit->GetTimeStamp());
397 velocity = length * 1e+7 / time;
401 Double_t p = glTrack->
GetP();
402 Int_t nOfHits = glTrack->
GetNHits();
403 Double_t beta = glTrack->
GetBeta(1);
406 if ((mcParticle == 0) || (recoParticle == 0))
408 Double_t recoMass = recoParticle->Mass();
409 Double_t mcMass = mcParticle->Mass();
410 string recoName = GetParticleName(recoMass);
411 string mcName = GetParticleName(mcMass);
422 if (abs(mcMass - recoMass) < 0.000001) {
423 if (fMassTable.count(mcMass) != 0) {
424 ++fPidStatistics400[mcName][1];
425 fHM->
H1(
"TOF-400 true_vs_P for " + mcName)->Fill(p);
426 fHM->
H1(
"TOF-400 true_vs_NOfHits for " + mcName)->Fill(nOfHits);
427 fHM->
H2(
"TOF-400 true rigidity-momentum for " + mcName)->Fill(p, beta);
428 if (indexTOF400 != -1) {
429 fHM->
H2(
"True velocity from P TOF-400 for " + mcName)->Fill(p, velocity);
430 fHM->
H2(
"True time from P TOF-400 for " + mcName)->Fill(p, time);
431 fHM->
H2(
"True mass^2 from P TOF-400 for " + mcName)->Fill(p, mass);
435 if (fMassTable.count(recoMass) != 0) {
436 ++fPidStatistics400[recoName][2];
437 fHM->
H1(
"TOF-400 false_vs_P for " + recoName)->Fill(p);
438 fHM->
H1(
"TOF-400 false_vs_NOfHits for " + recoName)->Fill(nOfHits);
439 fHM->
H2(
"TOF-400 false rigidity-momentum for " + recoName)->Fill(p, beta);
440 if (indexTOF400 != -1) {
441 fHM->
H2(
"False velocity from P TOF-400 for " + recoName)->Fill(p, velocity);
442 fHM->
H2(
"False time from P TOF-400 for " + recoName)->Fill(p, time);
443 fHM->
H2(
"False mass^2 from P TOF-400 for " + recoName)->Fill(p, mass);
447 if (fMassTable.count(mcMass) != 0) {
448 ++fPidStatistics400[mcName][0];
449 fHM->
H1(
"TOF-400 total_vs_P for " + mcName)->Fill(p);
450 fHM->
H1(
"TOF-400 total_vs_NOfHits for " + mcName)->Fill(nOfHits);
451 fHM->
H2(
"TOF-400 total rigidity-momentum for " + mcName)->Fill(p, beta);
452 if (indexTOF400 != -1) {
453 fHM->
H2(
"Total velocity from P TOF-400 for " + mcName)->Fill(p, velocity);
454 fHM->
H2(
"Total time from P TOF-400 for " + mcName)->Fill(p, time);
455 fHM->
H2(
"Total mass^2 from P TOF-400 for " + mcName)->Fill(p, mass);
462 if ((glTrack->
GetBeta(2) > -999.0)) {
465 Double_t mass = glTrack->
GetMass2(2);
468 if (indexTOF700 != -1) {
471 time = (hit->GetTimeStamp());
472 velocity = length * 1e+7 / time;
476 Double_t p = glTrack->
GetP();
477 Int_t nOfHits = glTrack->
GetNHits();
478 Double_t beta = glTrack->
GetBeta(2);
481 if ((mcParticle == 0) || (recoParticle == 0))
483 Double_t recoMass = recoParticle->Mass();
484 Double_t mcMass = mcParticle->Mass();
485 string recoName = GetParticleName(recoMass);
486 string mcName = GetParticleName(mcMass);
495 if (abs(mcMass - recoMass) < 0.000001) {
496 if (fMassTable.count(mcMass) != 0) {
497 ++fPidStatistics700[mcName][1];
498 fHM->
H1(
"TOF-700 true_vs_P for " + mcName)->Fill(p);
499 fHM->
H1(
"TOF-700 true_vs_NOfHits for " + mcName)->Fill(nOfHits);
500 fHM->
H2(
"TOF-700 true rigidity-momentum for " + mcName)->Fill(p, beta);
501 if (indexTOF700 != -1) {
502 fHM->
H2(
"True velocity from P TOF-700 for " + mcName)->Fill(p, velocity);
503 fHM->
H2(
"True time from P TOF-700 for " + mcName)->Fill(p, time);
504 fHM->
H2(
"True mass^2 from P TOF-700 for " + mcName)->Fill(p, mass);
508 if (fMassTable.count(recoMass) != 0) {
509 ++fPidStatistics700[recoName][2];
510 fHM->
H1(
"TOF-700 false_vs_P for " + recoName)->Fill(p);
511 fHM->
H1(
"TOF-700 false_vs_NOfHits for " + recoName)->Fill(nOfHits);
512 fHM->
H2(
"TOF-700 false rigidity-momentum for " + recoName)->Fill(p, beta);
513 if (indexTOF700 != -1) {
514 fHM->
H2(
"False velocity from P TOF-700 for " + recoName)->Fill(p, velocity);
515 fHM->
H2(
"False time from P TOF-700 for " + recoName)->Fill(p, time);
516 fHM->
H2(
"False mass^2 from P TOF-700 for " + recoName)->Fill(p, mass);
520 if (fMassTable.count(mcMass) != 0) {
521 ++fPidStatistics700[mcName][0];
522 fHM->
H1(
"TOF-700 total_vs_P for " + mcName)->Fill(p);
523 fHM->
H1(
"TOF-700 total_vs_NOfHits for " + mcName)->Fill(nOfHits);
524 fHM->
H2(
"TOF-700 total rigidity-momentum for " + (mcName))->Fill(p, beta);
525 if (indexTOF700 != -1) {
526 fHM->
H2(
"Total velocity from P TOF-700 for " + mcName)->Fill(p, velocity);
527 fHM->
H2(
"Total time from P TOF-700 for " + mcName)->Fill(p, time);
528 fHM->
H2(
"Total mass^2 from P TOF-700 for " + mcName)->Fill(p, mass);
555 cout <<
"No such particle in PidParticles\n";
562 for (
auto sort = fParticles.begin(); sort != fParticles.end(); ++sort) {
563 if ((*sort)->PdgCode() == pdgCode)
567 return db->GetParticle(pdgCode);
570string BmnPidQa::GetParticleName(Double_t mass)
572 for (
auto iter = fMassTable.begin(); iter != fMassTable.end(); ++iter) {
573 Double_t tableMass = iter->first;
574 if (abs(tableMass - mass) < 0.000001)
580void BmnPidQa::MassTablePrint()
582 for (
auto iter = fMassTable.begin(); iter != fMassTable.end(); ++iter) {
583 cout << iter->first <<
": " << iter->second <<
" " << endl;
586void BmnPidQa::PidStatisticsPrint400()
588 for (
auto iter = fPidStatistics400.begin(); iter != fPidStatistics400.end(); ++iter)
589 cout << iter->first <<
" " << iter->second[0] <<
" " << iter->second[1] <<
" " << iter->second[2] << endl;
591void BmnPidQa::PidStatisticsPrint700()
593 for (
auto iter = fPidStatistics700.begin(); iter != fPidStatistics700.end(); ++iter)
594 cout << iter->first <<
" " << iter->second[0] <<
" " << iter->second[1] <<
" " << iter->second[2] << endl;
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Global function to define the track acceptance. Used in QA.
Create report for tracking QA.
FairTask for pid performance calculation.
Double_t GetMass2(Int_t tofID)
Int_t GetTof2HitIndex() const
PidParticles GetParticleTof400()
Double_t GetBeta(Int_t tofID) const
PidParticles GetParticleTof700()
Int_t GetTof1HitIndex() const
void Add(const TString &name, TNamed *object)
Add new named object to manager.
TH2 * H2(const TString &name) const
Return pointer to TH2 histogram.
void WriteToFile()
Write all histograms to current opened file.
TH1 * H1(const TString &name) const
Return pointer to TH1 histogram.
const BmnLink & GetMatchedLink() const
Int_t GetNofLinks() const
Create report for pid QA.
virtual ~BmnPidQa()
Destructor.
virtual void Finish()
Derived from FairTask.
virtual InitStatus Init()
Derived from FairTask.
Bool_t GetOnlyPrimes() const
TParticlePDG * GetParticleExtend(Int_t pdgCode)
virtual void Exec(Option_t *opt)
Derived from FairTask.
Base class for simulation reports.
void Create(BmnHistManager *histManager, const string &outputDir)
Main function which creates report data.
void SetOnlyPrimes(const Bool_t prime)
Int_t GetMotherId() const
string FindAndReplace(const string &name, const string &oldSubstr, const string &newSubstr)
vector< string > Split(const string &name, char delimiter)