1- // Copyright 2019-2025 CERN and copyright holders of ALICE O2.
1+ // Copyright 2019-2022 CERN and copyright holders of ALICE O2.
22// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
33// All rights not expressly granted are reserved.
44//
99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111
12- // / \file FemtoDreamParticleHisto .h
12+ // / \file femtoDreamParticleHisto .h
1313// / \brief FemtoDreamParticleHisto - Histogram class for tracks, V0s and cascades
1414// / \author Andi Mathis, TU München, andreas.mathis@ph.tum.de
1515// / \author Georgios Mantzaridis, TU München, georgios.mantzaridis@tum.de
@@ -75,6 +75,15 @@ class FemtoDreamParticleHisto
7575 mHistogramRegistry ->add ((folderName + folderSuffix + " /hInvMassCascade" ).c_str (), " ; M_{Cascade}; Entries" , kTH1F , {InvMassAxis});
7676 mHistogramRegistry ->add ((folderName + folderSuffix + " /hpTInvMassCascade" ).c_str (), " ; p_{T} (GeV/#it{c{}); M_{Cascade}" , kTH2F , {pTAxis, InvMassAxis});
7777 }
78+ if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kReso ) {
79+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hInvMassPhi" ).c_str (), " ; M_{#Phi}; Entries" , kTH1F , {InvMassAxis}); // added for Phi !!
80+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hpTInvMassPhi" ).c_str (), " ; p_{T} (GeV/#it{c{}); M_{#Phi}" , kTH2F , {pTAxis, InvMassAxis});
81+ }
82+ if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kResoChild ) {
83+
84+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hInvMassPhi" ).c_str (), " ; M_{#Phi}; Entries" , kTH1F , {InvMassAxis}); // added for Phi !!
85+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hpTInvMassPhi" ).c_str (), " ; p_{T} (GeV/#it{c{}); M_{#Phi}" , kTH2F , {pTAxis, InvMassAxis});
86+ }
7887 }
7988
8089 // comment
@@ -152,6 +161,30 @@ class FemtoDreamParticleHisto
152161 mHistogramRegistry ->add ((folderName + folderSuffix + " /hCascDecayVtxZ" ).c_str (), " ; #it{Vtx}_{z} (cm); Entries" , kTH1F , {{2000 , 0 , 200 }});
153162 mHistogramRegistry ->add ((folderName + folderSuffix + " /hInvMassCompetingCascade" ).c_str (), " ; M_{Competing Cascade}; Entries" , kTH1F , {InvMassCompetingAxis});
154163 mHistogramRegistry ->add ((folderName + folderSuffix + " /hpTInvMassCompetingCascade" ).c_str (), " ; p_{T} (GeV/#it{c{}); M_{Competing Cascade}" , kTH2F , {pTAxis, InvMassCompetingAxis});
164+ } else if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kResoChild ) {
165+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hCharge" ).c_str (), " ; Charge; Entries" , kTH1F , {{5 , -2.5 , 2.5 }});
166+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCfindable" ).c_str (), " ; TPC findable clusters; Entries" , kTH1F , {{163 , -0.5 , 162.5 }});
167+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCfound" ).c_str (), " ; TPC found clusters; Entries" , kTH1F , {{163 , -0.5 , 162.5 }});
168+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCcrossedOverFindable" ).c_str (), " ; TPC ratio findable over crossed; Entries" , kTH1F , {{100 , 0.5 , 1.5 }});
169+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCcrossedRows" ).c_str (), " ; TPC crossed rows; Entries" , kTH1F , {{163 , -0.5 , 162.5 }});
170+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCshared" ).c_str (), " ; TPC shared clusters; Entries" , kTH1F , {{163 , -0.5 , 162.5 }});
171+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCsharedOverFound" ).c_str (), " ; TPC ratio shared over found; Entries" , kTH1F , {{1000 , 0 , 1 }});
172+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCfindableVsCrossed" ).c_str (), " ;TPC findable clusters ; TPC crossed rows;" , kTH2F , {{163 , -0.5 , 162.5 }, {163 , -0.5 , 162.5 }});
173+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCfoundVsShared" ).c_str (), " ;TPC found clusters ; TPC shared clusters;" , kTH2F , {{163 , -0.5 , 162.5 }, {163 , -0.5 , 162.5 }});
174+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hITSclusters" ).c_str (), " ; ITS clusters; Entries" , kTH1F , {{10 , -0.5 , 9.5 }});
175+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hITSclustersIB" ).c_str (), " ; ITS clusters in IB; Entries" , kTH1F , {{10 , -0.5 , 9.5 }});
176+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hDCAz" ).c_str (), " ; #it{p} (GeV/#it{c}); DCA_{z} (cm)" , kTH2F , {pTAxis, dcazAxis});
177+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hDCA" ).c_str (), " ; #it{p} (GeV/#it{c}); DCA (cm)" , kTH2F , {pTAxis, {300 , 0 ., 1.5 }});
178+ mHistogramRegistry ->add ((folderName + folderSuffix + " /hTPCdEdX" ).c_str (), " ; #it{p} (GeV/#it{c}); TPC Signal" , kTH2F , {{100 , 0 , 10 }, {1000 , 0 , 1000 }});
179+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaTPC_pi" ).c_str (), " n#sigma_{TPC}^{#pi}" , kTH2F , {pTAxis, NsigmaTPCAxis});
180+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaTPC_K" ).c_str (), " n#sigma_{TPC}^{K}" , kTH2F , {pTAxis, NsigmaTPCAxis});
181+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaTOF_pi" ).c_str (), " n#sigma_{TOF}^{#pi}" , kTH2F , {pTAxis, NsigmaTOFAxis});
182+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaTOF_K" ).c_str (), " n#sigma_{TOF}^{K}" , kTH2F , {pTAxis, NsigmaTOFAxis});
183+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaComb_pi" ).c_str (), " n#sigma_{comb}^{#pi}" , kTH2F , {pTAxis, NsigmaTPCTOFAxis});
184+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaComb_K" ).c_str (), " n#sigma_{comb}^{K}" , kTH2F , {pTAxis, NsigmaTPCTOFAxis});
185+ mHistogramRegistry ->add ((folderName + folderSuffix + " /ITSSignal" ).c_str (), " <cluster size>x<cos#lambda>" , kTH2F , {pTAxis, NsigmaITSAxis});
186+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaITS_pi" ).c_str (), " n#sigma_{ITS}^{#pi}" , kTH2F , {pTAxis, NsigmaITSAxis});
187+ mHistogramRegistry ->add ((folderName + folderSuffix + " /nSigmaITS_K" ).c_str (), " n#sigma_{ITS}^{K}" , kTH2F , {pTAxis, NsigmaITSAxis});
155188 }
156189 }
157190
@@ -259,6 +292,9 @@ class FemtoDreamParticleHisto
259292 if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kTrack || mParticleType == o2::aod::femtodreamparticle::ParticleType::kV0Child || mParticleType == o2::aod::femtodreamparticle::ParticleType::kCascadeV0Child || mParticleType == o2::aod::femtodreamparticle::ParticleType::kCascadeBachelor ) {
260293 // / Track histograms
261294 tempFitVarAxisTitle = " DCA_{xy} (cm)" ;
295+ } else if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kResoChild || mParticleType == o2::aod::femtodreamparticle::ParticleType::kReso ) { // mParticleType == o2::aod::femtodreamparticle::ParticleType::kReso || Phi has no TempFitVar!!
296+ // / Reso histograms added!!
297+ tempFitVarAxisTitle = " DCA_{xy} (cm)" ;
262298 } else if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kV0 || mParticleType == o2::aod::femtodreamparticle::ParticleType::kCascadeV0 ) {
263299 // / V0 histograms
264300 tempFitVarAxisTitle = " cos#alpha" ;
@@ -326,6 +362,14 @@ class FemtoDreamParticleHisto
326362 // mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/hInvMassCascade"), part.mLambda());
327363 // mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/hpTInvMassCascade"), part.pt(), part.mLambda());
328364 }
365+ if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kReso ) {
366+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hInvMassPhi" ), part.mLambda ()); // currently no MC for Phi!!
367+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hpTInvMassPhi" ), part.pt (), part.mLambda ()); // getter from FDPArticles now!!
368+ }
369+ if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kResoChild ) {
370+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hInvMassPhi" ), part.mLambda ()); // currently no MC for Phi!!
371+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hpTInvMassPhi" ), part.pt (), part.mLambda ()); // getter from FDPArticles now!!
372+ }
329373 }
330374
331375 template <o2::aod::femtodreamMCparticle::MCType mc, typename Tpart>
@@ -403,7 +447,7 @@ class FemtoDreamParticleHisto
403447 float pidTPC = 0 .;
404448 float pidTOF = 0 .;
405449
406- switch (abs (mPDG )) {
450+ switch (std:: abs (mPDG )) {
407451 case kElectron :
408452 pidTPC = part.tpcNSigmaEl ();
409453 pidTOF = part.tofNSigmaEl ();
@@ -463,9 +507,32 @@ class FemtoDreamParticleHisto
463507 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hCascDecayVtxZ" ), part.cascDecayVtxZ ());
464508 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hInvMassCompetingCascade" ), part.mOmega ());
465509 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hpTInvMassCompetingCascade" ), part.pt (), part.mOmega ());
510+ } else if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kResoChild ) {
511+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hCharge" ), part.sign ());
512+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCfindable" ), part.tpcNClsFindable ());
513+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCfound" ), part.tpcNClsFound ());
514+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCcrossedOverFindable" ), part.tpcCrossedRowsOverFindableCls ());
515+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCcrossedRows" ), part.tpcNClsCrossedRows ());
516+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCfindableVsCrossed" ), part.tpcNClsFindable (), part.tpcNClsCrossedRows ());
517+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCshared" ), part.tpcNClsShared ());
518+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCsharedOverFound" ), static_cast <float >(part.tpcNClsShared ()) / static_cast <float >(part.tpcNClsFound ()));
519+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCfoundVsShared" ), part.tpcNClsFound (), part.tpcNClsShared ());
520+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hITSclusters" ), part.itsNCls ());
521+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hITSclustersIB" ), part.itsNClsInnerBarrel ());
522+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hDCAz" ), momentum, part.dcaZ ());
523+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hDCA" ), momentum, std::sqrt (std::pow (part.dcaXY (), 2 .) + std::pow (part.dcaZ (), 2 .)));
524+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /hTPCdEdX" ), momentum, part.tpcSignal ());
525+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaTPC_pi" ), momentum, part.tpcNSigmaPi ());
526+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaTPC_K" ), momentum, part.tpcNSigmaKa ());
527+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaTOF_pi" ), momentum, part.tofNSigmaPi ());
528+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaTOF_K" ), momentum, part.tofNSigmaKa ());
529+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaComb_pi" ), momentum, std::sqrt (part.tpcNSigmaPi () * part.tpcNSigmaPi () + part.tofNSigmaPi () * part.tofNSigmaPi ()));
530+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaComb_K" ), momentum, std::sqrt (part.tpcNSigmaKa () * part.tpcNSigmaKa () + part.tofNSigmaKa () * part.tofNSigmaKa ()));
531+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /ITSSignal" ), momentum, part.itsSignal ());
532+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaITS_pi" ), momentum, part.itsNSigmaPi ());
533+ mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" /nSigmaITS_K" ), momentum, part.itsNSigmaKa ());
466534 }
467535 }
468-
469536 // / Filling specialized histograms for Monte Carlo truth
470537 // / internal function called by init only in case of Monte Carlo truth
471538 // / \tparam T Data type of the particle
@@ -486,7 +553,7 @@ class FemtoDreamParticleHisto
486553 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (" _MC/hEta_DiffTruthReco" ), MCpart.eta (), (part.eta () - MCpart.eta ()));
487554 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (" _MC/hPhi_DiffTruthReco" ), MCpart.phi (), (part.phi () - MCpart.phi ()));
488555
489- if (abs (pdgcode) == mPDG ) { // fill this histogramm only for TRUE protons (independently of their origin) for the track purity estimation
556+ if (std:: abs (pdgcode) == mPDG ) { // fill this histogramm only for TRUE protons (independently of their origin) for the track purity estimation
490557 mHistogramRegistry ->fill (HIST (o2::aod::femtodreamparticle::ParticleTypeName[mParticleType ]) + HIST (mFolderSuffix [mFolderSuffixType ]) + HIST (" _MC/hPt_ReconNoFake" ), part.pt ());
491558 }
492559 if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kTrack || mParticleType == o2::aod::femtodreamparticle::ParticleType::kV0Child ) {
0 commit comments