30 #include "FairRuntimeDb.h"
53 pair<set<Int_t>, set<Int_t>>*
sts;
54 pair<set<Int_t>, set<Int_t>>*
much;
55 pair<set<Int_t>, set<Int_t>>*
trd;
56 pair<set<Int_t>, set<Int_t>>
tof;
80 : sts(nofStsStations > 0 ? new pair<set<Int_t>, set<Int_t>>[nofStsStations]
82 , much(nofMuchStations > 0
83 ? new pair<set<Int_t>, set<Int_t>>[nofMuchStations]
85 , trd(nofTrdStations > 0 ? new pair<set<Int_t>, set<Int_t>>[nofTrdStations]
88 , stsPoints(nofStsStations > 0 ? new set<const
CbmStsPoint*>[nofStsStations]
91 nofMuchStations > 0 ? new set<const
CbmMuchPoint*>[nofMuchStations] : 0)
92 , trdPoints(nofTrdStations > 0 ? new set<const
CbmTrdPoint*>[nofTrdStations]
96 , nearestHitDistSts(nofStsStations > 0 ? new Double_t[nofStsStations] : 0)
97 , nearestHitDistMuch(nofMuchStations > 0 ? new Double_t[nofMuchStations]
99 , nearestHitDistTrd(nofTrdStations > 0 ? new Double_t[nofTrdStations] : 0)
101 nofStsStations > 0 ? new const
CbmStsPoint*[nofStsStations] : 0)
103 nofMuchStations > 0 ? new const
CbmMuchPoint*[nofMuchStations] : 0)
105 nofTrdStations > 0 ? new const
CbmTrdPoint*[nofTrdStations] : 0)
106 , pullXsts(nofStsStations > 0 ? new Double_t[nofStsStations] : 0)
107 , pullYsts(nofStsStations > 0 ? new Double_t[nofStsStations] : 0)
108 , pullXmuch(nofMuchStations > 0 ? new Double_t[nofMuchStations] : 0)
109 , pullYmuch(nofMuchStations > 0 ? new Double_t[nofMuchStations] : 0)
110 , pullXtrd(nofTrdStations > 0 ? new Double_t[nofTrdStations] : 0)
111 , pullYtrd(nofTrdStations > 0 ? new Double_t[nofTrdStations] : 0)
114 , isReconstructed(false) {
115 fill_n(nearestHitDistSts, nofStsStations, -1);
116 fill_n(nearestHitDistMuch, nofMuchStations, -1);
117 fill_n(nearestHitDistTrd, nofTrdStations, -1);
119 nearestPointsSts, nofStsStations,
static_cast<const CbmStsPoint*
>(0));
121 nearestPointsMuch, nofMuchStations,
static_cast<const CbmMuchPoint*
>(0));
123 nearestPointsTrd, nofTrdStations,
static_cast<const CbmTrdPoint*
>(0));
124 fill_n(pullXsts, nofStsStations, 0);
125 fill_n(pullYsts, nofStsStations, 0);
126 fill_n(pullXmuch, nofMuchStations, 0);
127 fill_n(pullYmuch, nofMuchStations, 0);
128 fill_n(pullXtrd, nofTrdStations, 0);
129 fill_n(pullYtrd, nofTrdStations, 0);
139 delete[] nearestHitDistSts;
140 delete[] nearestHitDistMuch;
141 delete[] nearestHitDistTrd;
142 delete[] nearestPointsSts;
143 delete[] nearestPointsMuch;
144 delete[] nearestPointsTrd;
236 #ifdef CBM_BINNED_QA_FILL_HISTOS
237 static TH1F* stsXResHisto = 0;
238 static TH1F* stsYResHisto = 0;
239 static TH1F* stsTResHisto = 0;
240 static TH1F* trdXResHisto = 0;
241 static TH1F* trdYResHisto = 0;
242 static TH1F* trdTResHisto = 0;
243 static TH1F* muchXResHisto = 0;
244 static TH1F* muchYResHisto = 0;
245 static TH1F* muchTResHisto = 0;
246 static TH1F* tofXResHisto = 0;
247 static TH1F* tofYResHisto = 0;
248 static TH1F* tofTResHisto = 0;
250 static TH1F* stsXPullHistos[] = {0, 0};
251 static TH1F* stsYPullHistos[] = {0, 0};
253 static TH1F* trdXPullHistos[] = {0, 0, 0, 0};
254 static TH1F* trdYPullHistos[] = {0, 0, 0, 0};
256 static TH1F* extrStsXHisto = 0;
257 static TH1F* extrStsYHisto = 0;
259 static TH1F* vtxXHisto = 0;
260 static TH1F* vtxYHisto = 0;
261 static TH1F* vtxZHisto = 0;
263 static TH1F* extrTrdXHistos[] = {0, 0, 0, 0};
264 static TH1F* extrTrdYHistos[] = {0, 0, 0, 0};
266 static TH1F* trdNearestHitDistHistos[] = {0, 0, 0, 0};
267 #endif //CBM_BINNED_QA_FILL_HISTOS
274 : fPrimaryParticleIds()
275 , fIsOnlyPrimary(false)
289 , fTofHitDigiMatches(0)
290 , fTofDigiPointMatches(0)
330 new TProfile(
"effByMom",
331 "Track reconstruction efficiency by momentum distribution %",
336 "Track reconstruction efficiency by momentum "
337 "distribution for primary tracks %",
342 new TProfile(
"effByMomNonPrimary",
343 "Track reconstruction efficiency by momentum distribution for "
344 "non primary tracks %",
351 "Track reconstruction efficiency by polar angle distribution %",
356 new TProfile(
"effByPolarAnglePrimary",
357 "Track reconstruction efficiency by polar angle distribution "
358 "for primary tracks %",
363 new TProfile(
"effByPolarAngleNonPrimary",
364 "Track reconstruction efficiency by polar angle distribution "
365 "for non primary tracks %",
371 new TProfile(
"effByXAngle",
372 "Track reconstruction efficiency by XZ angle distribution %",
377 "Track reconstruction efficiency by XZ "
378 "angle distribution for primary tracks %",
383 new TProfile(
"effByXAngleNonPrimary",
384 "Track reconstruction efficiency by XZ angle distribution for "
385 "non primary tracks %",
391 new TProfile(
"effByYAngle",
392 "Track reconstruction efficiency by YZ angle distribution %",
397 "Track reconstruction efficiency by YZ "
398 "angle distribution for primary tracks %",
403 new TProfile(
"effByYAngleNonPrimary",
404 "Track reconstruction efficiency by YZ angle distribution for "
405 "non primary tracks %",
411 "lambdaChildrenMoms",
"Lambda children momenta distribution", 100, 0., 10.);
413 new TProfile(
"lambdaChildrenEffByMom",
414 "Track reconstruction for Lambda children efficiency by "
415 "momentum distribution %",
420 new TH1F(
"clonesNofSameHits",
421 "The number of hits which are the same for a clone track",
427 new TH1F(
"muchHitResidualX",
"muchHitResidualX", 100, -5.0, 5.0);
429 new TH1F(
"muchHitResidualY",
"muchHitResidualY", 100, -5.0, 5.0);
431 new TH1F(
"muchHitResidualT",
"muchHitResidualT", 100, -20.0, 20.0);
432 muchHitPullX =
new TH1F(
"muchHitPullX",
"muchHitPullX", 100, -5.0, 5.0);
433 muchHitPullY =
new TH1F(
"muchHitPullY",
"muchHitPullY", 100, -5.0, 5.0);
434 muchHitPullT =
new TH1F(
"muchHitPullT",
"muchHitPullT", 100, -5.0, 5.0);
437 "stsTrackResidualFirstX",
"stsTrackResidualFirstX", 100, -0.1, 0.1);
439 "stsTrackResidualFirstY",
"stsTrackResidualFirstY", 100, -0.1, 0.1);
441 new TH1F(
"stsTrackPullFirstX",
"stsTrackPullFirstX", 100, -5.0, 5.0);
443 new TH1F(
"stsTrackPullFirstY",
"stsTrackPullFirstY", 100, -5.0, 5.0);
445 new TH1F(
"stsTrackResidualLastX",
"stsTrackResidualLastX", 100, -0.1, 0.1);
447 new TH1F(
"stsTrackResidualLastY",
"stsTrackResidualLastY", 100, -0.1, 0.1);
449 new TH1F(
"stsTrackPullLastX",
"stsTrackPullLastX", 100, -5.0, 5.0);
451 new TH1F(
"stsTrackPullLastY",
"stsTrackPullLastY", 100, -5.0, 5.0);
454 "muchTrackResidualFirstX",
"muchTrackResidualFirstX", 100, -5.0, 5.0);
456 "muchTrackResidualFirstY",
"muchTrackResidualFirstY", 100, -5.0, 5.0);
458 new TH1F(
"muchTrackPullFirstX",
"muchTrackPullFirstX", 100, -10.0, 10.0);
460 new TH1F(
"muchTrackPullFirstY",
"muchTrackPullFirstY", 100, -10.0, 10.0);
462 "muchTrackResidualLastX",
"muchTrackResidualLastX", 100, -5.0, 5.0);
464 "muchTrackResidualLastY",
"muchTrackResidualLastY", 100, -5.0, 5.0);
466 new TH1F(
"muchTrackPullLastX",
"muchTrackPullLastX", 100, -10.0, 10.0);
468 new TH1F(
"muchTrackPullLastY",
"muchTrackPullLastY", 100, -10.0, 10.0);
471 "trdTrackResidualFirstX",
"trdTrackResidualFirstX", 100, -10.0, 10.0);
473 "trdTrackResidualFirstY",
"trdTrackResidualFirstY", 100, -10.0, 10.0);
475 new TH1F(
"trdTrackPullFirstX",
"trdTrackPullFirstX", 100, -5.0, 5.0);
477 new TH1F(
"trdTrackPullFirstY",
"trdTrackPullFirstY", 100, -5.0, 5.0);
479 "trdTrackResidualLastX",
"trdTrackResidualLastX", 100, -10.0, 10.0);
481 "trdTrackResidualLastY",
"trdTrackResidualLastY", 100, -10.0, 10.0);
483 new TH1F(
"trdTrackPullLastX",
"trdTrackPullLastX", 100, -5.0, 5.0);
485 new TH1F(
"trdTrackPullLastY",
"trdTrackPullLastY", 100, -5.0, 5.0);
488 "globalTrackResidualFirstX",
"globalTrackResidualFirstX", 100, -0.2, 0.2);
490 "globalTrackResidualFirstY",
"globalTrackResidualFirstY", 100, -0.2, 0.2);
492 new TH1F(
"globalTrackPullFirstX",
"globalTrackPullFirstX", 100, -5.0, 5.0);
494 new TH1F(
"globalTrackPullFirstY",
"globalTrackPullFirstY", 100, -5.0, 5.0);
496 "globalTrackResidualLastX",
"globalTrackResidualLastX", 100, -1.5, 1.5);
498 "globalTrackResidualLastY",
"globalTrackResidualLastY", 100, -1.5, 1.5);
500 new TH1F(
"globalTrackPullLastX",
"globalTrackPullLastX", 100, -5.0, 5.0);
502 new TH1F(
"globalTrackPullLastY",
"globalTrackPullLastY", 100, -5.0, 5.0);
504 #ifdef CBM_BINNED_QA_FILL_HISTOS
505 stsXResHisto =
new TH1F(
"stsXResHisto",
"stsXResHisto", 200, -0.1, 0.1);
506 stsYResHisto =
new TH1F(
"stsYResHisto",
"stsYResHisto", 200, -0.1, 0.1);
507 stsTResHisto =
new TH1F(
"stsTResHisto",
"stsTResHisto", 200, -10.0, 10.0);
508 trdXResHisto =
new TH1F(
"trdXResHisto",
"trdXResHisto", 600, -60.0, 60.0);
509 trdYResHisto =
new TH1F(
"trdYResHisto",
"trdYResHisto", 600, -60.0, 60.0);
510 trdTResHisto =
new TH1F(
"trdTResHisto",
"trdTResHisto", 200, -10.0, 10.0);
511 muchXResHisto =
new TH1F(
"muchXResHisto",
"muchXResHisto", 200, -3.0, 3.0);
512 muchYResHisto =
new TH1F(
"muchYResHisto",
"muchYResHisto", 200, -3.0, 3.0);
513 muchTResHisto =
new TH1F(
"muchTResHisto",
"muchTResHisto", 200, -10.0, 100.0);
514 tofXResHisto =
new TH1F(
"tofXResHisto",
"tofXResHisto", 200, -3.0, 3.0);
515 tofYResHisto =
new TH1F(
"tofYResHisto",
"tofYResHisto", 200, -3.0, 3.0);
516 tofTResHisto =
new TH1F(
"tofTResHisto",
"tofTResHisto", 200, -10.0, 10.0);
518 extrStsXHisto =
new TH1F(
"extrStsXHisto",
"extrStsXHisto", 200, -0.5, 0.5);
519 extrStsYHisto =
new TH1F(
"extrStsYHisto",
"extrStsYHisto", 200, -0.5, 0.5);
521 vtxXHisto =
new TH1F(
"vtxXHisto",
"vtxXHisto", 100, -0.5, 0.5);
522 vtxYHisto =
new TH1F(
"vtxYHisto",
"vtxYHisto", 100, -0.5, 0.5);
523 vtxZHisto =
new TH1F(
"vtxZHisto",
"vtxZHisto", 100, -0.5, 0.5);
525 for (
int i = 0;
i < 2; ++
i) {
527 sprintf(name,
"stsXPullHistos_%d",
i);
529 stsXPullHistos[
i] =
new TH1F(name, name, 200, -range, range);
530 sprintf(name,
"stsYPullHistos_%d",
i);
531 stsYPullHistos[
i] =
new TH1F(name, name, 200, -range, range);
534 for (
int i = 0;
i < 4; ++
i) {
536 sprintf(name,
"extrTrdXHisto_%d",
i);
537 extrTrdXHistos[
i] =
new TH1F(name, name, 200, 0.5, 0.5);
538 sprintf(name,
"extrTrdYHisto_%d",
i);
539 extrTrdYHistos[
i] =
new TH1F(name, name, 200, 0.5, 0.5);
541 sprintf(name,
"trdNearestHitDistHistos_%d",
i);
542 trdNearestHitDistHistos[
i] =
new TH1F(name, name, 200, -100, 100);
544 sprintf(name,
"trdXPullHistos_%d",
i);
545 Double_t range =
i % 2 ? 5 : 25;
546 trdXPullHistos[
i] =
new TH1F(name, name, 200, -range, range);
547 sprintf(name,
"trdYPullHistos_%d",
i);
548 range =
i % 2 ? 25 : 5;
549 trdYPullHistos[
i] =
new TH1F(name, name, 200, -range, range);
551 #endif //CBM_BINNED_QA_FILL_HISTOS
553 FairRootManager* ioman = FairRootManager::Instance();
555 if (0 == ioman) LOG(fatal) <<
"No FairRootManager";
560 if (0 == mcManager) LOG(fatal) <<
"No MC data manager";
564 if (0 ==
fMCTracks) LOG(fatal) <<
"No MC tracks in the input file";
567 gTracks.push_back(vector<TrackDesc>());
574 vector<TrackDesc>& eventTracks =
gTracks.back();
575 eventTracks.resize(nofMcTracks);
577 for (Int_t j = 0; j < nofMcTracks; ++j) {
583 bool isPrimary =
false;
585 TrackDesc* motherTrack = 0 > motherId ? 0 : &eventTracks[motherId];
596 default: isPrimary = motherId < 0;
599 if (isPrimary)
break;
604 #ifdef CBM_BINNED_QA_FILL_HISTOS
608 #endif //CBM_BINNED_QA_FILL_HISTOS
609 }
else if (motherId >= 0) {
612 motherTrack->
children.push_back(&track);
620 LOG(info) <<
"The number of MC events in the input: " <<
gTracks.size();
622 fGlobalTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"GlobalTrack"));
624 if (0 ==
fGlobalTracks) LOG(fatal) <<
"No global tracks in the input file";
627 fStsTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsTrack"));
629 if (0 ==
fStsTracks) LOG(fatal) <<
"No sts tracks in the input file";
631 fStsHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsHit"));
633 if (0 ==
fStsHits) LOG(fatal) <<
"No sts hits in the input file";
635 fStsClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsCluster"));
637 if (0 ==
fStsClusters) LOG(fatal) <<
"No sts clusters in the input file";
639 fStsDigis =
static_cast<TClonesArray*
>(ioman->GetObject(
"StsDigi"));
641 if (0 ==
fStsDigis) LOG(fatal) <<
"No sts digis in the input file";
644 static_cast<TClonesArray*
>(ioman->GetObject(
"StsDigiMatch"));
647 LOG(fatal) <<
"No sts digi matches in the input file";
651 if (0 ==
fStsPoints) LOG(fatal) <<
"No sts MC points in the input file";
658 for (Int_t j = 0; j < nofPoints; ++j) {
661 Int_t trackId = stsPoint->GetTrackID();
662 Int_t stationNumber =
667 trackDesk.
stsPoints[stationNumber].insert(stsPoint);
673 fMuchTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchTrack"));
675 if (0 ==
fMuchTracks) LOG(fatal) <<
"No much tracks in the input file";
677 fMuchHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchPixelHit"));
679 if (0 ==
fMuchHits) LOG(fatal) <<
"No much hits in the input file";
681 fMuchClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchCluster"));
683 if (0 ==
fMuchClusters) LOG(fatal) <<
"No much clusters in the input file";
685 fMuchDigis =
static_cast<TClonesArray*
>(ioman->GetObject(
"MuchDigi"));
687 if (0 ==
fMuchDigis) LOG(fatal) <<
"No much digis in the input file";
690 static_cast<TClonesArray*
>(ioman->GetObject(
"MuchDigiMatch"));
693 LOG(fatal) <<
"No much digi matches in the input file";
697 if (0 ==
fMuchPoints) LOG(fatal) <<
"No much MC points in the input file";
704 for (Int_t j = 0; j < nofPoints; ++j) {
707 Int_t trackId = muchPoint->GetTrackID();
708 int muchStationNumber =
712 int stationNumber = muchStationNumber * 3 + layerNumber;
715 trackDesk.
muchPoints[stationNumber].insert(muchPoint);
721 fTrdTracks =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdTrack"));
723 if (0 ==
fTrdTracks) LOG(fatal) <<
"No trd tracks in the input file";
725 fTrdHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdHit"));
727 if (0 ==
fTrdHits) LOG(fatal) <<
"No trd hits in the input file";
730 fTrdDigis =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdDigi"));
732 if (0 ==
fTrdDigis) LOG(fatal) <<
"No trd digis in the input file";
734 fTrdClusters =
static_cast<TClonesArray*
>(ioman->GetObject(
"TrdCluster"));
736 if (0 ==
fTrdClusters) LOG(fatal) <<
"No global tracks in the input file";
739 static_cast<TClonesArray*
>(ioman->GetObject(
"TrdDigiMatch"));
742 LOG(fatal) <<
"No trd hit to digi matches in the input file";
747 if (0 ==
fTrdPoints) LOG(fatal) <<
"No trd MC points in the input file";
754 for (Int_t j = 0; j < nofPoints; ++j) {
757 Int_t trackId = trdPoint->GetTrackID();
762 trackDesk.
trdPoints[stationNumber].insert(trdPoint);
768 fTofHits =
static_cast<TClonesArray*
>(ioman->GetObject(
"TofHit"));
770 if (0 ==
fTofHits) LOG(fatal) <<
"No tof hits in the input file";
773 static_cast<TClonesArray*
>(ioman->GetObject(
"TofDigiMatch"));
776 LOG(fatal) <<
"No tof hit to digi matches in the input file";
779 static_cast<TClonesArray*
>(ioman->GetObject(
"TofDigiMatchPoints"));
782 LOG(fatal) <<
"No tof digi to point matches in the input file";
784 fTofDigis =
static_cast<TClonesArray*
>(ioman->GetObject(
"TofDigi"));
786 if (0 ==
fTofDigis) LOG(fatal) <<
"No tof digis in the input file";
790 if (0 ==
fTofPoints) LOG(fatal) <<
"No tof MC points in the input file";
797 for (Int_t j = 0; j < nofPoints; ++j) {
800 Int_t trackId = tofPoint->GetTrackID();
811 Int_t nofTrdHits =
fTrdHits->GetEntriesFast();
813 for (Int_t
i = 0;
i < nofTrdHits; ++
i) {
816 Int_t clusterId = trdHit->
GetRefId();
821 for (Int_t j = 0; j < nofDigis; ++j) {
822 Int_t digiId = cluster->
GetDigi(j);
827 for (Int_t k = 0; k < nofLinks; ++k) {
833 handleData(trdHit, trdPoint);
849 Int_t nofStsHits =
fStsHits->GetEntriesFast();
851 for (Int_t
i = 0;
i < nofStsHits; ++
i) {
853 Int_t stationNumber =
862 for (Int_t j = 0; j < nofFrontDigis; ++j) {
863 Int_t stsDigiInd = frontCluster->
GetDigi(j);
869 for (Int_t k = 0; k < nofLinks; ++k) {
876 #ifdef CBM_BINNED_QA_FILL_HISTOS
877 stsXResHisto->Fill(stsHit->
GetX()
879 stsYResHisto->Fill(stsHit->
GetY()
881 stsTResHisto->Fill(stsHit->
GetTime() - stsPoint->GetTime());
882 #endif //CBM_BINNED_QA_FILL_HISTOS
883 Int_t trackId = stsPoint->GetTrackID();
885 trackDesk.
sts[stationNumber].first.insert(
i);
886 Double_t mcX = (stsPoint->
GetXIn() + stsPoint->
GetXOut()) / 2;
887 Double_t mcY = (stsPoint->
GetYIn() + stsPoint->
GetYOut()) / 2;
893 + (stsHit->
GetY() - mcY) * (stsHit->
GetY() - mcY));
900 (stsHit->
GetX() - mcX) / stsHit->
GetDx();
902 (stsHit->
GetY() - mcY) / stsHit->
GetDy();
912 for (Int_t j = 0; j < nofBackDigis; ++j) {
913 Int_t stsDigiInd = backCluster->
GetDigi(j);
919 for (Int_t k = 0; k < nofLinks; ++k) {
926 #ifdef CBM_BINNED_QA_FILL_HISTOS
927 stsXResHisto->Fill(stsHit->
GetX()
929 stsYResHisto->Fill(stsHit->
GetY()
931 stsTResHisto->Fill(stsHit->
GetTime() - stsPoint->GetTime());
932 #endif //CBM_BINNED_QA_FILL_HISTOS
933 Int_t trackId = stsPoint->GetTrackID();
935 trackDesk.
sts[stationNumber].first.insert(
i);
936 Double_t mcX = (stsPoint->
GetXIn() + stsPoint->
GetXOut()) / 2;
937 Double_t mcY = (stsPoint->
GetYIn() + stsPoint->
GetYOut()) / 2;
943 + (stsHit->
GetY() - mcY) * (stsHit->
GetY() - mcY));
950 (stsHit->
GetX() - mcX) / stsHit->
GetDx();
952 (stsHit->
GetY() - mcY) / stsHit->
GetDy();
961 Int_t nofMuchHits =
fMuchHits->GetEntriesFast();
963 for (Int_t
i = 0;
i < nofMuchHits; ++
i) {
966 Int_t muchStationNumber =
970 Int_t stationNumber = muchStationNumber * 3 + layerNumber;
971 Int_t clusterId = muchHit->
GetRefId();
976 for (Int_t j = 0; j < nofDigis; ++j) {
977 Int_t digiId = cluster->
GetDigi(j);
983 for (Int_t k = 0; k < nofLinks; ++k) {
990 Double_t mcX = (muchPoint->
GetXIn() + muchPoint->
GetXOut()) / 2;
991 Double_t mcY = (muchPoint->
GetYIn() + muchPoint->
GetYOut()) / 2;
992 Double_t mcT = muchPoint->GetTime();
993 Double_t xRes = muchHit->
GetX() - mcX;
994 Double_t yRes = muchHit->
GetY() - mcY;
995 Double_t tRes = muchHit->
GetTime() - mcT;
996 Double_t xPull = xRes / muchHit->
GetDx();
997 Double_t yPull = yRes / muchHit->
GetDy();
1005 #ifdef CBM_BINNED_QA_FILL_HISTOS
1006 muchXResHisto->Fill(
1008 muchYResHisto->Fill(
1010 muchTResHisto->Fill(muchHit->
GetTime() - muchPoint->GetTime());
1011 #endif //CBM_BINNED_QA_FILL_HISTOS
1012 Int_t trackId = muchPoint->GetTrackID();
1014 trackDesk.
much[stationNumber].first.insert(
i);
1021 Int_t nofTrdHits =
fTrdHits->GetEntriesFast();
1023 for (Int_t
i = 0;
i < nofTrdHits; ++
i) {
1026 Int_t clusterId = trdHit->
GetRefId();
1032 for (Int_t j = 0; j < nofDigis; ++j) {
1033 Int_t digiId = cluster->
GetDigi(j);
1038 for (Int_t k = 0; k < nofLinks; ++k) {
1045 #ifdef CBM_BINNED_QA_FILL_HISTOS
1048 trdXResHisto->Fill(trdHit->
GetX() - mcX);
1049 trdYResHisto->Fill(trdHit->
GetY() - mcY);
1050 trdTResHisto->Fill(trdHit->
GetTime() - trdPoint->GetTime());
1051 #endif //CBM_BINNED_QA_FILL_HISTOS
1052 Int_t trackId = trdPoint->GetTrackID();
1054 trackDesk.
trd[stationNumber].first.insert(
i);
1056 #ifdef CBM_BINNED_QA_FILL_HISTOS
1063 + (trdHit->
GetY() - mcY) * (trdHit->
GetY() - mcY));
1069 trackDesk.
pullXtrd[stationNumber] =
1070 (trdHit->
GetX() - mcX) / trdHit->
GetDx();
1071 trackDesk.
pullYtrd[stationNumber] =
1072 (trdHit->
GetY() - mcY) / trdHit->
GetDy();
1075 #endif //CBM_BINNED_QA_FILL_HISTOS
1081 Double_t mcX = (trdPoint->
GetXIn() + trdPoint->
GetXOut()) / 2;
1082 Double_t mcY = (trdPoint->
GetYIn() + trdPoint->
GetYOut()) / 2;
1083 trdXResHisto->Fill(trdHit->
GetX() - mcX);
1084 trdYResHisto->Fill(trdHit->
GetY() - mcY);
1085 trdTResHisto->Fill(trdHit->
GetTime() - trdPoint->GetTime());
1086 Int_t trackId = trdPoint->GetTrackID();
1088 trackDesk.
trd[stationNumber].first.insert(
i);
1095 + (trdHit->
GetY() - mcY) * (trdHit->
GetY() - mcY));
1097 if (trackDesk.nearestHitDist[stationNumber] < 0
1098 || dist < trackDesk.nearestHitDist[stationNumber]) {
1099 trackDesk.nearestHitDist[stationNumber] = dist;
1100 trackDesk.nearestPoints[stationNumber] = trdPoint;
1101 trackDesk.pullX[stationNumber] =
1102 (trdHit->
GetX() - mcX) / trdHit->
GetDx();
1103 trackDesk.pullY[stationNumber] =
1104 (trdHit->
GetY() - mcY) / trdHit->
GetDy();
1112 Int_t nofTofHits =
fTofHits->GetEntriesFast();
1114 for (Int_t
i = 0;
i < nofTofHits; ++
i) {
1120 for (Int_t j = 0; j < nofTofDigis; ++j) {
1122 Int_t digiInd = digiLink.
GetIndex();
1127 for (Int_t k = 0; k < nofPoints; ++k) {
1129 Int_t eventId = pointLink.
GetEntry();
1130 Int_t mcPointId = pointLink.
GetIndex();
1133 #ifdef CBM_BINNED_QA_FILL_HISTOS
1134 tofXResHisto->Fill(tofHit->GetX() - tofPoint->GetX());
1135 tofYResHisto->Fill(tofHit->GetY() - tofPoint->GetY());
1136 tofTResHisto->Fill(tofHit->GetTime() - tofPoint->GetTime());
1137 #endif //CBM_BINNED_QA_FILL_HISTOS
1138 Int_t trackId = tofPoint->GetTrackID();
1140 trackDesk.
tof.first.insert(
i);
1149 set<Int_t>* globalTrackMCRefs =
new set<Int_t>[nofGlobalTracks * nofStations];
1150 Int_t* globalTracksHitInds =
new Int_t[nofGlobalTracks * nofStations];
1154 for (Int_t
i = 0;
i < nofGlobalTracks; ++
i) {
1171 map<Int_t, set<Int_t>> mcTrackIds;
1174 HandleSts(stsIndex, mcTrackIds, globalTrackMCRefs, globalTracksHitInds);
1177 HandleMuch(muchIndex, mcTrackIds, globalTrackMCRefs, globalTracksHitInds);
1180 HandleTrd(trdIndex, mcTrackIds, globalTrackMCRefs, globalTracksHitInds);
1184 i, tofIndex, mcTrackIds, globalTrackMCRefs, globalTracksHitInds);
1186 map<Int_t, set<Int_t>>::const_iterator maxIter = max_element(
1189 [](
const pair<Int_t, set<Int_t>>& p1,
const pair<Int_t, set<Int_t>>& p2) {
1190 return p1.second.size() < p2.second.size();
1193 if (maxIter->second.size() <
size_t(0.7 * nofStations))
continue;
1198 map<Int_t, set<Int_t>>* mcToGlobalRefs =
1199 new map<Int_t, set<Int_t>>[nofStations];
1201 for (Int_t
i = 0;
i < nofGlobalTracks; ++
i) {
1204 for (Int_t j = 0; j < nofStations; ++j) {
1206 const set<Int_t>& mcs = globalTrackMCRefs[
i * nofStations + j];
1208 for (set<Int_t>::const_iterator k = mcs.begin(); k != mcs.end(); ++k) {
1216 mcToGlobalRefs[j][mc].insert(
i);
1271 for (Int_t
i = 0;
i < nofGlobalTracks; ++
i) {
1281 for (Int_t j = 0; j < nofStations; ++j) {
1284 const set<Int_t>& mcs = globalTrackMCRefs[
i * nofStations + j];
1286 for (set<Int_t>::const_iterator k = mcs.begin(); k != mcs.end(); ++k) {
1288 map<Int_t, set<Int_t>>::const_iterator mctogIter =
1289 mcToGlobalRefs[j].find(mc);
1291 if (mctogIter == mcToGlobalRefs[j].end())
continue;
1293 globals.insert(mctogIter->second.begin(), mctogIter->second.end());
1296 for (set<Int_t>::const_iterator k = globals.begin(); k != globals.end();
1300 if (gl ==
i)
continue;
1302 map<Int_t, Int_t>::iterator mIter = matches.find(gl);
1304 if (mIter == matches.end())
1311 for (map<Int_t, Int_t>::const_iterator j = matches.begin();
1314 if (j->second >=
int(0.7 * nofStations)) {
1329 for (Int_t
i = 0;
i < nofGlobalTracks; ++
i) {
1333 delete[] mcToGlobalRefs;
1334 delete[] globalTrackMCRefs;
1335 delete[] globalTracksHitInds;
1342 ids[id].insert(stId);
1346 map<Int_t, set<Int_t>>& mcTrackIds,
1347 set<Int_t>* globalTrackMCRefs,
1348 Int_t* globalTracksHitInds) {
1354 for (Int_t
i = 0;
i < nofStsHits; ++
i) {
1358 Int_t stationNumber =
1360 globalTracksHitInds[stsTrackIndex * nofStations
1371 Int_t nofFrontDigis = frontCluster->
GetNofDigis();
1373 for (Int_t j = 0; j < nofFrontDigis; ++j) {
1374 Int_t stsDigiInd = frontCluster->
GetDigi(j);
1380 for (Int_t k = 0; k < nofLinks; ++k) {
1389 Int_t trackId = stsPoint->GetTrackID();
1391 globalTrackMCRefs[stsTrackIndex * nofStations + stationNumber].insert(
1395 if (trackDesk.
sts[stationNumber].first.find(stsHitInd)
1396 != trackDesk.
sts[stationNumber].first.end())
1397 trackDesk.
sts[stationNumber].second.insert(stsTrackIndex);
1405 for (Int_t j = 0; j < nofBackDigis; ++j) {
1406 Int_t stsDigiInd = backCluster->
GetDigi(j);
1412 for (Int_t k = 0; k < nofLinks; ++k) {
1421 Int_t trackId = stsPoint->GetTrackID();
1423 globalTrackMCRefs[stsTrackIndex * nofStations + stationNumber].insert(
1427 if (trackDesk.
sts[stationNumber].first.find(stsHitInd)
1428 != trackDesk.
sts[stationNumber].first.end())
1429 trackDesk.
sts[stationNumber].second.insert(stsTrackIndex);
1433 if (0 == mcCnt)
continue;
1438 if (0 == stationNumber) {
1440 Double_t xRes = param->GetX() - mcX;
1441 Double_t yRes = param->GetY() - mcY;
1442 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1443 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1449 const FairTrackParam* param = stsTrack->
GetParamLast();
1450 Double_t xRes = param->GetX() - mcX;
1451 Double_t yRes = param->GetY() - mcY;
1452 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1453 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1463 map<Int_t, set<Int_t>>& mcTrackIds,
1464 set<Int_t>* globalTrackMCRefs,
1465 Int_t* globalTracksHitInds) {
1471 for (Int_t
i = 0;
i < nofMuchHits; ++
i) {
1475 Int_t muchStationNumber =
1478 Int_t stationNumber = muchStationNumber * 3 + layerNumber;
1482 globalTracksHitInds[muchTrackIndex * nofStations
1485 Int_t clusterId = muchHit->
GetRefId();
1490 for (Int_t j = 0; j < nofDigis; ++j) {
1491 Int_t digiId = cluster->
GetDigi(j);
1497 for (Int_t k = 0; k < nofLinks; ++k) {
1509 if (0 == stationNumber) {
1511 Double_t xRes = param->GetX() - mcX;
1512 Double_t yRes = param->GetY() - mcY;
1513 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1514 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1520 const FairTrackParam* param = muchTrack->
GetParamLast();
1521 Double_t xRes = param->GetX() - mcX;
1522 Double_t yRes = param->GetY() - mcY;
1523 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1524 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1531 Int_t trackId = muchPoint->GetTrackID();
1533 globalTrackMCRefs[muchTrackIndex * nofStations
1538 if (trackDesk.
much[stationNumber].first.find(muchHitInd)
1539 != trackDesk.
much[stationNumber].first.end())
1540 trackDesk.
much[stationNumber].second.insert(muchTrackIndex);
1578 map<Int_t, set<Int_t>>& mcTrackIds,
1579 set<Int_t>* globalTrackMCRefs,
1580 Int_t* globalTracksHitInds) {
1586 for (Int_t
i = 0;
i < nofTrdHits; ++
i) {
1594 globalTracksHitInds[trdTrackIndex * nofStations
1597 Int_t clusterId = trdHit->
GetRefId();
1603 for (Int_t j = 0; j < nofDigis; ++j) {
1604 Int_t digiId = cluster->
GetDigi(j);
1609 for (Int_t k = 0; k < nofLinks; ++k) {
1618 Int_t trackId = trdPoint->GetTrackID();
1620 globalTrackMCRefs[trdTrackIndex * nofStations
1625 if (trackDesk.
trd[stationNumber].first.find(trdHitInd)
1626 != trackDesk.
trd[stationNumber].first.end())
1627 trackDesk.
trd[stationNumber].second.insert(trdTrackIndex);
1633 Int_t trackId = trdPoint->GetTrackID();
1636 if (trackDesk.
trd[stationNumber].first.find(trdHitInd)
1637 != trackDesk.
trd[stationNumber].first.end())
1638 trackDesk.
trd[stationNumber].second.insert(trdTrackIndex);
1640 if (0 == mcCnt)
continue;
1645 if (0 == stationNumber) {
1647 Double_t xRes = param->GetX() - mcX;
1648 Double_t yRes = param->GetY() - mcY;
1649 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1650 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1656 const FairTrackParam* param = trdTrack->
GetParamLast();
1657 Double_t xRes = param->GetX() - mcX;
1658 Double_t yRes = param->GetY() - mcY;
1659 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1660 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1671 map<Int_t, set<Int_t>>& mcTrackIds,
1672 set<Int_t>* globalTrackMCRefs,
1673 Int_t* globalTracksHitInds) {
1680 globalTracksHitInds[globalTrackIndex * nofStations
1686 for (Int_t
i = 0;
i < nofTofDigis; ++
i) {
1688 Int_t digiInd = digiLink.
GetIndex();
1693 for (Int_t j = 0; j < nofPoints; ++j) {
1695 Int_t eventId = pointLink.
GetEntry();
1696 Int_t pointId = pointLink.
GetIndex();
1699 mcX += tofPoint->GetX();
1700 mcY += tofPoint->GetY();
1702 Int_t trackId = tofPoint->GetTrackID();
1704 globalTrackMCRefs[globalTrackIndex * nofStations
1709 if (trackDesk.
tof.first.find(tofHitIndex) != trackDesk.
tof.first.end())
1710 trackDesk.
tof.second.insert(tofHitIndex);
1714 if (0 == mcCnt)
return;
1718 const FairTrackParam* param = globalTrack->
GetParamLast();
1719 Double_t xRes = param->GetX() - mcX;
1720 Double_t yRes = param->GetY() - mcY;
1721 Double_t xPull = xRes / TMath::Sqrt(param->GetCovariance(0, 0));
1722 Double_t yPull = yRes / TMath::Sqrt(param->GetCovariance(1, 1));
1730 TFile* curFile = TFile::CurrentFile();
1731 TString histoName = histo->GetName();
1732 histoName +=
".root";
1733 TFile fh(histoName.Data(),
"RECREATE");
1737 TFile::CurrentFile() = curFile;
1740 template<
typename T>
1743 sprintf(buf,
"%s.txt", name);
1744 ofstream fileStream(buf, ios_base::out | ios_base::trunc);
1745 fileStream << number;
1749 const vector<vector<bool>>&
points) {
1750 int nofAllMCPoints = 0;
1751 int nofRecoMCPoints = 0;
1753 for (
const auto&
i :
points) {
1757 if (j) ++nofRecoMCPoints;
1761 double eff = 100 * nofRecoMCPoints;
1763 if (0 == nofAllMCPoints)
1766 eff /= nofAllMCPoints;
1768 cout <<
"Reconstructed of the " << name <<
" points: " << eff <<
"% "
1769 << nofRecoMCPoints <<
"/" << nofAllMCPoints << endl;
1773 const vector<vector<char>>&
points) {
1774 int nofAllMCPoints = 0;
1775 int nofRecoMCPoints = 0;
1777 for (
const auto&
i :
points) {
1779 if (j > 0) ++nofAllMCPoints;
1781 if (j > 1) ++nofRecoMCPoints;
1785 double eff = 100 * nofRecoMCPoints;
1787 if (0 == nofAllMCPoints)
1790 eff /= nofAllMCPoints;
1792 cout <<
"Reconstructed of the " << name <<
" points: " << eff <<
"% "
1793 << nofRecoMCPoints <<
"/" << nofAllMCPoints << endl;
1797 int nofAllTracks = 0;
1798 int nofRefTracks = 0;
1799 int nofMatchedRefTracks = 0;
1800 int nofRefPrimTracks = 0;
1801 int nofMatchedRefPrimTracks = 0;
1802 int nofRefNonPrimTracks = 0;
1803 int nofMatchedRefNonPrimTracks = 0;
1809 for (vector<vector<TrackDesc>>::iterator
i =
gTracks.begin();
1812 vector<TrackDesc>& evTracks = *
i;
1814 for (vector<TrackDesc>::iterator j = evTracks.begin(); j != evTracks.end();
1824 if (trackDesc.
sts[k].first.empty()) {
1830 if (!isRef)
continue;
1832 #ifdef CBM_BINNED_QA_FILL_HISTOS
1833 for (set<const CbmStsPoint*>::const_iterator k =
1846 for (set<const CbmStsPoint*>::const_iterator l =
1855 extrStsXHisto->Fill(x1 - tx *
z1);
1856 extrStsYHisto->Fill(y1 - ty *
z1);
1859 #endif //CBM_BINNED_QA_FILL_HISTOS
1862 if (trackDesc.
much[k].first.empty()) {
1868 if (!isRef)
continue;
1871 if (trackDesc.
trd[k].first.empty()) {
1877 if (!isRef)
continue;
1879 #ifdef CBM_BINNED_QA_FILL_HISTOS
1880 for (set<const CbmStsPoint*>::const_iterator k =
1889 for (set<const CbmStsPoint*>::const_iterator l =
1897 Double_t tx = (x2 - x1) / (
z2 -
z1);
1898 Double_t ty = (y2 - y1) / (
z2 -
z1);
1900 for (set<const CbmTrdPoint*>::const_iterator
m =
1908 Double_t deltaZ = z -
z2;
1909 extrTrdXHistos[0]->Fill(
x - x2 - tx * deltaZ);
1910 extrTrdYHistos[0]->Fill(
y - y2 - ty * deltaZ);
1915 for (set<const CbmStsPoint*>::const_iterator k =
1924 for (set<const CbmTrdPoint*>::const_iterator l =
1932 Double_t tx = (x2 - x1) / (
z2 -
z1);
1933 Double_t ty = (y2 - y1) / (
z2 -
z1);
1935 for (set<const CbmTrdPoint*>::const_iterator
m =
1943 Double_t deltaZ = z -
z2;
1944 extrTrdXHistos[1]->Fill(
x - x2 - tx * deltaZ);
1945 extrTrdYHistos[1]->Fill(
y - y2 - ty * deltaZ);
1950 for (set<const CbmTrdPoint*>::const_iterator k =
1959 for (set<const CbmTrdPoint*>::const_iterator l =
1967 Double_t tx = (x2 - x1) / (
z2 -
z1);
1968 Double_t ty = (y2 - y1) / (
z2 -
z1);
1970 for (set<const CbmTrdPoint*>::const_iterator
m =
1978 Double_t deltaZ = z -
z2;
1979 extrTrdXHistos[2]->Fill(
x - x2 - tx * deltaZ);
1980 extrTrdYHistos[2]->Fill(
y - y2 - ty * deltaZ);
1985 for (set<const CbmTrdPoint*>::const_iterator k =
1994 for (set<const CbmTrdPoint*>::const_iterator l =
2002 Double_t tx = (x2 - x1) / (
z2 -
z1);
2003 Double_t ty = (y2 - y1) / (
z2 -
z1);
2005 for (set<const CbmTrdPoint*>::const_iterator
m =
2013 Double_t deltaZ = z -
z2;
2014 extrTrdXHistos[3]->Fill(
x - x2 - tx * deltaZ);
2015 extrTrdYHistos[3]->Fill(
y - y2 - ty * deltaZ);
2019 #endif //CBM_BINNED_QA_FILL_HISTOS
2041 ++nofRefNonPrimTracks;
2043 map<Int_t, Int_t> matchedReco;
2046 for (set<Int_t>::const_iterator l = trackDesc.
sts[k].second.begin();
2047 l != trackDesc.
sts[k].second.end();
2049 map<Int_t, Int_t>::iterator mrIter = matchedReco.find(*l);
2051 if (mrIter != matchedReco.end())
2054 matchedReco[*l] = 1;
2059 for (set<Int_t>::const_iterator l = trackDesc.
much[k].second.begin();
2060 l != trackDesc.
much[k].second.end();
2062 map<Int_t, Int_t>::iterator mrIter = matchedReco.find(*l);
2064 if (mrIter != matchedReco.end())
2067 matchedReco[*l] = 1;
2072 for (set<Int_t>::const_iterator l = trackDesc.
trd[k].second.begin();
2073 l != trackDesc.
trd[k].second.end();
2075 map<Int_t, Int_t>::iterator mrIter = matchedReco.find(*l);
2077 if (mrIter != matchedReco.end())
2080 matchedReco[*l] = 1;
2084 #ifdef CBM_BINNED_QA_FILL_HISTOS
2085 for (
int k = 0; k < NOF_STS_STATIONS; ++k) {
2087 stsXPullHistos[k]->Fill(trackDesc.
pullXsts[k]);
2088 stsYPullHistos[k]->Fill(trackDesc.
pullYsts[k]);
2092 for (
int k = 0; k < NOF_TRD_LAYERS; ++k) {
2095 trdXPullHistos[k]->Fill(trackDesc.
pullXtrd[k]);
2096 trdYPullHistos[k]->Fill(trackDesc.
pullYtrd[k]);
2099 #endif //CBM_BINNED_QA_FILL_HISTOS
2132 Double_t momV = trackDesc.
ptr->
GetP();
2133 Double_t momX = mom.X();
2134 Double_t momY = mom.Y();
2135 Double_t momZ = mom.Z();
2136 Double_t polarAng = 180 * TMath::ACos(momZ / momV) /
TMath::Pi();
2137 Double_t xAng = 180 * TMath::ASin(momX / momV) /
TMath::Pi();
2138 Double_t yAng = 180 * TMath::ASin(momY / momV) /
TMath::Pi();
2140 if (matchedReco.empty()) {
2160 map<Int_t, Int_t>::const_iterator maxIter = max_element(
2161 matchedReco.begin(),
2163 [](
const pair<Int_t, Int_t>& p1,
const pair<Int_t, Int_t>& p2) {
2164 return p1.second < p2.second;
2192 ++nofMatchedRefTracks;
2199 ++nofMatchedRefPrimTracks;
2205 ++nofMatchedRefNonPrimTracks;
2210 cout <<
"Total tracks: " << nofAllTracks << endl;
2212 double eff = 100 * nofMatchedRefTracks;
2214 if (0 == nofRefTracks)
2217 eff /= nofRefTracks;
2219 cout <<
"The track reconstruction efficiency: " << eff
2220 <<
"%: " << nofMatchedRefTracks <<
"/" << nofRefTracks << endl;
2222 NumberToFile(
"nofMatchedRefTracks", nofMatchedRefTracks);
2224 eff = 100 * nofMatchedRefPrimTracks;
2226 if (0 == nofRefPrimTracks)
2229 eff /= nofRefPrimTracks;
2231 cout <<
"The track reconstruction efficiency for primary tracks: " << eff
2232 <<
"%: " << nofMatchedRefPrimTracks <<
"/" << nofRefPrimTracks << endl;
2233 NumberToFile(
"nofMatchedRefPrimTracks", nofMatchedRefPrimTracks);
2235 eff = 100 * nofMatchedRefNonPrimTracks;
2237 if (0 == nofRefNonPrimTracks)
2240 eff /= nofRefNonPrimTracks;
2242 cout <<
"The track reconstruction efficiency for non primary tracks: " << eff
2243 <<
"%: " << nofMatchedRefNonPrimTracks <<
"/" << nofRefNonPrimTracks
2245 NumberToFile(
"nofMatchedRefNonPrimTracks", nofMatchedRefNonPrimTracks);
2254 cout <<
"The number of ghosts: " << eff
2267 cout <<
"The number of clones: " << eff <<
"%: " <<
gNofClones <<
"/"
2289 int nofLambdasInAcc = 0;
2290 int nofRecoLambdas = 0;
2291 cout <<
"The number of Lambda baryons: " << nofLambdas << endl;
2293 for (list<TrackDesc*>::const_iterator
i =
lambdaList.begin();
2297 bool isInAcc = !lambdaTrack->
children.empty();
2298 bool isReco = isInAcc;
2300 for (list<TrackDesc*>::const_iterator j = lambdaTrack->
children.begin();
2304 Double_t p = childTrack->
ptr->
GetP();
2322 if (isReco) ++nofRecoLambdas;
2326 eff = 100 * nofLambdasInAcc;
2328 if (0 == nofLambdas)
2333 cout <<
"Lambda baryons in the acceptance: " << eff <<
"% " << nofLambdasInAcc
2334 <<
"/" << nofLambdas << endl;
2336 eff = 100 * nofRecoLambdas;
2338 if (0 == nofLambdas)
2343 cout <<
"Reconstructed of all the Lambda baryons: " << eff <<
"% "
2344 << nofRecoLambdas <<
"/" << nofLambdas << endl;
2346 eff = 100 * nofRecoLambdas;
2348 if (0 == nofLambdasInAcc)
2351 eff /= nofLambdasInAcc;
2353 cout <<
"Reconstructed of the Lambda baryons in the acceptance: " << eff
2354 <<
"% " << nofRecoLambdas <<
"/" << nofLambdasInAcc << endl;
2424 #ifdef CBM_BINNED_QA_FILL_HISTOS
2445 for (
int i = 0;
i < 2; ++
i) {
2450 for (
int i = 0;
i < 4; ++
i) {
2459 #endif //CBM_BINNED_QA_FILL_HISTOS
2464 FairRun::Instance()->GetRuntimeDb()->getContainer(
"CbmBinnedSettings"));