From e30126bb02413df479f75ceb18d4ed67f14c4186 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Thu, 12 Dec 2024 21:16:15 +0800 Subject: [PATCH 01/27] cut pt --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index fe77bb275d9..cf2bc089d7c 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -19,6 +19,7 @@ /// \author Jinjoo Seo , Inha University /// \author Fabrizio Grosa , CERN /// \author Federica Zanone , Heidelberg University +/// \author Ruiqi Yin , Fudan University #include // std::find #include // std::distance @@ -3235,6 +3236,10 @@ struct HfTrackIndexSkimCreatorLfCascades { // selections have been set to run2 lambda dedicated cuts // selections for cascade have been set to the loosest value between xi and omega // a tolerance has been added to be more conservative + Configurable ptMinTrackOmegacZeroToOmegaPiLfCasc{"ptMinTrackOmegacZeroToOmegaPiLfCasc", 2.0, "min. track pT for Omegaczero in Omega + Pi decays"}; + Configurable ptMinTrackOmegaczeroToOmegaKaLfCasc{"ptMinTrackOmegaczeroToOmegaKaLfCasc", 2.0, "min. track pT for Omegaczero in Omega + Ka decays"}; + Configurable ptMinTrackXicZeroOmegacZeroLfCasc{"ptMinTrackXicZeroOmegacZeroLfCasc", 2.0, "min. track pT for XicZeroOmegacZero in Xi + Pi decays"}; + Configurable ptMinTrackXicplusLfCasc{"ptMinTrackXicplusLfCasc", 2.0, "min. track pT for Xicplus in Xi + Pi + Pi decays"}; Configurable v0TransvRadius{"v0TransvRadius", 1.0, "V0 radius in xy plane"}; // 1.2 (xi) and 1.1 (omega) in run2 Configurable cascTransvRadius{"cascTransvRadius", 0.4, "Cascade radius in xy plane"}; // 0.5 cm (xi) and 0.6 (omega) in run2 Configurable dcaBachToPv{"dcaBachToPv", 0.03, "DCA Bach To PV"}; // 0.04 in run2 @@ -3358,6 +3363,13 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); + //pT rej + registry.add("hPtXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac/Xic to Omega Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsOmegacZeroToOmegaK", "Omegac/Xic to Omega Ka tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsXicPlusToXiPiPi", "Omegac/Xic to Xi Pi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + //registry.add("hRejpTCharmBaryons", "CharmBaryons rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 + // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); registry.add("hMassOmegacZeroToOmegaPi", "2-prong candidates;inv. mass (#Omega #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3555,17 +3567,19 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array pVecPion1XiHyp = {0.}; df2.getTrack(0).getPxPyPzGlo(pVecXi); df2.getTrack(1).getPxPyPzGlo(pVecPion1XiHyp); + float p_T_Xic = std::hypot(pVecXi[0] + pVecPion1XiHyp[0], pVecXi[1] + pVecPion1XiHyp[1]); std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax) && (p_T_Xic >= config.ptMinTrackXicZeroOmegacZeroLfCasc)) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); } // fill histograms if (config.fillHistograms && (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi))) { registry.fill(HIST("hMassXicZeroOmegacZeroToXiPi"), mass2ProngXiHyp); + registry.fill(HIST("hPtXicZeroOmegacZeroToXiPi"), p_T_Xic); } } else if (df2.isPropagationFailure()) { LOGF(info, "Exception caught: failed to propagate tracks (2prong - xi) to charm baryon decay vtx"); @@ -3596,16 +3610,17 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array pVecCharmBachelor1OmegaHyp = {0.}; df2.getTrack(0).getPxPyPzGlo(pVecOmega); df2.getTrack(1).getPxPyPzGlo(pVecCharmBachelor1OmegaHyp); + float p_T_Omegac = std::hypot(pVecOmega[0] + pVecCharmBachelor1OmegaHyp[0], pVecOmega[1] + pVecCharmBachelor1OmegaHyp[1]); std::array, 2> arrMomToOmega = {pVecOmega, pVecCharmBachelor1OmegaHyp}; auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax) && (p_T_Omegac >= config.ptMinTrackOmegacZeroToOmegaPiLfCasc)) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax) && (p_T_Omegac >= config.ptMinTrackOmegaczeroToOmegaKaLfCasc)) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); } } @@ -3614,9 +3629,11 @@ struct HfTrackIndexSkimCreatorLfCascades { if (config.fillHistograms) { if (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi)) { registry.fill(HIST("hMassOmegacZeroToOmegaPi"), mass2ProngOmegaPiHyp); + registry.fill(HIST("hPtCutsOmegacZeroToOmegaPi"), p_T_Omegac); } if (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK)) { registry.fill(HIST("hMassOmegacZeroToOmegaK"), mass2ProngOmegaKHyp); + registry.fill(HIST("hPtCutsOmegacZeroToOmegaK"), p_T_Omegac); } } } else if (df2.isPropagationFailure()) { @@ -3689,17 +3706,19 @@ struct HfTrackIndexSkimCreatorLfCascades { df3.getTrack(0).getPxPyPzGlo(pVec1); // take the momentum at the Xic vertex df3.getTrack(1).getPxPyPzGlo(pVec2); df3.getTrack(2).getPxPyPzGlo(pVec3); + float p_T_Xic3Prong = std::hypot(pVec1[0] + pVec2[0] + pVec3[0], pVec1[1] + pVec2[1] + pVec3[1]); std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax) && (p_T_Xic3Prong >= config.ptMinTrackXicplusLfCasc)) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); } // fill histograms if (config.fillHistograms && (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi))) { registry.fill(HIST("hMassXicPlusToXiPiPi"), mass3Prong); + registry.fill(HIST("hPtCutsXicPlusToXiPiPi"), p_T_Xic3Prong); } } else if (df3.isPropagationFailure()) { LOGF(info, "Exception caught: failed to propagate tracks (3prong) to charm baryon decay vtx"); From 08888f7860a27d5335885c9eb43efb61e60622f1 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Thu, 12 Dec 2024 21:47:16 +0800 Subject: [PATCH 02/27] cut pt2 --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 65 +++++++++++++------ 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index cf2bc089d7c..eebef1aabff 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3235,11 +3235,11 @@ struct HfTrackIndexSkimCreatorLfCascades { // Selection criteria // selections have been set to run2 lambda dedicated cuts // selections for cascade have been set to the loosest value between xi and omega - // a tolerance has been added to be more conservative - Configurable ptMinTrackOmegacZeroToOmegaPiLfCasc{"ptMinTrackOmegacZeroToOmegaPiLfCasc", 2.0, "min. track pT for Omegaczero in Omega + Pi decays"}; - Configurable ptMinTrackOmegaczeroToOmegaKaLfCasc{"ptMinTrackOmegaczeroToOmegaKaLfCasc", 2.0, "min. track pT for Omegaczero in Omega + Ka decays"}; - Configurable ptMinTrackXicZeroOmegacZeroLfCasc{"ptMinTrackXicZeroOmegacZeroLfCasc", 2.0, "min. track pT for XicZeroOmegacZero in Xi + Pi decays"}; - Configurable ptMinTrackXicplusLfCasc{"ptMinTrackXicplusLfCasc", 2.0, "min. track pT for Xicplus in Xi + Pi + Pi decays"}; + // a tolerance has been added to be more conservative ptMinOmegaczeroToOmegaKaLfCasc ptMinXicZeroOmegacZeroToXiPiLfCasc + Configurable ptMinOmegacZeroToOmegaPiLfCasc{"ptMinOmegacZeroToOmegaPiLfCasc", 2.0, "min. pT for Omegaczero in Omega + Pi decays"}; + Configurable ptMinOmegaczeroToOmegaKaLfCasc{"ptMinOmegaczeroToOmegaKaLfCasc", 2.0, "min. pT for Omegaczero in Omega + Ka decays"}; + Configurable ptMinXicZeroOmegacZeroToXiPiLfCasc{"ptMinXicZeroOmegacZeroToXiPiLfCasc", 2.0, "min. pT for XicZeroOmegacZero in Xi + Pi decays"}; + Configurable ptMinXicplusLfCasc{"ptMinXicplusLfCasc", 2.0, "min. pT for Xicplus in Xi + Pi + Pi decays"}; Configurable v0TransvRadius{"v0TransvRadius", 1.0, "V0 radius in xy plane"}; // 1.2 (xi) and 1.1 (omega) in run2 Configurable cascTransvRadius{"cascTransvRadius", 0.4, "Cascade radius in xy plane"}; // 0.5 cm (xi) and 0.6 (omega) in run2 Configurable dcaBachToPv{"dcaBachToPv", 0.03, "DCA Bach To PV"}; // 0.04 in run2 @@ -3365,10 +3365,13 @@ struct HfTrackIndexSkimCreatorLfCascades { //pT rej registry.add("hPtXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac/Xic to Omega Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsOmegacZeroToOmegaK", "Omegac/Xic to Omega Ka tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsXicPlusToXiPiPi", "Omegac/Xic to Xi Pi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - //registry.add("hRejpTCharmBaryons", "CharmBaryons rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3572,8 +3575,14 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax) && (p_T_Xic >= config.ptMinTrackXicZeroOmegacZeroLfCasc)) { - SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) + { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); + if(p_T_Xic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) + { + SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); + } } // fill histograms @@ -3616,12 +3625,25 @@ struct HfTrackIndexSkimCreatorLfCascades { auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax) && (p_T_Omegac >= config.ptMinTrackOmegacZeroToOmegaPiLfCasc)) { - SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) + { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); + if(p_T_Omegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) + { + SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); + } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax) && (p_T_Omegac >= config.ptMinTrackOmegaczeroToOmegaKaLfCasc)) { - SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); + if(p_T_Omegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) + { + SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); + } } } @@ -3633,7 +3655,7 @@ struct HfTrackIndexSkimCreatorLfCascades { } if (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK)) { registry.fill(HIST("hMassOmegacZeroToOmegaK"), mass2ProngOmegaKHyp); - registry.fill(HIST("hPtCutsOmegacZeroToOmegaK"), p_T_Omegac); + registry.fill(HIST("hPtCutsOmegacZeroToOmegaKa"), p_T_Omegac); } } } else if (df2.isPropagationFailure()) { @@ -3711,8 +3733,13 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax) && (p_T_Xic3Prong >= config.ptMinTrackXicplusLfCasc)) { - SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) + { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); + if(p_T_Xic3Prong >= config.ptMinXicplusLfCasc) + { + SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); + } } // fill histograms From d12a8d4766048059f44ac8ae0ce2ddfe49b21fca Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 12 Dec 2024 14:12:09 +0000 Subject: [PATCH 03/27] Please consider the following formatting changes --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index eebef1aabff..0a8f81ec840 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3363,15 +3363,15 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); - //pT rej + // pT rej registry.add("hPtXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 - registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3575,13 +3575,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) - { - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); - if(p_T_Xic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 0); + if (p_T_Xic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 1); } } @@ -3625,24 +3623,19 @@ struct HfTrackIndexSkimCreatorLfCascades { auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) - { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); - if(p_T_Omegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) - { + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 0); + if (p_T_Omegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 1); } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); - if(p_T_Omegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) - { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 0); + if (p_T_Omegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 1); } } } @@ -3733,12 +3726,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) - { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); - if(p_T_Xic3Prong >= config.ptMinXicplusLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 0); + if (p_T_Xic3Prong >= config.ptMinXicplusLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 1); } } From ac62b6b86e2ccf5e7c1153aca4b38e3b0075d71a Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Fri, 13 Dec 2024 12:22:56 +0800 Subject: [PATCH 04/27] cut pt(final) --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 82 ++++++++++--------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index 0a8f81ec840..abb76d867a0 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3236,10 +3236,10 @@ struct HfTrackIndexSkimCreatorLfCascades { // selections have been set to run2 lambda dedicated cuts // selections for cascade have been set to the loosest value between xi and omega // a tolerance has been added to be more conservative ptMinOmegaczeroToOmegaKaLfCasc ptMinXicZeroOmegacZeroToXiPiLfCasc - Configurable ptMinOmegacZeroToOmegaPiLfCasc{"ptMinOmegacZeroToOmegaPiLfCasc", 2.0, "min. pT for Omegaczero in Omega + Pi decays"}; - Configurable ptMinOmegaczeroToOmegaKaLfCasc{"ptMinOmegaczeroToOmegaKaLfCasc", 2.0, "min. pT for Omegaczero in Omega + Ka decays"}; - Configurable ptMinXicZeroOmegacZeroToXiPiLfCasc{"ptMinXicZeroOmegacZeroToXiPiLfCasc", 2.0, "min. pT for XicZeroOmegacZero in Xi + Pi decays"}; - Configurable ptMinXicplusLfCasc{"ptMinXicplusLfCasc", 2.0, "min. pT for Xicplus in Xi + Pi + Pi decays"}; + Configurable ptMinOmegacZeroToOmegaPiLfCasc{"ptMinOmegacZeroToOmegaPiLfCasc", 0.f, "min. pT for Omegaczero in Omega + Pi decays"}; + Configurable ptMinOmegaczeroToOmegaKaLfCasc{"ptMinOmegaczeroToOmegaKaLfCasc", 0.f, "min. pT for Omegaczero in Omega + Ka decays"}; + Configurable ptMinXicZeroOmegacZeroToXiPiLfCasc{"ptMinXicZeroOmegacZeroToXiPiLfCasc", 0.f, "min. pT for XicZeroOmegacZero in Xi + Pi decays"}; + Configurable ptMinXicplusLfCasc{"ptMinXicplusLfCasc", 0.f, "min. pT for Xicplus in Xi + Pi + Pi decays"}; Configurable v0TransvRadius{"v0TransvRadius", 1.0, "V0 radius in xy plane"}; // 1.2 (xi) and 1.1 (omega) in run2 Configurable cascTransvRadius{"cascTransvRadius", 0.4, "Cascade radius in xy plane"}; // 0.5 cm (xi) and 0.6 (omega) in run2 Configurable dcaBachToPv{"dcaBachToPv", 0.03, "DCA Bach To PV"}; // 0.04 in run2 @@ -3363,15 +3363,15 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); - // pT rej - registry.add("hPtXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T}^{track} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // pass dcafitter --> 0, pT>pTmin --> 1 - registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + //pT rej + registry.add("hPtCutsXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3570,23 +3570,25 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array pVecPion1XiHyp = {0.}; df2.getTrack(0).getPxPyPzGlo(pVecXi); df2.getTrack(1).getPxPyPzGlo(pVecPion1XiHyp); - float p_T_Xic = std::hypot(pVecXi[0] + pVecPion1XiHyp[0], pVecXi[1] + pVecPion1XiHyp[1]); + float ptXic = RecoDecay::pt(pVecXi, pVecPion1XiHyp); std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 0); - if (p_T_Xic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) + { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); + if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 1); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); } } // fill histograms if (config.fillHistograms && (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi))) { registry.fill(HIST("hMassXicZeroOmegacZeroToXiPi"), mass2ProngXiHyp); - registry.fill(HIST("hPtXicZeroOmegacZeroToXiPi"), p_T_Xic); + registry.fill(HIST("hPtCutsXicZeroOmegacZeroToXiPi"), ptXic); } } else if (df2.isPropagationFailure()) { LOGF(info, "Exception caught: failed to propagate tracks (2prong - xi) to charm baryon decay vtx"); @@ -3617,25 +3619,30 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array pVecCharmBachelor1OmegaHyp = {0.}; df2.getTrack(0).getPxPyPzGlo(pVecOmega); df2.getTrack(1).getPxPyPzGlo(pVecCharmBachelor1OmegaHyp); - float p_T_Omegac = std::hypot(pVecOmega[0] + pVecCharmBachelor1OmegaHyp[0], pVecOmega[1] + pVecCharmBachelor1OmegaHyp[1]); + float ptOmegac = RecoDecay::pt(pVecOmega, pVecCharmBachelor1OmegaHyp); std::array, 2> arrMomToOmega = {pVecOmega, pVecCharmBachelor1OmegaHyp}; auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 0); - if (p_T_Omegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) { + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) + { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); + if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 0); - if (p_T_Omegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); + if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); } } } @@ -3644,11 +3651,11 @@ struct HfTrackIndexSkimCreatorLfCascades { if (config.fillHistograms) { if (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi)) { registry.fill(HIST("hMassOmegacZeroToOmegaPi"), mass2ProngOmegaPiHyp); - registry.fill(HIST("hPtCutsOmegacZeroToOmegaPi"), p_T_Omegac); + registry.fill(HIST("hPtCutsOmegacZeroToOmegaPi"), ptOmegac); } if (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK)) { registry.fill(HIST("hMassOmegacZeroToOmegaK"), mass2ProngOmegaKHyp); - registry.fill(HIST("hPtCutsOmegacZeroToOmegaKa"), p_T_Omegac); + registry.fill(HIST("hPtCutsOmegacZeroToOmegaKa"), ptOmegac); } } } else if (df2.isPropagationFailure()) { @@ -3721,23 +3728,24 @@ struct HfTrackIndexSkimCreatorLfCascades { df3.getTrack(0).getPxPyPzGlo(pVec1); // take the momentum at the Xic vertex df3.getTrack(1).getPxPyPzGlo(pVec2); df3.getTrack(2).getPxPyPzGlo(pVec3); - float p_T_Xic3Prong = std::hypot(pVec1[0] + pVec2[0] + pVec3[0], pVec1[1] + pVec2[1] + pVec3[1]); + float ptXic3Prong = RecoDecay::pt(pVec1, pVec2, pVec3); std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 0); - if (p_T_Xic3Prong >= config.ptMinXicplusLfCasc) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) + { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); + if (ptXic3Prong >= config.ptMinXicplusLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 1); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); } } // fill histograms if (config.fillHistograms && (TESTBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi))) { registry.fill(HIST("hMassXicPlusToXiPiPi"), mass3Prong); - registry.fill(HIST("hPtCutsXicPlusToXiPiPi"), p_T_Xic3Prong); + registry.fill(HIST("hPtCutsXicPlusToXiPiPi"), ptXic3Prong); } } else if (df3.isPropagationFailure()) { LOGF(info, "Exception caught: failed to propagate tracks (3prong) to charm baryon decay vtx"); From e0a2b18abddf2fd5c0cf891a3ad49903872d4b5d Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 13 Dec 2024 04:43:12 +0000 Subject: [PATCH 05/27] Please consider the following formatting changes --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index abb76d867a0..1e8aadfb6b0 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3363,15 +3363,15 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); - //pT rej + // pT rej registry.add("hPtCutsXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 - registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3575,13 +3575,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) - { - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); - if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 0); + if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 1); } } @@ -3625,24 +3623,19 @@ struct HfTrackIndexSkimCreatorLfCascades { auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) - { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); - if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) - { + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 0); + if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 1); } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); - if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) - { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 0); + if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 1); } } } @@ -3733,12 +3726,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) - { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); - if (ptXic3Prong >= config.ptMinXicplusLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 0); + if (ptXic3Prong >= config.ptMinXicplusLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 1); } } From d445bd2eeb7bb7cd536c6603f7fe3ca6daf1a164 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Fri, 13 Dec 2024 17:14:44 +0800 Subject: [PATCH 06/27] pT cut according to suggestions --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index 1e8aadfb6b0..abb76d867a0 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3363,15 +3363,15 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); - // pT rej + //pT rej registry.add("hPtCutsXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // pass dcafitter --> 0, pT>pTmin --> 1 - registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3575,11 +3575,13 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 0); - if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) + { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); + if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 1); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); } } @@ -3623,19 +3625,24 @@ struct HfTrackIndexSkimCreatorLfCascades { auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 0); - if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) { + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) + { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); + if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 0); - if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) + { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); + if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); } } } @@ -3726,11 +3733,12 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 0); - if (ptXic3Prong >= config.ptMinXicplusLfCasc) { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) + { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); + if (ptXic3Prong >= config.ptMinXicplusLfCasc) + { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 1); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); } } From 7aea91a0c690d666cb3a8b3295a0ec71605907bf Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Fri, 13 Dec 2024 17:50:54 +0800 Subject: [PATCH 07/27] pT cut (static_cast) --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index abb76d867a0..7e98cdb56c8 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -278,10 +278,10 @@ struct HfTrackIndexSkimCreatorTagSelTracks { Preslice trackIndicesPerCollision = aod::track_association::collisionId; - Partition pvContributors = ((aod::track::flags & (uint32_t)aod::track::PVContributor) == (uint32_t)aod::track::PVContributor); - Partition pvContributorsWithPidTpc = ((aod::track::flags & (uint32_t)aod::track::PVContributor) == (uint32_t)aod::track::PVContributor); - Partition pvContributorsWithPidTof = ((aod::track::flags & (uint32_t)aod::track::PVContributor) == (uint32_t)aod::track::PVContributor); - Partition pvContributorsWithPidTpcTof = ((aod::track::flags & (uint32_t)aod::track::PVContributor) == (uint32_t)aod::track::PVContributor); + Partition pvContributors = ((aod::track::flags & static_cast(aod::track::PVContributor)) == static_cast(aod::track::PVContributor)); + Partition pvContributorsWithPidTpc = ((aod::track::flags & static_cast(aod::track::PVContributor)) == static_cast(aod::track::PVContributor)); + Partition pvContributorsWithPidTof = ((aod::track::flags & static_cast(aod::track::PVContributor)) == static_cast(aod::track::PVContributor)); + Partition pvContributorsWithPidTpcTof = ((aod::track::flags & static_cast(aod::track::PVContributor)) == static_cast(aod::track::PVContributor)); // QA of PV refit ConfigurableAxis axisPvRefitDeltaX{"axisPvRefitDeltaX", {1000, -0.5f, 0.5f}, "DeltaX binning PV refit"}; @@ -2049,7 +2049,7 @@ struct HfTrackIndexSkimCreator { } if (config.debugPvRefit) { LOG(info) << "===> nTrk: " << nTrk << ", nContrib: " << nContrib << ", nNonContrib: " << nNonContrib; - if ((uint16_t)vecPvContributorTrackParCov.size() != collision.numContrib() || (uint16_t)nContrib != collision.numContrib()) { + if (static_cast(vecPvContributorTrackParCov.size()) != collision.numContrib() || static_cast(nContrib != collision.numContrib())) { LOG(info) << "!!! Some problem here !!! vecPvContributorTrackParCov.size()= " << vecPvContributorTrackParCov.size() << ", nContrib=" << nContrib << ", collision.numContrib()" << collision.numContrib(); } } From 9fb0bae70a708e9af6327253feb571abd43cd03a Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Fri, 13 Dec 2024 09:51:03 +0000 Subject: [PATCH 08/27] Please consider the following formatting changes --- PWGHF/TableProducer/trackIndexSkimCreator.cxx | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/PWGHF/TableProducer/trackIndexSkimCreator.cxx b/PWGHF/TableProducer/trackIndexSkimCreator.cxx index 7e98cdb56c8..5548863ac6c 100644 --- a/PWGHF/TableProducer/trackIndexSkimCreator.cxx +++ b/PWGHF/TableProducer/trackIndexSkimCreator.cxx @@ -3363,15 +3363,15 @@ struct HfTrackIndexSkimCreatorLfCascades { registry.add("hDCACascDau", "hDCACascDau", {HistType::kTH1D, {{500, 0.0f, 5.0f, "cm^{2}"}}}); registry.add("hLambdaMass", "hLambdaMass", {HistType::kTH1D, {{400, 0.916f, 1.316f, "Inv. Mass (GeV/c^{2})"}}}); - //pT rej + // pT rej registry.add("hPtCutsXicZeroOmegacZeroToXiPi", "Omegac/Xic to Xi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaPi", "Omegac to Omega Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsOmegacZeroToOmegaKa", "Omegac to Omega Ka tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); registry.add("hPtCutsXicPlusToXiPiPi", "Xicplus to Xi Pi Pi tracks selected by pT;#it{p}_{T} (GeV/#it{c});entries", {HistType::kTH1D, {{500, 0., 50.}}}); - registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); //pass dcafitter --> 0, pT>pTmin --> 1 - registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); - registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicZeroOmegacZeroToXiPi", "XicZeroOmegacZeroToXiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // pass dcafitter --> 0, pT>pTmin --> 1 + registry.add("hRejpTStatusOmegacZeroToOmegaPi", "OmegacZeroToOmegaPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusOmegacZeroToOmegaKa", "OmegacZeroToOmegaKa rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); + registry.add("hRejpTStatusXicPlusToXiPiPi", "XicPlusToXiPiPi rejected by pT status;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // mass spectra registry.add("hMassXicZeroOmegacZeroToXiPi", "2-prong candidates;inv. mass (#Xi #pi) (GeV/#it{c}^{2});entries", {HistType::kTH1D, {{500, 2., 3.}}}); @@ -3575,13 +3575,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 2> arrMomToXi = {pVecXi, pVecPion1XiHyp}; auto mass2ProngXiHyp = RecoDecay::m(arrMomToXi, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) - { - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),0); - if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass2ProngXiHyp >= config.massXiPiMin) && (mass2ProngXiHyp <= config.massXiPiMax)) { + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 0); + if (ptXic >= config.ptMinXicZeroOmegacZeroToXiPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::XiczeroOmegaczeroToXiPi); - registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"),1); + registry.fill(HIST("hRejpTStatusXicZeroOmegacZeroToXiPi"), 1); } } @@ -3625,24 +3623,19 @@ struct HfTrackIndexSkimCreatorLfCascades { auto mass2ProngOmegaPiHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi]); auto mass2ProngOmegaKHyp = RecoDecay::m(arrMomToOmega, arrMass2Prong[hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK]); - if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) - { - if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),0); - if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) - { + if (std::abs(casc.mOmega() - massOmega) < config.cascadeMassWindow) { + if ((mass2ProngOmegaPiHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaPiHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 0); + if (ptOmegac >= config.ptMinOmegacZeroToOmegaPiLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaPi); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaPi"), 1); } } - if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) - { - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),0); - if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) - { + if ((mass2ProngOmegaKHyp >= config.massOmegaCharmBachelorMin) && (mass2ProngOmegaKHyp <= config.massOmegaCharmBachelorMax)) { + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 0); + if (ptOmegac >= config.ptMinOmegaczeroToOmegaKaLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType2Prong::OmegaczeroToOmegaK); - registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"),1); + registry.fill(HIST("hRejpTStatusOmegacZeroToOmegaKa"), 1); } } } @@ -3733,12 +3726,11 @@ struct HfTrackIndexSkimCreatorLfCascades { std::array, 3> arr3Mom = {pVec1, pVec2, pVec3}; auto mass3Prong = RecoDecay::m(arr3Mom, arrMass3Prong[hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi]); - if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) - { registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),0); - if (ptXic3Prong >= config.ptMinXicplusLfCasc) - { + if ((std::abs(casc.mXi() - massXi) < config.cascadeMassWindow) && (mass3Prong >= config.massXiPiPiMin) && (mass3Prong <= config.massXiPiPiMax)) { + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 0); + if (ptXic3Prong >= config.ptMinXicplusLfCasc) { SETBIT(hfFlag, aod::hf_cand_casc_lf::DecayType3Prong::XicplusToXiPiPi); - registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"),1); + registry.fill(HIST("hRejpTStatusXicPlusToXiPiPi"), 1); } } From c24a3c7645deec3e49ce532ff57669224f53a1d4 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Sun, 19 Jan 2025 17:16:06 +0800 Subject: [PATCH 09/27] Add competing rejection and KF preselection for Omegac0 -> Omega Pi in PbPb analysis --- .../DataModel/CandidateReconstructionTables.h | 3 +- .../candidateCreatorXic0Omegac0.cxx | 105 +++++++++++++-- .../candidateSelectorOmegac0ToOmegaPi.cxx | 124 ++++++++++++++++-- .../treeCreatorOmegacToOmegaPi.cxx | 5 +- 4 files changed, 213 insertions(+), 24 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index f826d3ff620..789f8d1aa7c 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1313,6 +1313,7 @@ DECLARE_SOA_COLUMN(OmegacChi2OverNdf, omegacChi2OverNdf, float); DECLARE_SOA_COLUMN(XicChi2OverNdf, xicChi2OverNdf, float); DECLARE_SOA_COLUMN(MassV0Chi2OverNdf, massV0Chi2OverNdf, float); DECLARE_SOA_COLUMN(MassCascChi2OverNdf, massCascChi2OverNdf, float); +DECLARE_SOA_COLUMN(CascRejectInvmass, cascRejectInvmass, float); // MC matching result: DECLARE_SOA_COLUMN(FlagMcMatchRec, flagMcMatchRec, int8_t); // reconstruction level @@ -1457,7 +1458,7 @@ DECLARE_SOA_TABLE(HfOmegacKf, "AOD", "HFOMEGACKF", //! hf_cand_xic0_omegac0::V0Ndf, hf_cand_xic0_omegac0::CascNdf, hf_cand_xic0_omegac0::OmegacNdf, hf_cand_xic0_omegac0::MassV0Ndf, hf_cand_xic0_omegac0::MassCascNdf, hf_cand_xic0_omegac0::V0Chi2OverNdf, hf_cand_xic0_omegac0::CascChi2OverNdf, hf_cand_xic0_omegac0::OmegacChi2OverNdf, - hf_cand_xic0_omegac0::MassV0Chi2OverNdf, hf_cand_xic0_omegac0::MassCascChi2OverNdf); + hf_cand_xic0_omegac0::MassV0Chi2OverNdf, hf_cand_xic0_omegac0::MassCascChi2OverNdf, hf_cand_xic0_omegac0::CascRejectInvmass); DECLARE_SOA_TABLE(HfCandToXiPiKf, "AOD", "HFCANDTOXIPIKF", //! o2::soa::Index<>, diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 8c1a0aadec1..bac0990c9a0 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -12,6 +12,7 @@ /// \file candidateCreatorXic0Omegac0.cxx /// \brief Reconstruction of Omegac0 and Xic0 decays candidates /// \author Federica Zanone , Heidelberg University +/// \author Ruiqi Yin , Fudan University /// \author Yunfan Liu , China University of Geosciences #ifndef HomogeneousField @@ -92,6 +93,7 @@ struct HfCandidateCreatorXic0Omegac0 { Configurable maxChi2{"maxChi2", 100., "discard vertices with chi2/Nprongs > this (or sum{DCAi^2}/Nprongs for abs. distance minimization)"}; Configurable refitWithMatCorr{"refitWithMatCorr", true, "when doing propagateTracksToVertex, propagate tracks to vtx with material corrections and rerun minimization"}; Configurable rejDiffCollTrack{"rejDiffCollTrack", true, "Reject tracks coming from different collisions"}; + Configurable fillAllHist{"fillAllHist", true, "Fill additional KF histograms to check selector cuts"}; // magnetic field setting from CCDB Configurable isRun2{"isRun2", false, "enable Run 2 or Run 3 GRP objects for magnetic field"}; @@ -177,6 +179,7 @@ struct HfCandidateCreatorXic0Omegac0 { float chi2MassV0; float chi2MassCasc; float etaOmegac; + float cascRejectInvmass;//rej } kfOmegac0Candidate; struct { @@ -280,7 +283,6 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hKFParticleCascTopoChi2", "hKFParticleCascTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKFParticleCascBachTopoChi2", "hKFParticleCascBachTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKFParticleDcaCharmBaryonDau", "hKFParticleDcaCharmBaryonDau", kTH1D, {{1000, -0.1f, 100.0f}}); - registry.add("hKFParticleDcaXYV0DauToPv", "hKFParticleDcaXYV0DauToPv", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKFParticleDcaXYCascBachToPv", "hKFParticleDcaXYCascBachToPv", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKfLambda_ldl", "hKfLambda_ldl", kTH1D, {{1000, 0.0f, 1000.0f}}); registry.add("hKfOmega_ldl", "hKfOmega_ldl", kTH1D, {{1000, 0.0f, 1000.0f}}); @@ -290,6 +292,38 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hDcaXYCascadeToPVKf", "hDcaXYCascadeToPVKf", kTH1D, {{1000, 0.0f, 2.0f}}); registry.add("hInvMassOmegaMinus", "hInvMassOmegaMinus", kTH1D, {{1000, 1.6f, 2.0f}}); registry.add("hInvMassXiMinus", "hInvMassXiMinus", kTH1D, {{1000, 1.25f, 1.65f}}); + registry.add("hInvMassXiMinus_rej", "hInvMassXiMinus_rej", kTH1D, {{1000, 1.25f, 1.65f}}); + //Additional KF hist + registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.0f, 1.0f}}); // new + registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.0f, 1.0f}}); // new + registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new + registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new + registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 20.0f}}); // new + registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 20.0f}}); // new + registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 10.0f}}); // new + registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, -1.0f, 1.0f}}); // new + registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, -1.0f, 1.0f}}); // new + hfEvSel.addHistograms(registry); // collision monitoring @@ -724,21 +758,26 @@ struct HfCandidateCreatorXic0Omegac0 { KFParticle kfPosPr(kfTrack0, kProton); KFParticle kfNegPi(kfTrack1, kPiMinus); KFParticle kfNegKa(kfTrackBach, kKMinus); + KFParticle kfNegPirej(kfTrackBach, kPiMinus);//rej KFParticle kfPosPi(kfTrack0, kPiPlus); KFParticle kfNegPr(kfTrack1, kProton); KFParticle kfPosKa(kfTrackBach, kKPlus); + KFParticle kfPosPirej(kfTrackBach, kPiPlus);//rej KFParticle kfBachKaon; KFParticle kfPos; KFParticle kfNeg; + KFParticle kfBachrej;//rej if (bachCharge < 0) { kfPos = kfPosPr; kfNeg = kfNegPi; kfBachKaon = kfNegKa; + kfBachrej = kfNegPirej;//rej } else { kfPos = kfPosPi; kfNeg = kfNegPr; kfBachKaon = kfPosKa; + kfBachrej = kfPosPirej;//rej } //__________________________________________ @@ -776,17 +815,23 @@ struct HfCandidateCreatorXic0Omegac0 { //__________________________________________ //*>~<* step 2 : reconstruct cascade(Omega) with KF const KFParticle* omegaDaugthers[2] = {&kfBachKaon, &kfV0}; + const KFParticle* omegaDaugthersrej[2] = {&kfBachrej, &kfV0};//rej // construct cascade KFParticle kfOmega; + KFParticle kfOmegarej;//rej kfOmega.SetConstructMethod(kfConstructMethod); + kfOmegarej.SetConstructMethod(kfConstructMethod);//rej try { kfOmega.Construct(omegaDaugthers, 2); + kfOmegarej.Construct(omegaDaugthersrej, 2);//rej } catch (std::runtime_error& e) { - LOG(debug) << "Failed to construct Omega from V0 and bachelor track: " << e.what(); + LOG(debug) << "Failed to construct Omega or Omega_rej from V0 and bachelor track: " << e.what(); continue; } float massCasc, sigCasc; + float massCascrej, sigCascrej; kfOmega.GetMass(massCasc, sigCasc); + kfOmegarej.GetMass(massCascrej, sigCascrej);//rej // err_massOmega > 0 if (sigCasc <= 0) continue; @@ -796,6 +841,8 @@ struct HfCandidateCreatorXic0Omegac0 { if (kfOmega.GetNDF() <= 0 || kfOmega.GetChi2() <= 0) continue; kfOmegac0Candidate.chi2GeoCasc = kfOmega.GetChi2(); + kfOmegac0Candidate.cascRejectInvmass = massCascrej; + registry.fill(HIST("hInvMassXiMinusrej"), massCascrej);//rej KFParticle kfOmegaMassConstrained = kfOmega; kfOmegaMassConstrained.SetNonlinearMassConstraint(o2::constants::physics::MassOmegaMinus); // set mass constrain to OmegaMinus if (kfUseCascadeMassConstraint) { @@ -965,15 +1012,15 @@ struct HfCandidateCreatorXic0Omegac0 { auto cascNdfm = kfOmegaMassConstrained.GetNDF(); auto cascChi2OverNdfm = kfOmegac0Candidate.chi2MassCasc / cascNdfm; - // KF topo Chi2 - kfOmegac0Candidate.chi2TopoV0ToPv = kfV0ToPv.GetChi2(); - kfOmegac0Candidate.chi2TopoCascToPv = kfOmegaToPv.GetChi2(); - kfOmegac0Candidate.chi2TopoPiFromOmegacToPv = kfPiFromOmegacToPv.GetChi2(); - kfOmegac0Candidate.chi2TopoOmegacToPv = kfOmegac0ToPv.GetChi2(); + // KF topo Chi2 over NDF + kfOmegac0Candidate.chi2TopoV0ToPv = kfV0ToPv.GetChi2() / kfV0ToPv.GetNDF(); + kfOmegac0Candidate.chi2TopoCascToPv = kfOmegaToPv.GetChi2() / kfOmegaToPv.GetNDF(); + kfOmegac0Candidate.chi2TopoPiFromOmegacToPv = kfPiFromOmegacToPv.GetChi2() / kfPiFromOmegacToPv.GetNDF(); + kfOmegac0Candidate.chi2TopoOmegacToPv = kfOmegac0ToPv.GetChi2() / kfOmegac0ToPv.GetNDF(); - auto cascBachTopoChi2 = kfBachKaonToOmega.GetChi2(); - kfOmegac0Candidate.chi2TopoV0ToCasc = kfV0ToCasc.GetChi2(); - kfOmegac0Candidate.chi2TopoCascToOmegac = kfOmegaToOmegaC.GetChi2(); + auto cascBachTopoChi2 = kfBachKaonToOmega.GetChi2() / kfBachKaonToOmega.GetNDF(); + kfOmegac0Candidate.chi2TopoV0ToCasc = kfV0ToCasc.GetChi2() / kfV0ToCasc.GetNDF(); + kfOmegac0Candidate.chi2TopoCascToOmegac = kfOmegaToOmegaC.GetChi2() / kfOmegaToOmegaC.GetNDF(); // KF ldl kfOmegac0Candidate.ldlV0 = ldlFromKF(kfV0, kfPV); @@ -1039,13 +1086,47 @@ struct HfCandidateCreatorXic0Omegac0 { registry.fill(HIST("hKFParticleCascBachTopoChi2"), cascBachTopoChi2); registry.fill(HIST("hKFParticleV0TopoChi2"), kfOmegac0Candidate.chi2TopoV0ToCasc); registry.fill(HIST("hKFParticleCascTopoChi2"), kfOmegac0Candidate.chi2TopoCascToOmegac); + registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2TopoOmegacToPv);//new + registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2TopoCascToPv);//new registry.fill(HIST("hKFParticleDcaCharmBaryonDau"), kfOmegac0Candidate.kfDcaOmegacDau); registry.fill(HIST("hKFParticleDcaXYCascBachToPv"), dcaxyCascBachelor); - registry.fill(HIST("hKFParticleDcaXYV0DauToPv"), dcaxyV0Dau0); + registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0);//new + registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1);//new registry.fill(HIST("hKfLambda_ldl"), kfOmegac0Candidate.ldlV0); registry.fill(HIST("hKfOmega_ldl"), kfOmegac0Candidate.ldlCasc); registry.fill(HIST("hKfOmegaC0_ldl"), kfOmegac0Candidate.ldlOmegac); registry.fill(HIST("hDcaXYCascadeToPVKf"), kfOmegac0Candidate.kfDcaXYCascToPv); + //Additional histograms + if(fillAllHist) + { + registry.fill(HIST("hEtaV0PosDau"), kfPos.GetEta()); + registry.fill(HIST("hEtaV0NegDau"), kfNeg.GetEta()); + registry.fill(HIST("hEtaKaFromCasc"), kfBachKaonToOmega.GetEta()); + registry.fill(HIST("hEtaPiFromCharmBaryon"), kfBachPionToOmegaC.GetEta()); + registry.fill(HIST("hCascradius"), RecoDecay::sqrtSumOfSquares(vertexCasc[0], vertexCasc[1])); + registry.fill(HIST("hV0radius"), RecoDecay::sqrtSumOfSquares(vertexV0[0], vertexV0[1])); + registry.fill(HIST("hCosPACasc"), kfOmegac0Candidate.cosPaCascToPv); + registry.fill(HIST("hCosPAV0"), kfOmegac0Candidate.cosPaV0ToPv); + registry.fill(HIST("hDcaCascDau"), kfOmegac0Candidate.kfDcaCascDau); + registry.fill(HIST("hDcaV0Dau"), kfOmegac0Candidate.kfDcaV0Dau); + registry.fill(HIST("hDcaXYToPvKa"), dcaxyCascBachelor); + registry.fill(HIST("hImpactParBachFromCharmBaryonXY"), impactParBachFromCharmBaryonXY); + registry.fill(HIST("hImpactParBachFromCharmBaryonZ"), impactParBachFromCharmBaryonZ); + registry.fill(HIST("hImpactParCascXY"), impactParameterCasc.getY()); + registry.fill(HIST("hImpactParCascZ"), impactParameterCasc.getZ()); + registry.fill(HIST("hPtKaFromCasc"), RecoDecay::sqrtSumOfSquares(pVecCascBachelor[0], pVecCascBachelor[1])); + registry.fill(HIST("hPtPiFromCharmBaryon"), RecoDecay::sqrtSumOfSquares(pVecCharmBachelorAsD[0], pVecCharmBachelorAsD[1])); + registry.fill(HIST("hCTauOmegac"), kfOmegac0Candidate.ctOmegac); + registry.fill(HIST("hKFGeoV0Chi2OverNdf"), v0Chi2OverNdf); + registry.fill(HIST("hKFGeoCascChi2OverNdf"), cascChi2OverNdf); + registry.fill(HIST("hKFGeoCharmbaryonChi2OverNdf"), charmbaryonChi2OverNdf); + registry.fill(HIST("hKFdecayLenXYLambda"), kfOmegac0Candidate.decayLenXYLambda); + registry.fill(HIST("hKFdecayLenXYCasc"), kfOmegac0Candidate.decayLenXYCasc); + registry.fill(HIST("hKFdecayLenXYOmegac"), kfOmegac0Candidate.decayLenXYOmegac); + registry.fill(HIST("hKFcosPaV0ToCasc"), kfOmegac0Candidate.cosPaV0ToCasc); + registry.fill(HIST("hKFcosPaCascToOmegac"), kfOmegac0Candidate.cosPaCascToOmegac); + } + // fill the table rowCandToOmegaPi(collision.globalIndex(), @@ -1087,7 +1168,7 @@ struct HfCandidateCreatorXic0Omegac0 { kfOmegac0Candidate.rapOmegac, kfOmegac0Candidate.ptPiFromOmegac, kfOmegac0Candidate.ptOmegac, kfOmegac0Candidate.cosThetaStarPiFromOmegac, v0NDF, cascNDF, charmbaryonNDF, v0Ndfm, cascNdfm, - v0Chi2OverNdf, cascChi2OverNdf, charmbaryonChi2OverNdf, v0Chi2OverNdfm, cascChi2OverNdfm); + v0Chi2OverNdf, cascChi2OverNdf, charmbaryonChi2OverNdf, v0Chi2OverNdfm, cascChi2OverNdfm, kfOmegac0Candidate.cascRejectInvmass); } // loop over LF Cascade-bachelor candidates } // end of run function diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 129887ed876..deae02de530 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -43,10 +43,10 @@ struct HfCandidateSelectorToOmegaPi { // LF analysis selections Configurable radiusCascMin{"radiusCascMin", 0.5, "Min cascade radius"}; Configurable radiusV0Min{"radiusV0Min", 1.1, "Min V0 radius"}; - Configurable cosPAV0Min{"cosPAV0Min", 0.97, "Min valueCosPA V0"}; - Configurable cosPACascMin{"cosPACascMin", 0.97, "Min value CosPA cascade"}; - Configurable dcaCascDauMax{"dcaCascDauMax", 1.0, "Max DCA cascade daughters"}; - Configurable dcaV0DauMax{"dcaV0DauMax", 1.0, "Max DCA V0 daughters"}; + Configurable cosPAV0Min{"cosPAV0Min", 0.99, "Min valueCosPA V0"}; + Configurable cosPACascMin{"cosPACascMin", 0.995, "Min value CosPA cascade"}; + Configurable dcaCascDauMax{"dcaCascDauMax", 1.4, "Max DCA cascade daughters"}; + Configurable dcaV0DauMax{"dcaV0DauMax", 1.4, "Max DCA V0 daughters"}; Configurable dcaBachToPvMin{"dcaBachToPvMin", 0.04, "DCA Bach To PV"}; Configurable dcaNegToPvMin{"dcaNegToPvMin", 0.06, "DCA Neg To PV"}; Configurable dcaPosToPvMin{"dcaPosToPvMin", 0.06, "DCA Pos To PV"}; @@ -60,24 +60,24 @@ struct HfCandidateSelectorToOmegaPi { // kinematic selections Configurable etaTrackCharmBachMax{"etaTrackCharmBachMax", 0.8, "Max absolute value of eta for charm baryon bachelor"}; - Configurable etaTrackLFDauMax{"etaTrackLFDauMax", 1.0, "Max absolute value of eta for V0 and cascade daughters"}; + Configurable etaTrackLFDauMax{"etaTrackLFDauMax", 0.8, "Max absolute value of eta for V0 and cascade daughters"}; Configurable ptKaFromCascMin{"ptKaFromCascMin", 0.15, "Min pT kaon <- casc"}; Configurable ptPiFromCharmBaryonMin{"ptPiFromCharmBaryonMin", 0.2, "Min pT pi <- charm baryon"}; Configurable impactParameterXYPiFromCharmBaryonMin{"impactParameterXYPiFromCharmBaryonMin", 0., "Min dcaxy pi from charm baryon track to PV"}; - Configurable impactParameterXYPiFromCharmBaryonMax{"impactParameterXYPiFromCharmBaryonMax", 10., "Max dcaxy pi from charm baryon track to PV"}; + Configurable impactParameterXYPiFromCharmBaryonMax{"impactParameterXYPiFromCharmBaryonMax", 0.03, "Max dcaxy pi from charm baryon track to PV"}; Configurable impactParameterZPiFromCharmBaryonMin{"impactParameterZPiFromCharmBaryonMin", 0., "Min dcaz pi from charm baryon track to PV"}; Configurable impactParameterZPiFromCharmBaryonMax{"impactParameterZPiFromCharmBaryonMax", 10., "Max dcaz pi from charm baryon track to PV"}; Configurable impactParameterXYCascMin{"impactParameterXYCascMin", 0., "Min dcaxy cascade track to PV"}; - Configurable impactParameterXYCascMax{"impactParameterXYCascMax", 10., "Max dcaxy cascade track to PV"}; + Configurable impactParameterXYCascMax{"impactParameterXYCascMax", 0.4, "Max dcaxy cascade track to PV"}; Configurable impactParameterZCascMin{"impactParameterZCascMin", 0., "Min dcaz cascade track to PV"}; Configurable impactParameterZCascMax{"impactParameterZCascMax", 10., "Max dcaz cascade track to PV"}; Configurable ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"}; Configurable ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"}; - Configurable dcaCharmBaryonDauMax{"dcaCharmBaryonDauMax", 2.0, "Max DCA charm baryon daughters"}; + Configurable dcaCharmBaryonDauMax{"dcaCharmBaryonDauMax", 0.5, "Max DCA charm baryon daughters"}; // PID options Configurable usePidTpcOnly{"usePidTpcOnly", false, "Perform PID using only TPC"}; @@ -124,6 +124,28 @@ struct HfCandidateSelectorToOmegaPi { Configurable nClustersItsInnBarrMin{"nClustersItsInnBarrMin", 1, "Minimum number of ITS clusters in inner barrel requirement for pi <- charm baryon"}; Configurable itsChi2PerClusterMax{"itsChi2PerClusterMax", 36, "Maximum value of chi2 fit over ITS clusters for pi <- charm baryon"}; + // KF selection + Configurable applyKFpreselections{"applyKFpreselections", true, "Apply KFParticle related rejection"}; + Configurable applyCompetingCascRejection{"applyCompetingCascRejection", true, "Apply competing Xi(for Omegac0) rejection"}; + Configurable cascaderejMassWindow{"cascaderejMassWindow", 0.01, "competing Xi(for Omegac0) rejection mass window"}; + Configurable v0ldlmin{"v0ldlmin", 3., "Minimum value of l/dl of V0"}; //l/dl and Chi2 are to be determined + Configurable cascldlmin{"cascldlmin", 1., "Minimum value of l/dl of casc"}; + Configurable omegacldlmax{"omegacldlmax", 5., "Maximum value of l/dl of Omegac"}; + Configurable ctauOmegacmax{"ctauOmegacmax", 0.4, "lifetime τ of Omegac"}; + Configurable v0Chi2OverNdfmax{"v0Chi2OverNdfmax", 100., "Maximum chi2Geo/NDF of V0"}; + Configurable cascChi2OverNdfmax{"cascChi2OverNdfmax", 100., "Maximum chi2Geo/NDF of casc"}; + Configurable omegacChi2OverNdfmax{"omegacChi2OverNdfmax", 100., "Maximum chi2Geo/NDF of Omegac"}; + Configurable chi2TopoV0ToCascmax{"chi2TopoV0ToCascmax", 100., "Maximum chi2Topo/NDF of V0ToCas"}; + Configurable chi2TopoOmegacToPvmax{"chi2TopoOmegacToPvmax", 100., "Maximum chi2Topo/NDF of OmegacToPv"}; + Configurable chi2TopoCascToOmegacmax{"chi2TopoCascToOmegacmax", 100., "Maximum chi2Topo/NDF of CascToOmegac"}; + Configurable chi2TopoCascToPvmax{"chi2TopoCascToPvmax", 100., "Maximum chi2Topo/NDF of CascToPv"}; + Configurable decayLenXYOmegacmax{"decayLenXYOmegacmax", 1.5, "Maximum decay lengthXY of Omegac"}; + Configurable decayLenXYCascmin{"decayLenXYCascmin", 1., "Minimum decay lengthXY of Cascade"}; + Configurable decayLenXYLambdamin{"decayLenXYLambdamin", 0., "Minimum decay lengthXY of V0"}; + Configurable cosPaCascToOmegacmin{"cosPaCascToOmegacmin", 0.995, "Minimum cosPA of cascade<-Omegac"}; + Configurable cosPaV0ToCascmin{"cosPaV0ToCascmin", 0.99, "Minimum cosPA of V0<-cascade"}; + + TrackSelectorPi selectorPion; TrackSelectorPr selectorProton; TrackSelectorKa selectorKaon; @@ -192,9 +214,18 @@ struct HfCandidateSelectorToOmegaPi { registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1F, {axisSel}}); registry.add("hSelDcaXYToPvV0Daughters", "hSelDcaXYToPvV0Daughters;status;entries", {HistType::kTH1F, {axisSel}}); registry.add("hSelDcaXYToPvKaFromCasc", "hSelDcaXYToPvKaFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelCompetingCasc", "hSelCompetingCasc;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelKFstatus", "hSelKFstatus;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelV0_Casc_Omegacldl", "hSelV0_Casc_Omegacldl;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelctauOmegac", "hSelctauOmegac;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelChi2GeooverNDFV0_Casc_Omegac", "hSelChi2GeooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelChi2TopooverNDFV0_Casc_Omegac", "hSelChi2TopooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSeldecayLenXYOmegac_Casc_V0", "hSeldecayLenXYOmegac_Casc_V0;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelcosPaCascToOmegac_V0ToCasc", "hSelcosPaCascToOmegac_V0ToCasc;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hInvMassXiMinus_rej_cut", "hInvMassXiMinus_rej_cut", kTH1D, {{1000, 1.25f, 1.65f}}); } - void process(aod::HfCandToOmegaPi const& candidates, + void process(soa::Join const& candidates, TracksSel const& tracks, TracksSelLf const& lfTracks) { @@ -366,6 +397,81 @@ struct HfCandidateSelectorToOmegaPi { registry.fill(HIST("hSelPtPiFromCharm"), 1); } + + //KFParticle Preselections(kfsel) + if (applyKFpreselections) { + + bool inputKF = false; + if(resultSelections) { + inputKF = true; + registry.fill(HIST("hSelKFstatus"), 0); + } + + // Competing Ξ rejection(KF) + if (applyCompetingCascRejection) { + if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascaderejMassWindow) { + resultSelections = false; + registry.fill(HIST("hSelCompetingCasc"), 0); + } else { + registry.fill(HIST("hSelCompetingCasc"), 1); + registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + } + } + + //v0&Casc&Omegac ldl selection + if ((candidate.v0ldl() < v0ldlmin) || (candidate.cascldl() < cascldlmin) || (candidate.omegacldl() > omegacldlmax)) { + resultSelections = false; + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); + } else { + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); + } + + //Omegac ctau selsection + if (candidate.ctauOmegac() > ctauOmegacmax) { + resultSelections = false; + registry.fill(HIST("hSelctauOmegac"), 0); + } else { + registry.fill(HIST("hSelctauOmegac"), 1); + } + + //Chi2Geo/NDF V0&Casc&Omegac selection + if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfmax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfmax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfmax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); + } + + //Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) + if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascmax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvmax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacmax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvmax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); + } + + //DecaylengthXY of Omegac&Casc&V0 selection + if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacmax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascmin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdamin)) { + resultSelections = false; + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); + } else { + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); + } + + //KFPA cut cosPaCascToOmegac cosPaV0ToCasc + if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacmin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascmin)) { + resultSelections = false; + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); + } else { + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); + } + + if(resultSelections && inputKF) { + registry.fill(HIST("hSelKFstatus"), 1); + } + + } + // TPC clusters selections if (applyTrkSelLf) { if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { diff --git a/PWGHF/TableProducer/treeCreatorOmegacToOmegaPi.cxx b/PWGHF/TableProducer/treeCreatorOmegacToOmegaPi.cxx index 42b40686a15..11f7d20a63e 100644 --- a/PWGHF/TableProducer/treeCreatorOmegacToOmegaPi.cxx +++ b/PWGHF/TableProducer/treeCreatorOmegacToOmegaPi.cxx @@ -147,7 +147,7 @@ DECLARE_SOA_COLUMN(CascChi2OverNdf, cascChi2OverNdf, float); DECLARE_SOA_COLUMN(OmegacChi2OverNdf, omegacChi2OverNdf, float); DECLARE_SOA_COLUMN(MassV0Chi2OverNdf, massV0Chi2OverNdf, float); DECLARE_SOA_COLUMN(MassCascChi2OverNdf, massCascChi2OverNdf, float); - +DECLARE_SOA_COLUMN(CascRejectInvmass, cascRejectInvmass, float); } // namespace full DECLARE_SOA_TABLE(HfToOmegaPiEvs, "AOD", "HFTOOMEPIEV", @@ -195,7 +195,7 @@ DECLARE_SOA_TABLE(HfKfOmegacFulls, "AOD", "HFKFOMEGACFULL", full::V0Ndf, full::CascNdf, full::OmegacNdf, full::MassV0Ndf, full::MassCascNdf, full::V0Chi2OverNdf, full::CascChi2OverNdf, full::OmegacChi2OverNdf, - full::MassV0Chi2OverNdf, full::MassCascChi2OverNdf, + full::MassV0Chi2OverNdf, full::MassCascChi2OverNdf, full::CascRejectInvmass, full::FlagMcMatchRec, full::OriginRec, full::CollisionMatched); } // namespace o2::aod @@ -355,6 +355,7 @@ struct HfTreeCreatorOmegac0ToOmegaPi { candidate.omegacChi2OverNdf(), candidate.massV0Chi2OverNdf(), candidate.massCascChi2OverNdf(), + candidate.cascRejectInvmass(), flagMc, originMc, collisionMatched); From 8442dcd81f762c54b3a6175abc3ab2c1625944dd Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sun, 19 Jan 2025 09:29:17 +0000 Subject: [PATCH 10/27] Please consider the following formatting changes --- .../candidateCreatorXic0Omegac0.cxx | 149 +++++++++--------- .../candidateSelectorOmegac0ToOmegaPi.cxx | 59 ++++--- 2 files changed, 101 insertions(+), 107 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index bac0990c9a0..73782fc499a 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -179,7 +179,7 @@ struct HfCandidateCreatorXic0Omegac0 { float chi2MassV0; float chi2MassCasc; float etaOmegac; - float cascRejectInvmass;//rej + float cascRejectInvmass; // rej } kfOmegac0Candidate; struct { @@ -293,37 +293,36 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hInvMassOmegaMinus", "hInvMassOmegaMinus", kTH1D, {{1000, 1.6f, 2.0f}}); registry.add("hInvMassXiMinus", "hInvMassXiMinus", kTH1D, {{1000, 1.25f, 1.65f}}); registry.add("hInvMassXiMinus_rej", "hInvMassXiMinus_rej", kTH1D, {{1000, 1.25f, 1.65f}}); - //Additional KF hist - registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.0f, 1.0f}}); // new - registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.0f, 1.0f}}); // new - registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 100.0f}}); // new + // Additional KF hist + registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.0f, 1.0f}}); // new + registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.0f, 1.0f}}); // new + registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 100.0f}}); // new registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new - registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new - registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 20.0f}}); // new - registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 20.0f}}); // new - registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 10.0f}}); // new - registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, -1.0f, 1.0f}}); // new - registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, -1.0f, 1.0f}}); // new - + registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new + registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new + registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 20.0f}}); // new + registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 20.0f}}); // new + registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 10.0f}}); // new + registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new + registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new + registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, -1.0f, 1.0f}}); // new + registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, -1.0f, 1.0f}}); // new hfEvSel.addHistograms(registry); // collision monitoring @@ -758,26 +757,26 @@ struct HfCandidateCreatorXic0Omegac0 { KFParticle kfPosPr(kfTrack0, kProton); KFParticle kfNegPi(kfTrack1, kPiMinus); KFParticle kfNegKa(kfTrackBach, kKMinus); - KFParticle kfNegPirej(kfTrackBach, kPiMinus);//rej + KFParticle kfNegPirej(kfTrackBach, kPiMinus); // rej KFParticle kfPosPi(kfTrack0, kPiPlus); KFParticle kfNegPr(kfTrack1, kProton); KFParticle kfPosKa(kfTrackBach, kKPlus); - KFParticle kfPosPirej(kfTrackBach, kPiPlus);//rej + KFParticle kfPosPirej(kfTrackBach, kPiPlus); // rej KFParticle kfBachKaon; KFParticle kfPos; KFParticle kfNeg; - KFParticle kfBachrej;//rej + KFParticle kfBachrej; // rej if (bachCharge < 0) { kfPos = kfPosPr; kfNeg = kfNegPi; kfBachKaon = kfNegKa; - kfBachrej = kfNegPirej;//rej + kfBachrej = kfNegPirej; // rej } else { kfPos = kfPosPi; kfNeg = kfNegPr; kfBachKaon = kfPosKa; - kfBachrej = kfPosPirej;//rej + kfBachrej = kfPosPirej; // rej } //__________________________________________ @@ -815,15 +814,15 @@ struct HfCandidateCreatorXic0Omegac0 { //__________________________________________ //*>~<* step 2 : reconstruct cascade(Omega) with KF const KFParticle* omegaDaugthers[2] = {&kfBachKaon, &kfV0}; - const KFParticle* omegaDaugthersrej[2] = {&kfBachrej, &kfV0};//rej + const KFParticle* omegaDaugthersrej[2] = {&kfBachrej, &kfV0}; // rej // construct cascade KFParticle kfOmega; - KFParticle kfOmegarej;//rej + KFParticle kfOmegarej; // rej kfOmega.SetConstructMethod(kfConstructMethod); - kfOmegarej.SetConstructMethod(kfConstructMethod);//rej + kfOmegarej.SetConstructMethod(kfConstructMethod); // rej try { kfOmega.Construct(omegaDaugthers, 2); - kfOmegarej.Construct(omegaDaugthersrej, 2);//rej + kfOmegarej.Construct(omegaDaugthersrej, 2); // rej } catch (std::runtime_error& e) { LOG(debug) << "Failed to construct Omega or Omega_rej from V0 and bachelor track: " << e.what(); continue; @@ -831,7 +830,7 @@ struct HfCandidateCreatorXic0Omegac0 { float massCasc, sigCasc; float massCascrej, sigCascrej; kfOmega.GetMass(massCasc, sigCasc); - kfOmegarej.GetMass(massCascrej, sigCascrej);//rej + kfOmegarej.GetMass(massCascrej, sigCascrej); // rej // err_massOmega > 0 if (sigCasc <= 0) continue; @@ -842,7 +841,7 @@ struct HfCandidateCreatorXic0Omegac0 { continue; kfOmegac0Candidate.chi2GeoCasc = kfOmega.GetChi2(); kfOmegac0Candidate.cascRejectInvmass = massCascrej; - registry.fill(HIST("hInvMassXiMinusrej"), massCascrej);//rej + registry.fill(HIST("hInvMassXiMinusrej"), massCascrej); // rej KFParticle kfOmegaMassConstrained = kfOmega; kfOmegaMassConstrained.SetNonlinearMassConstraint(o2::constants::physics::MassOmegaMinus); // set mass constrain to OmegaMinus if (kfUseCascadeMassConstraint) { @@ -1086,48 +1085,46 @@ struct HfCandidateCreatorXic0Omegac0 { registry.fill(HIST("hKFParticleCascBachTopoChi2"), cascBachTopoChi2); registry.fill(HIST("hKFParticleV0TopoChi2"), kfOmegac0Candidate.chi2TopoV0ToCasc); registry.fill(HIST("hKFParticleCascTopoChi2"), kfOmegac0Candidate.chi2TopoCascToOmegac); - registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2TopoOmegacToPv);//new - registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2TopoCascToPv);//new + registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2TopoOmegacToPv); // new + registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2TopoCascToPv); // new registry.fill(HIST("hKFParticleDcaCharmBaryonDau"), kfOmegac0Candidate.kfDcaOmegacDau); registry.fill(HIST("hKFParticleDcaXYCascBachToPv"), dcaxyCascBachelor); - registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0);//new - registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1);//new + registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0); // new + registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1); // new registry.fill(HIST("hKfLambda_ldl"), kfOmegac0Candidate.ldlV0); registry.fill(HIST("hKfOmega_ldl"), kfOmegac0Candidate.ldlCasc); registry.fill(HIST("hKfOmegaC0_ldl"), kfOmegac0Candidate.ldlOmegac); registry.fill(HIST("hDcaXYCascadeToPVKf"), kfOmegac0Candidate.kfDcaXYCascToPv); - //Additional histograms - if(fillAllHist) - { - registry.fill(HIST("hEtaV0PosDau"), kfPos.GetEta()); - registry.fill(HIST("hEtaV0NegDau"), kfNeg.GetEta()); - registry.fill(HIST("hEtaKaFromCasc"), kfBachKaonToOmega.GetEta()); - registry.fill(HIST("hEtaPiFromCharmBaryon"), kfBachPionToOmegaC.GetEta()); - registry.fill(HIST("hCascradius"), RecoDecay::sqrtSumOfSquares(vertexCasc[0], vertexCasc[1])); - registry.fill(HIST("hV0radius"), RecoDecay::sqrtSumOfSquares(vertexV0[0], vertexV0[1])); - registry.fill(HIST("hCosPACasc"), kfOmegac0Candidate.cosPaCascToPv); - registry.fill(HIST("hCosPAV0"), kfOmegac0Candidate.cosPaV0ToPv); - registry.fill(HIST("hDcaCascDau"), kfOmegac0Candidate.kfDcaCascDau); - registry.fill(HIST("hDcaV0Dau"), kfOmegac0Candidate.kfDcaV0Dau); - registry.fill(HIST("hDcaXYToPvKa"), dcaxyCascBachelor); - registry.fill(HIST("hImpactParBachFromCharmBaryonXY"), impactParBachFromCharmBaryonXY); - registry.fill(HIST("hImpactParBachFromCharmBaryonZ"), impactParBachFromCharmBaryonZ); - registry.fill(HIST("hImpactParCascXY"), impactParameterCasc.getY()); - registry.fill(HIST("hImpactParCascZ"), impactParameterCasc.getZ()); - registry.fill(HIST("hPtKaFromCasc"), RecoDecay::sqrtSumOfSquares(pVecCascBachelor[0], pVecCascBachelor[1])); - registry.fill(HIST("hPtPiFromCharmBaryon"), RecoDecay::sqrtSumOfSquares(pVecCharmBachelorAsD[0], pVecCharmBachelorAsD[1])); - registry.fill(HIST("hCTauOmegac"), kfOmegac0Candidate.ctOmegac); - registry.fill(HIST("hKFGeoV0Chi2OverNdf"), v0Chi2OverNdf); - registry.fill(HIST("hKFGeoCascChi2OverNdf"), cascChi2OverNdf); - registry.fill(HIST("hKFGeoCharmbaryonChi2OverNdf"), charmbaryonChi2OverNdf); - registry.fill(HIST("hKFdecayLenXYLambda"), kfOmegac0Candidate.decayLenXYLambda); - registry.fill(HIST("hKFdecayLenXYCasc"), kfOmegac0Candidate.decayLenXYCasc); - registry.fill(HIST("hKFdecayLenXYOmegac"), kfOmegac0Candidate.decayLenXYOmegac); - registry.fill(HIST("hKFcosPaV0ToCasc"), kfOmegac0Candidate.cosPaV0ToCasc); - registry.fill(HIST("hKFcosPaCascToOmegac"), kfOmegac0Candidate.cosPaCascToOmegac); + // Additional histograms + if (fillAllHist) { + registry.fill(HIST("hEtaV0PosDau"), kfPos.GetEta()); + registry.fill(HIST("hEtaV0NegDau"), kfNeg.GetEta()); + registry.fill(HIST("hEtaKaFromCasc"), kfBachKaonToOmega.GetEta()); + registry.fill(HIST("hEtaPiFromCharmBaryon"), kfBachPionToOmegaC.GetEta()); + registry.fill(HIST("hCascradius"), RecoDecay::sqrtSumOfSquares(vertexCasc[0], vertexCasc[1])); + registry.fill(HIST("hV0radius"), RecoDecay::sqrtSumOfSquares(vertexV0[0], vertexV0[1])); + registry.fill(HIST("hCosPACasc"), kfOmegac0Candidate.cosPaCascToPv); + registry.fill(HIST("hCosPAV0"), kfOmegac0Candidate.cosPaV0ToPv); + registry.fill(HIST("hDcaCascDau"), kfOmegac0Candidate.kfDcaCascDau); + registry.fill(HIST("hDcaV0Dau"), kfOmegac0Candidate.kfDcaV0Dau); + registry.fill(HIST("hDcaXYToPvKa"), dcaxyCascBachelor); + registry.fill(HIST("hImpactParBachFromCharmBaryonXY"), impactParBachFromCharmBaryonXY); + registry.fill(HIST("hImpactParBachFromCharmBaryonZ"), impactParBachFromCharmBaryonZ); + registry.fill(HIST("hImpactParCascXY"), impactParameterCasc.getY()); + registry.fill(HIST("hImpactParCascZ"), impactParameterCasc.getZ()); + registry.fill(HIST("hPtKaFromCasc"), RecoDecay::sqrtSumOfSquares(pVecCascBachelor[0], pVecCascBachelor[1])); + registry.fill(HIST("hPtPiFromCharmBaryon"), RecoDecay::sqrtSumOfSquares(pVecCharmBachelorAsD[0], pVecCharmBachelorAsD[1])); + registry.fill(HIST("hCTauOmegac"), kfOmegac0Candidate.ctOmegac); + registry.fill(HIST("hKFGeoV0Chi2OverNdf"), v0Chi2OverNdf); + registry.fill(HIST("hKFGeoCascChi2OverNdf"), cascChi2OverNdf); + registry.fill(HIST("hKFGeoCharmbaryonChi2OverNdf"), charmbaryonChi2OverNdf); + registry.fill(HIST("hKFdecayLenXYLambda"), kfOmegac0Candidate.decayLenXYLambda); + registry.fill(HIST("hKFdecayLenXYCasc"), kfOmegac0Candidate.decayLenXYCasc); + registry.fill(HIST("hKFdecayLenXYOmegac"), kfOmegac0Candidate.decayLenXYOmegac); + registry.fill(HIST("hKFcosPaV0ToCasc"), kfOmegac0Candidate.cosPaV0ToCasc); + registry.fill(HIST("hKFcosPaCascToOmegac"), kfOmegac0Candidate.cosPaCascToOmegac); } - // fill the table rowCandToOmegaPi(collision.globalIndex(), pvCoord[0], pvCoord[1], pvCoord[2], diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index deae02de530..747d91dc42e 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -128,7 +128,7 @@ struct HfCandidateSelectorToOmegaPi { Configurable applyKFpreselections{"applyKFpreselections", true, "Apply KFParticle related rejection"}; Configurable applyCompetingCascRejection{"applyCompetingCascRejection", true, "Apply competing Xi(for Omegac0) rejection"}; Configurable cascaderejMassWindow{"cascaderejMassWindow", 0.01, "competing Xi(for Omegac0) rejection mass window"}; - Configurable v0ldlmin{"v0ldlmin", 3., "Minimum value of l/dl of V0"}; //l/dl and Chi2 are to be determined + Configurable v0ldlmin{"v0ldlmin", 3., "Minimum value of l/dl of V0"}; // l/dl and Chi2 are to be determined Configurable cascldlmin{"cascldlmin", 1., "Minimum value of l/dl of casc"}; Configurable omegacldlmax{"omegacldlmax", 5., "Maximum value of l/dl of Omegac"}; Configurable ctauOmegacmax{"ctauOmegacmax", 0.4, "lifetime τ of Omegac"}; @@ -145,7 +145,6 @@ struct HfCandidateSelectorToOmegaPi { Configurable cosPaCascToOmegacmin{"cosPaCascToOmegacmin", 0.995, "Minimum cosPA of cascade<-Omegac"}; Configurable cosPaV0ToCascmin{"cosPaV0ToCascmin", 0.99, "Minimum cosPA of V0<-cascade"}; - TrackSelectorPi selectorPion; TrackSelectorPr selectorProton; TrackSelectorKa selectorKaon; @@ -397,36 +396,35 @@ struct HfCandidateSelectorToOmegaPi { registry.fill(HIST("hSelPtPiFromCharm"), 1); } - - //KFParticle Preselections(kfsel) + // KFParticle Preselections(kfsel) if (applyKFpreselections) { bool inputKF = false; - if(resultSelections) { + if (resultSelections) { inputKF = true; registry.fill(HIST("hSelKFstatus"), 0); } - + // Competing Ξ rejection(KF) if (applyCompetingCascRejection) { if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascaderejMassWindow) { - resultSelections = false; - registry.fill(HIST("hSelCompetingCasc"), 0); + resultSelections = false; + registry.fill(HIST("hSelCompetingCasc"), 0); } else { - registry.fill(HIST("hSelCompetingCasc"), 1); - registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + registry.fill(HIST("hSelCompetingCasc"), 1); + registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); } } - //v0&Casc&Omegac ldl selection + // v0&Casc&Omegac ldl selection if ((candidate.v0ldl() < v0ldlmin) || (candidate.cascldl() < cascldlmin) || (candidate.omegacldl() > omegacldlmax)) { resultSelections = false; registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); } else { registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); } - - //Omegac ctau selsection + + // Omegac ctau selsection if (candidate.ctauOmegac() > ctauOmegacmax) { resultSelections = false; registry.fill(HIST("hSelctauOmegac"), 0); @@ -434,42 +432,41 @@ struct HfCandidateSelectorToOmegaPi { registry.fill(HIST("hSelctauOmegac"), 1); } - //Chi2Geo/NDF V0&Casc&Omegac selection + // Chi2Geo/NDF V0&Casc&Omegac selection if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfmax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfmax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfmax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); + resultSelections = false; + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); } else { - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); } - //Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) + // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascmax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvmax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacmax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvmax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); + resultSelections = false; + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); } else { - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); } - //DecaylengthXY of Omegac&Casc&V0 selection + // DecaylengthXY of Omegac&Casc&V0 selection if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacmax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascmin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdamin)) { - resultSelections = false; - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); + resultSelections = false; + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); } else { - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); } - //KFPA cut cosPaCascToOmegac cosPaV0ToCasc + // KFPA cut cosPaCascToOmegac cosPaV0ToCasc if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacmin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascmin)) { - resultSelections = false; - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); + resultSelections = false; + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); } else { - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); } - if(resultSelections && inputKF) { + if (resultSelections && inputKF) { registry.fill(HIST("hSelKFstatus"), 1); } - } // TPC clusters selections From 8f0fab8b09e2c8001acd08736e9628f92fe0d4b6 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Sun, 19 Jan 2025 20:05:45 +0800 Subject: [PATCH 11/27] Add competing rejection and KF preselection for Omegac0 -> Omega Pi in PbPb analysis(fix configurable) --- .../candidateSelectorOmegac0ToOmegaPi.cxx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 747d91dc42e..88f0e513595 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -12,6 +12,7 @@ /// \file candidateSelectorToOmegaPi.cxx /// \brief Omegac0 → Omega Pi selection task /// \author Federica Zanone , Heidelberg University +/// \author Ruiqi Yin , Fudan University #include "CommonConstants/PhysicsConstants.h" #include "Framework/AnalysisTask.h" @@ -43,10 +44,10 @@ struct HfCandidateSelectorToOmegaPi { // LF analysis selections Configurable radiusCascMin{"radiusCascMin", 0.5, "Min cascade radius"}; Configurable radiusV0Min{"radiusV0Min", 1.1, "Min V0 radius"}; - Configurable cosPAV0Min{"cosPAV0Min", 0.99, "Min valueCosPA V0"}; - Configurable cosPACascMin{"cosPACascMin", 0.995, "Min value CosPA cascade"}; - Configurable dcaCascDauMax{"dcaCascDauMax", 1.4, "Max DCA cascade daughters"}; - Configurable dcaV0DauMax{"dcaV0DauMax", 1.4, "Max DCA V0 daughters"}; + Configurable cosPAV0Min{"cosPAV0Min", 0.97, "Min valueCosPA V0"}; + Configurable cosPACascMin{"cosPACascMin", 0.97, "Min value CosPA cascade"}; + Configurable dcaCascDauMax{"dcaCascDauMax", 1.0, "Max DCA cascade daughters"}; + Configurable dcaV0DauMax{"dcaV0DauMax", 1.0, "Max DCA V0 daughters"}; Configurable dcaBachToPvMin{"dcaBachToPvMin", 0.04, "DCA Bach To PV"}; Configurable dcaNegToPvMin{"dcaNegToPvMin", 0.06, "DCA Neg To PV"}; Configurable dcaPosToPvMin{"dcaPosToPvMin", 0.06, "DCA Pos To PV"}; @@ -60,24 +61,24 @@ struct HfCandidateSelectorToOmegaPi { // kinematic selections Configurable etaTrackCharmBachMax{"etaTrackCharmBachMax", 0.8, "Max absolute value of eta for charm baryon bachelor"}; - Configurable etaTrackLFDauMax{"etaTrackLFDauMax", 0.8, "Max absolute value of eta for V0 and cascade daughters"}; + Configurable etaTrackLFDauMax{"etaTrackLFDauMax", 1.0, "Max absolute value of eta for V0 and cascade daughters"}; Configurable ptKaFromCascMin{"ptKaFromCascMin", 0.15, "Min pT kaon <- casc"}; Configurable ptPiFromCharmBaryonMin{"ptPiFromCharmBaryonMin", 0.2, "Min pT pi <- charm baryon"}; Configurable impactParameterXYPiFromCharmBaryonMin{"impactParameterXYPiFromCharmBaryonMin", 0., "Min dcaxy pi from charm baryon track to PV"}; - Configurable impactParameterXYPiFromCharmBaryonMax{"impactParameterXYPiFromCharmBaryonMax", 0.03, "Max dcaxy pi from charm baryon track to PV"}; + Configurable impactParameterXYPiFromCharmBaryonMax{"impactParameterXYPiFromCharmBaryonMax", 10., "Max dcaxy pi from charm baryon track to PV"}; Configurable impactParameterZPiFromCharmBaryonMin{"impactParameterZPiFromCharmBaryonMin", 0., "Min dcaz pi from charm baryon track to PV"}; Configurable impactParameterZPiFromCharmBaryonMax{"impactParameterZPiFromCharmBaryonMax", 10., "Max dcaz pi from charm baryon track to PV"}; Configurable impactParameterXYCascMin{"impactParameterXYCascMin", 0., "Min dcaxy cascade track to PV"}; - Configurable impactParameterXYCascMax{"impactParameterXYCascMax", 0.4, "Max dcaxy cascade track to PV"}; + Configurable impactParameterXYCascMax{"impactParameterXYCascMax", 10., "Max dcaxy cascade track to PV"}; Configurable impactParameterZCascMin{"impactParameterZCascMin", 0., "Min dcaz cascade track to PV"}; Configurable impactParameterZCascMax{"impactParameterZCascMax", 10., "Max dcaz cascade track to PV"}; Configurable ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"}; Configurable ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"}; - Configurable dcaCharmBaryonDauMax{"dcaCharmBaryonDauMax", 0.5, "Max DCA charm baryon daughters"}; + Configurable dcaCharmBaryonDauMax{"dcaCharmBaryonDauMax", 2.0, "Max DCA charm baryon daughters"}; // PID options Configurable usePidTpcOnly{"usePidTpcOnly", false, "Perform PID using only TPC"}; From c0cce24c32f29ca0caa2ab35969601984d3d639d Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Sun, 19 Jan 2025 21:25:41 +0800 Subject: [PATCH 12/27] Add competing rejection and KF preselection for Omegac0 -> Omega Pi in PbPb analysis(fix configurables) --- PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 73782fc499a..b02cca28612 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -308,6 +308,7 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.0f, 1.0f}}); // new registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 100.0f}}); // new registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 100.0f}}); // new registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new From d895fcb1132c191019d4410fff6e0c4fc0ccb970 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 20 Jan 2025 12:19:31 +0000 Subject: [PATCH 13/27] Please consider the following formatting changes --- .../candidateCreatorXic0Omegac0.cxx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 0c945297ae1..75bc45cbdf4 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -296,8 +296,8 @@ struct HfCandidateCreatorXic0Omegac0 { // Additional KF hist registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new - registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new + registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new + registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new @@ -306,24 +306,24 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.8f, 1.0f}}); // new - registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 10.0f}}); // new - registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 10.0f}}); // new - registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 10.0f}}); // new registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -1.0f, 1.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -1.0f, 1.0f}}); // new + registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -1.0f, 1.0f}}); // new registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -4.0f, 4.0f}}); // new - registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 5.0f}}); // new - registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 5.0f}}); // new - registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 0.1f}}); // new + registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 5.0f}}); // new + registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 5.0f}}); // new + registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 0.1f}}); // new registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new - registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.0f}}); // new + registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new + registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.0f}}); // new hfEvSel.addHistograms(registry); // collision monitoring From 294e16c7cbdf16fc80dd1df84b26ddb9bce18a48 Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Mon, 20 Jan 2025 20:20:44 +0800 Subject: [PATCH 14/27] Add competing rejection and KF preselection for Omegac0 -> Omega Pi in PbPb analysis(change histos' range) --- .../candidateCreatorXic0Omegac0.cxx | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index b02cca28612..0c945297ae1 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -282,8 +282,8 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hKFParticleV0TopoChi2", "hKFParticleV0TopoChi2", kTH1D, {{1000, -0.10f, 100.0f}}); registry.add("hKFParticleCascTopoChi2", "hKFParticleCascTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKFParticleCascBachTopoChi2", "hKFParticleCascBachTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); - registry.add("hKFParticleDcaCharmBaryonDau", "hKFParticleDcaCharmBaryonDau", kTH1D, {{1000, -0.1f, 100.0f}}); - registry.add("hKFParticleDcaXYCascBachToPv", "hKFParticleDcaXYCascBachToPv", kTH1D, {{1000, -0.1f, 100.0f}}); + registry.add("hKFParticleDcaCharmBaryonDau", "hKFParticleDcaCharmBaryonDau", kTH1D, {{1000, -0.1f, 1.0f}}); + registry.add("hKFParticleDcaXYCascBachToPv", "hKFParticleDcaXYCascBachToPv", kTH1D, {{1000, -0.1f, 15.0f}}); registry.add("hKfLambda_ldl", "hKfLambda_ldl", kTH1D, {{1000, 0.0f, 1000.0f}}); registry.add("hKfOmega_ldl", "hKfOmega_ldl", kTH1D, {{1000, 0.0f, 1000.0f}}); registry.add("hKfXi_ldl", "hKfXi_ldl", kTH1D, {{1000, 0.0f, 1000.0f}}); @@ -296,34 +296,34 @@ struct HfCandidateCreatorXic0Omegac0 { // Additional KF hist registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new + registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new + registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); // new registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.0f, 1.0f}}); // new - registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.0f, 1.0f}}); // new - registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new - registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -30.0f, 30.0f}}); // new - registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 20.0f}}); // new - registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 20.0f}}); // new - registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 10.0f}}); // new + registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new + registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.8f, 1.0f}}); // new + registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 10.0f}}); // new + registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -1.0f, 1.0f}}); // new + registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -1.0f, 1.0f}}); // new + registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -4.0f, 4.0f}}); // new + registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -5.0f, 5.0f}}); // new + registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 5.0f}}); // new + registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 5.0f}}); // new + registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 0.1f}}); // new registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, -1.0f, 1.0f}}); // new - registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, -1.0f, 1.0f}}); // new + registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new + registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.0f}}); // new hfEvSel.addHistograms(registry); // collision monitoring From b8d5cc462421d1e5ffcf3d33d674582c1f172299 Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Wed, 22 Jan 2025 20:19:14 +0800 Subject: [PATCH 15/27] Update PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 75bc45cbdf4..a9b85d9bd91 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -815,7 +815,7 @@ struct HfCandidateCreatorXic0Omegac0 { //__________________________________________ //*>~<* step 2 : reconstruct cascade(Omega) with KF const KFParticle* omegaDaugthers[2] = {&kfBachKaon, &kfV0}; - const KFParticle* omegaDaugthersrej[2] = {&kfBachrej, &kfV0}; // rej + const KFParticle* omegaDaugthersRej[2] = {&kfBachRej, &kfV0}; // rej // construct cascade KFParticle kfOmega; KFParticle kfOmegarej; // rej From 656dd81880f943e8bee92f3d0f32ac5b83ee418c Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Wed, 22 Jan 2025 22:44:08 +0800 Subject: [PATCH 16/27] Modified according to Mattia's suggestions --- .../candidateCreatorXic0Omegac0.cxx | 131 +-- .../candidateSelectorOmegac0ToOmegaPi.cxx | 812 +++++++++--------- 2 files changed, 474 insertions(+), 469 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 6b5b0a500c5..124b7fadd05 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -138,10 +138,10 @@ struct HfCandidateCreatorXic0Omegac0 { struct { float chi2GeoV0; float ldlV0; - float chi2TopoV0ToPv; + float chi2NdfTopoV0ToPv; float chi2GeoCasc; float ldlCasc; - float chi2TopoCascToPv; + float chi2NdfTopoCascToPv; float decayLenXYLambda; float decayLenXYCasc; float cosPaV0ToCasc; @@ -159,17 +159,17 @@ struct HfCandidateCreatorXic0Omegac0 { float rapOmegac; float massOmegac; float cosThetaStarPiFromOmegac; - float chi2TopoPiFromOmegacToPv; + float chi2NdfTopoPiFromOmegacToPv; float kfDcaXYPiFromOmegac; - float chi2TopoV0ToCasc; - float chi2TopoCascToOmegac; + float chi2NdfTopoV0ToCasc; + float chi2NdfTopoCascToOmegac; float decayLenXYOmegac; float chi2GeoOmegac; float kfDcaV0Dau; float kfDcaCascDau; float kfDcaOmegacDau; float kfDcaXYCascToPv; - float chi2TopoOmegacToPv; + float chi2NdfTopoOmegacToPv; float cosPaOmegacToPv; float cosPaXYOmegacToPv; float ldlOmegac; @@ -278,7 +278,7 @@ struct HfCandidateCreatorXic0Omegac0 { hCascadesCounterToOmegaPi = registry.add("hCascadesCounterToOmegaPi", "Cascades counter wrt derived data - #Omega #pi decay;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // 0 --> cascades in derived data table (and stored in AOD table), 1 --> cascades in derived data table and also accessible in cascData table hCascadesCounterToOmegaK = registry.add("hCascadesCounterToOmegaK", "Cascades counter wrt derived data - #Omega K decay;status;entries", {HistType::kTH1D, {{2, -0.5, 1.5}}}); // 0 --> cascades in derived data table (and stored in AOD table), 1 --> cascades in derived data table and also accessible in cascData table - // KFparticle variables hist + // KFParticle Variables Histograms registry.add("hKFParticleV0TopoChi2", "hKFParticleV0TopoChi2", kTH1D, {{1000, -0.10f, 100.0f}}); registry.add("hKFParticleCascTopoChi2", "hKFParticleCascTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); registry.add("hKFParticleCascBachTopoChi2", "hKFParticleCascBachTopoChi2", kTH1D, {{1000, -0.1f, 100.0f}}); @@ -293,37 +293,39 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hInvMassOmegaMinus", "hInvMassOmegaMinus", kTH1D, {{1000, 1.6f, 2.0f}}); registry.add("hInvMassXiMinus", "hInvMassXiMinus", kTH1D, {{1000, 1.25f, 1.65f}}); registry.add("hInvMassXiMinus_rej", "hInvMassXiMinus_rej", kTH1D, {{1000, 1.25f, 1.65f}}); - // Additional KF hist - registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); // new - registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new - registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 30.0f}}); // new - registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new - registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.8f, 1.0f}}); // new - registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 10.0f}}); // new - registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 10.0f}}); // new - registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 10.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -1.0f, 1.0f}}); // new - registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -1.0f, 1.0f}}); // new - registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -4.0f, 4.0f}}); // new - registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -5.0f, 5.0f}}); // new - registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 5.0f}}); // new - registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 5.0f}}); // new - registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 0.1f}}); // new - registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); // new - registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); // new - registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.0f}}); // new - registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.0f}}); // new + + // Additional KFParticle Histograms + registry.add("hKFParticlechi2TopoOmegacToPv", "hKFParticlechi2TopoOmegacToPv", kTH1D, {{1000, -0.1f, 100.0f}}); + registry.add("hKFParticlechi2TopoCascToPv", "hKFParticlechi2TopoCascToPv", kTH1D, {{1000, -0.1f, 100.0f}}); + registry.add("hKFParticleDcaXYV0DauPosToPv", "hKFParticleDcaXYV0DauPosToPv", kTH1D, {{1000, -0.1f, 30.0f}}); + registry.add("hKFParticleDcaXYV0DauNegToPv", "hKFParticleDcaXYV0DauNegToPv", kTH1D, {{1000, -0.1f, 30.0f}}); + registry.add("hEtaV0PosDau", "hEtaV0PosDau", kTH1D, {{1000, -5.0f, 5.0f}}); + registry.add("hEtaV0NegDau", "hEtaV0NegDau", kTH1D, {{1000, -5.0f, 5.0f}}); + registry.add("hEtaKaFromCasc", "hEtaKaFromCasc", kTH1D, {{1000, -5.0f, 5.0f}}); + registry.add("hEtaPiFromCharmBaryon", "hEtaPiFromCharmBaryon", kTH1D, {{1000, -5.0f, 5.0f}}); + registry.add("hCascradius", "hCascradius", kTH1D, {{1000, 0.0f, 50.0f}}); + registry.add("hV0radius", "hV0radius", kTH1D, {{1000, 0.0f, 50.0f}}); + registry.add("hCosPACasc", "hCosPACasc", kTH1D, {{5000, 0.8f, 1.1f}}); + registry.add("hCosPAV0", "hCosPAV0", kTH1D, {{5000, 0.8f, 1.1f}}); + registry.add("hDcaCascDau", "hDcaCascDau", kTH1D, {{1000, -0.1f, 10.0f}}); + registry.add("hDcaV0Dau", "hDcaV0Dau", kTH1D, {{1000, -0.1f, 10.0f}}); + registry.add("hDcaXYToPvKa", "hDcaXYToPvKa", kTH1D, {{1000, -0.1f, 10.0f}}); + registry.add("hImpactParBachFromCharmBaryonXY", "hImpactParBachFromCharmBaryonXY", kTH1D, {{1000, -1.0f, 1.0f}}); + registry.add("hImpactParBachFromCharmBaryonZ", "hImpactParBachFromCharmBaryonZ", kTH1D, {{1000, -2.0f, 2.0f}}); + registry.add("hImpactParCascXY", "hImpactParCascXY", kTH1D, {{1000, -4.0f, 4.0f}}); + registry.add("hImpactParCascZ", "hImpactParCascZ", kTH1D, {{1000, -5.0f, 5.0f}}); + registry.add("hPtKaFromCasc", "hPtKaFromCasc", kTH1D, {{1000, 0.0f, 5.0f}}); + registry.add("hPtPiFromCharmBaryon", "hPtPiFromCharmBaryon", kTH1D, {{1000, 0.0f, 5.0f}}); + registry.add("hCTauOmegac", "hCTauOmegac", kTH1D, {{1000, 0.0f, 0.1f}}); + registry.add("hKFGeoV0Chi2OverNdf", "hKFGeoV0Chi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); + registry.add("hKFGeoCascChi2OverNdf", "hKFGeoCascChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); + registry.add("hKFGeoCharmbaryonChi2OverNdf", "hKFGeoCharmbaryonChi2OverNdf", kTH1D, {{1000, 0.0f, 100.0f}}); + registry.add("hKFdecayLenXYLambda", "hKFdecayLenXYLambda", kTH1D, {{1000, 0.0f, 50.0f}}); + registry.add("hKFdecayLenXYCasc", "hKFdecayLenXYCasc", kTH1D, {{1000, 0.0f, 50.0f}}); + registry.add("hKFdecayLenXYOmegac", "hKFdecayLenXYOmegac", kTH1D, {{1000, 0.0f, 50.0f}}); + registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.1f}}); + registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.1f}}); + hfEvSel.addHistograms(registry); // collision monitoring @@ -758,26 +760,26 @@ struct HfCandidateCreatorXic0Omegac0 { KFParticle kfPosPr(kfTrack0, kProton); KFParticle kfNegPi(kfTrack1, kPiMinus); KFParticle kfNegKa(kfTrackBach, kKMinus); - KFParticle kfNegPirej(kfTrackBach, kPiMinus); // rej + KFParticle kfNegPirRej(kfTrackBach, kPiMinus); // rej KFParticle kfPosPi(kfTrack0, kPiPlus); KFParticle kfNegPr(kfTrack1, kProton); KFParticle kfPosKa(kfTrackBach, kKPlus); - KFParticle kfPosPirej(kfTrackBach, kPiPlus); // rej + KFParticle kfPosPiRej(kfTrackBach, kPiPlus); // rej KFParticle kfBachKaon; KFParticle kfPos; KFParticle kfNeg; - KFParticle kfBachrej; // rej + KFParticle kfBachPionRej; // rej if (bachCharge < 0) { kfPos = kfPosPr; kfNeg = kfNegPi; kfBachKaon = kfNegKa; - kfBachrej = kfNegPirej; // rej + kfBachPionRej = kfNegPirRej; // rej } else { kfPos = kfPosPi; kfNeg = kfNegPr; kfBachKaon = kfPosKa; - kfBachrej = kfPosPirej; // rej + kfBachPionRej = kfPosPiRej; // rej } //__________________________________________ @@ -815,7 +817,7 @@ struct HfCandidateCreatorXic0Omegac0 { //__________________________________________ //*>~<* step 2 : reconstruct cascade(Omega) with KF const KFParticle* omegaDaugthers[2] = {&kfBachKaon, &kfV0}; - const KFParticle* omegaDaugthersRej[2] = {&kfBachRej, &kfV0}; // rej + const KFParticle* omegaDaugthersRej[2] = {&kfBachPionRej, &kfV0}; // rej // construct cascade KFParticle kfOmega; KFParticle kfOmegarej; // rej @@ -823,7 +825,7 @@ struct HfCandidateCreatorXic0Omegac0 { kfOmegarej.SetConstructMethod(kfConstructMethod); // rej try { kfOmega.Construct(omegaDaugthers, 2); - kfOmegarej.Construct(omegaDaugthersrej, 2); // rej + kfOmegarej.Construct(omegaDaugthersRej, 2); // rej } catch (std::runtime_error& e) { LOG(debug) << "Failed to construct Omega or Omega_rej from V0 and bachelor track: " << e.what(); continue; @@ -851,6 +853,7 @@ struct HfCandidateCreatorXic0Omegac0 { } registry.fill(HIST("hInvMassOmegaMinus"), massCasc); kfOmega.TransportToDecayVertex(); + //rej: Add competing rejection to minimize misidentified Xi impact. Reject if kfBachPionRej is Pion and the constructed cascade has Xi's invariant mass. //__________________________________________ //*>~<* step 3 : reconstruc Omegac0 with KF @@ -1013,14 +1016,14 @@ struct HfCandidateCreatorXic0Omegac0 { auto cascChi2OverNdfm = kfOmegac0Candidate.chi2MassCasc / cascNdfm; // KF topo Chi2 over NDF - kfOmegac0Candidate.chi2TopoV0ToPv = kfV0ToPv.GetChi2() / kfV0ToPv.GetNDF(); - kfOmegac0Candidate.chi2TopoCascToPv = kfOmegaToPv.GetChi2() / kfOmegaToPv.GetNDF(); - kfOmegac0Candidate.chi2TopoPiFromOmegacToPv = kfPiFromOmegacToPv.GetChi2() / kfPiFromOmegacToPv.GetNDF(); - kfOmegac0Candidate.chi2TopoOmegacToPv = kfOmegac0ToPv.GetChi2() / kfOmegac0ToPv.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoV0ToPv = kfV0ToPv.GetChi2() / kfV0ToPv.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoCascToPv = kfOmegaToPv.GetChi2() / kfOmegaToPv.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoPiFromOmegacToPv = kfPiFromOmegacToPv.GetChi2() / kfPiFromOmegacToPv.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoOmegacToPv = kfOmegac0ToPv.GetChi2() / kfOmegac0ToPv.GetNDF(); - auto cascBachTopoChi2 = kfBachKaonToOmega.GetChi2() / kfBachKaonToOmega.GetNDF(); - kfOmegac0Candidate.chi2TopoV0ToCasc = kfV0ToCasc.GetChi2() / kfV0ToCasc.GetNDF(); - kfOmegac0Candidate.chi2TopoCascToOmegac = kfOmegaToOmegaC.GetChi2() / kfOmegaToOmegaC.GetNDF(); + auto cascBachTopoChi2Ndf = kfBachKaonToOmega.GetChi2() / kfBachKaonToOmega.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoV0ToCasc = kfV0ToCasc.GetChi2() / kfV0ToCasc.GetNDF(); + kfOmegac0Candidate.chi2NdfTopoCascToOmegac = kfOmegaToOmegaC.GetChi2() / kfOmegaToOmegaC.GetNDF(); // KF ldl kfOmegac0Candidate.ldlV0 = ldlFromKF(kfV0, kfPV); @@ -1083,15 +1086,15 @@ struct HfCandidateCreatorXic0Omegac0 { kfOmegac0Candidate.etaOmegac = kfOmegaC0.GetEta(); // fill KF hist - registry.fill(HIST("hKFParticleCascBachTopoChi2"), cascBachTopoChi2); - registry.fill(HIST("hKFParticleV0TopoChi2"), kfOmegac0Candidate.chi2TopoV0ToCasc); - registry.fill(HIST("hKFParticleCascTopoChi2"), kfOmegac0Candidate.chi2TopoCascToOmegac); - registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2TopoOmegacToPv); // new - registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2TopoCascToPv); // new + registry.fill(HIST("hKFParticleCascBachTopoChi2"), cascBachTopoChi2Ndf); + registry.fill(HIST("hKFParticleV0TopoChi2"), kfOmegac0Candidate.chi2NdfTopoV0ToCasc); + registry.fill(HIST("hKFParticleCascTopoChi2"), kfOmegac0Candidate.chi2NdfTopoCascToOmegac); + registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2NdfTopoOmegacToPv); + registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2NdfTopoCascToPv); registry.fill(HIST("hKFParticleDcaCharmBaryonDau"), kfOmegac0Candidate.kfDcaOmegacDau); registry.fill(HIST("hKFParticleDcaXYCascBachToPv"), dcaxyCascBachelor); - registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0); // new - registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1); // new + registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0); + registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1); registry.fill(HIST("hKfLambda_ldl"), kfOmegac0Candidate.ldlV0); registry.fill(HIST("hKfOmega_ldl"), kfOmegac0Candidate.ldlCasc); registry.fill(HIST("hKfOmegaC0_ldl"), kfOmegac0Candidate.ldlOmegac); @@ -1159,8 +1162,8 @@ struct HfCandidateCreatorXic0Omegac0 { kfCandidateData(kfOmegac0Candidate.kfDcaXYPiFromOmegac, kfOmegac0Candidate.kfDcaXYCascToPv, kfOmegac0Candidate.chi2GeoV0, kfOmegac0Candidate.chi2GeoCasc, kfOmegac0Candidate.chi2GeoOmegac, kfOmegac0Candidate.chi2MassV0, kfOmegac0Candidate.chi2MassCasc, kfOmegac0Candidate.ldlV0, kfOmegac0Candidate.ldlCasc, kfOmegac0Candidate.ldlOmegac, - kfOmegac0Candidate.chi2TopoV0ToPv, kfOmegac0Candidate.chi2TopoCascToPv, kfOmegac0Candidate.chi2TopoPiFromOmegacToPv, kfOmegac0Candidate.chi2TopoOmegacToPv, - kfOmegac0Candidate.chi2TopoV0ToCasc, kfOmegac0Candidate.chi2TopoCascToOmegac, + kfOmegac0Candidate.chi2NdfTopoV0ToPv, kfOmegac0Candidate.chi2NdfTopoCascToPv, kfOmegac0Candidate.chi2NdfTopoPiFromOmegacToPv, kfOmegac0Candidate.chi2NdfTopoOmegacToPv, + kfOmegac0Candidate.chi2NdfTopoV0ToCasc, kfOmegac0Candidate.chi2NdfTopoCascToOmegac, kfOmegac0Candidate.decayLenXYLambda, kfOmegac0Candidate.decayLenXYCasc, kfOmegac0Candidate.decayLenXYOmegac, kfOmegac0Candidate.cosPaV0ToCasc, kfOmegac0Candidate.cosPaCascToOmegac, kfOmegac0Candidate.cosPaXYV0ToCasc, kfOmegac0Candidate.cosPaXYCascToOmegac, kfOmegac0Candidate.rapOmegac, kfOmegac0Candidate.ptPiFromOmegac, kfOmegac0Candidate.ptOmegac, @@ -2118,19 +2121,17 @@ struct HfCandidateCreatorXic0Omegac0Mc { // Slice the collisions table to get the collision info for the current MC collision float centrality{-1.f}; uint16_t rejectionMask{0}; - int nSplitColl = 0; if constexpr (centEstimator == CentralityEstimator::FT0C) { const auto collSlice = collsWithMcLabels.sliceBy(colPerMcCollisionFT0C, mcCollision.globalIndex()); rejectionMask = hfEvSelMc.getHfMcCollisionRejectionMask(mcCollision, collSlice, centrality); } else if constexpr (centEstimator == CentralityEstimator::FT0M) { const auto collSlice = collsWithMcLabels.sliceBy(colPerMcCollisionFT0M, mcCollision.globalIndex()); - nSplitColl = collSlice.size(); rejectionMask = hfEvSelMc.getHfMcCollisionRejectionMask(mcCollision, collSlice, centrality); } else if constexpr (centEstimator == CentralityEstimator::None) { const auto collSlice = collsWithMcLabels.sliceBy(colPerMcCollision, mcCollision.globalIndex()); rejectionMask = hfEvSelMc.getHfMcCollisionRejectionMask(mcCollision, collSlice, centrality); } - hfEvSelMc.fillHistograms(mcCollision, rejectionMask, nSplitColl); + hfEvSelMc.fillHistograms(mcCollision, rejectionMask); if (rejectionMask != 0) { /// at least one event selection not satisfied --> reject all particles from this collision for (unsigned int i = 0; i < mcParticlesPerMcColl.size(); ++i) { @@ -2501,4 +2502,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), adaptAnalysisTask(cfgc)}; -} +} \ No newline at end of file diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 88f0e513595..81b08fb7f33 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -155,7 +155,7 @@ struct HfCandidateSelectorToOmegaPi { HistogramRegistry registry{"registry"}; // for QA of selections - OutputObj hInvMassCharmBaryon{TH1F("hInvMassCharmBaryon", "Charm baryon invariant mass;inv mass;entries", 500, 2.3, 3.1)}; + OutputObj hInvMassCharmBaryon{TH1D("hInvMassCharmBaryon", "Charm baryon invariant mass;inv mass;entries", 500, 2.3, 3.1)}; void init(InitContext const&) { @@ -182,491 +182,495 @@ struct HfCandidateSelectorToOmegaPi { const AxisSpec axisSel{2, -0.5, 1.5, "status"}; - registry.add("hSelPID", "hSelPID;status;entries", {HistType::kTH1F, {{12, 0., 12.}}}); - registry.add("hStatusCheck", "Check consecutive selections status;status;entries", {HistType::kTH1F, {{12, 0., 12.}}}); + registry.add("hSelPID", "hSelPID;status;entries", {HistType::kTH1D, {{12, 0., 12.}}}); + registry.add("hStatusCheck", "Check consecutive selections status;status;entries", {HistType::kTH1D, {{12, 0., 12.}}}); // for QA of the selections (bin 0 -> candidates that did not pass the selection, bin 1 -> candidates that passed the selection) - registry.add("hSelSignDec", "hSelSignDec;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelEtaPosV0Dau", "hSelEtaPosV0Dau;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelEtaNegV0Dau", "hSelEtaNegV0Dau;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelEtaKaFromCasc", "hSelEtaKaFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelEtaPiFromCharm", "hSelEtaPiFromCharm;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelRadCasc", "hSelRadCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelRadV0", "hSelRadV0;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelCosPACasc", "hSelCosPACasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelCosPAV0", "hSelCosPAV0;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCACascDau", "hSelDCACascDau;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCAV0Dau", "hSelDCAV0Dau;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCACharmDau", "hSelDCACharmDau;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCAXYPrimPi", "hSelDCAXYPrimPi;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCAZPrimPi", "hSelDCAZPrimPi;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCAXYCasc", "hSelDCAXYCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDCAZCasc", "hSelDCAZCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelPtKaFromCasc", "hSelPtKaFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelPtPiFromCharm", "hSelPtPiFromCharm;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelTPCQualityPiFromCharm", "hSelTPCQualityPiFromCharm;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelTPCQualityPiFromLam", "hSelTPCQualityPiFromLam;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelTPCQualityPrFromLam", "hSelTPCQualityPrFromLam;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelTPCQualityKaFromCasc", "hSelTPCQualityKaFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelITSQualityPiFromCharm", "hSelITSQualityPiFromCharm;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelMassLam", "hSelMassLam;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelMassCasc", "hSelMassCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDcaXYToPvV0Daughters", "hSelDcaXYToPvV0Daughters;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelDcaXYToPvKaFromCasc", "hSelDcaXYToPvKaFromCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelCompetingCasc", "hSelCompetingCasc;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelKFstatus", "hSelKFstatus;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelV0_Casc_Omegacldl", "hSelV0_Casc_Omegacldl;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelctauOmegac", "hSelctauOmegac;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelChi2GeooverNDFV0_Casc_Omegac", "hSelChi2GeooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelChi2TopooverNDFV0_Casc_Omegac", "hSelChi2TopooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSeldecayLenXYOmegac_Casc_V0", "hSeldecayLenXYOmegac_Casc_V0;status;entries", {HistType::kTH1F, {axisSel}}); - registry.add("hSelcosPaCascToOmegac_V0ToCasc", "hSelcosPaCascToOmegac_V0ToCasc;status;entries", {HistType::kTH1F, {axisSel}}); + registry.add("hSelSignDec", "hSelSignDec;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelEtaPosV0Dau", "hSelEtaPosV0Dau;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelEtaNegV0Dau", "hSelEtaNegV0Dau;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelEtaKaFromCasc", "hSelEtaKaFromCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelEtaPiFromCharm", "hSelEtaPiFromCharm;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelRadCasc", "hSelRadCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelRadV0", "hSelRadV0;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelCosPACasc", "hSelCosPACasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelCosPAV0", "hSelCosPAV0;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCACascDau", "hSelDCACascDau;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCAV0Dau", "hSelDCAV0Dau;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCACharmDau", "hSelDCACharmDau;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCAXYPrimPi", "hSelDCAXYPrimPi;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCAZPrimPi", "hSelDCAZPrimPi;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCAXYCasc", "hSelDCAXYCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDCAZCasc", "hSelDCAZCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelPtKaFromCasc", "hSelPtKaFromCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelPtPiFromCharm", "hSelPtPiFromCharm;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelTPCQualityPiFromCharm", "hSelTPCQualityPiFromCharm;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelTPCQualityPiFromLam", "hSelTPCQualityPiFromLam;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelTPCQualityPrFromLam", "hSelTPCQualityPrFromLam;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelTPCQualityKaFromCasc", "hSelTPCQualityKaFromCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelITSQualityPiFromCharm", "hSelITSQualityPiFromCharm;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelMassLam", "hSelMassLam;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelMassCasc", "hSelMassCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelMassCharmBaryon", "hSelMassCharmBaryon;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDcaXYToPvV0Daughters", "hSelDcaXYToPvV0Daughters;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelDcaXYToPvKaFromCasc", "hSelDcaXYToPvKaFromCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelCompetingCasc", "hSelCompetingCasc;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelKFstatus", "hSelKFstatus;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelV0_Casc_Omegacldl", "hSelV0_Casc_Omegacldl;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelctauOmegac", "hSelctauOmegac;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelChi2GeooverNDFV0_Casc_Omegac", "hSelChi2GeooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelChi2TopooverNDFV0_Casc_Omegac", "hSelChi2TopooverNDFV0_Casc_Omegac;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSeldecayLenXYOmegac_Casc_V0", "hSeldecayLenXYOmegac_Casc_V0;status;entries", {HistType::kTH1D, {axisSel}}); + registry.add("hSelcosPaCascToOmegac_V0ToCasc", "hSelcosPaCascToOmegac_V0ToCasc;status;entries", {HistType::kTH1D, {axisSel}}); registry.add("hInvMassXiMinus_rej_cut", "hInvMassXiMinus_rej_cut", kTH1D, {{1000, 1.25f, 1.65f}}); } - void process(soa::Join const& candidates, + template + void process(soa::Join const& candidates, TracksSel const& tracks, TracksSelLf const& lfTracks) { - // looping over charm baryon candidates - for (const auto& candidate : candidates) { - - bool resultSelections = true; // True if the candidate passes all the selections, False otherwise - - auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter - auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter - auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade - auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon - auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); - auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); - auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); - auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); - - auto trackPiFromLam = trackV0NegDau; - auto trackPrFromLam = trackV0PosDau; - - int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade - - if (signDecay > 0) { - trackPiFromLam = trackV0PosDau; - trackPrFromLam = trackV0NegDau; - registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay - } else if (signDecay < 0) { - registry.fill(HIST("hSelSignDec"), 0); // particle decay - } - - // eta selection - double etaV0PosDau = candidate.etaV0PosDau(); - double etaV0NegDau = candidate.etaV0NegDau(); - double etaKaFromCasc = candidate.etaBachFromCasc(); - double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); - if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPosV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaPosV0Dau"), 1); - } - if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaNegV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaNegV0Dau"), 1); - } - if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelEtaKaFromCasc"), 1); - } - if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelEtaPiFromCharm"), 1); - } - - // minimum radius cut (LFcut) - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { - resultSelections = false; - registry.fill(HIST("hSelRadCasc"), 0); - } else { - registry.fill(HIST("hSelRadCasc"), 1); - } - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { - resultSelections = false; - registry.fill(HIST("hSelRadV0"), 0); - } else { - registry.fill(HIST("hSelRadV0"), 1); - } - - // cosPA (LFcut) - if (candidate.cosPACasc() < cosPACascMin) { - resultSelections = false; - registry.fill(HIST("hSelCosPACasc"), 0); - } else { - registry.fill(HIST("hSelCosPACasc"), 1); - } - if (candidate.cosPAV0() < cosPAV0Min) { - resultSelections = false; - registry.fill(HIST("hSelCosPAV0"), 0); - } else { - registry.fill(HIST("hSelCosPAV0"), 1); - } - - // cascade and v0 daughters dca cut (LF cut) - if (candidate.dcaCascDau() > dcaCascDauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCACascDau"), 0); - } else { - registry.fill(HIST("hSelDCACascDau"), 1); - } - - if (candidate.dcaV0Dau() > dcaV0DauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCAV0Dau"), 0); - } else { - registry.fill(HIST("hSelDCAV0Dau"), 1); - } - - // dca charm baryon daughters cut - if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCACharmDau"), 0); - } else { - registry.fill(HIST("hSelDCACharmDau"), 1); - } - - // dcaXY v0 daughters to PV cut - if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { - resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); - } else { - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); - } - - // dcaXY ka <-- cascade to PV cut - if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { - resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); - } - - // cut on charm bachelor pion dcaXY and dcaZ - if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAXYPrimPi"), 0); - } else { - registry.fill(HIST("hSelDCAXYPrimPi"), 1); - } - if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAZPrimPi"), 0); - } else { - registry.fill(HIST("hSelDCAZPrimPi"), 1); - } - - // cut on cascade dcaXY and dcaZ - if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAXYCasc"), 0); - } else { - registry.fill(HIST("hSelDCAXYCasc"), 1); - } - if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAZCasc"), 0); - } else { - registry.fill(HIST("hSelDCAZCasc"), 1); - } - - // pT selections - double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); - double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); - if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { - resultSelections = false; - registry.fill(HIST("hSelPtKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelPtKaFromCasc"), 1); - } - if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { - resultSelections = false; - registry.fill(HIST("hSelPtPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelPtPiFromCharm"), 1); - } - - // KFParticle Preselections(kfsel) - if (applyKFpreselections) { + if constexpr (std::is_same_v) + { + // looping over charm baryon candidates + for (const auto& candidate : candidates) { + + bool resultSelections = true; // True if the candidate passes all the selections, False otherwise + + auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter + auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter + auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade + auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon + auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); + auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); + auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); + auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); + + auto trackPiFromLam = trackV0NegDau; + auto trackPrFromLam = trackV0PosDau; + + int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade + + if (signDecay > 0) { + trackPiFromLam = trackV0PosDau; + trackPrFromLam = trackV0NegDau; + registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay + } else if (signDecay < 0) { + registry.fill(HIST("hSelSignDec"), 0); // particle decay + } - bool inputKF = false; - if (resultSelections) { - inputKF = true; - registry.fill(HIST("hSelKFstatus"), 0); + // eta selection + double etaV0PosDau = candidate.etaV0PosDau(); + double etaV0NegDau = candidate.etaV0NegDau(); + double etaKaFromCasc = candidate.etaBachFromCasc(); + double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); + if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPosV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaPosV0Dau"), 1); + } + if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaNegV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaNegV0Dau"), 1); + } + if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelEtaKaFromCasc"), 1); + } + if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelEtaPiFromCharm"), 1); } - // Competing Ξ rejection(KF) - if (applyCompetingCascRejection) { - if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascaderejMassWindow) { - resultSelections = false; - registry.fill(HIST("hSelCompetingCasc"), 0); - } else { - registry.fill(HIST("hSelCompetingCasc"), 1); - registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); - } + // minimum radius cut (LFcut) + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { + resultSelections = false; + registry.fill(HIST("hSelRadCasc"), 0); + } else { + registry.fill(HIST("hSelRadCasc"), 1); + } + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { + resultSelections = false; + registry.fill(HIST("hSelRadV0"), 0); + } else { + registry.fill(HIST("hSelRadV0"), 1); } - // v0&Casc&Omegac ldl selection - if ((candidate.v0ldl() < v0ldlmin) || (candidate.cascldl() < cascldlmin) || (candidate.omegacldl() > omegacldlmax)) { + // cosPA (LFcut) + if (candidate.cosPACasc() < cosPACascMin) { resultSelections = false; - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); + registry.fill(HIST("hSelCosPACasc"), 0); } else { - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); + registry.fill(HIST("hSelCosPACasc"), 1); + } + if (candidate.cosPAV0() < cosPAV0Min) { + resultSelections = false; + registry.fill(HIST("hSelCosPAV0"), 0); + } else { + registry.fill(HIST("hSelCosPAV0"), 1); } - // Omegac ctau selsection - if (candidate.ctauOmegac() > ctauOmegacmax) { + // cascade and v0 daughters dca cut (LF cut) + if (candidate.dcaCascDau() > dcaCascDauMax) { resultSelections = false; - registry.fill(HIST("hSelctauOmegac"), 0); + registry.fill(HIST("hSelDCACascDau"), 0); } else { - registry.fill(HIST("hSelctauOmegac"), 1); + registry.fill(HIST("hSelDCACascDau"), 1); } - // Chi2Geo/NDF V0&Casc&Omegac selection - if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfmax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfmax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfmax)) { + if (candidate.dcaV0Dau() > dcaV0DauMax) { resultSelections = false; - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); + registry.fill(HIST("hSelDCAV0Dau"), 0); } else { - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); + registry.fill(HIST("hSelDCAV0Dau"), 1); } - // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) - if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascmax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvmax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacmax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvmax)) { + // dca charm baryon daughters cut + if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { resultSelections = false; - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); + registry.fill(HIST("hSelDCACharmDau"), 0); } else { - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); + registry.fill(HIST("hSelDCACharmDau"), 1); } - // DecaylengthXY of Omegac&Casc&V0 selection - if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacmax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascmin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdamin)) { + // dcaXY v0 daughters to PV cut + if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { resultSelections = false; - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); } else { - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); } - // KFPA cut cosPaCascToOmegac cosPaV0ToCasc - if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacmin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascmin)) { + // dcaXY ka <-- cascade to PV cut + if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { resultSelections = false; - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); } else { - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); } - if (resultSelections && inputKF) { - registry.fill(HIST("hSelKFstatus"), 1); + // cut on charm bachelor pion dcaXY and dcaZ + if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAXYPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAXYPrimPi"), 1); + } + if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAZPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAZPrimPi"), 1); } - } - // TPC clusters selections - if (applyTrkSelLf) { - if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + // cut on cascade dcaXY and dcaZ + if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); + registry.fill(HIST("hSelDCAXYCasc"), 0); } else { - registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); + registry.fill(HIST("hSelDCAXYCasc"), 1); } - if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { resultSelections = false; - registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); + registry.fill(HIST("hSelDCAZCasc"), 0); } else { - registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); + registry.fill(HIST("hSelDCAZCasc"), 1); } - if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + + // pT selections + double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); + double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { resultSelections = false; - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); + registry.fill(HIST("hSelPtKaFromCasc"), 0); } else { - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); + registry.fill(HIST("hSelPtKaFromCasc"), 1); + } + if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { + resultSelections = false; + registry.fill(HIST("hSelPtPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelPtPiFromCharm"), 1); } - } - if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); - } - // ITS clusters selection - if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { - resultSelections = false; - registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); - } + // KFParticle Preselections(kfsel) + if (applyKFpreselections) { - // track-level PID selection + bool inputKF = false; + if (resultSelections) { + inputKF = true; + registry.fill(HIST("hSelKFstatus"), 0); + } - // for TrackSelectorPID - int statusPidPrFromLam = -999; - int statusPidPiFromLam = -999; - int statusPidKaFromCasc = -999; - int statusPidPiFromCharmBaryon = -999; + // Competing Ξ rejection(KF) Try to reject cases in which the candidate has a an inv. mass compatibler to Xi (bachelor pion) instead of Omega (bachelor kaon) + if (applyCompetingCascRejection) { + if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascaderejMassWindow) { + resultSelections = false; + registry.fill(HIST("hSelCompetingCasc"), 0); + } else { + registry.fill(HIST("hSelCompetingCasc"), 1); + registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + } + } - bool statusPidLambda = false; - bool statusPidCascade = false; - bool statusPidCharmBaryon = false; + // v0&Casc&Omegac ldl selection + if ((candidate.v0ldl() < v0ldlmin) || (candidate.cascldl() < cascldlmin) || (candidate.omegacldl() > omegacldlmax)) { + resultSelections = false; + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); + } else { + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); + } - int infoTpcStored = 0; - int infoTofStored = 0; + // Omegac ctau selsection + if (candidate.ctauOmegac() > ctauOmegacmax) { + resultSelections = false; + registry.fill(HIST("hSelctauOmegac"), 0); + } else { + registry.fill(HIST("hSelctauOmegac"), 1); + } - if (usePidTpcOnly == usePidTpcTofCombined) { - LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); - } + // Chi2Geo/NDF V0&Casc&Omegac selection + if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfmax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfmax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfmax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); + } - if (trackPiFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPiFromLam); - } - if (trackPrFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPrFromLam); - } - if (trackKaFromCasc.hasTPC()) { - SETBIT(infoTpcStored, kKaFromCasc); - } - if (trackPiFromCharm.hasTPC()) { - SETBIT(infoTpcStored, kPiFromCharm); - } - if (trackPiFromLam.hasTOF()) { - SETBIT(infoTofStored, kPiFromLam); - } - if (trackPrFromLam.hasTOF()) { - SETBIT(infoTofStored, kPrFromLam); - } - if (trackKaFromCasc.hasTOF()) { - SETBIT(infoTofStored, kKaFromCasc); - } - if (trackPiFromCharm.hasTOF()) { - SETBIT(infoTofStored, kPiFromCharm); - } + // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) + if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascmax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvmax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacmax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvmax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); + } - if (usePidTpcOnly) { - statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); - } else if (usePidTpcTofCombined) { - statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); - } + // DecaylengthXY of Omegac&Casc&V0 selection + if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacmax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascmin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdamin)) { + resultSelections = false; + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); + } else { + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); + } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { - statusPidLambda = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 0.5); + // KFPA cut cosPaCascToOmegac cosPaV0ToCasc + if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacmin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascmin)) { + resultSelections = false; + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); + } else { + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); + } + + if (resultSelections && inputKF) { + registry.fill(HIST("hSelKFstatus"), 1); + } } - } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { - statusPidCascade = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 1.5); + // TPC clusters selections + if (applyTrkSelLf) { + if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); + } + if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); + } + if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); + } + } + if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); } - } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { - statusPidCharmBaryon = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 2.5); + // ITS clusters selection + if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { + resultSelections = false; + registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); } - } - // invariant mass cuts - bool statusInvMassLambda = false; - bool statusInvMassCascade = false; - bool statusInvMassCharmBaryon = false; + // track-level PID selection - double invMassLambda = candidate.invMassLambda(); - double invMassCascade = candidate.invMassCascade(); - double invMassCharmBaryon = candidate.invMassCharmBaryon(); + // for TrackSelectorPID + int statusPidPrFromLam = -999; + int statusPidPiFromLam = -999; + int statusPidKaFromCasc = -999; + int statusPidPiFromCharmBaryon = -999; - if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { - statusInvMassLambda = true; - registry.fill(HIST("hSelMassLam"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { - registry.fill(HIST("hStatusCheck"), 3.5); - } - } else { - registry.fill(HIST("hSelMassLam"), 0); - } + bool statusPidLambda = false; + bool statusPidCascade = false; + bool statusPidCharmBaryon = false; - if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { - statusInvMassCascade = true; - registry.fill(HIST("hSelMassCasc"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { - registry.fill(HIST("hStatusCheck"), 4.5); - } - } else { - registry.fill(HIST("hSelMassCasc"), 0); - } + int infoTpcStored = 0; + int infoTofStored = 0; - if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { - statusInvMassCharmBaryon = true; - registry.fill(HIST("hSelMassCharmBaryon"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { - registry.fill(HIST("hStatusCheck"), 5.5); + if (usePidTpcOnly == usePidTpcTofCombined) { + LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); } - } else { - registry.fill(HIST("hSelMassCharmBaryon"), 0); - } - - hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, - trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), - trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); - if (resultSelections) { - if (!statusPidLambda) { - registry.fill(HIST("hSelPID"), 0.5); + if (trackPiFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPiFromLam); } - if (statusPidLambda) { - registry.fill(HIST("hSelPID"), 1.5); + if (trackPrFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPrFromLam); } - if (!statusPidCascade) { - registry.fill(HIST("hSelPID"), 2.5); + if (trackKaFromCasc.hasTPC()) { + SETBIT(infoTpcStored, kKaFromCasc); } - if (statusPidCascade) { - registry.fill(HIST("hSelPID"), 3.5); + if (trackPiFromCharm.hasTPC()) { + SETBIT(infoTpcStored, kPiFromCharm); } - if (!statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 4.5); + if (trackPiFromLam.hasTOF()) { + SETBIT(infoTofStored, kPiFromLam); } - if (statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 5.5); + if (trackPrFromLam.hasTOF()) { + SETBIT(infoTofStored, kPrFromLam); } - if (!statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 6.5); + if (trackKaFromCasc.hasTOF()) { + SETBIT(infoTofStored, kKaFromCasc); } - if (statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 7.5); + if (trackPiFromCharm.hasTOF()) { + SETBIT(infoTofStored, kPiFromCharm); } - if (!statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 8.5); + + if (usePidTpcOnly) { + statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); + } else if (usePidTpcTofCombined) { + statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); } - if (statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 9.5); + + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { + statusPidLambda = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 0.5); + } } - if (!statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 10.5); + + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { + statusPidCascade = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 1.5); + } } - if (statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 11.5); + + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { + statusPidCharmBaryon = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 2.5); + } } - } - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { - hInvMassCharmBaryon->Fill(invMassCharmBaryon); + // invariant mass cuts + bool statusInvMassLambda = false; + bool statusInvMassCascade = false; + bool statusInvMassCharmBaryon = false; + + double invMassLambda = candidate.invMassLambda(); + double invMassCascade = candidate.invMassCascade(); + double invMassCharmBaryon = candidate.invMassCharmBaryon(); + + if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { + statusInvMassLambda = true; + registry.fill(HIST("hSelMassLam"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { + registry.fill(HIST("hStatusCheck"), 3.5); + } + } else { + registry.fill(HIST("hSelMassLam"), 0); + } + + if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { + statusInvMassCascade = true; + registry.fill(HIST("hSelMassCasc"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { + registry.fill(HIST("hStatusCheck"), 4.5); + } + } else { + registry.fill(HIST("hSelMassCasc"), 0); + } + + if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { + statusInvMassCharmBaryon = true; + registry.fill(HIST("hSelMassCharmBaryon"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { + registry.fill(HIST("hStatusCheck"), 5.5); + } + } else { + registry.fill(HIST("hSelMassCharmBaryon"), 0); + } + + hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, + trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), + trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); + + if (resultSelections) { + if (!statusPidLambda) { + registry.fill(HIST("hSelPID"), 0.5); + } + if (statusPidLambda) { + registry.fill(HIST("hSelPID"), 1.5); + } + if (!statusPidCascade) { + registry.fill(HIST("hSelPID"), 2.5); + } + if (statusPidCascade) { + registry.fill(HIST("hSelPID"), 3.5); + } + if (!statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 4.5); + } + if (statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 5.5); + } + if (!statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 6.5); + } + if (statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 7.5); + } + if (!statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 8.5); + } + if (statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 9.5); + } + if (!statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 10.5); + } + if (statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 11.5); + } + } + + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { + hInvMassCharmBaryon->Fill(invMassCharmBaryon); + } } } } // end process From 44ae7b49f1bec17543c731d8d26d4c042bc69da2 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 22 Jan 2025 15:01:02 +0000 Subject: [PATCH 17/27] Please consider the following formatting changes --- PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx | 12 ++++++------ .../candidateSelectorOmegac0ToOmegaPi.cxx | 7 +++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 124b7fadd05..00917981ad9 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -326,7 +326,6 @@ struct HfCandidateCreatorXic0Omegac0 { registry.add("hKFcosPaV0ToCasc", "hKFcosPaV0ToCasc", kTH1D, {{5000, 0.8f, 1.1f}}); registry.add("hKFcosPaCascToOmegac", "hKFcosPaCascToOmegac", kTH1D, {{5000, 0.8f, 1.1f}}); - hfEvSel.addHistograms(registry); // collision monitoring df.setPropagateToPCA(propagateToPCA); @@ -853,7 +852,7 @@ struct HfCandidateCreatorXic0Omegac0 { } registry.fill(HIST("hInvMassOmegaMinus"), massCasc); kfOmega.TransportToDecayVertex(); - //rej: Add competing rejection to minimize misidentified Xi impact. Reject if kfBachPionRej is Pion and the constructed cascade has Xi's invariant mass. + // rej: Add competing rejection to minimize misidentified Xi impact. Reject if kfBachPionRej is Pion and the constructed cascade has Xi's invariant mass. //__________________________________________ //*>~<* step 3 : reconstruc Omegac0 with KF @@ -1090,11 +1089,11 @@ struct HfCandidateCreatorXic0Omegac0 { registry.fill(HIST("hKFParticleV0TopoChi2"), kfOmegac0Candidate.chi2NdfTopoV0ToCasc); registry.fill(HIST("hKFParticleCascTopoChi2"), kfOmegac0Candidate.chi2NdfTopoCascToOmegac); registry.fill(HIST("hKFParticlechi2TopoOmegacToPv"), kfOmegac0Candidate.chi2NdfTopoOmegacToPv); - registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2NdfTopoCascToPv); + registry.fill(HIST("hKFParticlechi2TopoCascToPv"), kfOmegac0Candidate.chi2NdfTopoCascToPv); registry.fill(HIST("hKFParticleDcaCharmBaryonDau"), kfOmegac0Candidate.kfDcaOmegacDau); registry.fill(HIST("hKFParticleDcaXYCascBachToPv"), dcaxyCascBachelor); - registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0); - registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1); + registry.fill(HIST("hKFParticleDcaXYV0DauPosToPv"), dcaxyV0Dau0); + registry.fill(HIST("hKFParticleDcaXYV0DauNegToPv"), dcaxyV0Dau1); registry.fill(HIST("hKfLambda_ldl"), kfOmegac0Candidate.ldlV0); registry.fill(HIST("hKfOmega_ldl"), kfOmegac0Candidate.ldlCasc); registry.fill(HIST("hKfOmegaC0_ldl"), kfOmegac0Candidate.ldlOmegac); @@ -2502,4 +2501,5 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) return WorkflowSpec{ adaptAnalysisTask(cfgc), adaptAnalysisTask(cfgc)}; -} \ No newline at end of file +} + \ No newline at end of file diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 81b08fb7f33..db3c6982a42 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -230,8 +230,7 @@ struct HfCandidateSelectorToOmegaPi { TracksSel const& tracks, TracksSelLf const& lfTracks) { - if constexpr (std::is_same_v) - { + if constexpr (std::is_same_v) { // looping over charm baryon candidates for (const auto& candidate : candidates) { @@ -626,8 +625,8 @@ struct HfCandidateSelectorToOmegaPi { } hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, - trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), - trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); + trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), + trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); if (resultSelections) { if (!statusPidLambda) { From 532d63f22b4049286d483345bdf138603b49172d Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 22 Jan 2025 15:07:03 +0000 Subject: [PATCH 18/27] Please consider the following formatting changes --- PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx | 1 - 1 file changed, 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 00917981ad9..89a8597bd68 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -2502,4 +2502,3 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) adaptAnalysisTask(cfgc), adaptAnalysisTask(cfgc)}; } - \ No newline at end of file From d112d3519780e65d6283c85a15b4d480c431f41f Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Wed, 22 Jan 2025 23:27:19 +0800 Subject: [PATCH 19/27] Update PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index 89a8597bd68..b3366b0ab62 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -759,7 +759,7 @@ struct HfCandidateCreatorXic0Omegac0 { KFParticle kfPosPr(kfTrack0, kProton); KFParticle kfNegPi(kfTrack1, kPiMinus); KFParticle kfNegKa(kfTrackBach, kKMinus); - KFParticle kfNegPirRej(kfTrackBach, kPiMinus); // rej + KFParticle kfNegPiRej(kfTrackBach, kPiMinus); // rej KFParticle kfPosPi(kfTrack0, kPiPlus); KFParticle kfNegPr(kfTrack1, kProton); KFParticle kfPosKa(kfTrackBach, kKPlus); From b191b1f7fe130bbbdbd607945c95775fe6a3045a Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Thu, 23 Jan 2025 22:39:00 +0800 Subject: [PATCH 20/27] Distinguish the selector versions between the DCAFitter Table and the joined KFParticle & DCAFitter Table.git --- .../DataModel/CandidateReconstructionTables.h | 4 +- .../candidateCreatorXic0Omegac0.cxx | 2 +- .../candidateSelectorOmegac0ToOmegaPi.cxx | 1141 +++++++++++------ 3 files changed, 769 insertions(+), 378 deletions(-) diff --git a/PWGHF/DataModel/CandidateReconstructionTables.h b/PWGHF/DataModel/CandidateReconstructionTables.h index 4863e2899ab..46625755a9a 100644 --- a/PWGHF/DataModel/CandidateReconstructionTables.h +++ b/PWGHF/DataModel/CandidateReconstructionTables.h @@ -1077,7 +1077,9 @@ enum DecayType2Prong { XiczeroOmegaczeroToXiPi = 0, OmegaczeroToOmegaPi, OmegaczeroToOmegaK, N2ProngDecays }; // always keep N2ProngDecays at the end - +// mapping of construct method +enum ConstructMethod { DcaFitter = 0, + KfParticle }; // mapping of decay types enum DecayType3Prong { XicplusToXiPiPi = 0, N3ProngDecays }; // always keep N3ProngDecays at the end diff --git a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx index b3366b0ab62..7b5452a68d9 100644 --- a/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx +++ b/PWGHF/TableProducer/candidateCreatorXic0Omegac0.cxx @@ -773,7 +773,7 @@ struct HfCandidateCreatorXic0Omegac0 { kfPos = kfPosPr; kfNeg = kfNegPi; kfBachKaon = kfNegKa; - kfBachPionRej = kfNegPirRej; // rej + kfBachPionRej = kfNegPiRej; // rej } else { kfPos = kfPosPi; kfNeg = kfNegPr; diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index db3c6982a42..d9d6b6e0394 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -126,25 +126,25 @@ struct HfCandidateSelectorToOmegaPi { Configurable itsChi2PerClusterMax{"itsChi2PerClusterMax", 36, "Maximum value of chi2 fit over ITS clusters for pi <- charm baryon"}; // KF selection - Configurable applyKFpreselections{"applyKFpreselections", true, "Apply KFParticle related rejection"}; - Configurable applyCompetingCascRejection{"applyCompetingCascRejection", true, "Apply competing Xi(for Omegac0) rejection"}; - Configurable cascaderejMassWindow{"cascaderejMassWindow", 0.01, "competing Xi(for Omegac0) rejection mass window"}; - Configurable v0ldlmin{"v0ldlmin", 3., "Minimum value of l/dl of V0"}; // l/dl and Chi2 are to be determined - Configurable cascldlmin{"cascldlmin", 1., "Minimum value of l/dl of casc"}; - Configurable omegacldlmax{"omegacldlmax", 5., "Maximum value of l/dl of Omegac"}; - Configurable ctauOmegacmax{"ctauOmegacmax", 0.4, "lifetime τ of Omegac"}; - Configurable v0Chi2OverNdfmax{"v0Chi2OverNdfmax", 100., "Maximum chi2Geo/NDF of V0"}; - Configurable cascChi2OverNdfmax{"cascChi2OverNdfmax", 100., "Maximum chi2Geo/NDF of casc"}; - Configurable omegacChi2OverNdfmax{"omegacChi2OverNdfmax", 100., "Maximum chi2Geo/NDF of Omegac"}; - Configurable chi2TopoV0ToCascmax{"chi2TopoV0ToCascmax", 100., "Maximum chi2Topo/NDF of V0ToCas"}; - Configurable chi2TopoOmegacToPvmax{"chi2TopoOmegacToPvmax", 100., "Maximum chi2Topo/NDF of OmegacToPv"}; - Configurable chi2TopoCascToOmegacmax{"chi2TopoCascToOmegacmax", 100., "Maximum chi2Topo/NDF of CascToOmegac"}; - Configurable chi2TopoCascToPvmax{"chi2TopoCascToPvmax", 100., "Maximum chi2Topo/NDF of CascToPv"}; - Configurable decayLenXYOmegacmax{"decayLenXYOmegacmax", 1.5, "Maximum decay lengthXY of Omegac"}; - Configurable decayLenXYCascmin{"decayLenXYCascmin", 1., "Minimum decay lengthXY of Cascade"}; - Configurable decayLenXYLambdamin{"decayLenXYLambdamin", 0., "Minimum decay lengthXY of V0"}; - Configurable cosPaCascToOmegacmin{"cosPaCascToOmegacmin", 0.995, "Minimum cosPA of cascade<-Omegac"}; - Configurable cosPaV0ToCascmin{"cosPaV0ToCascmin", 0.99, "Minimum cosPA of V0<-cascade"}; + Configurable applyKFpreselections{"applyKFpreselections", false, "Apply KFParticle related rejection"}; + Configurable applyCompetingCascRejection{"applyCompetingCascRejection", false, "Apply competing Xi(for Omegac0) rejection"}; + Configurable cascadeRejMassWindow{"cascadeRejMassWindow", 0.01, "competing Xi(for Omegac0) rejection mass window"}; + Configurable v0LdlMin{"v0LdlMin", 3., "Minimum value of l/dl of V0"}; // l/dl and Chi2 are to be determined + Configurable cascLdlMin{"cascLdlMin", 1., "Minimum value of l/dl of casc"}; + Configurable omegacLdlMax{"omegacLdlMax", 5., "Maximum value of l/dl of Omegac"}; + Configurable cTauOmegacMax{"cTauOmegacMax", 0.4, "lifetime τ of Omegac"}; + Configurable v0Chi2OverNdfMax{"v0Chi2OverNdfMax", 100., "Maximum chi2Geo/NDF of V0"}; + Configurable cascChi2OverNdfMax{"cascChi2OverNdfMax", 100., "Maximum chi2Geo/NDF of casc"}; + Configurable omegacChi2OverNdfMax{"omegacChi2OverNdfMax", 100., "Maximum chi2Geo/NDF of Omegac"}; + Configurable chi2TopoV0ToCascMax{"chi2TopoV0ToCascMax", 100., "Maximum chi2Topo/NDF of V0ToCas"}; + Configurable chi2TopoOmegacToPvMax{"chi2TopoOmegacToPvMax", 100., "Maximum chi2Topo/NDF of OmegacToPv"}; + Configurable chi2TopoCascToOmegacMax{"chi2TopoCascToOmegacMax", 100., "Maximum chi2Topo/NDF of CascToOmegac"}; + Configurable chi2TopoCascToPvMax{"chi2TopoCascToPvMax", 100., "Maximum chi2Topo/NDF of CascToPv"}; + Configurable decayLenXYOmegacMax{"decayLenXYOmegacMax", 1.5, "Maximum decay lengthXY of Omegac"}; + Configurable decayLenXYCascMin{"decayLenXYCascMin", 1., "Minimum decay lengthXY of Cascade"}; + Configurable decayLenXYLambdaMin{"decayLenXYLambdaMin", 0., "Minimum decay lengthXY of V0"}; + Configurable cosPaCascToOmegacMin{"cosPaCascToOmegacMin", 0.995, "Minimum cosPA of cascade<-Omegac"}; + Configurable cosPaV0ToCascMin{"cosPaV0ToCascMin", 0.99, "Minimum cosPA of V0<-cascade"}; TrackSelectorPi selectorPion; TrackSelectorPr selectorProton; @@ -225,455 +225,844 @@ struct HfCandidateSelectorToOmegaPi { registry.add("hInvMassXiMinus_rej_cut", "hInvMassXiMinus_rej_cut", kTH1D, {{1000, 1.25f, 1.65f}}); } - template - void process(soa::Join const& candidates, - TracksSel const& tracks, - TracksSelLf const& lfTracks) + template + void runOmegac0SelectorWithKFParticle(soa::Join const& candidates, + TracksSel const& tracks, + TracksSelLf const& lfTracks) { - if constexpr (std::is_same_v) { - // looping over charm baryon candidates - for (const auto& candidate : candidates) { - - bool resultSelections = true; // True if the candidate passes all the selections, False otherwise - - auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter - auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter - auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade - auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon - auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); - auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); - auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); - auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); - - auto trackPiFromLam = trackV0NegDau; - auto trackPrFromLam = trackV0PosDau; - - int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade - - if (signDecay > 0) { - trackPiFromLam = trackV0PosDau; - trackPrFromLam = trackV0NegDau; - registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay - } else if (signDecay < 0) { - registry.fill(HIST("hSelSignDec"), 0); // particle decay - } - - // eta selection - double etaV0PosDau = candidate.etaV0PosDau(); - double etaV0NegDau = candidate.etaV0NegDau(); - double etaKaFromCasc = candidate.etaBachFromCasc(); - double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); - if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPosV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaPosV0Dau"), 1); - } - if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaNegV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaNegV0Dau"), 1); - } - if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelEtaKaFromCasc"), 1); - } - if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelEtaPiFromCharm"), 1); - } + // looping over charm baryon candidates + for (const auto& candidate : candidates) { + + bool resultSelections = true; // True if the candidate passes all the selections, False otherwise + + auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter + auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter + auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade + auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon + auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); + auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); + auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); + auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); + + auto trackPiFromLam = trackV0NegDau; + auto trackPrFromLam = trackV0PosDau; + + int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade + + if (signDecay > 0) { + trackPiFromLam = trackV0PosDau; + trackPrFromLam = trackV0NegDau; + registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay + } else if (signDecay < 0) { + registry.fill(HIST("hSelSignDec"), 0); // particle decay + } - // minimum radius cut (LFcut) - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { - resultSelections = false; - registry.fill(HIST("hSelRadCasc"), 0); - } else { - registry.fill(HIST("hSelRadCasc"), 1); - } - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { - resultSelections = false; - registry.fill(HIST("hSelRadV0"), 0); - } else { - registry.fill(HIST("hSelRadV0"), 1); - } + // eta selection + double etaV0PosDau = candidate.etaV0PosDau(); + double etaV0NegDau = candidate.etaV0NegDau(); + double etaKaFromCasc = candidate.etaBachFromCasc(); + double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); + if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPosV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaPosV0Dau"), 1); + } + if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaNegV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaNegV0Dau"), 1); + } + if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelEtaKaFromCasc"), 1); + } + if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelEtaPiFromCharm"), 1); + } - // cosPA (LFcut) - if (candidate.cosPACasc() < cosPACascMin) { - resultSelections = false; - registry.fill(HIST("hSelCosPACasc"), 0); - } else { - registry.fill(HIST("hSelCosPACasc"), 1); - } - if (candidate.cosPAV0() < cosPAV0Min) { - resultSelections = false; - registry.fill(HIST("hSelCosPAV0"), 0); - } else { - registry.fill(HIST("hSelCosPAV0"), 1); + // minimum radius cut (LFcut) + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { + resultSelections = false; + registry.fill(HIST("hSelRadCasc"), 0); + } else { + registry.fill(HIST("hSelRadCasc"), 1); + } + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { + resultSelections = false; + registry.fill(HIST("hSelRadV0"), 0); + } else { + registry.fill(HIST("hSelRadV0"), 1); + } + + // cosPA (LFcut) + if (candidate.cosPACasc() < cosPACascMin) { + resultSelections = false; + registry.fill(HIST("hSelCosPACasc"), 0); + } else { + registry.fill(HIST("hSelCosPACasc"), 1); + } + if (candidate.cosPAV0() < cosPAV0Min) { + resultSelections = false; + registry.fill(HIST("hSelCosPAV0"), 0); + } else { + registry.fill(HIST("hSelCosPAV0"), 1); + } + + // cascade and v0 daughters dca cut (LF cut) + if (candidate.dcaCascDau() > dcaCascDauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCACascDau"), 0); + } else { + registry.fill(HIST("hSelDCACascDau"), 1); + } + + if (candidate.dcaV0Dau() > dcaV0DauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCAV0Dau"), 0); + } else { + registry.fill(HIST("hSelDCAV0Dau"), 1); + } + + // dca charm baryon daughters cut + if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCACharmDau"), 0); + } else { + registry.fill(HIST("hSelDCACharmDau"), 1); + } + + // dcaXY v0 daughters to PV cut + if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { + resultSelections = false; + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); + } else { + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); + } + + // dcaXY ka <-- cascade to PV cut + if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { + resultSelections = false; + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); + } + + // cut on charm bachelor pion dcaXY and dcaZ + if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAXYPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAXYPrimPi"), 1); + } + if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAZPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAZPrimPi"), 1); + } + + // cut on cascade dcaXY and dcaZ + if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAXYCasc"), 0); + } else { + registry.fill(HIST("hSelDCAXYCasc"), 1); + } + if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAZCasc"), 0); + } else { + registry.fill(HIST("hSelDCAZCasc"), 1); + } + + // pT selections + double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); + double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { + resultSelections = false; + registry.fill(HIST("hSelPtKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelPtKaFromCasc"), 1); + } + if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { + resultSelections = false; + registry.fill(HIST("hSelPtPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelPtPiFromCharm"), 1); + } + + // KFParticle Preselections(kfsel) + if (applyKFpreselections) { + + bool inputKF = false; + if (resultSelections) { + inputKF = true; + registry.fill(HIST("hSelKFstatus"), 0); } - // cascade and v0 daughters dca cut (LF cut) - if (candidate.dcaCascDau() > dcaCascDauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCACascDau"), 0); - } else { - registry.fill(HIST("hSelDCACascDau"), 1); + // Competing Ξ rejection(KF) Try to reject cases in which the candidate has a an inv. mass compatibler to Xi (bachelor pion) instead of Omega (bachelor kaon) + if (applyCompetingCascRejection) { + if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascadeRejMassWindow) { + resultSelections = false; + registry.fill(HIST("hSelCompetingCasc"), 0); + } else { + registry.fill(HIST("hSelCompetingCasc"), 1); + registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + } } - if (candidate.dcaV0Dau() > dcaV0DauMax) { + // v0&Casc&Omegac ldl selection + if ((candidate.v0ldl() < v0LdlMin) || (candidate.cascldl() < cascLdlMin) || (candidate.omegacldl() > omegacLdlMax)) { resultSelections = false; - registry.fill(HIST("hSelDCAV0Dau"), 0); + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); } else { - registry.fill(HIST("hSelDCAV0Dau"), 1); + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); } - // dca charm baryon daughters cut - if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { + // Omegac ctau selsection + if (candidate.ctauOmegac() > cTauOmegacMax) { resultSelections = false; - registry.fill(HIST("hSelDCACharmDau"), 0); + registry.fill(HIST("hSelctauOmegac"), 0); } else { - registry.fill(HIST("hSelDCACharmDau"), 1); + registry.fill(HIST("hSelctauOmegac"), 1); } - // dcaXY v0 daughters to PV cut - if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { + // Chi2Geo/NDF V0&Casc&Omegac selection + if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfMax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfMax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfMax)) { resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); } else { - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); } - // dcaXY ka <-- cascade to PV cut - if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { + // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) + if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascMax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvMax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacMax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvMax)) { resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); } else { - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); } - // cut on charm bachelor pion dcaXY and dcaZ - if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { + // DecaylengthXY of Omegac&Casc&V0 selection + if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacMax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascMin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdaMin)) { resultSelections = false; - registry.fill(HIST("hSelDCAXYPrimPi"), 0); + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); } else { - registry.fill(HIST("hSelDCAXYPrimPi"), 1); + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); } - if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { + + // KFPA cut cosPaCascToOmegac cosPaV0ToCasc + if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacMin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascMin)) { resultSelections = false; - registry.fill(HIST("hSelDCAZPrimPi"), 0); + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); } else { - registry.fill(HIST("hSelDCAZPrimPi"), 1); + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); } - // cut on cascade dcaXY and dcaZ - if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAXYCasc"), 0); - } else { - registry.fill(HIST("hSelDCAXYCasc"), 1); + if (resultSelections && inputKF) { + registry.fill(HIST("hSelKFstatus"), 1); } - if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { + } + + // TPC clusters selections + if (applyTrkSelLf) { + if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { resultSelections = false; - registry.fill(HIST("hSelDCAZCasc"), 0); + registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); } else { - registry.fill(HIST("hSelDCAZCasc"), 1); + registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); } - - // pT selections - double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); - double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); - if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { + if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { resultSelections = false; - registry.fill(HIST("hSelPtKaFromCasc"), 0); + registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); } else { - registry.fill(HIST("hSelPtKaFromCasc"), 1); + registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); } - if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { + if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { resultSelections = false; - registry.fill(HIST("hSelPtPiFromCharm"), 0); + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); } else { - registry.fill(HIST("hSelPtPiFromCharm"), 1); + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); } + } + if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); + } - // KFParticle Preselections(kfsel) - if (applyKFpreselections) { + // ITS clusters selection + if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { + resultSelections = false; + registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); + } - bool inputKF = false; - if (resultSelections) { - inputKF = true; - registry.fill(HIST("hSelKFstatus"), 0); - } + // track-level PID selection - // Competing Ξ rejection(KF) Try to reject cases in which the candidate has a an inv. mass compatibler to Xi (bachelor pion) instead of Omega (bachelor kaon) - if (applyCompetingCascRejection) { - if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascaderejMassWindow) { - resultSelections = false; - registry.fill(HIST("hSelCompetingCasc"), 0); - } else { - registry.fill(HIST("hSelCompetingCasc"), 1); - registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); - } - } + // for TrackSelectorPID + int statusPidPrFromLam = -999; + int statusPidPiFromLam = -999; + int statusPidKaFromCasc = -999; + int statusPidPiFromCharmBaryon = -999; - // v0&Casc&Omegac ldl selection - if ((candidate.v0ldl() < v0ldlmin) || (candidate.cascldl() < cascldlmin) || (candidate.omegacldl() > omegacldlmax)) { - resultSelections = false; - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); - } else { - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); - } + bool statusPidLambda = false; + bool statusPidCascade = false; + bool statusPidCharmBaryon = false; - // Omegac ctau selsection - if (candidate.ctauOmegac() > ctauOmegacmax) { - resultSelections = false; - registry.fill(HIST("hSelctauOmegac"), 0); - } else { - registry.fill(HIST("hSelctauOmegac"), 1); - } + int infoTpcStored = 0; + int infoTofStored = 0; - // Chi2Geo/NDF V0&Casc&Omegac selection - if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfmax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfmax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfmax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); - } else { - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); - } - - // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) - if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascmax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvmax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacmax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvmax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); - } else { - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); - } + if (usePidTpcOnly == usePidTpcTofCombined) { + LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); + } - // DecaylengthXY of Omegac&Casc&V0 selection - if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacmax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascmin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdamin)) { - resultSelections = false; - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); - } else { - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); - } + if (trackPiFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPiFromLam); + } + if (trackPrFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPrFromLam); + } + if (trackKaFromCasc.hasTPC()) { + SETBIT(infoTpcStored, kKaFromCasc); + } + if (trackPiFromCharm.hasTPC()) { + SETBIT(infoTpcStored, kPiFromCharm); + } + if (trackPiFromLam.hasTOF()) { + SETBIT(infoTofStored, kPiFromLam); + } + if (trackPrFromLam.hasTOF()) { + SETBIT(infoTofStored, kPrFromLam); + } + if (trackKaFromCasc.hasTOF()) { + SETBIT(infoTofStored, kKaFromCasc); + } + if (trackPiFromCharm.hasTOF()) { + SETBIT(infoTofStored, kPiFromCharm); + } - // KFPA cut cosPaCascToOmegac cosPaV0ToCasc - if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacmin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascmin)) { - resultSelections = false; - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); - } else { - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); - } + if (usePidTpcOnly) { + statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); + } else if (usePidTpcTofCombined) { + statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); + } - if (resultSelections && inputKF) { - registry.fill(HIST("hSelKFstatus"), 1); - } + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { + statusPidLambda = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 0.5); } + } - // TPC clusters selections - if (applyTrkSelLf) { - if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); - } - if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); - } - if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); - } - } - if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { + statusPidCascade = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 1.5); } + } - // ITS clusters selection - if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { - resultSelections = false; - registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { + statusPidCharmBaryon = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 2.5); } + } - // track-level PID selection + // invariant mass cuts + bool statusInvMassLambda = false; + bool statusInvMassCascade = false; + bool statusInvMassCharmBaryon = false; - // for TrackSelectorPID - int statusPidPrFromLam = -999; - int statusPidPiFromLam = -999; - int statusPidKaFromCasc = -999; - int statusPidPiFromCharmBaryon = -999; + double invMassLambda = candidate.invMassLambda(); + double invMassCascade = candidate.invMassCascade(); + double invMassCharmBaryon = candidate.invMassCharmBaryon(); - bool statusPidLambda = false; - bool statusPidCascade = false; - bool statusPidCharmBaryon = false; + if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { + statusInvMassLambda = true; + registry.fill(HIST("hSelMassLam"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { + registry.fill(HIST("hStatusCheck"), 3.5); + } + } else { + registry.fill(HIST("hSelMassLam"), 0); + } - int infoTpcStored = 0; - int infoTofStored = 0; + if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { + statusInvMassCascade = true; + registry.fill(HIST("hSelMassCasc"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { + registry.fill(HIST("hStatusCheck"), 4.5); + } + } else { + registry.fill(HIST("hSelMassCasc"), 0); + } - if (usePidTpcOnly == usePidTpcTofCombined) { - LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); + if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { + statusInvMassCharmBaryon = true; + registry.fill(HIST("hSelMassCharmBaryon"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { + registry.fill(HIST("hStatusCheck"), 5.5); } + } else { + registry.fill(HIST("hSelMassCharmBaryon"), 0); + } + + hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, + trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), + trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); - if (trackPiFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPiFromLam); + if (resultSelections) { + if (!statusPidLambda) { + registry.fill(HIST("hSelPID"), 0.5); + } + if (statusPidLambda) { + registry.fill(HIST("hSelPID"), 1.5); + } + if (!statusPidCascade) { + registry.fill(HIST("hSelPID"), 2.5); } - if (trackPrFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPrFromLam); + if (statusPidCascade) { + registry.fill(HIST("hSelPID"), 3.5); } - if (trackKaFromCasc.hasTPC()) { - SETBIT(infoTpcStored, kKaFromCasc); + if (!statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 4.5); } - if (trackPiFromCharm.hasTPC()) { - SETBIT(infoTpcStored, kPiFromCharm); + if (statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 5.5); } - if (trackPiFromLam.hasTOF()) { - SETBIT(infoTofStored, kPiFromLam); + if (!statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 6.5); } - if (trackPrFromLam.hasTOF()) { - SETBIT(infoTofStored, kPrFromLam); + if (statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 7.5); } - if (trackKaFromCasc.hasTOF()) { - SETBIT(infoTofStored, kKaFromCasc); + if (!statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 8.5); } - if (trackPiFromCharm.hasTOF()) { - SETBIT(infoTofStored, kPiFromCharm); + if (statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 9.5); } + if (!statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 10.5); + } + if (statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 11.5); + } + } + + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { + hInvMassCharmBaryon->Fill(invMassCharmBaryon); + } + } + } // end process + + template + void runOmegac0SelectorWithDCAFitter(aod::HfCandToOmegaPi const& candidates, + TracksSel const& tracks, + TracksSelLf const& lfTracks) + { + // looping over charm baryon candidates + for (const auto& candidate : candidates) { + + bool resultSelections = true; // True if the candidate passes all the selections, False otherwise + + auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter + auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter + auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade + auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon + auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); + auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); + auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); + auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); + + auto trackPiFromLam = trackV0NegDau; + auto trackPrFromLam = trackV0PosDau; + + int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade + + if (signDecay > 0) { + trackPiFromLam = trackV0PosDau; + trackPrFromLam = trackV0NegDau; + registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay + } else if (signDecay < 0) { + registry.fill(HIST("hSelSignDec"), 0); // particle decay + } + + // eta selection + double etaV0PosDau = candidate.etaV0PosDau(); + double etaV0NegDau = candidate.etaV0NegDau(); + double etaKaFromCasc = candidate.etaBachFromCasc(); + double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); + if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPosV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaPosV0Dau"), 1); + } + if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaNegV0Dau"), 0); + } else { + registry.fill(HIST("hSelEtaNegV0Dau"), 1); + } + if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelEtaKaFromCasc"), 1); + } + if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { + resultSelections = false; + registry.fill(HIST("hSelEtaPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelEtaPiFromCharm"), 1); + } + + // minimum radius cut (LFcut) + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { + resultSelections = false; + registry.fill(HIST("hSelRadCasc"), 0); + } else { + registry.fill(HIST("hSelRadCasc"), 1); + } + if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { + resultSelections = false; + registry.fill(HIST("hSelRadV0"), 0); + } else { + registry.fill(HIST("hSelRadV0"), 1); + } + + // cosPA (LFcut) + if (candidate.cosPACasc() < cosPACascMin) { + resultSelections = false; + registry.fill(HIST("hSelCosPACasc"), 0); + } else { + registry.fill(HIST("hSelCosPACasc"), 1); + } + if (candidate.cosPAV0() < cosPAV0Min) { + resultSelections = false; + registry.fill(HIST("hSelCosPAV0"), 0); + } else { + registry.fill(HIST("hSelCosPAV0"), 1); + } + + // cascade and v0 daughters dca cut (LF cut) + if (candidate.dcaCascDau() > dcaCascDauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCACascDau"), 0); + } else { + registry.fill(HIST("hSelDCACascDau"), 1); + } + + if (candidate.dcaV0Dau() > dcaV0DauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCAV0Dau"), 0); + } else { + registry.fill(HIST("hSelDCAV0Dau"), 1); + } + + // dca charm baryon daughters cut + if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { + resultSelections = false; + registry.fill(HIST("hSelDCACharmDau"), 0); + } else { + registry.fill(HIST("hSelDCACharmDau"), 1); + } - if (usePidTpcOnly) { - statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); - } else if (usePidTpcTofCombined) { - statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); + // dcaXY v0 daughters to PV cut + if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { + resultSelections = false; + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); + } else { + registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); + } + + // dcaXY ka <-- cascade to PV cut + if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { + resultSelections = false; + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); + } + + // cut on charm bachelor pion dcaXY and dcaZ + if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAXYPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAXYPrimPi"), 1); + } + if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAZPrimPi"), 0); + } else { + registry.fill(HIST("hSelDCAZPrimPi"), 1); + } + + // cut on cascade dcaXY and dcaZ + if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAXYCasc"), 0); + } else { + registry.fill(HIST("hSelDCAXYCasc"), 1); + } + if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { + resultSelections = false; + registry.fill(HIST("hSelDCAZCasc"), 0); + } else { + registry.fill(HIST("hSelDCAZCasc"), 1); + } + + // pT selections + double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); + double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); + if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { + resultSelections = false; + registry.fill(HIST("hSelPtKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelPtKaFromCasc"), 1); + } + if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { + resultSelections = false; + registry.fill(HIST("hSelPtPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelPtPiFromCharm"), 1); + } + + // TPC clusters selections + if (applyTrkSelLf) { + if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); } + if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); + } + if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); + } else { + registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); + } + } + if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { + resultSelections = false; + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); + } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { - statusPidLambda = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 0.5); - } + // ITS clusters selection + if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { + resultSelections = false; + registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); + } else { + registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); + } + + // track-level PID selection + + // for TrackSelectorPID + int statusPidPrFromLam = -999; + int statusPidPiFromLam = -999; + int statusPidKaFromCasc = -999; + int statusPidPiFromCharmBaryon = -999; + + bool statusPidLambda = false; + bool statusPidCascade = false; + bool statusPidCharmBaryon = false; + + int infoTpcStored = 0; + int infoTofStored = 0; + + if (usePidTpcOnly == usePidTpcTofCombined) { + LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); + } + + if (trackPiFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPiFromLam); + } + if (trackPrFromLam.hasTPC()) { + SETBIT(infoTpcStored, kPrFromLam); + } + if (trackKaFromCasc.hasTPC()) { + SETBIT(infoTpcStored, kKaFromCasc); + } + if (trackPiFromCharm.hasTPC()) { + SETBIT(infoTpcStored, kPiFromCharm); + } + if (trackPiFromLam.hasTOF()) { + SETBIT(infoTofStored, kPiFromLam); + } + if (trackPrFromLam.hasTOF()) { + SETBIT(infoTofStored, kPrFromLam); + } + if (trackKaFromCasc.hasTOF()) { + SETBIT(infoTofStored, kKaFromCasc); + } + if (trackPiFromCharm.hasTOF()) { + SETBIT(infoTofStored, kPiFromCharm); + } + + if (usePidTpcOnly) { + statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); + } else if (usePidTpcTofCombined) { + statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); + statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); + statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); + statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); + } + + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { + statusPidLambda = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 0.5); } + } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { - statusPidCascade = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 1.5); - } + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { + statusPidCascade = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 1.5); } + } - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { - statusPidCharmBaryon = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 2.5); - } + if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { + statusPidCharmBaryon = true; + if (resultSelections) { + registry.fill(HIST("hStatusCheck"), 2.5); } + } - // invariant mass cuts - bool statusInvMassLambda = false; - bool statusInvMassCascade = false; - bool statusInvMassCharmBaryon = false; + // invariant mass cuts + bool statusInvMassLambda = false; + bool statusInvMassCascade = false; + bool statusInvMassCharmBaryon = false; - double invMassLambda = candidate.invMassLambda(); - double invMassCascade = candidate.invMassCascade(); - double invMassCharmBaryon = candidate.invMassCharmBaryon(); + double invMassLambda = candidate.invMassLambda(); + double invMassCascade = candidate.invMassCascade(); + double invMassCharmBaryon = candidate.invMassCharmBaryon(); - if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { - statusInvMassLambda = true; - registry.fill(HIST("hSelMassLam"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { - registry.fill(HIST("hStatusCheck"), 3.5); - } - } else { - registry.fill(HIST("hSelMassLam"), 0); + if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { + statusInvMassLambda = true; + registry.fill(HIST("hSelMassLam"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { + registry.fill(HIST("hStatusCheck"), 3.5); } + } else { + registry.fill(HIST("hSelMassLam"), 0); + } - if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { - statusInvMassCascade = true; - registry.fill(HIST("hSelMassCasc"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { - registry.fill(HIST("hStatusCheck"), 4.5); - } - } else { - registry.fill(HIST("hSelMassCasc"), 0); + if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { + statusInvMassCascade = true; + registry.fill(HIST("hSelMassCasc"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { + registry.fill(HIST("hStatusCheck"), 4.5); } + } else { + registry.fill(HIST("hSelMassCasc"), 0); + } - if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { - statusInvMassCharmBaryon = true; - registry.fill(HIST("hSelMassCharmBaryon"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { - registry.fill(HIST("hStatusCheck"), 5.5); - } - } else { - registry.fill(HIST("hSelMassCharmBaryon"), 0); + if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { + statusInvMassCharmBaryon = true; + registry.fill(HIST("hSelMassCharmBaryon"), 1); + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { + registry.fill(HIST("hStatusCheck"), 5.5); } + } else { + registry.fill(HIST("hSelMassCharmBaryon"), 0); + } - hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, - trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), - trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); + hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, + trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), + trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); - if (resultSelections) { - if (!statusPidLambda) { - registry.fill(HIST("hSelPID"), 0.5); - } - if (statusPidLambda) { - registry.fill(HIST("hSelPID"), 1.5); - } - if (!statusPidCascade) { - registry.fill(HIST("hSelPID"), 2.5); - } - if (statusPidCascade) { - registry.fill(HIST("hSelPID"), 3.5); - } - if (!statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 4.5); - } - if (statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 5.5); - } - if (!statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 6.5); - } - if (statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 7.5); - } - if (!statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 8.5); - } - if (statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 9.5); - } - if (!statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 10.5); - } - if (statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 11.5); - } + if (resultSelections) { + if (!statusPidLambda) { + registry.fill(HIST("hSelPID"), 0.5); } - - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { - hInvMassCharmBaryon->Fill(invMassCharmBaryon); + if (statusPidLambda) { + registry.fill(HIST("hSelPID"), 1.5); + } + if (!statusPidCascade) { + registry.fill(HIST("hSelPID"), 2.5); + } + if (statusPidCascade) { + registry.fill(HIST("hSelPID"), 3.5); + } + if (!statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 4.5); + } + if (statusPidCharmBaryon) { + registry.fill(HIST("hSelPID"), 5.5); } + if (!statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 6.5); + } + if (statusInvMassLambda) { + registry.fill(HIST("hSelPID"), 7.5); + } + if (!statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 8.5); + } + if (statusInvMassCascade) { + registry.fill(HIST("hSelPID"), 9.5); + } + if (!statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 10.5); + } + if (statusInvMassCharmBaryon) { + registry.fill(HIST("hSelPID"), 11.5); + } + } + + if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { + hInvMassCharmBaryon->Fill(invMassCharmBaryon); } } } // end process -}; // end struct + + void processOmegac0SelectorWithKFParticle(soa::Join const& candidates, + TracksSel const& tracks, + TracksSelLf const& lfTracks) + { + runOmegac0SelectorWithKFParticle(candidates, tracks, lfTracks); + } + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", false); + + void processOmegac0SelectorWithDCAFitte(aod::HfCandToOmegaPi const& candidates, + TracksSel const& tracks, + TracksSelLf const& lfTracks) + { + runOmegac0SelectorWithDCAFitter(candidates, tracks, lfTracks); + } + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitte, "Run Omegac0 to Omega pi selector with only DCA related selection.", false); + +}; // end struct WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { From a4736858a3fd29e02081189f2875d08867fa000d Mon Sep 17 00:00:00 2001 From: RuiqiYin <23210190047@m.fudan.edu.cn> Date: Fri, 24 Jan 2025 23:03:16 +0800 Subject: [PATCH 21/27] Merge KF&DCA selector into one function. --- .../candidateSelectorOmegac0ToOmegaPi.cxx | 514 +++--------------- 1 file changed, 74 insertions(+), 440 deletions(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index d9d6b6e0394..121c6994818 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -159,6 +159,12 @@ struct HfCandidateSelectorToOmegaPi { void init(InitContext const&) { + std::array processesSelector = {doprocessOmegac0SelectorWithDCAFitte, doprocessOmegac0SelectorWithKFParticle}; + const int nProcessesSelector = std::accumulate(processesSelector.begin(), processesSelector.end(), 0); + if (nProcessesSelector != 1) { + LOGP(fatal, "At most one process function for selector can be enabled at a time."); + } + selectorPion.setRangePtTpc(ptPiPidTpcMin, ptPiPidTpcMax); selectorPion.setRangeNSigmaTpc(-nSigmaTpcPiMax, nSigmaTpcPiMax); selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedPiMax, nSigmaTpcCombinedPiMax); @@ -225,10 +231,10 @@ struct HfCandidateSelectorToOmegaPi { registry.add("hInvMassXiMinus_rej_cut", "hInvMassXiMinus_rej_cut", kTH1D, {{1000, 1.25f, 1.65f}}); } - template - void runOmegac0SelectorWithKFParticle(soa::Join const& candidates, - TracksSel const& tracks, - TracksSelLf const& lfTracks) + template + void runOmegac0Selector(const Candidates& candidates, + TracksSel const& tracks, + TracksSelLf const& lfTracks) { // looping over charm baryon candidates for (const auto& candidate : candidates) { @@ -398,453 +404,81 @@ struct HfCandidateSelectorToOmegaPi { registry.fill(HIST("hSelPtPiFromCharm"), 1); } - // KFParticle Preselections(kfsel) - if (applyKFpreselections) { + if constexpr (ConstructMethod == hf_cand_casc_lf::ConstructMethod::KfParticle) { + // KFParticle Preselections(kfsel) + if (applyKFpreselections) { - bool inputKF = false; - if (resultSelections) { - inputKF = true; - registry.fill(HIST("hSelKFstatus"), 0); - } + bool inputKF = false; + if (resultSelections) { + inputKF = true; + registry.fill(HIST("hSelKFstatus"), 0); + } + + // Competing Ξ rejection(KF) Try to reject cases in which the candidate has a an inv. mass compatibler to Xi (bachelor pion) instead of Omega (bachelor kaon) + if (applyCompetingCascRejection) { + if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascadeRejMassWindow) { + resultSelections = false; + registry.fill(HIST("hSelCompetingCasc"), 0); + } else { + registry.fill(HIST("hSelCompetingCasc"), 1); + registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + } + } - // Competing Ξ rejection(KF) Try to reject cases in which the candidate has a an inv. mass compatibler to Xi (bachelor pion) instead of Omega (bachelor kaon) - if (applyCompetingCascRejection) { - if (std::abs(candidate.cascRejectInvmass() - o2::constants::physics::MassXiMinus) < cascadeRejMassWindow) { + // v0&Casc&Omegac ldl selection + if ((candidate.v0ldl() < v0LdlMin) || (candidate.cascldl() < cascLdlMin) || (candidate.omegacldl() > omegacLdlMax)) { resultSelections = false; - registry.fill(HIST("hSelCompetingCasc"), 0); + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); } else { - registry.fill(HIST("hSelCompetingCasc"), 1); - registry.fill(HIST("hInvMassXiMinus_rej_cut"), candidate.cascRejectInvmass()); + registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); } - } - - // v0&Casc&Omegac ldl selection - if ((candidate.v0ldl() < v0LdlMin) || (candidate.cascldl() < cascLdlMin) || (candidate.omegacldl() > omegacLdlMax)) { - resultSelections = false; - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 0); - } else { - registry.fill(HIST("hSelV0_Casc_Omegacldl"), 1); - } - - // Omegac ctau selsection - if (candidate.ctauOmegac() > cTauOmegacMax) { - resultSelections = false; - registry.fill(HIST("hSelctauOmegac"), 0); - } else { - registry.fill(HIST("hSelctauOmegac"), 1); - } - - // Chi2Geo/NDF V0&Casc&Omegac selection - if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfMax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfMax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfMax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); - } else { - registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); - } - - // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) - if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascMax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvMax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacMax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvMax)) { - resultSelections = false; - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); - } else { - registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); - } - - // DecaylengthXY of Omegac&Casc&V0 selection - if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacMax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascMin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdaMin)) { - resultSelections = false; - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); - } else { - registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); - } - - // KFPA cut cosPaCascToOmegac cosPaV0ToCasc - if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacMin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascMin)) { - resultSelections = false; - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); - } else { - registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); - } - - if (resultSelections && inputKF) { - registry.fill(HIST("hSelKFstatus"), 1); - } - } - - // TPC clusters selections - if (applyTrkSelLf) { - if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromLam"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPiFromLam"), 1); - } - if (!isSelectedTrackTpcQuality(trackPrFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPrFromLam"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPrFromLam"), 1); - } - if (!isSelectedTrackTpcQuality(trackKaFromCasc, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelTPCQualityKaFromCasc"), 1); - } - } - if (!isSelectedTrackTpcQuality(trackPiFromCharm, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { - resultSelections = false; - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelTPCQualityPiFromCharm"), 1); - } - - // ITS clusters selection - if (!isSelectedTrackItsQuality(trackPiFromCharm, nClustersItsMin, itsChi2PerClusterMax) || trackPiFromCharm.itsNClsInnerBarrel() < nClustersItsInnBarrMin) { - resultSelections = false; - registry.fill(HIST("hSelITSQualityPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelITSQualityPiFromCharm"), 1); - } - - // track-level PID selection - - // for TrackSelectorPID - int statusPidPrFromLam = -999; - int statusPidPiFromLam = -999; - int statusPidKaFromCasc = -999; - int statusPidPiFromCharmBaryon = -999; - bool statusPidLambda = false; - bool statusPidCascade = false; - bool statusPidCharmBaryon = false; - - int infoTpcStored = 0; - int infoTofStored = 0; - - if (usePidTpcOnly == usePidTpcTofCombined) { - LOGF(fatal, "Check the PID configurables, usePidTpcOnly and usePidTpcTofCombined can't have the same value"); - } - - if (trackPiFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPiFromLam); - } - if (trackPrFromLam.hasTPC()) { - SETBIT(infoTpcStored, kPrFromLam); - } - if (trackKaFromCasc.hasTPC()) { - SETBIT(infoTpcStored, kKaFromCasc); - } - if (trackPiFromCharm.hasTPC()) { - SETBIT(infoTpcStored, kPiFromCharm); - } - if (trackPiFromLam.hasTOF()) { - SETBIT(infoTofStored, kPiFromLam); - } - if (trackPrFromLam.hasTOF()) { - SETBIT(infoTofStored, kPrFromLam); - } - if (trackKaFromCasc.hasTOF()) { - SETBIT(infoTofStored, kKaFromCasc); - } - if (trackPiFromCharm.hasTOF()) { - SETBIT(infoTofStored, kPiFromCharm); - } - - if (usePidTpcOnly) { - statusPidPrFromLam = selectorProton.statusTpc(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpc(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpc(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpc(trackPiFromCharm); - } else if (usePidTpcTofCombined) { - statusPidPrFromLam = selectorProton.statusTpcOrTof(trackPrFromLam); - statusPidPiFromLam = selectorPion.statusTpcOrTof(trackPiFromLam); - statusPidKaFromCasc = selectorKaon.statusTpcOrTof(trackKaFromCasc); - statusPidPiFromCharmBaryon = selectorPion.statusTpcOrTof(trackPiFromCharm); - } - - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted) { - statusPidLambda = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 0.5); - } - } - - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted) { - statusPidCascade = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 1.5); - } - } - - if (statusPidPrFromLam == TrackSelectorPID::Accepted && statusPidPiFromLam == TrackSelectorPID::Accepted && statusPidKaFromCasc == TrackSelectorPID::Accepted && statusPidPiFromCharmBaryon == TrackSelectorPID::Accepted) { - statusPidCharmBaryon = true; - if (resultSelections) { - registry.fill(HIST("hStatusCheck"), 2.5); - } - } - - // invariant mass cuts - bool statusInvMassLambda = false; - bool statusInvMassCascade = false; - bool statusInvMassCharmBaryon = false; - - double invMassLambda = candidate.invMassLambda(); - double invMassCascade = candidate.invMassCascade(); - double invMassCharmBaryon = candidate.invMassCharmBaryon(); + // Omegac ctau selsection + if (candidate.ctauOmegac() > cTauOmegacMax) { + resultSelections = false; + registry.fill(HIST("hSelctauOmegac"), 0); + } else { + registry.fill(HIST("hSelctauOmegac"), 1); + } - if (std::abs(invMassLambda - o2::constants::physics::MassLambda0) < v0MassWindow) { - statusInvMassLambda = true; - registry.fill(HIST("hSelMassLam"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && resultSelections) { - registry.fill(HIST("hStatusCheck"), 3.5); - } - } else { - registry.fill(HIST("hSelMassLam"), 0); - } + // Chi2Geo/NDF V0&Casc&Omegac selection + if ((candidate.v0Chi2OverNdf() > v0Chi2OverNdfMax) || (candidate.cascChi2OverNdf() > cascChi2OverNdfMax) || (candidate.omegacChi2OverNdf() > omegacChi2OverNdfMax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2GeooverNDFV0_Casc_Omegac"), 1); + } - if (std::abs(invMassCascade - o2::constants::physics::MassOmegaMinus) < cascadeMassWindow) { - statusInvMassCascade = true; - registry.fill(HIST("hSelMassCasc"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && resultSelections) { - registry.fill(HIST("hStatusCheck"), 4.5); - } - } else { - registry.fill(HIST("hSelMassCasc"), 0); - } + // Chi2Topo/NDF (chi2TopoV0ToCasc chi2TopoOmegacToPv chi2TopoCascToOmegac chi2TopoCascToPv) selection (???????????/NDF of which particle????????) + if ((candidate.chi2TopoV0ToCasc() > chi2TopoV0ToCascMax) || (candidate.chi2TopoOmegacToPv() > chi2TopoOmegacToPvMax) || (candidate.chi2TopoCascToOmegac() > chi2TopoCascToOmegacMax) || (candidate.chi2TopoCascToPv() > chi2TopoCascToPvMax)) { + resultSelections = false; + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 0); + } else { + registry.fill(HIST("hSelChi2TopooverNDFV0_Casc_Omegac"), 1); + } - if ((invMassCharmBaryon >= invMassCharmBaryonMin) && (invMassCharmBaryon <= invMassCharmBaryonMax)) { - statusInvMassCharmBaryon = true; - registry.fill(HIST("hSelMassCharmBaryon"), 1); - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && resultSelections) { - registry.fill(HIST("hStatusCheck"), 5.5); - } - } else { - registry.fill(HIST("hSelMassCharmBaryon"), 0); - } + // DecaylengthXY of Omegac&Casc&V0 selection + if ((std::abs(candidate.decayLenXYOmegac()) > decayLenXYOmegacMax) || (std::abs(candidate.decayLenXYCasc()) < decayLenXYCascMin) || (std::abs(candidate.decayLenXYLambda()) < decayLenXYLambdaMin)) { + resultSelections = false; + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 0); + } else { + registry.fill(HIST("hSeldecayLenXYOmegac_Casc_V0"), 1); + } - hfSelToOmegaPi(statusPidLambda, statusPidCascade, statusPidCharmBaryon, statusInvMassLambda, statusInvMassCascade, statusInvMassCharmBaryon, resultSelections, infoTpcStored, infoTofStored, - trackPiFromCharm.tpcNSigmaPi(), trackKaFromCasc.tpcNSigmaKa(), trackPiFromLam.tpcNSigmaPi(), trackPrFromLam.tpcNSigmaPr(), - trackPiFromCharm.tofNSigmaPi(), trackKaFromCasc.tofNSigmaKa(), trackPiFromLam.tofNSigmaPi(), trackPrFromLam.tofNSigmaPr()); + // KFPA cut cosPaCascToOmegac cosPaV0ToCasc + if ((candidate.cosPaCascToOmegac() < cosPaCascToOmegacMin) || (candidate.cosPaV0ToCasc() < cosPaV0ToCascMin)) { + resultSelections = false; + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 0); + } else { + registry.fill(HIST("hSelcosPaCascToOmegac_V0ToCasc"), 1); + } - if (resultSelections) { - if (!statusPidLambda) { - registry.fill(HIST("hSelPID"), 0.5); - } - if (statusPidLambda) { - registry.fill(HIST("hSelPID"), 1.5); - } - if (!statusPidCascade) { - registry.fill(HIST("hSelPID"), 2.5); - } - if (statusPidCascade) { - registry.fill(HIST("hSelPID"), 3.5); - } - if (!statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 4.5); - } - if (statusPidCharmBaryon) { - registry.fill(HIST("hSelPID"), 5.5); - } - if (!statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 6.5); - } - if (statusInvMassLambda) { - registry.fill(HIST("hSelPID"), 7.5); - } - if (!statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 8.5); - } - if (statusInvMassCascade) { - registry.fill(HIST("hSelPID"), 9.5); - } - if (!statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 10.5); - } - if (statusInvMassCharmBaryon) { - registry.fill(HIST("hSelPID"), 11.5); + if (resultSelections && inputKF) { + registry.fill(HIST("hSelKFstatus"), 1); + } } } - if (statusPidLambda && statusPidCascade && statusPidCharmBaryon && statusInvMassLambda && statusInvMassCascade && statusInvMassCharmBaryon && resultSelections) { - hInvMassCharmBaryon->Fill(invMassCharmBaryon); - } - } - } // end process - - template - void runOmegac0SelectorWithDCAFitter(aod::HfCandToOmegaPi const& candidates, - TracksSel const& tracks, - TracksSelLf const& lfTracks) - { - // looping over charm baryon candidates - for (const auto& candidate : candidates) { - - bool resultSelections = true; // True if the candidate passes all the selections, False otherwise - - auto trackV0PosDauId = candidate.posTrackId(); // positive V0 daughter - auto trackV0NegDauId = candidate.negTrackId(); // negative V0 daughter - auto trackKaFromCascId = candidate.bachelorId(); // kaon <- cascade - auto trackPiFromCharmId = candidate.bachelorFromCharmBaryonId(); // pion <- charm baryon - auto trackV0PosDau = lfTracks.rawIteratorAt(trackV0PosDauId); - auto trackV0NegDau = lfTracks.rawIteratorAt(trackV0NegDauId); - auto trackKaFromCasc = lfTracks.rawIteratorAt(trackKaFromCascId); - auto trackPiFromCharm = tracks.rawIteratorAt(trackPiFromCharmId); - - auto trackPiFromLam = trackV0NegDau; - auto trackPrFromLam = trackV0PosDau; - - int8_t signDecay = candidate.signDecay(); // sign of pi <- cascade - - if (signDecay > 0) { - trackPiFromLam = trackV0PosDau; - trackPrFromLam = trackV0NegDau; - registry.fill(HIST("hSelSignDec"), 1); // anti-particle decay - } else if (signDecay < 0) { - registry.fill(HIST("hSelSignDec"), 0); // particle decay - } - - // eta selection - double etaV0PosDau = candidate.etaV0PosDau(); - double etaV0NegDau = candidate.etaV0NegDau(); - double etaKaFromCasc = candidate.etaBachFromCasc(); - double etaPiFromCharmBaryon = candidate.etaBachFromCharmBaryon(); - if (std::abs(etaV0PosDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPosV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaPosV0Dau"), 1); - } - if (std::abs(etaV0NegDau) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaNegV0Dau"), 0); - } else { - registry.fill(HIST("hSelEtaNegV0Dau"), 1); - } - if (std::abs(etaKaFromCasc) > etaTrackLFDauMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelEtaKaFromCasc"), 1); - } - if (std::abs(etaPiFromCharmBaryon) > etaTrackCharmBachMax) { - resultSelections = false; - registry.fill(HIST("hSelEtaPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelEtaPiFromCharm"), 1); - } - - // minimum radius cut (LFcut) - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxCascade(), candidate.yDecayVtxCascade()) < radiusCascMin) { - resultSelections = false; - registry.fill(HIST("hSelRadCasc"), 0); - } else { - registry.fill(HIST("hSelRadCasc"), 1); - } - if (RecoDecay::sqrtSumOfSquares(candidate.xDecayVtxV0(), candidate.yDecayVtxV0()) < radiusV0Min) { - resultSelections = false; - registry.fill(HIST("hSelRadV0"), 0); - } else { - registry.fill(HIST("hSelRadV0"), 1); - } - - // cosPA (LFcut) - if (candidate.cosPACasc() < cosPACascMin) { - resultSelections = false; - registry.fill(HIST("hSelCosPACasc"), 0); - } else { - registry.fill(HIST("hSelCosPACasc"), 1); - } - if (candidate.cosPAV0() < cosPAV0Min) { - resultSelections = false; - registry.fill(HIST("hSelCosPAV0"), 0); - } else { - registry.fill(HIST("hSelCosPAV0"), 1); - } - - // cascade and v0 daughters dca cut (LF cut) - if (candidate.dcaCascDau() > dcaCascDauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCACascDau"), 0); - } else { - registry.fill(HIST("hSelDCACascDau"), 1); - } - - if (candidate.dcaV0Dau() > dcaV0DauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCAV0Dau"), 0); - } else { - registry.fill(HIST("hSelDCAV0Dau"), 1); - } - - // dca charm baryon daughters cut - if (candidate.dcaCharmBaryonDau() > dcaCharmBaryonDauMax) { - resultSelections = false; - registry.fill(HIST("hSelDCACharmDau"), 0); - } else { - registry.fill(HIST("hSelDCACharmDau"), 1); - } - - // dcaXY v0 daughters to PV cut - if (std::abs(candidate.dcaXYToPvV0Dau0()) < dcaPosToPvMin || std::abs(candidate.dcaXYToPvV0Dau1()) < dcaNegToPvMin) { - resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 0); - } else { - registry.fill(HIST("hSelDcaXYToPvV0Daughters"), 1); - } - - // dcaXY ka <-- cascade to PV cut - if (std::abs(candidate.dcaXYToPvCascDau()) < dcaBachToPvMin) { - resultSelections = false; - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelDcaXYToPvKaFromCasc"), 1); - } - - // cut on charm bachelor pion dcaXY and dcaZ - if ((std::abs(candidate.impactParBachFromCharmBaryonXY()) < impactParameterXYPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonXY()) > impactParameterXYPiFromCharmBaryonMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAXYPrimPi"), 0); - } else { - registry.fill(HIST("hSelDCAXYPrimPi"), 1); - } - if ((std::abs(candidate.impactParBachFromCharmBaryonZ()) < impactParameterZPiFromCharmBaryonMin) || (std::abs(candidate.impactParBachFromCharmBaryonZ()) > impactParameterZPiFromCharmBaryonMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAZPrimPi"), 0); - } else { - registry.fill(HIST("hSelDCAZPrimPi"), 1); - } - - // cut on cascade dcaXY and dcaZ - if ((std::abs(candidate.impactParCascXY()) < impactParameterXYCascMin) || (std::abs(candidate.impactParCascXY()) > impactParameterXYCascMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAXYCasc"), 0); - } else { - registry.fill(HIST("hSelDCAXYCasc"), 1); - } - if ((std::abs(candidate.impactParCascZ()) < impactParameterZCascMin) || (std::abs(candidate.impactParCascZ()) > impactParameterZCascMax)) { - resultSelections = false; - registry.fill(HIST("hSelDCAZCasc"), 0); - } else { - registry.fill(HIST("hSelDCAZCasc"), 1); - } - - // pT selections - double ptKaFromCasc = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCasc(), candidate.pyBachFromCasc()); - double ptPiFromCharmBaryon = RecoDecay::sqrtSumOfSquares(candidate.pxBachFromCharmBaryon(), candidate.pyBachFromCharmBaryon()); - if (std::abs(ptKaFromCasc) < ptKaFromCascMin) { - resultSelections = false; - registry.fill(HIST("hSelPtKaFromCasc"), 0); - } else { - registry.fill(HIST("hSelPtKaFromCasc"), 1); - } - if (std::abs(ptPiFromCharmBaryon) < ptPiFromCharmBaryonMin) { - resultSelections = false; - registry.fill(HIST("hSelPtPiFromCharm"), 0); - } else { - registry.fill(HIST("hSelPtPiFromCharm"), 1); - } - // TPC clusters selections if (applyTrkSelLf) { if (!isSelectedTrackTpcQuality(trackPiFromLam, nClustersTpcMin, nTpcCrossedRowsMin, tpcCrossedRowsOverFindableClustersRatioMin, tpcChi2PerClusterMax)) { @@ -1050,15 +684,15 @@ struct HfCandidateSelectorToOmegaPi { TracksSel const& tracks, TracksSelLf const& lfTracks) { - runOmegac0SelectorWithKFParticle(candidates, tracks, lfTracks); + runOmegac0Selector(candidates, tracks, lfTracks); } - PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", false); + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", true); void processOmegac0SelectorWithDCAFitte(aod::HfCandToOmegaPi const& candidates, TracksSel const& tracks, TracksSelLf const& lfTracks) { - runOmegac0SelectorWithDCAFitter(candidates, tracks, lfTracks); + runOmegac0Selector(candidates, tracks, lfTracks); } PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitte, "Run Omegac0 to Omega pi selector with only DCA related selection.", false); From 5a61f57d8a3e17ef319e2d7fc164844ab75b9ff8 Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Mon, 27 Jan 2025 15:59:56 +0800 Subject: [PATCH 22/27] Update PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 121c6994818..41e51c1d5a9 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -686,7 +686,7 @@ struct HfCandidateSelectorToOmegaPi { { runOmegac0Selector(candidates, tracks, lfTracks); } - PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", true); + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", false); void processOmegac0SelectorWithDCAFitte(aod::HfCandToOmegaPi const& candidates, TracksSel const& tracks, From 15ba7ff7be83139f384a3652a53d2007b9d680d5 Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Mon, 27 Jan 2025 16:00:44 +0800 Subject: [PATCH 23/27] Update PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 41e51c1d5a9..bc0b886d88e 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -688,7 +688,7 @@ struct HfCandidateSelectorToOmegaPi { } PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", false); - void processOmegac0SelectorWithDCAFitte(aod::HfCandToOmegaPi const& candidates, + void processOmegac0SelectorWithDCAFitter(aod::HfCandToOmegaPi const& candidates, TracksSel const& tracks, TracksSelLf const& lfTracks) { From 7325e729327d34c527a1f1994c10feca5fb1d9cd Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Mon, 27 Jan 2025 16:01:13 +0800 Subject: [PATCH 24/27] Update PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index bc0b886d88e..275c308a711 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -694,7 +694,7 @@ struct HfCandidateSelectorToOmegaPi { { runOmegac0Selector(candidates, tracks, lfTracks); } - PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitte, "Run Omegac0 to Omega pi selector with only DCA related selection.", false); + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitte, "Run Omegac0 to Omega pi selector with only DCA related selection.", true); }; // end struct From cd95f7b6e8606955862a6a3081a23728032f1370 Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Mon, 27 Jan 2025 16:01:33 +0800 Subject: [PATCH 25/27] Update PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx Co-authored-by: Mattia Faggin --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index 275c308a711..d90e60a9409 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -159,7 +159,7 @@ struct HfCandidateSelectorToOmegaPi { void init(InitContext const&) { - std::array processesSelector = {doprocessOmegac0SelectorWithDCAFitte, doprocessOmegac0SelectorWithKFParticle}; + std::array processesSelector = {doprocessOmegac0SelectorWithDCAFitter, doprocessOmegac0SelectorWithKFParticle}; const int nProcessesSelector = std::accumulate(processesSelector.begin(), processesSelector.end(), 0); if (nProcessesSelector != 1) { LOGP(fatal, "At most one process function for selector can be enabled at a time."); From c7eedac68208300d02c9539b8afb97431ed80404 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Mon, 27 Jan 2025 08:02:00 +0000 Subject: [PATCH 26/27] Please consider the following formatting changes --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index d90e60a9409..a0835edbc8e 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -689,8 +689,8 @@ struct HfCandidateSelectorToOmegaPi { PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithKFParticle, "Run Omegac0 to Omega pi selector with both DCA and KFParticle related selection.", false); void processOmegac0SelectorWithDCAFitter(aod::HfCandToOmegaPi const& candidates, - TracksSel const& tracks, - TracksSelLf const& lfTracks) + TracksSel const& tracks, + TracksSelLf const& lfTracks) { runOmegac0Selector(candidates, tracks, lfTracks); } From 37f573cdce63234cd66566fe64b92c36f8ef218f Mon Sep 17 00:00:00 2001 From: FDUEnrich <23210190047@m.fudan.edu.cn> Date: Mon, 27 Jan 2025 16:51:36 +0800 Subject: [PATCH 27/27] Update candidateSelectorOmegac0ToOmegaPi.cxx --- PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx index a0835edbc8e..97e98b26d87 100644 --- a/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx +++ b/PWGHF/TableProducer/candidateSelectorOmegac0ToOmegaPi.cxx @@ -694,7 +694,7 @@ struct HfCandidateSelectorToOmegaPi { { runOmegac0Selector(candidates, tracks, lfTracks); } - PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitte, "Run Omegac0 to Omega pi selector with only DCA related selection.", true); + PROCESS_SWITCH(HfCandidateSelectorToOmegaPi, processOmegac0SelectorWithDCAFitter, "Run Omegac0 to Omega pi selector with only DCA related selection.", true); }; // end struct