@@ -73,6 +73,8 @@ enum TrackHist {
7373 kPtVsDcaxy ,
7474 kPtVsDcaz ,
7575 kPtVsDca ,
76+ kPtVsDcaxyVsDcaz , // DCAxy vs DCAz vs pt for extraction of particle fraction
77+ kPVsPTpc ,
7678 // its pid
7779 kItsSignal ,
7880 kItsElectron ,
@@ -199,6 +201,7 @@ struct ConfTrackQaBinning : o2::framework::ConfigurableGroup {
199201 o2::framework::Configurable<bool > plotHeliumPid{" plotHeliumPid" , true , " Generate plots for Helium PID" };
200202 o2::framework::Configurable<bool > plotOrigins{" plotOrigins" , true , " MC ONLY: Plot pt vs DCAxy vs DCAz for different particle origins" };
201203 o2::framework::Configurable<std::vector<int >> pdgCodesForMothersOfSecondary{" pdgCodesForMothersOfSecondary" , {3122 }, " MC ONLY: PDG codes of mothers of secondaries (Max 3 will be considered)" };
204+ o2::framework::Configurable<bool > plotDcaCorrelation{" plotDcaCorrelation" , true , " Plot pt vs DCAxy vs DCAz" };
202205 o2::framework::ConfigurableAxis itsCluster{" itsCluster" , {{8 , -0.5 , 7.5 }}, " ITS cluster" };
203206 o2::framework::ConfigurableAxis itsClusterIb{" itsClusterIb" , {{4 , -0.5 , 3.5 }}, " ITS cluster in inner barrel" };
204207 o2::framework::ConfigurableAxis tpcCrossedRows{" tpcCrossedRows" , {{161 , -0.5 , 160.5 }}, " TPC cluster" };
@@ -209,7 +212,7 @@ struct ConfTrackQaBinning : o2::framework::ConfigurableGroup {
209212 o2::framework::ConfigurableAxis dcaXy{" dcaXy" , {{300 , -0.3 , 0.3 }}, " DCA_xy" };
210213 o2::framework::ConfigurableAxis dcaZ{" dcaZ" , {{300 , -0.3 , 0.3 }}, " DCA_Z" };
211214 o2::framework::ConfigurableAxis dca{" dca" , {{300 , 0 , 0.3 }}, " DCA" };
212- o2::framework::ConfigurableAxis p{" p" , {{300 , 0 , 6 }}, " Momentum axis" };
215+ o2::framework::ConfigurableAxis p{" p" , {{300 , 0 , 6 }}, " Momentum axis. Used for all PID histograms and momentum correlation histogram " };
213216 o2::framework::ConfigurableAxis itsSignal{" itsSignal" , {{150 , 0 , 15 }}, " ITS Signal" };
214217 o2::framework::ConfigurableAxis itsElectron{" itsElectron" , {{300 , -3 , 3 }}, " ITS PID for electron" };
215218 o2::framework::ConfigurableAxis itsPion{" itsPion" , {{300 , -3 , 3 }}, " ITS PID for pion" };
@@ -306,6 +309,8 @@ constexpr std::array<histmanager::HistInfo<TrackHist>, kTrackHistLast>
306309 {kPtVsDcaxy , o2::framework::HistType::kTH2F , " hPtVsDcaxy" , " p_{T} vs DCA_{XY}; p_{T} (GeV/#it{c}); DCA_{XY} (cm)" },
307310 {kPtVsDcaz , o2::framework::HistType::kTH2F , " hPtVsDcaz" , " p_{T} vs DCA_{Z}; p_{T} (GeV/#it{c}); DCA_{Z} (cm)" },
308311 {kPtVsDca , o2::framework::HistType::kTH2F , " hPtVsDca" , " p_{T} vs DCA; p_{T} (GeV/#it{c}); DCA (cm)" },
312+ {kPtVsDcaxyVsDcaz , o2::framework::HistType::kTHnSparseF , " hPtVsDcaxyVsDcaz" , " Transverse momentum vs DCA_{xy} vs DCA_{z}; p_{T} (GeV/#it{c}); DCA_{XY} (cm); DCA_{Z} (cm);" },
313+ {kPVsPTpc , o2::framework::HistType::kTH2F , " hPVsPTpc" , " Correlation p_{global} and p_{TPC}; p_{global} (GeV/#it{c}); p_{tpc} (GeV/#it{c})" },
309314 {kItsSignal , o2::framework::HistType::kTH2F , " hItsSignal" , " ITS Signal; p (GeV/#it{c}) ; <ITS Cluster Size> x <cos #lambda>" },
310315 {kItsElectron , o2::framework::HistType::kTH2F , " hItsPidElectron" , " ITS PID Electron; p (GeV/#it{c}) ; n#sigma_{TPC,el}" },
311316 {kItsPion , o2::framework::HistType::kTH2F , " hItsPidPion" , " ITS PID Pion; p (GeV/#it{c}) ; n#sigma_{ITS,pi}" },
@@ -352,15 +357,15 @@ constexpr std::array<histmanager::HistInfo<TrackHist>, kTrackHistLast>
352357 {kTruePtVsPt , o2::framework::HistType::kTH2F , " hTruePtVsPt" , " True transverse momentum vs transverse momentum; p_{T,True} (GeV/#it{c}); p_{T,True} (GeV/#it{c})" },
353358 {kTrueEtaVsEta , o2::framework::HistType::kTH2F , " hTrueEtaVsEta" , " True pseudorapdity vs pseudorapdity; #eta_{True}; #eta" },
354359 {kTruePhiVsPhi , o2::framework::HistType::kTH2F , " hTruePhiVsPhi" , " True azimuthal angle vs azimuthal angle; #varphi_{True}; #varphi" },
355- {kNoMcParticle , o2::framework::HistType::kTHnSparseF , " hNoMcParticle" , " Wrongly reconstructed particles; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
360+ {kNoMcParticle , o2::framework::HistType::kTHnSparseF , " hNoMcParticle" , " Wrongly reconstructed particles; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
356361 {kPrimary , o2::framework::HistType::kTHnSparseF , " hPrimary" , " Primary particles; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
357- {kFromWrongCollision , o2::framework::HistType::kTHnSparseF , " hFromWrongCollision" , " Particles associated to wrong collision; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
358- {kFromMaterial , o2::framework::HistType::kTHnSparseF , " hFromMaterial" , " Particles from material; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
359- {kMissidentified , o2::framework::HistType::kTHnSparseF , " hMissidentified" , " Missidentified particles (fake/wrong PDG code); p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
360- {kSecondary1 , o2::framework::HistType::kTHnSparseF , " hFromSecondary1" , " Particles from secondary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
361- {kSecondary2 , o2::framework::HistType::kTHnSparseF , " hFromSecondary2" , " Particles from seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
362- {kSecondary3 , o2::framework::HistType::kTHnSparseF , " hFromSecondary3" , " Particles from seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
363- {kSecondaryOther , o2::framework::HistType::kTHnSparseF , " hFromSecondaryOther" , " Particles from every other seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm)" },
362+ {kFromWrongCollision , o2::framework::HistType::kTHnSparseF , " hFromWrongCollision" , " Particles associated to wrong collision; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
363+ {kFromMaterial , o2::framework::HistType::kTHnSparseF , " hFromMaterial" , " Particles from material; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
364+ {kMissidentified , o2::framework::HistType::kTHnSparseF , " hMissidentified" , " Missidentified particles (fake/wrong PDG code); p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
365+ {kSecondary1 , o2::framework::HistType::kTHnSparseF , " hFromSecondary1" , " Particles from secondary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
366+ {kSecondary2 , o2::framework::HistType::kTHnSparseF , " hFromSecondary2" , " Particles from seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
367+ {kSecondary3 , o2::framework::HistType::kTHnSparseF , " hFromSecondary3" , " Particles from seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
368+ {kSecondaryOther , o2::framework::HistType::kTHnSparseF , " hFromSecondaryOther" , " Particles from every other seconary decay; p_{T} (GeV/#it{c}); DCA_{xy} (cm); DCA_{z} (cm); " },
364369 }};
365370
366371#define TRACK_HIST_ANALYSIS_MAP (conf ) \
@@ -394,6 +399,8 @@ constexpr std::array<histmanager::HistInfo<TrackHist>, kTrackHistLast>
394399 {kPtVsDcaxy , {confAnalysis.pt , confQa.dcaXy }}, \
395400 {kPtVsDcaz , {confAnalysis.pt , confQa.dcaZ }}, \
396401 {kPtVsDca , {confAnalysis.pt , confQa.dca }}, \
402+ {kPtVsDcaxyVsDcaz , {confAnalysis.pt , confQa.dcaXy , confQa.dcaZ }}, \
403+ {kPVsPTpc , {confQa.p , confQa.p }}, \
397404 {kItsSignal , {confQa.p , confQa.itsSignal }}, \
398405 {kItsElectron , {confQa.p , confQa.itsElectron }}, \
399406 {kItsPion , {confQa.p , confQa.itsPion }}, \
@@ -633,6 +640,8 @@ class TrackHistManager
633640 mPlotHeliumPid = ConfBinningQa.plotHeliumPid .value ;
634641 mMomentumType = static_cast <modes::MomentumType>(ConfBinningQa.momentumType .value );
635642
643+ mPlotDcaCorrelation = ConfBinningQa.plotDcaCorrelation .value ;
644+
636645 mPlotOrigins = ConfBinningQa.plotOrigins .value ;
637646 mPlotNSecondaries = ConfBinningQa.pdgCodesForMothersOfSecondary .value .size ();
638647
@@ -686,6 +695,11 @@ class TrackHistManager
686695 mHistogramRegistry ->add (qaDir + getHistNameV2 (kPtVsDcaxy , HistTable), getHistDesc (kPtVsDcaxy , HistTable), getHistType (kPtVsDcaxy , HistTable), {Specs.at (kPtVsDcaxy )});
687696 mHistogramRegistry ->add (qaDir + getHistNameV2 (kPtVsDcaz , HistTable), getHistDesc (kPtVsDcaz , HistTable), getHistType (kPtVsDcaz , HistTable), {Specs.at (kPtVsDcaz )});
688697 mHistogramRegistry ->add (qaDir + getHistNameV2 (kPtVsDca , HistTable), getHistDesc (kPtVsDca , HistTable), getHistType (kPtVsDca , HistTable), {Specs.at (kPtVsDca )});
698+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kPVsPTpc , HistTable), getHistDesc (kPVsPTpc , HistTable), getHistType (kPVsPTpc , HistTable), {Specs.at (kPVsPTpc )});
699+ }
700+
701+ if (mPlotDcaCorrelation ) {
702+ mHistogramRegistry ->add (qaDir + getHistNameV2 (kPtVsDcaxyVsDcaz , HistTable), getHistDesc (kPtVsDcaxyVsDcaz , HistTable), getHistType (kPtVsDcaxyVsDcaz , HistTable), {Specs.at (kPtVsDcaxyVsDcaz )});
689703 }
690704
691705 std::string pidDir = std::string (prefix) + std::string (PidDir);
@@ -835,6 +849,11 @@ class TrackHistManager
835849 mHistogramRegistry ->fill (HIST (prefix) + HIST (QaDir) + HIST (getHistName (kPtVsDcaxy , HistTable)), mAbsCharge * track.pt (), track.dcaXY ());
836850 mHistogramRegistry ->fill (HIST (prefix) + HIST (QaDir) + HIST (getHistName (kPtVsDcaz , HistTable)), mAbsCharge * track.pt (), track.dcaZ ());
837851 mHistogramRegistry ->fill (HIST (prefix) + HIST (QaDir) + HIST (getHistName (kPtVsDca , HistTable)), mAbsCharge * track.pt (), track.dca ());
852+ mHistogramRegistry ->fill (HIST (prefix) + HIST (QaDir) + HIST (getHistName (kPVsPTpc , HistTable)), track.p (), track.tpcInnerParam ());
853+ }
854+
855+ if (mPlotDcaCorrelation ) {
856+ mHistogramRegistry ->fill (HIST (prefix) + HIST (QaDir) + HIST (getHistName (kPtVsDcaxyVsDcaz , HistTable)), mAbsCharge * track.pt (), track.dcaXY (), track.dcaZ ());
838857 }
839858
840859 float momentum = 0 .f ;
@@ -1013,6 +1032,7 @@ class TrackHistManager
10131032 bool mPlotDeuteronPid = false ;
10141033 bool mPlotTritonPid = false ;
10151034 bool mPlotHeliumPid = false ;
1035+ bool mPlotDcaCorrelation = false ;
10161036 bool mPlotOrigins = false ;
10171037 int mPlotNSecondaries = 0 ;
10181038 std::array<int , MaxSecondary> mPdgCodesSecondaryMother = {0 };
0 commit comments