From d9d2fff52e22b5d6d586319c8ce5e4c4e4f6b0e6 Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Mon, 21 Jul 2025 11:05:49 +0200 Subject: [PATCH 1/7] removed non needed repetition in output tables --- PWGLF/DataModel/LFClusterStudiesTable.h | 26 ------------------------- 1 file changed, 26 deletions(-) diff --git a/PWGLF/DataModel/LFClusterStudiesTable.h b/PWGLF/DataModel/LFClusterStudiesTable.h index 88ca35a85d3..47200071af4 100644 --- a/PWGLF/DataModel/LFClusterStudiesTable.h +++ b/PWGLF/DataModel/LFClusterStudiesTable.h @@ -79,36 +79,10 @@ DECLARE_SOA_TABLE( DECLARE_SOA_TABLE( ClStTableMc, "AOD", "CLSTTABLEMC", - LFClusterStudiesTables::P, - LFClusterStudiesTables::Eta, - LFClusterStudiesTables::Phi, - LFClusterStudiesTables::ItsClusterSize, - LFClusterStudiesTables::PartID, LFClusterStudiesTables::PartIDMc); DECLARE_SOA_TABLE( ClStTableExtra, "AOD", "CLSTTABLEEXTRA", - LFClusterStudiesTables::P, - LFClusterStudiesTables::Eta, - LFClusterStudiesTables::Phi, - LFClusterStudiesTables::ItsClusterSize, - LFClusterStudiesTables::PartID, - LFClusterStudiesTables::PTPC, - LFClusterStudiesTables::PIDinTrk, - LFClusterStudiesTables::TpcNSigma, - LFClusterStudiesTables::TofNSigma, - LFClusterStudiesTables::TofMass, - LFClusterStudiesTables::CosPAMother, - LFClusterStudiesTables::MassMother); - -DECLARE_SOA_TABLE( - ClStTableMcExt, "AOD", "CLSTTABLEMCEXT", - LFClusterStudiesTables::P, - LFClusterStudiesTables::Eta, - LFClusterStudiesTables::Phi, - LFClusterStudiesTables::ItsClusterSize, - LFClusterStudiesTables::PartID, - LFClusterStudiesTables::PartIDMc, LFClusterStudiesTables::PTPC, LFClusterStudiesTables::PIDinTrk, LFClusterStudiesTables::TpcNSigma, From b7eaad912862da8e92554e0f240ffd9cead26031 Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Mon, 21 Jul 2025 12:14:20 +0200 Subject: [PATCH 2/7] adjusted filled tables accordingly to the new version of the tables --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 327 +++++------------- 1 file changed, 95 insertions(+), 232 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index d8df6f0bbf6..a1761c6781d 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -256,7 +256,6 @@ struct LfTreeCreatorClusterStudies { Produces m_ClusterStudiesTable; Produces m_ClusterStudiesTableExtra; Produces m_ClusterStudiesTableMc; - Produces m_ClusterStudiesTableMcExtra; struct V0TrackParCov { int64_t globalIndex; @@ -732,6 +731,37 @@ struct LfTreeCreatorClusterStudies { return; } + m_ClusterStudiesTable( + std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos + RecoDecay::eta(momPos), // eta_pos + RecoDecay::phi(momPos), // phi_pos + posTrack.itsClusterSizes(), // itsClsize_pos + partID_pos); // partID_pos + m_ClusterStudiesTable( + std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg + RecoDecay::eta(momNeg), // eta_neg + RecoDecay::phi(momNeg), // phi_neg + negTrack.itsClusterSizes(), // itsClsize_neg + partID_neg); // partID_neg + if (!setting_smallTable) { + m_ClusterStudiesTableExtra( + posTrack.tpcInnerParam() * posTrack.sign(), // pTPC_pos + posTrack.pidForTracking(), // pidInTrk_pos + -999.f, // TpcNSigma_pos + -999.f, // TofNSigma_pos + -999.f, // TofMass_pos + cosPA, // cosPA + massV0); // massV0 + m_ClusterStudiesTableExtra( + negTrack.tpcInnerParam() * negTrack.sign(), // pTPC_neg + negTrack.pidForTracking(), // pidInTrk_neg + -999.f, // TpcNSigma_neg + -999.f, // TofNSigma_neg + -999.f, // TofMass_neg + cosPA, // cosPA + massV0); // massV0 + } + if constexpr (isMC) { // MC if (!posTrack.has_mcParticle() || !negTrack.has_mcParticle()) { return; @@ -740,93 +770,10 @@ struct LfTreeCreatorClusterStudies { auto posMcParticle = posTrack.mcParticle(); auto negMcParticle = negTrack.mcParticle(); - if (setting_smallTable) { - m_ClusterStudiesTableMc( - std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos - RecoDecay::eta(momPos), // eta_pos - RecoDecay::phi(momPos), // phi_pos - posTrack.itsClusterSizes(), // itsClsize_pos - partID_pos, // partID_pos - posMcParticle.pdgCode()); // pdgCode_pos - m_ClusterStudiesTableMc( - std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg - RecoDecay::eta(momNeg), // eta_neg - RecoDecay::phi(momNeg), // phi_neg - negTrack.itsClusterSizes(), // itsClsize_neg - partID_neg, // partID_neg - negMcParticle.pdgCode()); // pdgCode_neg - } else { - m_ClusterStudiesTableMcExtra( - std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos - RecoDecay::eta(momPos), // eta_pos - RecoDecay::phi(momPos), // phi_pos - posTrack.itsClusterSizes(), // itsClsize_pos - partID_pos, // partID_pos - posMcParticle.pdgCode(), // pdgCode_pos - posTrack.tpcInnerParam() * posTrack.sign(), // pTPC_pos - posTrack.pidForTracking(), // pidInTrk_pos - -999.f, // TpcNSigma_pos - -999.f, // TofNSigma_pos - -999.f, // TofMass_pos - cosPA, // cosPA - massV0); // massV0 - m_ClusterStudiesTableMcExtra( - std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg - RecoDecay::eta(momNeg), // eta_neg - RecoDecay::phi(momNeg), // phi_neg - negTrack.itsClusterSizes(), // itsClsize_neg - partID_neg, // partID_neg - negMcParticle.pdgCode(), // pdgCode_pos - negTrack.tpcInnerParam() * negTrack.sign(), // pTPC_neg - negTrack.pidForTracking(), // pidInTrk_neg - -999.f, // TpcNSigma_neg - -999.f, // TofNSigma_neg - -999.f, // TofMass_neg - cosPA, // cosPA - massV0); // massV0 - } - } else { // data - if (setting_smallTable) { - m_ClusterStudiesTable( - std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos - RecoDecay::eta(momPos), // eta_pos - RecoDecay::phi(momPos), // phi_pos - posTrack.itsClusterSizes(), // itsClsize_pos - partID_pos); // partID_pos - m_ClusterStudiesTable( - std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg - RecoDecay::eta(momNeg), // eta_neg - RecoDecay::phi(momNeg), // phi_neg - negTrack.itsClusterSizes(), // itsClsize_neg - partID_neg); // partID_neg - } else { - m_ClusterStudiesTableExtra( - std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos - RecoDecay::eta(momPos), // eta_pos - RecoDecay::phi(momPos), // phi_pos - posTrack.itsClusterSizes(), // itsClsize_pos - partID_pos, // partID_pos - posTrack.tpcInnerParam() * posTrack.sign(), // pTPC_pos - posTrack.pidForTracking(), // pidInTrk_pos - -999.f, // TpcNSigma_pos - -999.f, // TofNSigma_pos - -999.f, // TofMass_pos - cosPA, // cosPA - massV0); // massV0 - m_ClusterStudiesTableExtra( - std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg - RecoDecay::eta(momNeg), // eta_neg - RecoDecay::phi(momNeg), // phi_neg - negTrack.itsClusterSizes(), // itsClsize_neg - partID_neg, // partID_neg - negTrack.tpcInnerParam() * negTrack.sign(), // pTPC_neg - negTrack.pidForTracking(), // pidInTrk_neg - -999.f, // TpcNSigma_neg - -999.f, // TofNSigma_neg - -999.f, // TofMass_neg - cosPA, // cosPA - massV0); // massV0 - } + m_ClusterStudiesTableMc( + posMcParticle.pdgCode()); // pdgCode_pos + m_ClusterStudiesTableMc( + negMcParticle.pdgCode()); // pdgCode_neg } m_hAnalysis.fill(HIST("isPositive"), true); @@ -891,59 +838,31 @@ struct LfTreeCreatorClusterStudies { uint8_t partID_bachelor = PartID::ka; + m_ClusterStudiesTable( + std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K + RecoDecay::eta(momBachelor), // eta_K + RecoDecay::phi(momBachelor), // phi_K + bachelorTrack.itsClusterSizes(), // itsClSize_K + partID_bachelor); // partID_K + if (!setting_smallTable) { + m_ClusterStudiesTableExtra( + bachelorTrack.tpcInnerParam() * bachelorTrack.sign(), // pTPC_K + bachelorTrack.pidForTracking(), // PIDinTrk_K + -999.f, // TpcNSigma_K + -999.f, // TofNSigma_K + -999.f, // TofMass_K + cosPA, // cosPA + massOmega); + } + if constexpr (isMC) { if (!bachelorTrack.has_mcParticle()) { return; } auto mcParticle = bachelorTrack.mcParticle(); - - if (setting_smallTable) { - m_ClusterStudiesTableMc( - std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K - RecoDecay::eta(momBachelor), // eta_K - RecoDecay::phi(momBachelor), // phi_K - bachelorTrack.itsClusterSizes(), // itsClSize_K - partID_bachelor, // partID_K - mcParticle.pdgCode()); // pdgCode_K - } else { - m_ClusterStudiesTableMcExtra( - std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K - RecoDecay::eta(momBachelor), // eta_K - RecoDecay::phi(momBachelor), // phi_K - bachelorTrack.itsClusterSizes(), // itsClSize_K - partID_bachelor, // partID_K - mcParticle.pdgCode(), // pdgCode_K - bachelorTrack.tpcInnerParam() * bachelorTrack.sign(), // pTPC_K - bachelorTrack.pidForTracking(), // PIDinTrk_K - -999.f, // TpcNSigma_K - -999.f, // TofNSigma_K - -999.f, // TofMass_K - cosPA, // cosPA - massOmega); // massMother - } - } else { - if (setting_smallTable) { - m_ClusterStudiesTable( - std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K - RecoDecay::eta(momBachelor), // eta_K - RecoDecay::phi(momBachelor), // phi_K - bachelorTrack.itsClusterSizes(), // itsClSize_K - partID_bachelor); // partID_K - } else { - m_ClusterStudiesTableExtra( - std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K - RecoDecay::eta(momBachelor), // eta_K - RecoDecay::phi(momBachelor), // phi_K - bachelorTrack.itsClusterSizes(), // itsClSize_K - partID_bachelor, // partID_K - bachelorTrack.tpcInnerParam() * bachelorTrack.sign(), // pTPC_K - bachelorTrack.pidForTracking(), // PIDinTrk_K - -999.f, // TpcNSigma_K - -999.f, // TofNSigma_K - -999.f, // TofMass_K - cosPA, // cosPA - massOmega); - } + + m_ClusterStudiesTableMc( + mcParticle.pdgCode()); // pdgCode_K } m_hAnalysis.fill(HIST("isPositive"), bachelorTrack.p() > 0); @@ -976,6 +895,23 @@ struct LfTreeCreatorClusterStudies { uint8_t partID = PartID::de; + m_ClusterStudiesTable( + track.p() * track.sign(), // p_De, + track.eta(), // eta_De, + track.phi(), // phi_De, + track.itsClusterSizes(), // itsClSize_De, + partID); // partID_De + if (!setting_smallTable) { + m_ClusterStudiesTableExtra( + track.tpcInnerParam() * track.sign(), // pTPC_De, + track.pidForTracking(), // PIDinTrk_De, + computeNSigmaDe(track), // TpcNSigma_De, + track.tofNSigmaDe(), // TofNSigma_De, + computeTOFmassDe(track), // TofMass_De, + -999.f, // cosPA, + -999.f); // massMother + } + if constexpr (isMC) { if (!track.has_mcParticle() || track.sign() > 0) { return; @@ -983,53 +919,9 @@ struct LfTreeCreatorClusterStudies { auto mcParticle = track.mcParticle(); - if (setting_smallTable) { - m_ClusterStudiesTableMc( - track.p() * track.sign(), // p_De, - track.eta(), // eta_De, - track.phi(), // phi_De, - track.itsClusterSizes(), // itsClSize_De, - partID, // pdgCode_De, - mcParticle.pdgCode()); // pdgCodeMc_De - } else { - m_ClusterStudiesTableMcExtra( - track.p() * track.sign(), // p_De, - track.eta(), // eta_De, - track.phi(), // phi_De, - track.itsClusterSizes(), // itsClSize_De, - partID, // pdgCode_De, - mcParticle.pdgCode(), // pdgCodeMc_De - track.tpcInnerParam() * track.sign(), // pTPC_De, - track.pidForTracking(), // PIDinTrk_De, - computeNSigmaDe(track), // TpcNSigma_De, - track.tofNSigmaDe(), // TofNSigma_De, - computeTOFmassDe(track), // TofMass_De, - -999.f, // cosPA, - -999.f); // massMother - } - } else { - if (setting_smallTable) { - m_ClusterStudiesTable( - track.p() * track.sign(), // p_De, - track.eta(), // eta_De, - track.phi(), // phi_De, - track.itsClusterSizes(), // itsClSize_De, - partID); // pdgCode_De - } else { - m_ClusterStudiesTableExtra( - track.p() * track.sign(), // p_De, - track.eta(), // eta_De, - track.phi(), // phi_De, - track.itsClusterSizes(), // itsClSize_De, - partID, // pdgCode_De, - track.tpcInnerParam() * track.sign(), // pTPC_De, - track.pidForTracking(), // PIDinTrk_De, - computeNSigmaDe(track), // TpcNSigma_De, - track.tofNSigmaDe(), // TofNSigma_De, - computeTOFmassDe(track), // TofMass_De, - -999.f, // cosPA, - -999.f); // massMother - } + m_ClusterStudiesTableMc( + mcParticle.pdgCode()); // pdgCode_De + } m_hAnalysis.fill(HIST("isPositive"), track.sign() > 0); @@ -1062,60 +954,31 @@ struct LfTreeCreatorClusterStudies { m_hAnalysis.fill(HIST("TOFmassHe"), track.p() * track.sign(), tofMass); m_hAnalysis.fill(HIST("pmatchingHe"), track.sign() * correctedTPCinnerParam, (correctedTPCinnerParam - track.p()) / correctedTPCinnerParam); + m_ClusterStudiesTable( + track.p() * track.sign(), // p_He3, + track.eta(), // eta_He3, + track.phi(), // phi_He3, + track.itsClusterSizes(), // itsClSize_He3, + partID); // partID_He3 + if (!setting_smallTable) { + m_ClusterStudiesTableExtra( + correctedTPCinnerParam * track.sign(), // pTPC_He3, + track.pidForTracking(), // PIDinTrk_He3, + computeNSigmaHe3(track), // TpcNSigma_He3, + -999.f, // TofNSigma_He3, + tofMass, // TofMass_He3, + -999.f, // cosPA, + -999.f); // massMother + } + if constexpr (isMC) { if (!track.has_mcParticle()) { return; } auto mcParticle = track.mcParticle(); - - if (setting_smallTable) { - m_ClusterStudiesTableMc( - track.p() * track.sign(), // p_He3, - track.eta(), // eta_He3, - track.phi(), // phi_He3, - track.itsClusterSizes(), // itsClSize_He3, - partID, // pdgCode_He3, - mcParticle.pdgCode()); // pdgCodeMc_He3 - } else { - m_ClusterStudiesTableMcExtra( - track.p() * track.sign(), // p_He3 - track.eta(), // eta_He3 - track.phi(), // phi_He3 - track.itsClusterSizes(), // itsClSize_He3 - partID, // pdgCode_He3 - mcParticle.pdgCode(), // pdgCodeMc_He3 - correctedTPCinnerParam * track.sign(), // pTPC_He3 - track.pidForTracking(), // PIDinTrk_He3 - computeNSigmaHe3(track), // TpcNSigma_He3 - -999.f, // TofNSigma_He3 - tofMass, // TofMass_He3 - -999.f, // cosPA_He3 - -999.f); // massMother_He3 - } - - } else { - if (setting_smallTable) { - m_ClusterStudiesTable( - track.p() * track.sign(), // p_He3, - track.eta(), // eta_He3, - track.phi(), // phi_He3, - track.itsClusterSizes(), // itsClSize_He3, - partID); // pdgCode_He3 - } else { - m_ClusterStudiesTableExtra( - track.p() * track.sign(), // p_He3, - track.eta(), // eta_He3, - track.phi(), // phi_He3, - track.itsClusterSizes(), // itsClSize_He3, - partID, // pdgCode_He3, - correctedTPCinnerParam * track.sign(), // pTPC_He3, - track.pidForTracking(), // PIDinTrk_He3, - computeNSigmaHe3(track), // TpcNSigma_He3, - -999.f, // TofNSigma_He3, - tofMass, // TofMass_He3, - -999.f, // cosPA, - -999.f); // massMother - } + + m_ClusterStudiesTableMc( + mcParticle.pdgCode()); // pdgCodeMc_He3 } m_hAnalysis.fill(HIST("isPositive"), track.sign() > 0); From 7daf794dbd6f7f5cf4bd89ceb9e999837f37eccf Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Mon, 21 Jul 2025 13:32:31 +0200 Subject: [PATCH 3/7] adjusted filled tables accordingly to the new version of the tables - missed one table in the previous commit --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index a1761c6781d..14713f36aa1 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -1004,20 +1004,14 @@ struct LfTreeCreatorClusterStudies { return; } - if (setting_smallTable) { - m_ClusterStudiesTable( - track.p() * track.sign(), - track.eta(), - track.phi(), - track.itsClusterSizes(), - partID); - } else { + m_ClusterStudiesTable( + track.p() * track.sign(), + track.eta(), + track.phi(), + track.itsClusterSizes(), + partID); + if (!setting_smallTable) { m_ClusterStudiesTableExtra( - track.p() * track.sign(), // p, - track.eta(), // eta, - track.phi(), // phi, - track.itsClusterSizes(), // itsClSize, - partID, // pdgCode, track.tpcInnerParam() * track.sign(), // pTPC, track.pidForTracking(), // PIDinTrk, tpcNSigma, // TpcNSigma, From 84edbdd2bfd9521960724fb005ec472859bebdfd Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Mon, 21 Jul 2025 13:47:03 +0200 Subject: [PATCH 4/7] added struct to collect candidate information --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index 14713f36aa1..44b81bbff31 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -138,6 +138,22 @@ enum PartID { he }; +struct Candidate { + float p = -999.f; // momentum * charge + float eta = -999.f; + float phi = -999.f; + uint32_t itsClusterSize = 0; + uint8_t partID = PartID::none; + float pTPC = -999.f; + uint32_t pidInTrk = 0; // PID in tracking + float nsigmaTPC = -999.f; + float nsigmaTOF = -999.f; + float tofMass = -999.f; + float cosPAMother = -999.f; // Cosine of the pointing angle of the mother + float massMother = -999.f; // Invariant mass of the mother + int pdgCode = 0; +} + struct LfTreeCreatorClusterStudies { Service m_ccdb; From 04168adecef39c620ef1f15f6ed94317a3570089 Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Mon, 21 Jul 2025 15:27:38 +0200 Subject: [PATCH 5/7] slimmer version of the V0 workflow --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 289 ++++++++++-------- 1 file changed, 166 insertions(+), 123 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index 44b81bbff31..b4553d5cfab 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -429,6 +429,153 @@ struct LfTreeCreatorClusterStudies { return true; } + uint8_t selectV0MotherHypothesis(float massK0sV0, float massLambdaV0, float massAntiLambdaV0, float alphaAP, const o2::aod::V0& v0) + { + uint8_t v0Bitmask(0); + if (v0.isPhotonV0()) { + SETBIT(v0Bitmask, Photon); + } + if (std::abs(massK0sV0 - o2::constants::physics::MassK0Short) < v0setting_massWindowK0s) { + SETBIT(v0Bitmask, K0s); + } + if ((std::abs(massLambdaV0 - o2::constants::physics::MassLambda0) < v0setting_massWindowLambda) && (alphaAP > 0)) { + SETBIT(v0Bitmask, Lambda); + } + if ((std::abs(massAntiLambdaV0 - o2::constants::physics::MassLambda0) < v0setting_massWindowLambda) && (alphaAP < 0)) { + SETBIT(v0Bitmask, AntiLambda); + } + + } + + bool selectPidV0Daughters(Candidate & candidatePos, Candidate& candidateNeg, const o2::aod::Track& posTrack, + const o2::aod::Track& negTrack, const std::array& momMother, float qtAP, uint8_t v0Bitmask) + { + if (TESTBIT(v0Bitmask, Lambda)) { + if (qtAP < lambdasetting_qtAPcut) + return false; + if (std::abs(posTrack.tpcNSigmaPr()) > v0setting_nsigmatpcPr || std::abs(negTrack.tpcNSigmaPi()) > v0setting_nsigmatpcPi) + return false; + if (std::hypot(momMother[0], momMother[1], momMother[2]) < lambdasetting_pmin) + return false; + candidatePos.partID = PartID::pr; + candidateNeg.partID = PartID::pi; + candidatePos.tpcNSigma = posTrack.tpcNSigmaPr(); + candidateNeg.tpcNSigma = negTrack.tpcNSigmaPi(); + m_hAnalysis.fill(HIST("v0_type"), V0Type::Lambda); + + } else if (TESTBIT(v0Bitmask, AntiLambda)) { + if (qtAP < lambdasetting_qtAPcut) + return; + if (std::abs(posTrack.tpcNSigmaPi()) > v0setting_nsigmatpcPr || std::abs(negTrack.tpcNSigmaPr()) > v0setting_nsigmatpcPi) + return false; + if (std::hypot(momMother[0], momMother[1], momMother[2]) < lambdasetting_pmin) + return false; + candidatePos.partID = PartID::pi; + candidateNeg.partID = PartID::pr; + candidatePos.tpcNSigma = posTrack.tpcNSigmaPi(); + candidateNeg.tpcNSigma = negTrack.tpcNSigmaPr(); + m_hAnalysis.fill(HIST("v0_type"), V0Type::AntiLambda); + + } else if (TESTBIT(v0Bitmask, K0s)) { + m_hAnalysis.fill(HIST("v0_type"), V0Type::K0s); + return false; // K0s not implemented + + } else if (TESTBIT(v0Bitmask, Photon)) { + // require photon conversion to happen in one of the Inner Tracker layers (± 0.5 cm resolution) + m_hAnalysis.fill(HIST("photon_conversion_position"), decayVtx[0], decayVtx[1]); + m_hAnalysis.fill(HIST("photon_radiusV0"), radiusV0); + if (!(radiusV0 > 1.76 && radiusV0 < 4.71)) + return false; + if (std::abs(posTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl || std::abs(negTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl) + return false; + m_hAnalysis.fill(HIST("photon_conversion_position_layer"), decayVtx[0], decayVtx[1]); + candidatePos.partID = PartID::el; + candidateNeg.partID = PartID::el; + candidatePos.tpcNSigma = posTrack.tpcNSigmaEl(); + candidateNeg.tpcNSigma = negTrack.tpcNSigmaEl(); + m_hAnalysis.fill(HIST("v0_type"), V0Type::Photon); + + } else { + return false; + } + + return true; + } + + /** + * Fill the histograms for the V0 candidate and return the mass of the V0 + */ + float fillHistogramsV0(float massLambdaV0, float massAntiLambdaV0, + const std::array& momMother, const std::array& momPos, const std::array& momNeg, + const Candidate& candidatePos, const Candidate& candidateNeg, float alphaAP, float qtAP, float radiusV0, uint8_t v0Bitmask) + { + float massV0{0.f}; + m_hAnalysis.fill(HIST("v0_selections"), V0Selections::kV0DaughterDCAtoPV); + if (TESTBIT(v0Bitmask, Lambda)) { + massV0 = massLambdaV0; + m_hAnalysis.fill(HIST("massLambda"), std::hypot(momMother[0], momMother[1], momMother[2]), massLambdaV0); + m_hAnalysis.fill(HIST("armenteros_plot_lambda"), alphaAP, qtAP); + m_hAnalysis.fill(HIST("nSigmaTPCPr"), candidatePos.p, candidatePos.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaITSPr"), candidatePos.p, m_responseITS.nSigmaITS(candidatePos.itsClusterSize, candidatePos.p, candidatePos.eta)); + m_hAnalysis.fill(HIST("nSigmaTPCPi"), candidateNeg.p, candidateNeg.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaITSPi"), candidateNeg.p, m_responseITS.nSigmaITS(candidateNeg.itsClusterSize, candidateNeg.p, candidateNeg.eta)); + m_hAnalysis.fill(HIST("pmatchingPr"), candidatePos.pTPC, (candidatePos.pTPC - candidatePos.p) / candidatePos.pTPC); + m_hAnalysis.fill(HIST("pmatchingPi"), -candidateNeg.pTPC, (candidateNeg.pTPC - candidateNeg.p) / candidateNeg.pTPC); + + } else if (TESTBIT(v0Bitmask, AntiLambda)) { + massV0 = massAntiLambdaV0; + m_hAnalysis.fill(HIST("massLambda"), std::hypot(momMother[0], momMother[1], momMother[2]) * -1.f, massAntiLambdaV0); + // "signed" pt for antimatter + m_hAnalysis.fill(HIST("armenteros_plot_lambda"), alphaAP, qtAP); + m_hAnalysis.fill(HIST("nSigmaTPCPi"), candidatePos.p, candidatePos.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaITSPi"), candidatePos.p, m_responseITS.nSigmaITS(candidatePos.itsClusterSize, candidatePos.p, candidatePos.eta)); + m_hAnalysis.fill(HIST("nSigmaTPCPr"), candidateNeg.p, candidateNeg.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaITSPr"), candidateNeg.p, m_responseITS.nSigmaITS(candidateNeg.itsClusterSize, candidateNeg.p, negTrack.eta)); + m_hAnalysis.fill(HIST("pmatchingPi"), candidatePos.pTPC, (candidatePos.pTPC - candidatePos.p) / candidatePos.pTPC); + m_hAnalysis.fill(HIST("pmatchingPr"), -candidateNeg.pTPC, (candidateNeg.pTPC - candidateNeg.p) / candidateNeg.pTPC); + + } else if (TESTBIT(v0Bitmask, Photon)) { + massV0 = 0.f; + m_hAnalysis.fill(HIST("nSigmaTPCEl"), candidatePos.p, candidatePos.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaTPCEl"), candidateNeg.p, candidateNeg.nsigmaTPC); + m_hAnalysis.fill(HIST("nSigmaITSEl"), candidatePos.p, m_responseITS.nSigmaITS(candidatePos.itsClusterSize, candidatePos.p, candidatePos.eta)); + m_hAnalysis.fill(HIST("nSigmaITSEl"), candidateNeg.p, m_responseITS.nSigmaITS(candidateNeg.itsClusterSize, candidateNeg.p, candidateNeg.eta)); + m_hAnalysis.fill(HIST("armenteros_plot_gamma"), alphaAP, qtAP); + m_hAnalysis.fill(HIST("pmatchingEl"), candidatePos.pTPC, (candidatePos.pTPC - candidatePos.p) / candidatePos.pTPC); + m_hAnalysis.fill(HIST("pmatchingEl"), -candidateNeg.pTPC, (candidateNeg.pTPC - candidateNeg.p) / candidateNeg.pTPC); + } + m_hAnalysis.fill(HIST("radiusV0"), radiusV0); + m_hAnalysis.fill(HIST("armenteros_plot"), alphaAP, qtAP); + + return massV0; + } + + template + void fillTable(const Candidate& candidate) + { + m_ClusterStudiesTable( + candidate.p, // p + candidate.eta, // eta + candidate.phi, // phi + candidate.itsClusterSize, // itsClsize + static_cast(candidate.partID)); // partID + if (!setting_smallTable) { + m_ClusterStudiesTableExtra( + candidate.pTPC, // pTPC + candidate.pidInTrk, // pidInTrk + candidate.tpcNSigma, // TpcNSigma + candidate.tofNSigma, // TofNSigma + candidate.tofMass, // TofMass + candidate.cosPAMother, // cosPA + candidate.massMother); // massMother + } + + if constexpr (isMC) { + m_ClusterStudiesTableMc( + candidate.pdgCode); // pdgCod + } + } + // ========================================================================================================= template @@ -637,61 +784,22 @@ struct LfTreeCreatorClusterStudies { m_hAnalysis.fill(HIST("Lambda_vs_K0s"), massK0sV0, massLambdaV0); // float massPhotonV0 = computeMassMother(o2::constants::physics::MassElectron, o2::constants::physics::MassElectron, momPos, momNeg, momMother); - uint8_t v0Bitmask(0); - if (v0.isPhotonV0()) { - SETBIT(v0Bitmask, Photon); - } - if (std::abs(massK0sV0 - o2::constants::physics::MassK0Short) < v0setting_massWindowK0s) { - SETBIT(v0Bitmask, K0s); - } - if ((std::abs(massLambdaV0 - o2::constants::physics::MassLambda0) < v0setting_massWindowLambda) && (alphaAP > 0)) { - SETBIT(v0Bitmask, Lambda); - } - if ((std::abs(massAntiLambdaV0 - o2::constants::physics::MassLambda0) < v0setting_massWindowLambda) && (alphaAP < 0)) { - SETBIT(v0Bitmask, AntiLambda); - } + uint8_t v0Bitmask = selectV0MotherHypothesis(massK0sV0, massLambdaV0, massAntiLambdaV0, alphaAP, v0); if (v0Bitmask == 0 || (v0Bitmask & (v0Bitmask - 1)) != 0) { return; } m_hAnalysis.fill(HIST("v0_selections"), V0Selections::kV0PID); - uint8_t partID_pos{0}, partID_neg{0}; - if (TESTBIT(v0Bitmask, Lambda)) { - if (qtAP < lambdasetting_qtAPcut) - return; - if (std::abs(posTrack.tpcNSigmaPr()) > v0setting_nsigmatpcPr || std::abs(negTrack.tpcNSigmaPi()) > v0setting_nsigmatpcPi) - return; - if (std::hypot(momMother[0], momMother[1], momMother[2]) < lambdasetting_pmin) - return; - partID_pos = PartID::pr; - partID_neg = PartID::pi; - m_hAnalysis.fill(HIST("v0_type"), V0Type::Lambda); - } else if (TESTBIT(v0Bitmask, AntiLambda)) { - if (qtAP < lambdasetting_qtAPcut) - return; - if (std::abs(posTrack.tpcNSigmaPi()) > v0setting_nsigmatpcPr || std::abs(negTrack.tpcNSigmaPr()) > v0setting_nsigmatpcPi) - return; - if (std::hypot(momMother[0], momMother[1], momMother[2]) < lambdasetting_pmin) - return; - partID_pos = PartID::pi; - partID_neg = PartID::pr; - m_hAnalysis.fill(HIST("v0_type"), V0Type::AntiLambda); - } else if (TESTBIT(v0Bitmask, K0s)) { - m_hAnalysis.fill(HIST("v0_type"), V0Type::K0s); - return; // K0s not implemented - } else if (TESTBIT(v0Bitmask, Photon)) { - // require photon conversion to happen in one of the Inner Tracker layers (± 0.5 cm resolution) - m_hAnalysis.fill(HIST("photon_conversion_position"), decayVtx[0], decayVtx[1]); - m_hAnalysis.fill(HIST("photon_radiusV0"), radiusV0); - if (!(radiusV0 > 1.76 && radiusV0 < 4.71)) - return; - if (std::abs(posTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl || std::abs(negTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl) - return; - m_hAnalysis.fill(HIST("photon_conversion_position_layer"), decayVtx[0], decayVtx[1]); - partID_pos = PartID::el; - partID_neg = PartID::el; - m_hAnalysis.fill(HIST("v0_type"), V0Type::Photon); - } else { + Candidate candidatePos(std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), + RecoDecay::eta(momPos), RecoDecay::phi(momPos), posTrack.itsClusterSizes(), + 0, posTrack.tpcInnerParam() * posTrack.sign(), posTrack.pidForTracking(), + -999.f, -999.f, -999.f, cosPA, -999.f, 0); + Candidate candidateNeg(std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), + RecoDecay::eta(momNeg), RecoDecay::phi(momNeg), negTrack.itsClusterSizes(), + 0, negTrack.tpcInnerParam() * negTrack.sign(), negTrack.pidForTracking(), + -999.f, -999.f, -999.f, cosPA, -999.f, 0); + + if (!selectPidV0Daughters(candidatePos, candidateNeg, posTrack, negTrack, momMother, qtAP, v0Bitmask)) { return; } @@ -704,80 +812,14 @@ struct LfTreeCreatorClusterStudies { return; } - float massV0{0.f}; - m_hAnalysis.fill(HIST("v0_selections"), V0Selections::kV0DaughterDCAtoPV); - if (TESTBIT(v0Bitmask, Lambda)) { - massV0 = massLambdaV0; - m_hAnalysis.fill(HIST("massLambda"), std::hypot(momMother[0], momMother[1], momMother[2]), massLambdaV0); - m_hAnalysis.fill(HIST("armenteros_plot_lambda"), alphaAP, qtAP); - m_hAnalysis.fill(HIST("nSigmaTPCPr"), std::hypot(momPos[0], momPos[1], momPos[2]), posTrack.tpcNSigmaPr()); - m_hAnalysis.fill(HIST("nSigmaITSPr"), std::hypot(momPos[0], momPos[1], momPos[2]), m_responseITS.nSigmaITS(posTrack.itsClusterSizes(), posTrack.p(), posTrack.eta())); - m_hAnalysis.fill(HIST("nSigmaTPCPi"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, negTrack.tpcNSigmaPi()); - m_hAnalysis.fill(HIST("nSigmaITSPi"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, m_responseITS.nSigmaITS(negTrack.itsClusterSizes(), negTrack.p(), negTrack.eta())); - m_hAnalysis.fill(HIST("pmatchingPr"), posTrack.tpcInnerParam(), (posTrack.tpcInnerParam() - posTrack.p()) / posTrack.tpcInnerParam()); - m_hAnalysis.fill(HIST("pmatchingPi"), -negTrack.tpcInnerParam(), (negTrack.tpcInnerParam() - negTrack.p()) / negTrack.tpcInnerParam()); - - } else if (TESTBIT(v0Bitmask, AntiLambda)) { - massV0 = massAntiLambdaV0; - m_hAnalysis.fill(HIST("massLambda"), std::hypot(momMother[0], momMother[1], momMother[2]) * -1.f, massAntiLambdaV0); - // "signed" pt for antimatter - m_hAnalysis.fill(HIST("armenteros_plot_lambda"), alphaAP, qtAP); - m_hAnalysis.fill(HIST("nSigmaTPCPi"), std::hypot(momPos[0], momPos[1], momPos[2]), posTrack.tpcNSigmaPi()); - m_hAnalysis.fill(HIST("nSigmaITSPi"), std::hypot(momPos[0], momPos[1], momPos[2]), m_responseITS.nSigmaITS(posTrack.itsClusterSizes(), posTrack.p(), posTrack.eta())); - m_hAnalysis.fill(HIST("nSigmaTPCPr"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, negTrack.tpcNSigmaPr()); - m_hAnalysis.fill(HIST("nSigmaITSPr"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, m_responseITS.nSigmaITS(negTrack.itsClusterSizes(), negTrack.p(), negTrack.eta())); - m_hAnalysis.fill(HIST("pmatchingPi"), posTrack.tpcInnerParam(), (posTrack.tpcInnerParam() - posTrack.p()) / posTrack.tpcInnerParam()); - m_hAnalysis.fill(HIST("pmatchingPr"), -negTrack.tpcInnerParam(), (negTrack.tpcInnerParam() - negTrack.p()) / negTrack.tpcInnerParam()); - - } else if (TESTBIT(v0Bitmask, Photon)) { - massV0 = 0.f; - m_hAnalysis.fill(HIST("nSigmaTPCEl"), std::hypot(momPos[0], momPos[1], momPos[2]), posTrack.tpcNSigmaEl()); - m_hAnalysis.fill(HIST("nSigmaTPCEl"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, negTrack.tpcNSigmaEl()); - m_hAnalysis.fill(HIST("nSigmaITSEl"), std::hypot(momPos[0], momPos[1], momPos[2]), m_responseITS.nSigmaITS(posTrack.itsClusterSizes(), posTrack.p(), posTrack.eta())); - m_hAnalysis.fill(HIST("nSigmaITSEl"), std::hypot(momNeg[0], momNeg[1], momNeg[2]) * -1.f, m_responseITS.nSigmaITS(negTrack.itsClusterSizes(), negTrack.p(), negTrack.eta())); - m_hAnalysis.fill(HIST("armenteros_plot_gamma"), alphaAP, qtAP); - m_hAnalysis.fill(HIST("pmatchingEl"), posTrack.tpcInnerParam(), (posTrack.tpcInnerParam() - posTrack.p()) / posTrack.tpcInnerParam()); - m_hAnalysis.fill(HIST("pmatchingEl"), -negTrack.tpcInnerParam(), (negTrack.tpcInnerParam() - negTrack.p()) / negTrack.tpcInnerParam()); - } - m_hAnalysis.fill(HIST("radiusV0"), radiusV0); - m_hAnalysis.fill(HIST("armenteros_plot"), alphaAP, qtAP); - m_v0TrackParCovs.push_back(v0TrackParCov); + float massV0 = fillHistogramsV0(massLambdaV0, massAntiLambdaV0, momMother, momPos, momNeg, candidatePos, candidateNeg, alphaAP, qtAP, radiusV0, v0Bitmask); + candidatePos.massV0 = massV0; + candidateNeg.massV0 = massV0; if (!setting_fillV0) { return; } - m_ClusterStudiesTable( - std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), // p_pos - RecoDecay::eta(momPos), // eta_pos - RecoDecay::phi(momPos), // phi_pos - posTrack.itsClusterSizes(), // itsClsize_pos - partID_pos); // partID_pos - m_ClusterStudiesTable( - std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), // p_neg - RecoDecay::eta(momNeg), // eta_neg - RecoDecay::phi(momNeg), // phi_neg - negTrack.itsClusterSizes(), // itsClsize_neg - partID_neg); // partID_neg - if (!setting_smallTable) { - m_ClusterStudiesTableExtra( - posTrack.tpcInnerParam() * posTrack.sign(), // pTPC_pos - posTrack.pidForTracking(), // pidInTrk_pos - -999.f, // TpcNSigma_pos - -999.f, // TofNSigma_pos - -999.f, // TofMass_pos - cosPA, // cosPA - massV0); // massV0 - m_ClusterStudiesTableExtra( - negTrack.tpcInnerParam() * negTrack.sign(), // pTPC_neg - negTrack.pidForTracking(), // pidInTrk_neg - -999.f, // TpcNSigma_neg - -999.f, // TofNSigma_neg - -999.f, // TofMass_neg - cosPA, // cosPA - massV0); // massV0 - } - if constexpr (isMC) { // MC if (!posTrack.has_mcParticle() || !negTrack.has_mcParticle()) { return; @@ -786,12 +828,13 @@ struct LfTreeCreatorClusterStudies { auto posMcParticle = posTrack.mcParticle(); auto negMcParticle = negTrack.mcParticle(); - m_ClusterStudiesTableMc( - posMcParticle.pdgCode()); // pdgCode_pos - m_ClusterStudiesTableMc( - negMcParticle.pdgCode()); // pdgCode_neg + candidatePos.pdgCode = posMcParticle.pdgCode(); + candidateNeg.pdgCode = negMcParticle.pdgCode(); } + fillTable(candidatePos); + fillTable(candidateNeg); + m_hAnalysis.fill(HIST("isPositive"), true); m_hAnalysis.fill(HIST("isPositive"), false); } From f00cbf1eee976fd912b79367010eb192bf2add3a Mon Sep 17 00:00:00 2001 From: GiorgioAlbertoLucia Date: Tue, 22 Jul 2025 17:30:53 +0200 Subject: [PATCH 6/7] syntax fixes, electron conversion radius is now configurable --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index b4553d5cfab..cadbb933a01 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -152,7 +152,7 @@ struct Candidate { float cosPAMother = -999.f; // Cosine of the pointing angle of the mother float massMother = -999.f; // Invariant mass of the mother int pdgCode = 0; -} +}; struct LfTreeCreatorClusterStudies { @@ -196,6 +196,8 @@ struct LfTreeCreatorClusterStudies { Configurable v0setting_nsigmatpcPr{"v0setting_nsigmaTPCPr", 2.f, "Number of sigmas for the TPC PID for protons"}; Configurable lambdasetting_qtAPcut{"lambdasetting_qtAPcut", 0.02f, "Cut on the qt for the Armenteros-Podolanski plot for photon rejection"}; Configurable lambdasetting_pmin{"lambdasetting_pmin", 0.0f, "Minimum momentum for the V0 daughters"}; + Configurable electronsetting_conversion_rmin{"electron_conversion_rmin", 1.76f, "Minimum radius for the photon conversion (cm)"}; + Configurable electronsetting_conversion_rmax{"electron_conversion_rmax", 19.77f, "Maximum radius for the photon conversion (cm)"}; Configurable cascsetting_dcaCascDaughters{"casc_setting_dcaV0daughters", 0.1f, "DCA between the V0 daughters"}; Configurable cascsetting_cosPA{"casc_setting_cosPA", 0.99f, "Cosine of the pointing angle of the V0"}; @@ -444,11 +446,14 @@ struct LfTreeCreatorClusterStudies { if ((std::abs(massAntiLambdaV0 - o2::constants::physics::MassLambda0) < v0setting_massWindowLambda) && (alphaAP < 0)) { SETBIT(v0Bitmask, AntiLambda); } + return v0Bitmask; } - bool selectPidV0Daughters(Candidate & candidatePos, Candidate& candidateNeg, const o2::aod::Track& posTrack, - const o2::aod::Track& negTrack, const std::array& momMother, float qtAP, uint8_t v0Bitmask) + template + bool selectPidV0Daughters(Candidate & candidatePos, Candidate& candidateNeg, const T& posTrack, + const T& negTrack, const std::array& momMother, const std::array& decayVtx, + float qtAP, float radiusV0, uint8_t v0Bitmask) { if (TESTBIT(v0Bitmask, Lambda)) { if (qtAP < lambdasetting_qtAPcut) @@ -459,21 +464,21 @@ struct LfTreeCreatorClusterStudies { return false; candidatePos.partID = PartID::pr; candidateNeg.partID = PartID::pi; - candidatePos.tpcNSigma = posTrack.tpcNSigmaPr(); - candidateNeg.tpcNSigma = negTrack.tpcNSigmaPi(); + candidatePos.nsigmaTPC = posTrack.tpcNSigmaPr(); + candidateNeg.nsigmaTPC = negTrack.tpcNSigmaPi(); m_hAnalysis.fill(HIST("v0_type"), V0Type::Lambda); } else if (TESTBIT(v0Bitmask, AntiLambda)) { if (qtAP < lambdasetting_qtAPcut) - return; + return false; if (std::abs(posTrack.tpcNSigmaPi()) > v0setting_nsigmatpcPr || std::abs(negTrack.tpcNSigmaPr()) > v0setting_nsigmatpcPi) return false; if (std::hypot(momMother[0], momMother[1], momMother[2]) < lambdasetting_pmin) return false; candidatePos.partID = PartID::pi; candidateNeg.partID = PartID::pr; - candidatePos.tpcNSigma = posTrack.tpcNSigmaPi(); - candidateNeg.tpcNSigma = negTrack.tpcNSigmaPr(); + candidatePos.nsigmaTPC = posTrack.tpcNSigmaPi(); + candidateNeg.nsigmaTPC = negTrack.tpcNSigmaPr(); m_hAnalysis.fill(HIST("v0_type"), V0Type::AntiLambda); } else if (TESTBIT(v0Bitmask, K0s)) { @@ -484,15 +489,15 @@ struct LfTreeCreatorClusterStudies { // require photon conversion to happen in one of the Inner Tracker layers (± 0.5 cm resolution) m_hAnalysis.fill(HIST("photon_conversion_position"), decayVtx[0], decayVtx[1]); m_hAnalysis.fill(HIST("photon_radiusV0"), radiusV0); - if (!(radiusV0 > 1.76 && radiusV0 < 4.71)) + if (!(radiusV0 > electronsetting_conversion_rmin && radiusV0 < electronsetting_conversion_rmax)) return false; if (std::abs(posTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl || std::abs(negTrack.tpcNSigmaEl()) > v0setting_nsigmatpcEl) return false; m_hAnalysis.fill(HIST("photon_conversion_position_layer"), decayVtx[0], decayVtx[1]); candidatePos.partID = PartID::el; candidateNeg.partID = PartID::el; - candidatePos.tpcNSigma = posTrack.tpcNSigmaEl(); - candidateNeg.tpcNSigma = negTrack.tpcNSigmaEl(); + candidatePos.nsigmaTPC = posTrack.tpcNSigmaEl(); + candidateNeg.nsigmaTPC = negTrack.tpcNSigmaEl(); m_hAnalysis.fill(HIST("v0_type"), V0Type::Photon); } else { @@ -506,7 +511,7 @@ struct LfTreeCreatorClusterStudies { * Fill the histograms for the V0 candidate and return the mass of the V0 */ float fillHistogramsV0(float massLambdaV0, float massAntiLambdaV0, - const std::array& momMother, const std::array& momPos, const std::array& momNeg, + const std::array& momMother, const Candidate& candidatePos, const Candidate& candidateNeg, float alphaAP, float qtAP, float radiusV0, uint8_t v0Bitmask) { float massV0{0.f}; @@ -530,7 +535,7 @@ struct LfTreeCreatorClusterStudies { m_hAnalysis.fill(HIST("nSigmaTPCPi"), candidatePos.p, candidatePos.nsigmaTPC); m_hAnalysis.fill(HIST("nSigmaITSPi"), candidatePos.p, m_responseITS.nSigmaITS(candidatePos.itsClusterSize, candidatePos.p, candidatePos.eta)); m_hAnalysis.fill(HIST("nSigmaTPCPr"), candidateNeg.p, candidateNeg.nsigmaTPC); - m_hAnalysis.fill(HIST("nSigmaITSPr"), candidateNeg.p, m_responseITS.nSigmaITS(candidateNeg.itsClusterSize, candidateNeg.p, negTrack.eta)); + m_hAnalysis.fill(HIST("nSigmaITSPr"), candidateNeg.p, m_responseITS.nSigmaITS(candidateNeg.itsClusterSize, candidateNeg.p, candidateNeg.eta)); m_hAnalysis.fill(HIST("pmatchingPi"), candidatePos.pTPC, (candidatePos.pTPC - candidatePos.p) / candidatePos.pTPC); m_hAnalysis.fill(HIST("pmatchingPr"), -candidateNeg.pTPC, (candidateNeg.pTPC - candidateNeg.p) / candidateNeg.pTPC); @@ -563,8 +568,8 @@ struct LfTreeCreatorClusterStudies { m_ClusterStudiesTableExtra( candidate.pTPC, // pTPC candidate.pidInTrk, // pidInTrk - candidate.tpcNSigma, // TpcNSigma - candidate.tofNSigma, // TofNSigma + candidate.nsigmaTPC, // TpcNSigma + candidate.nsigmaTOF, // TofNSigma candidate.tofMass, // TofMass candidate.cosPAMother, // cosPA candidate.massMother); // massMother @@ -799,7 +804,7 @@ struct LfTreeCreatorClusterStudies { 0, negTrack.tpcInnerParam() * negTrack.sign(), negTrack.pidForTracking(), -999.f, -999.f, -999.f, cosPA, -999.f, 0); - if (!selectPidV0Daughters(candidatePos, candidateNeg, posTrack, negTrack, momMother, qtAP, v0Bitmask)) { + if (!selectPidV0Daughters(candidatePos, candidateNeg, posTrack, negTrack, momMother, decayVtx, qtAP, radiusV0, v0Bitmask)) { return; } @@ -812,9 +817,9 @@ struct LfTreeCreatorClusterStudies { return; } - float massV0 = fillHistogramsV0(massLambdaV0, massAntiLambdaV0, momMother, momPos, momNeg, candidatePos, candidateNeg, alphaAP, qtAP, radiusV0, v0Bitmask); - candidatePos.massV0 = massV0; - candidateNeg.massV0 = massV0; + float massV0 = fillHistogramsV0(massLambdaV0, massAntiLambdaV0, momMother, candidatePos, candidateNeg, alphaAP, qtAP, radiusV0, v0Bitmask); + candidatePos.massMother = massV0; + candidateNeg.massMother = massV0; if (!setting_fillV0) { return; From 337f9342b6e0654317cce1db27266451811efb91 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 22 Jul 2025 15:41:52 +0000 Subject: [PATCH 7/7] Please consider the following formatting changes --- .../Nuspex/LFTreeCreatorClusterStudies.cxx | 138 +++++++++--------- 1 file changed, 68 insertions(+), 70 deletions(-) diff --git a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx index cadbb933a01..9c8bbc8087c 100644 --- a/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx +++ b/PWGLF/TableProducer/Nuspex/LFTreeCreatorClusterStudies.cxx @@ -139,18 +139,18 @@ enum PartID { }; struct Candidate { - float p = -999.f; // momentum * charge - float eta = -999.f; - float phi = -999.f; + float p = -999.f; // momentum * charge + float eta = -999.f; + float phi = -999.f; uint32_t itsClusterSize = 0; uint8_t partID = PartID::none; - float pTPC = -999.f; - uint32_t pidInTrk = 0; // PID in tracking - float nsigmaTPC = -999.f; - float nsigmaTOF = -999.f; - float tofMass = -999.f; - float cosPAMother = -999.f; // Cosine of the pointing angle of the mother - float massMother = -999.f; // Invariant mass of the mother + float pTPC = -999.f; + uint32_t pidInTrk = 0; // PID in tracking + float nsigmaTPC = -999.f; + float nsigmaTOF = -999.f; + float tofMass = -999.f; + float cosPAMother = -999.f; // Cosine of the pointing angle of the mother + float massMother = -999.f; // Invariant mass of the mother int pdgCode = 0; }; @@ -431,7 +431,7 @@ struct LfTreeCreatorClusterStudies { return true; } - uint8_t selectV0MotherHypothesis(float massK0sV0, float massLambdaV0, float massAntiLambdaV0, float alphaAP, const o2::aod::V0& v0) + uint8_t selectV0MotherHypothesis(float massK0sV0, float massLambdaV0, float massAntiLambdaV0, float alphaAP, const o2::aod::V0& v0) { uint8_t v0Bitmask(0); if (v0.isPhotonV0()) { @@ -447,12 +447,11 @@ struct LfTreeCreatorClusterStudies { SETBIT(v0Bitmask, AntiLambda); } return v0Bitmask; - } - template - bool selectPidV0Daughters(Candidate & candidatePos, Candidate& candidateNeg, const T& posTrack, - const T& negTrack, const std::array& momMother, const std::array& decayVtx, + template + bool selectPidV0Daughters(Candidate& candidatePos, Candidate& candidateNeg, const T& posTrack, + const T& negTrack, const std::array& momMother, const std::array& decayVtx, float qtAP, float radiusV0, uint8_t v0Bitmask) { if (TESTBIT(v0Bitmask, Lambda)) { @@ -503,14 +502,14 @@ struct LfTreeCreatorClusterStudies { } else { return false; } - + return true; } /** * Fill the histograms for the V0 candidate and return the mass of the V0 - */ - float fillHistogramsV0(float massLambdaV0, float massAntiLambdaV0, + */ + float fillHistogramsV0(float massLambdaV0, float massAntiLambdaV0, const std::array& momMother, const Candidate& candidatePos, const Candidate& candidateNeg, float alphaAP, float qtAP, float radiusV0, uint8_t v0Bitmask) { @@ -555,29 +554,29 @@ struct LfTreeCreatorClusterStudies { return massV0; } - template + template void fillTable(const Candidate& candidate) { m_ClusterStudiesTable( - candidate.p, // p - candidate.eta, // eta - candidate.phi, // phi - candidate.itsClusterSize, // itsClsize - static_cast(candidate.partID)); // partID + candidate.p, // p + candidate.eta, // eta + candidate.phi, // phi + candidate.itsClusterSize, // itsClsize + static_cast(candidate.partID)); // partID if (!setting_smallTable) { m_ClusterStudiesTableExtra( - candidate.pTPC, // pTPC - candidate.pidInTrk, // pidInTrk - candidate.nsigmaTPC, // TpcNSigma - candidate.nsigmaTOF, // TofNSigma - candidate.tofMass, // TofMass - candidate.cosPAMother, // cosPA - candidate.massMother); // massMother + candidate.pTPC, // pTPC + candidate.pidInTrk, // pidInTrk + candidate.nsigmaTPC, // TpcNSigma + candidate.nsigmaTOF, // TofNSigma + candidate.tofMass, // TofMass + candidate.cosPAMother, // cosPA + candidate.massMother); // massMother } if constexpr (isMC) { m_ClusterStudiesTableMc( - candidate.pdgCode); // pdgCod + candidate.pdgCode); // pdgCod } } @@ -797,12 +796,12 @@ struct LfTreeCreatorClusterStudies { Candidate candidatePos(std::hypot(momPos[0], momPos[1], momPos[2]) * posTrack.sign(), RecoDecay::eta(momPos), RecoDecay::phi(momPos), posTrack.itsClusterSizes(), - 0, posTrack.tpcInnerParam() * posTrack.sign(), posTrack.pidForTracking(), + 0, posTrack.tpcInnerParam() * posTrack.sign(), posTrack.pidForTracking(), -999.f, -999.f, -999.f, cosPA, -999.f, 0); Candidate candidateNeg(std::hypot(momNeg[0], momNeg[1], momNeg[2]) * negTrack.sign(), - RecoDecay::eta(momNeg), RecoDecay::phi(momNeg), negTrack.itsClusterSizes(), - 0, negTrack.tpcInnerParam() * negTrack.sign(), negTrack.pidForTracking(), - -999.f, -999.f, -999.f, cosPA, -999.f, 0); + RecoDecay::eta(momNeg), RecoDecay::phi(momNeg), negTrack.itsClusterSizes(), + 0, negTrack.tpcInnerParam() * negTrack.sign(), negTrack.pidForTracking(), + -999.f, -999.f, -999.f, cosPA, -999.f, 0); if (!selectPidV0Daughters(candidatePos, candidateNeg, posTrack, negTrack, momMother, decayVtx, qtAP, radiusV0, v0Bitmask)) { return; @@ -903,19 +902,19 @@ struct LfTreeCreatorClusterStudies { uint8_t partID_bachelor = PartID::ka; m_ClusterStudiesTable( - std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K - RecoDecay::eta(momBachelor), // eta_K - RecoDecay::phi(momBachelor), // phi_K - bachelorTrack.itsClusterSizes(), // itsClSize_K - partID_bachelor); // partID_K + std::hypot(momBachelor[0], momBachelor[1], momBachelor[2]) * bachelorTrack.sign(), // p_K + RecoDecay::eta(momBachelor), // eta_K + RecoDecay::phi(momBachelor), // phi_K + bachelorTrack.itsClusterSizes(), // itsClSize_K + partID_bachelor); // partID_K if (!setting_smallTable) { m_ClusterStudiesTableExtra( - bachelorTrack.tpcInnerParam() * bachelorTrack.sign(), // pTPC_K - bachelorTrack.pidForTracking(), // PIDinTrk_K - -999.f, // TpcNSigma_K - -999.f, // TofNSigma_K - -999.f, // TofMass_K - cosPA, // cosPA + bachelorTrack.tpcInnerParam() * bachelorTrack.sign(), // pTPC_K + bachelorTrack.pidForTracking(), // PIDinTrk_K + -999.f, // TpcNSigma_K + -999.f, // TofNSigma_K + -999.f, // TofMass_K + cosPA, // cosPA massOmega); } @@ -924,9 +923,9 @@ struct LfTreeCreatorClusterStudies { return; } auto mcParticle = bachelorTrack.mcParticle(); - + m_ClusterStudiesTableMc( - mcParticle.pdgCode()); // pdgCode_K + mcParticle.pdgCode()); // pdgCode_K } m_hAnalysis.fill(HIST("isPositive"), bachelorTrack.p() > 0); @@ -960,11 +959,11 @@ struct LfTreeCreatorClusterStudies { uint8_t partID = PartID::de; m_ClusterStudiesTable( - track.p() * track.sign(), // p_De, - track.eta(), // eta_De, - track.phi(), // phi_De, - track.itsClusterSizes(), // itsClSize_De, - partID); // partID_De + track.p() * track.sign(), // p_De, + track.eta(), // eta_De, + track.phi(), // phi_De, + track.itsClusterSizes(), // itsClSize_De, + partID); // partID_De if (!setting_smallTable) { m_ClusterStudiesTableExtra( track.tpcInnerParam() * track.sign(), // pTPC_De, @@ -984,8 +983,7 @@ struct LfTreeCreatorClusterStudies { auto mcParticle = track.mcParticle(); m_ClusterStudiesTableMc( - mcParticle.pdgCode()); // pdgCode_De - + mcParticle.pdgCode()); // pdgCode_De } m_hAnalysis.fill(HIST("isPositive"), track.sign() > 0); @@ -1019,20 +1017,20 @@ struct LfTreeCreatorClusterStudies { m_hAnalysis.fill(HIST("pmatchingHe"), track.sign() * correctedTPCinnerParam, (correctedTPCinnerParam - track.p()) / correctedTPCinnerParam); m_ClusterStudiesTable( - track.p() * track.sign(), // p_He3, - track.eta(), // eta_He3, - track.phi(), // phi_He3, - track.itsClusterSizes(), // itsClSize_He3, - partID); // partID_He3 + track.p() * track.sign(), // p_He3, + track.eta(), // eta_He3, + track.phi(), // phi_He3, + track.itsClusterSizes(), // itsClSize_He3, + partID); // partID_He3 if (!setting_smallTable) { m_ClusterStudiesTableExtra( - correctedTPCinnerParam * track.sign(), // pTPC_He3, - track.pidForTracking(), // PIDinTrk_He3, - computeNSigmaHe3(track), // TpcNSigma_He3, - -999.f, // TofNSigma_He3, - tofMass, // TofMass_He3, - -999.f, // cosPA, - -999.f); // massMother + correctedTPCinnerParam * track.sign(), // pTPC_He3, + track.pidForTracking(), // PIDinTrk_He3, + computeNSigmaHe3(track), // TpcNSigma_He3, + -999.f, // TofNSigma_He3, + tofMass, // TofMass_He3, + -999.f, // cosPA, + -999.f); // massMother } if constexpr (isMC) { @@ -1040,9 +1038,9 @@ struct LfTreeCreatorClusterStudies { return; } auto mcParticle = track.mcParticle(); - + m_ClusterStudiesTableMc( - mcParticle.pdgCode()); // pdgCodeMc_He3 + mcParticle.pdgCode()); // pdgCodeMc_He3 } m_hAnalysis.fill(HIST("isPositive"), track.sign() > 0);