diff --git a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx index 000c7d09b6e..9fb1a50a305 100644 --- a/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx +++ b/PWGHF/TableProducer/treeCreatorToXiPiQa.cxx @@ -20,6 +20,7 @@ #include "PWGHF/Core/DecayChannelsLegacy.h" #include "PWGHF/DataModel/CandidateReconstructionTables.h" #include "PWGHF/DataModel/CandidateSelectionTables.h" +#include "PWGLF/DataModel/mcCentrality.h" #include "Common/Core/RecoDecay.h" #include "Common/DataModel/Centrality.h" @@ -218,6 +219,9 @@ DECLARE_SOA_COLUMN(MassV0Chi2OverNdf, massV0Chi2OverNdf, float); DECLARE_SOA_COLUMN(MassCascChi2OverNdf, massCascChi2OverNdf, float); // MC DECLARE_SOA_COLUMN(ParticlePdg, particlePdg, int); +DECLARE_SOA_COLUMN(NContribMax, nContribMax, int); +DECLARE_SOA_COLUMN(NRecoColl, nRecoColl, int); +DECLARE_SOA_COLUMN(PtGenB, ptGenB, float); } // namespace full DECLARE_SOA_TABLE(HfToXiPiEvs, "AOD", "HFTOXIPIEV", @@ -317,7 +321,10 @@ DECLARE_SOA_TABLE(HfCandToXiPiGen, "AOD", "HFCANDTOXIPIGEN", full::YCharmBaryon, full::FlagMcMatchRec, full::OriginRec, - full::ParticlePdg) + full::ParticlePdg, + full::NContribMax, + full::NRecoColl, + full::PtGenB) } // namespace o2::aod /// Writes the full information in an output TTree @@ -334,14 +341,26 @@ struct HfTreeCreatorToXiPiQa { Configurable fillGenTable{"fillGenTable", true, "Fill generated MC information if requested"}; using MyTrackTable = soa::Join; + using MyCandTableDca = soa::Join; + using MyCandTableKf = soa::Join; + using MyCandTableXic0McDca = soa::Join; + using MyCandTableXic0McKf = soa::Join; + using MyCandTableOmegac0McDca = soa::Join; using MyEventTable = soa::Join; using MyEventTableWithFT0C = soa::Join; using MyEventTableWithFT0M = soa::Join; using MyEventTableWithNTracksPV = soa::Join; + using MyEventTableWithMcLabels = soa::Join; + using MatchedGenXiPi = soa::Filtered>; + using McCollisionsCentFT0Cs = soa::Join; + using McCollisionsCentFT0Ms = soa::Join; + Filter filterGenXiPi = nabs(aod::hf_cand_mc_flag::flagMcMatchGen) == static_cast(BIT(genSelection)); + PresliceUnsorted colPerMcCollision = aod::mccollisionlabel::mcCollisionId; + void init(InitContext const&) { if ((doprocessMcLiteXic0 && doprocessMcLiteOmegac0) || (doprocessMcFullXic0 && doprocessMcFullOmegac0)) { @@ -632,17 +651,35 @@ struct HfTreeCreatorToXiPiQa { } } - template - void fillParticle(const T& particle, double massCharmBaryon) + template + void fillParticle(const CandType& mcParticles, const CollType& collisions) { - rowCandidateParticles(RecoDecay::m(particle.pVector(), particle.e()), - particle.pt(), - particle.eta(), - particle.phi(), - RecoDecay::y(particle.pVector(), massCharmBaryon), - particle.flagMcMatchGen(), - particle.originMcGen(), - particle.pdgCode()); + for (const auto& particle : mcParticles) { + // Mc.Gen + auto ptGen = particle.pt(); + auto yGen = particle.rapidityCharmBaryonGen(); + + int nContribMax = 0; + auto mcCollision = particle.template mcCollision_as(); + const auto& recoCollsPerMcColl = collisions.sliceBy(colPerMcCollision, mcCollision.globalIndex()); + for (const auto& recoCol : recoCollsPerMcColl) { + nContribMax = recoCol.numContrib() > nContribMax ? recoCol.numContrib() : nContribMax; + } + + float ptGenBhad = (particle.originMcGen() == RecoDecay::OriginType::NonPrompt) ? mcParticles.rawIteratorAt(particle.idxBhadMotherPart()).pt() : -999.f; + + rowCandidateParticles(RecoDecay::m(particle.pVector(), particle.e()), + ptGen, + particle.eta(), + particle.phi(), + yGen, + particle.flagMcMatchGen(), + particle.originMcGen(), + particle.pdgCode(), + nContribMax, + recoCollsPerMcColl.size(), + ptGenBhad); + } } //////////////////////////////////// @@ -655,8 +692,9 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~Data with DCAFitter~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processDataFull(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processDataFull(MyEventTable const& collisions, + MyTrackTable const&, + MyCandTableDca const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -671,8 +709,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processDataLite(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processDataLite(MyEventTable const& collisions, + MyTrackTable const&, + MyCandTableDca const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -687,8 +726,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processDataLiteWithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processDataLiteWithFT0M(MyEventTableWithFT0M const& collisions, + MyTrackTable const&, + MyCandTableDca const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -703,8 +743,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processDataLiteWithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processDataLiteWithFT0C(MyEventTableWithFT0C const& collisions, + MyTrackTable const&, + MyCandTableDca const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -719,8 +760,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processDataLiteWithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processDataLiteWithNTracksPV(MyEventTableWithNTracksPV const& collisions, + MyTrackTable const&, + MyCandTableDca const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -744,8 +786,9 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// //*~~~~~~~Data with KFParticle~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processKfData(MyEventTable const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfData(MyEventTable const& collisions, + MyTrackTable const&, + MyCandTableKf const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -760,8 +803,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfDataWithFT0M(MyEventTableWithFT0M const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfDataWithFT0M(MyEventTableWithFT0M const& collisions, + MyTrackTable const&, + MyCandTableKf const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -776,8 +820,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfDataWithFT0C(MyEventTableWithFT0C const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfDataWithFT0C(MyEventTableWithFT0C const& collisions, + MyTrackTable const&, + MyCandTableKf const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -792,8 +837,9 @@ struct HfTreeCreatorToXiPiQa { } } - void processKfDataWithNTracksPV(MyEventTableWithNTracksPV const& collisions, MyTrackTable const&, - soa::Join const& candidates) + void processKfDataWithNTracksPV(MyEventTableWithNTracksPV const& collisions, + MyTrackTable const&, + MyCandTableKf const& candidates) { // Filling event properties rowEv.reserve(collisions.size()); @@ -817,66 +863,65 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~MC with DCAFitter~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processMcFullXic0(MyEventTable const& collisions, + void processMcFullXic0(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } // Filling candidate properties rowCandidateFull.reserve(candidates.size()); for (const auto& candidate : candidates) { - fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); + fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcFullOmegac0(MyEventTable const& collisions, + void processMcFullOmegac0(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableOmegac0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } // Filling candidate properties rowCandidateFull.reserve(candidates.size()); for (const auto& candidate : candidates) { - fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); + fillCandidate(candidate, candidate.flagMcMatchRec(), candidate.debugMcRec(), candidate.originMcRec(), candidate.collisionMatched()); } // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassOmegaC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcLiteXic0(MyEventTable const& collisions, + void processMcLiteXic0(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -889,20 +934,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcLiteXic0WithFT0C(MyEventTableWithFT0C const& collisions, + void processMcLiteXic0WithFT0C(MyEventTableWithMcLabels const& collsWithMcLable, + McCollisionsCentFT0Cs const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -915,20 +959,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcLiteXic0WithFT0M(MyEventTableWithFT0M const& collisions, + void processMcLiteXic0WithFT0M(MyEventTableWithMcLabels const& collsWithMcLable, + McCollisionsCentFT0Ms const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -941,20 +984,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcLiteXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + void processMcLiteXic0WithNTracksPV(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -967,20 +1009,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processMcLiteOmegac0(MyEventTable const& collisions, + void processMcLiteOmegac0(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableOmegac0McDca const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -993,9 +1034,7 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassOmegaC0); - } + fillParticle(mcParticles, collsWithMcLable); } } @@ -1010,14 +1049,15 @@ struct HfTreeCreatorToXiPiQa { //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// //*~~~~~~~MC with KFParticle~~~~~~~~*// //*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*// - void processKfMcXic0(MyEventTable const& collisions, + void processKfMcXic0(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McKf const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -1030,20 +1070,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processKfMcXic0WithFT0C(MyEventTableWithFT0C const& collisions, + void processKfMcXic0WithFT0C(MyEventTableWithMcLabels const& collsWithMcLable, + McCollisionsCentFT0Cs const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McKf const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -1056,20 +1095,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processKfMcXic0WithFT0M(MyEventTableWithFT0M const& collisions, + void processKfMcXic0WithFT0M(MyEventTableWithMcLabels const& collsWithMcLable, + McCollisionsCentFT0Ms const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McKf const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -1082,20 +1120,19 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } } - void processKfMcXic0WithNTracksPV(MyEventTableWithNTracksPV const& collisions, + void processKfMcXic0WithNTracksPV(MyEventTableWithMcLabels const& collsWithMcLable, + aod::McCollisions const&, MyTrackTable const&, - soa::Join const& candidates, + MyCandTableXic0McKf const& candidates, MatchedGenXiPi const& mcParticles) { // Filling event properties - rowEv.reserve(collisions.size()); - for (const auto& collision : collisions) { + rowEv.reserve(collsWithMcLable.size()); + for (const auto& collision : collsWithMcLable) { fillEvent(collision, zPvCut); } @@ -1108,9 +1145,7 @@ struct HfTreeCreatorToXiPiQa { // Filling particle properties if requested if (fillGenTable) { rowCandidateParticles.reserve(mcParticles.size()); - for (const auto& particle : mcParticles) { - fillParticle(particle, o2::constants::physics::MassXiC0); - } + fillParticle(mcParticles, collsWithMcLable); } }