From 0f8ebeda51a83a13ed111b7befbe64a69d879e81 Mon Sep 17 00:00:00 2001 From: Jinhyun Park Date: Wed, 27 May 2026 10:47:30 +0900 Subject: [PATCH 1/4] First commit to update treeCreatorToXiPiQa.cxx --- PWGHF/TableProducer/treeCreatorToXiPiQa.cxx | 226 ++++++++++++++++++-- 1 file changed, 204 insertions(+), 22 deletions(-) diff --git a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx index 2e219e14355..8d6923455ce 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx @@ -17,6 +17,7 @@ /// \author Krista Smith , Pusan National University #include "PWGHF/Core/CentralityEstimation.h" +#include "PWGHF/Core/DecayChannelsLegacy.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" @@ -38,6 +39,7 @@ using namespace o2; using namespace o2::framework; +using namespace o2::framework::expressions; // SV Reco method enum { @@ -124,6 +126,8 @@ DECLARE_SOA_COLUMN(EtaPiFromCasc, etaPiFromCasc, float); DECLARE_SOA_COLUMN(EtaPiFromCharmBaryon, etaPiFromCharmBaryon, float); DECLARE_SOA_COLUMN(EtaCharmBaryon, etaCharmBaryon, float); DECLARE_SOA_COLUMN(EtaCascade, etaCascade, float); +DECLARE_SOA_COLUMN(PhiCharmBaryon, phiCharmBaryon, float); +DECLARE_SOA_COLUMN(YCharmBaryon, yCharmBaryon, float); DECLARE_SOA_COLUMN(EtaV0, etaV0, float); DECLARE_SOA_COLUMN(DcaXYToPvV0Dau0, dcaXYToPvV0Dau0, float); DECLARE_SOA_COLUMN(DcaXYToPvV0Dau1, dcaXYToPvV0Dau1, float); @@ -303,6 +307,13 @@ DECLARE_SOA_TABLE(HfKfXicFulls, "AOD", "HFKFXICFULL", full::ResultSelections, full::FlagMcMatchRec, full::DebugMcRec, full::OriginRec, full::CollisionMatched); +DECLARE_SOA_TABLE(HfCandToXiPiGen, "AOD", "HFCANDTOXIPIGEN", + full::PtCharmBaryon, + full::EtaCharmBaryon, + full::PhiCharmBaryon, + full::YCharmBaryon, + full::FlagMcMatchRec, + full::OriginRec) } // namespace o2::aod /// Writes the full information in an output TTree @@ -311,16 +322,22 @@ struct HfTreeCreatorToXiPiQa { Produces rowCandidateFull; Produces rowCandidateLite; Produces rowKfCandidate; + Produces rowCandidateParticles; Produces rowEv; Configurable zPvCut{"zPvCut", 10., "Cut on absolute value of primary vertex z coordinate"}; + Configurable genSelection{"genSelection", o2::aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi, "Decay channel to be used to match particle information"}; + Configurable fillParticle{"fillParticle", true, "Fill generated MC information if requested"}; using MyTrackTable = soa::Join; using MyEventTable = soa::Join; using MyEventTableWithFT0C = soa::Join; using MyEventTableWithFT0M = soa::Join; using MyEventTableWithNTracksPV = soa::Join; + using MatchedGenXiPi = soa::Filtered>; + Filter filterGenXiPi = nabs(aod::hf_cand_mc_flag::flagMcMatchGen) == static_cast(BIT(genSelection)); + void init(InitContext const&) { if ((doprocessMcLiteXic0 && doprocessMcLiteOmegac0) || (doprocessMcFullXic0 && doprocessMcFullOmegac0)) { @@ -783,8 +800,10 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~MC with DCAFitter~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processMcFullXic0(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcFullXic0(MyEventTable const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -797,10 +816,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcFullOmegac0(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcFullOmegac0(MyEventTable const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -813,10 +847,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcLiteXic0(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcLiteXic0(MyEventTable const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -829,10 +878,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), -7, candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcLiteXic0WithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcLiteXic0WithFT0C(MyEventTableWithFT0C const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -845,10 +909,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), -7, candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcLiteXic0WithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcLiteXic0WithFT0M(MyEventTableWithFT0M const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -861,10 +940,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), -7, candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcLiteXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcLiteXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -877,10 +971,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), -7, candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processMcLiteOmegac0(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processMcLiteOmegac0(MyEventTable const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -893,6 +1002,19 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), -7, candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } PROCESS_SWITCH(HfTreeCreatorToXiPiQa, processMcFullXic0, "Process MC with full information for xic0 w/o centrality", false); @@ -906,8 +1028,10 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// //*~~~~~~~MC with KFParticle~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processKfMcXic0(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfMcXic0(MyEventTable const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -920,10 +1044,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processKfMcXic0WithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfMcXic0WithFT0C(MyEventTableWithFT0C const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -936,10 +1075,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processKfMcXic0WithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfMcXic0WithFT0M(MyEventTableWithFT0M const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -952,10 +1106,25 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } - void processKfMcXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfMcXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + MyTrackTable const&, + soa::Join const& candidates, + MatchedGenXiPi const& mcParticles) { // Filling event properties rowEv.reserve(collisions.size()); @@ -968,6 +1137,19 @@ struct HfTreeCreatorToXiPiQa { for (const auto& candidate : candidates) { fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } + + // Filling particle properties if requested + if (fillParticle) { + rowCandidateParticles.reserve(mcParticles.size()); + for (const auto& particle : mcParticles) { + rowCandidateParticles(particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + particle.flagMcMatchGen(), + particle.originMcGen()); + } + } } PROCESS_SWITCH(HfTreeCreatorToXiPiQa, processKfMcXic0, "Process MC with information for xic0", false); From 585a74fefe5ba52ded6ff92e8b29af277e8a9fe3 Mon Sep 17 00:00:00 2001 From: Jinhyun Park Date: Wed, 27 May 2026 23:24:00 +0900 Subject: [PATCH 2/4] Update output table & apply appropriate mass hypothesis for Omegac0 --- PWGHF/TableProducer/treeCreatorToXiPiQa.cxx | 76 ++++++++++++++------- 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx index 8d6923455ce..aecc483e779 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx @@ -216,6 +216,8 @@ DECLARE_SOA_COLUMN(CascChi2OverNdf, cascChi2OverNdf, float); DECLARE_SOA_COLUMN(XicChi2OverNdf, xicChi2OverNdf, float); DECLARE_SOA_COLUMN(MassV0Chi2OverNdf, massV0Chi2OverNdf, float); DECLARE_SOA_COLUMN(MassCascChi2OverNdf, massCascChi2OverNdf, float); +// MC +DECLARE_SOA_COLUMN(PdgFromMc, pdgFromMc, int); } // namespace full DECLARE_SOA_TABLE(HfToXiPiEvs, "AOD", "HFTOXIPIEV", @@ -308,12 +310,14 @@ DECLARE_SOA_TABLE(HfKfXicFulls, "AOD", "HFKFXICFULL", full::FlagMcMatchRec, full::DebugMcRec, full::OriginRec, full::CollisionMatched); DECLARE_SOA_TABLE(HfCandToXiPiGen, "AOD", "HFCANDTOXIPIGEN", + full::InvMassCharmBaryon, full::PtCharmBaryon, full::EtaCharmBaryon, full::PhiCharmBaryon, full::YCharmBaryon, full::FlagMcMatchRec, - full::OriginRec) + full::OriginRec, + full::PdgFromMc) } // namespace o2::aod /// Writes the full information in an output TTree @@ -821,12 +825,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -852,12 +858,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassOmegaC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -883,12 +891,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -914,12 +924,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -945,12 +957,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -976,12 +990,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -1007,12 +1023,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), + RecoDecay::y(particle.pVector(), o2::constants::physics::MassOmegaC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -1049,12 +1067,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -1080,12 +1100,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -1111,12 +1133,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } @@ -1142,12 +1166,14 @@ struct HfTreeCreatorToXiPiQa { if (fillParticle) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(particle.pt(), + rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), + particle.pt(), particle.eta(), particle.phi(), RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), particle.flagMcMatchGen(), - particle.originMcGen()); + particle.originMcGen(), + particle.pdgCode()); } } } From c87394a93d0bbb86f22445d93286410bc9387876 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 27 May 2026 14:28:36 +0000 Subject: [PATCH 3/4] Please consider the following formatting changes --- PWGHF/TableProducer/treeCreatorToXiPiQa.cxx | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx index aecc483e779..193e49e7010 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx @@ -341,7 +341,7 @@ struct HfTreeCreatorToXiPiQa { using MatchedGenXiPi = soa::Filtered>; Filter filterGenXiPi = nabs(aod::hf_cand_mc_flag::flagMcMatchGen) == static_cast(BIT(genSelection)); - + void init(InitContext const&) { if ((doprocessMcLiteXic0 && doprocessMcLiteOmegac0) || (doprocessMcFullXic0 && doprocessMcFullOmegac0)) { @@ -804,7 +804,7 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~MC with DCAFitter~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processMcFullXic0(MyEventTable const& collisions, + void processMcFullXic0(MyEventTable const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -837,7 +837,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcFullOmegac0(MyEventTable const& collisions, + void processMcFullOmegac0(MyEventTable const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -870,7 +870,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcLiteXic0(MyEventTable const& collisions, + void processMcLiteXic0(MyEventTable const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -903,9 +903,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcLiteXic0WithFT0C(MyEventTableWithFT0C const& collisions, + void processMcLiteXic0WithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, - soa::Join const& candidates, + soa::Join const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties @@ -936,9 +936,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcLiteXic0WithFT0M(MyEventTableWithFT0M const& collisions, + void processMcLiteXic0WithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, - soa::Join const& candidates, + soa::Join const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties @@ -969,7 +969,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcLiteXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + void processMcLiteXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -1002,7 +1002,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processMcLiteOmegac0(MyEventTable const& collisions, + void processMcLiteOmegac0(MyEventTable const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -1046,7 +1046,7 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// //*~~~~~~~MC with KFParticle~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processKfMcXic0(MyEventTable const& collisions, + void processKfMcXic0(MyEventTable const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -1079,7 +1079,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfMcXic0WithFT0C(MyEventTableWithFT0C const& collisions, + void processKfMcXic0WithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -1112,7 +1112,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfMcXic0WithFT0M(MyEventTableWithFT0M const& collisions, + void processKfMcXic0WithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) @@ -1145,7 +1145,7 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfMcXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + void processKfMcXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, soa::Join const& candidates, MatchedGenXiPi const& mcParticles) From 9953b75dd2cb7ea6cae6cd4acf6e7115919ee564 Mon Sep 17 00:00:00 2001 From: Jinhyun Park Date: Thu, 28 May 2026 01:08:32 +0900 Subject: [PATCH 4/4] Added helper function to fill in table for particle info --- PWGHF/TableProducer/treeCreatorToXiPiQa.cxx | 140 ++++++-------------- 1 file changed, 38 insertions(+), 102 deletions(-) diff --git a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx index aecc483e779..efbfe229f21 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx @@ -217,7 +217,7 @@ DECLARE_SOA_COLUMN(XicChi2OverNdf, xicChi2OverNdf, float); DECLARE_SOA_COLUMN(MassV0Chi2OverNdf, massV0Chi2OverNdf, float); DECLARE_SOA_COLUMN(MassCascChi2OverNdf, massCascChi2OverNdf, float); // MC -DECLARE_SOA_COLUMN(PdgFromMc, pdgFromMc, int); +DECLARE_SOA_COLUMN(ParticlePdg, particlePdg, int); } // namespace full DECLARE_SOA_TABLE(HfToXiPiEvs, "AOD", "HFTOXIPIEV", @@ -317,7 +317,7 @@ DECLARE_SOA_TABLE(HfCandToXiPiGen, "AOD", "HFCANDTOXIPIGEN", full::YCharmBaryon, full::FlagMcMatchRec, full::OriginRec, - full::PdgFromMc) + full::ParticlePdg) } // namespace o2::aod /// Writes the full information in an output TTree @@ -331,7 +331,7 @@ struct HfTreeCreatorToXiPiQa { Configurable zPvCut{"zPvCut", 10., "Cut on absolute value of primary vertex z coordinate"}; Configurable genSelection{"genSelection", o2::aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi, "Decay channel to be used to match particle information"}; - Configurable fillParticle{"fillParticle", true, "Fill generated MC information if requested"}; + Configurable fillGenTable{"fillGenTable", true, "Fill generated MC information if requested"}; using MyTrackTable = soa::Join; using MyEventTable = soa::Join; @@ -632,6 +632,19 @@ struct HfTreeCreatorToXiPiQa { } } + template + void fillParticle(const T& particle) + { + rowCandidateParticles(RecoDecay::m(particle.pVector(), particle.e()), + particle.pt(), + particle.eta(), + particle.phi(), + RecoDecay::y(particle.pVector(), massCharmBaryon), + particle.flagMcMatchGen(), + particle.originMcGen(), + particle.pdgCode()); + } + //////////////////////////////////// // // // Process functions // @@ -822,17 +835,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -855,17 +861,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassOmegaC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -888,17 +887,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -921,17 +913,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -954,17 +939,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -987,17 +965,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -1020,17 +991,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassOmegaC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -1064,17 +1028,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -1097,17 +1054,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -1130,17 +1080,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } } @@ -1163,17 +1106,10 @@ struct HfTreeCreatorToXiPiQa { } // Filling particle properties if requested - if (fillParticle) { + if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); for (const auto& particle : mcParticles) { - rowCandidateParticles(RecoDecay::m(std::array{particle.px(), particle.py(), particle.pz()}, particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), o2::constants::physics::MassXiC0), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + fillParticle(particle); } } }