From 4514ca0cb9b933aecf10b4c637c48b08f36a7550 Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 26 Jan 2026 11:10:03 +0100 Subject: [PATCH 1/4] Process functions for ME --- .../Strangeness/phiStrangeCorrelation.cxx | 80 +++++++++++++------ 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx index 6e962c85571..b143799ed25 100644 --- a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx +++ b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx @@ -40,6 +40,8 @@ #include "Framework/runDataProcessing.h" #include "ReconstructionDataFormats/PID.h" #include "ReconstructionDataFormats/Track.h" +#include +#include #include #include @@ -291,6 +293,9 @@ struct PhiStrangenessCorrelation { // Preslice mcPartPerMCCollision = aod::mcparticle::mcCollisionId; } preslices; + // Slice cache for mixed event + SliceCache cache; + // Necessary service to retrieve efficiency maps from CCDB Service ccdb; @@ -302,6 +307,13 @@ struct PhiStrangenessCorrelation { std::array, ParticleOfInterestSize> effMaps{}; + // Binning policy and axes for mixed event + ConfigurableAxis axisVertexMixing{"axisVertexMixing", {20, -10, 10}, "Z vertex axis binning for mixing"}; + ConfigurableAxis axisCentralityMixing{"axisCentralityMixing", {20, 0, 100}, "Multiplicity percentil binning for mixing"}; + + using BinningTypeVertexCent = ColumnBinningPolicy; + BinningTypeVertexCent binningOnVertexAndCent{{axisVertexMixing, axisCentralityMixing}, true}; + void init(InitContext&) { AxisSpec vertexZAxis = {100, -cutZVertex, cutZVertex, "vrtx_{Z} [cm]"}; // TO BE REMOVED @@ -545,7 +557,6 @@ struct PhiStrangenessCorrelation { const std::array, 2> phiMassRegions = {phiConfigs.rangeMPhiSignal, phiConfigs.rangeMPhiSideband}; - // Loop over all positive tracks for (const auto& phiCand : phiCandidates) { float weightPhi = computeWeight(BoundEfficiencyMap(effMaps[Phi], multiplicity, phiCand.pt(), phiCand.y())); @@ -598,38 +609,58 @@ struct PhiStrangenessCorrelation { PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiK0SPionData, "Process function for Phi-K0S and Phi-Pion Deltay and Deltaphi 2D Correlations in Data", true); - /* - void processPhiK0SPionDataME(SelCollisions::iterator const& collision, aod::PhimesonCandidatesData const& phiCandidates, FullTracks const& fullTracks, FullV0s const& V0s, V0DauTracks const&) + void processPhiK0SDataME(SelCollisions const& collisions, aod::PhimesonCandidatesData const& phiCandidates, FullV0s const& V0s, V0DauTracks const&) { - Pair pairPhiK0S{binningOnVertexAndCent, cfgNoMixedEvents, -1, collisions, tracksV0sTuple, &cache}; - Triple triple{binningOnPositions, 5, -1, &cache}; - float multiplicity = collision.centFT0M(); - const std::array, 2> phiMassRegions = {phiConfigs.rangeMPhiSignal, phiConfigs.rangeMPhiSideband}; - // Loop over all positive tracks - for (const auto& phiCand : phiCandidates) { - static_for<0, phiMassRegionLabels.size() - 1>([&](auto i_idx) { - constexpr unsigned int i = i_idx.value; + auto tuplePhiV0 = std::make_tuple(phiCandidates, V0s); + Pair pairPhiK0S{binningOnVertexAndCent, cfgNoMixedEvents, -1, collisions, tuplePhiV0, &cache}; - const auto& [minMass, maxMass] = phiMassRegions[i]; - if (!phiCand.inMassRegion(minMass, maxMass)) - return; + for (const auto& [c1, phiCands, c2, v0s] : pairPhiK0S) { - // V0 already reconstructed by the builder - for (const auto& v0 : V0s) { - // Cut on V0 dynamic columns - if (!selectionV0(v0, collision)) + float multiplicity = c1.centFT0M(); + + for (const auto& [phiCand, v0] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(phiCands, v0s))) { + static_for<0, phiMassRegionLabels.size() - 1>([&](auto i_idx) { + constexpr unsigned int i = i_idx.value; + + const auto& [minMass, maxMass] = phiMassRegions[i]; + if (!phiCand.inMassRegion(minMass, maxMass)) + return; + + if (!selectionV0(v0, c2)) continue; float weightPhiK0S = computeWeight(BoundEfficiencyMap(effMaps[Phi], multiplicity, phiCand.pt(), phiCand.y()), BoundEfficiencyMap(effMaps[K0S], multiplicity, v0.pt(), v0.yK0Short())); histos.fill(HIST("phiK0S/h5PhiK0SDataME") + HIST(phiMassRegionLabels[i]), multiplicity, phiCand.pt(), v0.pt(), phiCand.y() - v0.yK0Short(), getDeltaPhi(phiCand.phi(), v0.phi()), weightPhiK0S); - } + }); + } + } + } + + PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiK0SDataME, "Process function for Phi-K0S and Deltay and Deltaphi 2D Correlations in Data ME", false); + + void processPhiPionDataME(SelCollisions const& collisions, aod::PhimesonCandidatesData const& phiCandidates, FullTracks const& fullTracks) + { + const std::array, 2> phiMassRegions = {phiConfigs.rangeMPhiSignal, phiConfigs.rangeMPhiSideband}; + + auto tuplePhiPion = std::make_tuple(phiCandidates, fullTracks); + Pair pairPhiPion{binningOnVertexAndCent, cfgNoMixedEvents, -1, collisions, tuplePhiPion, &cache}; + + for (const auto& [c1, phiCands, c2, tracks] : pairPhiPion) { + + float multiplicity = c1.centFT0M(); + + for (const auto& [phiCand, track] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(phiCands, tracks))) { + static_for<0, phiMassRegionLabels.size() - 1>([&](auto i_idx) { + constexpr unsigned int i = i_idx.value; + + const auto& [minMass, maxMass] = phiMassRegions[i]; + if (!phiCand.inMassRegion(minMass, maxMass)) + return; - // Loop over all primary pion candidates - for (const auto& track : fullTracks) { if (!selectionPion(track)) continue; @@ -637,13 +668,12 @@ struct PhiStrangenessCorrelation { BoundEfficiencyMap(effMaps[Pion], multiplicity, track.pt(), track.rapidity(massPi))); histos.fill(HIST("phiPi/h5PhiPiDataME") + HIST(phiMassRegionLabels[i]), multiplicity, phiCand.pt(), track.pt(), phiCand.y() - track.rapidity(massPi), getDeltaPhi(phiCand.phi(), track.phi()), weightPhiPion); - } - }); + }); + } } } - PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiK0SPionDataME, "Process function for Phi-K0S and Phi-Pion Deltay and Deltaphi 2D Correlations in Data ME", true); - */ + PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiPionDataME, "Process function for Phi-Pion Deltay and Deltaphi 2D Correlations in Data ME", false); void processParticleEfficiency(MCCollisions::iterator const& mcCollision, soa::SmallGroups const& collisions, FullMCTracks const& fullMCTracks, FullMCV0s const& V0s, V0DauMCTracks const&, aod::McParticles const& mcParticles, aod::PhimesonCandidatesMcReco const& phiCandidatesMcReco) { From c5d5fb5a8bc04cb52364051e045c406d15faf1b5 Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 26 Jan 2026 11:16:08 +0100 Subject: [PATCH 2/4] Return instead of continue --- PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx index b143799ed25..4e789a4e6d0 100644 --- a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx +++ b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx @@ -629,7 +629,7 @@ struct PhiStrangenessCorrelation { return; if (!selectionV0(v0, c2)) - continue; + return; float weightPhiK0S = computeWeight(BoundEfficiencyMap(effMaps[Phi], multiplicity, phiCand.pt(), phiCand.y()), BoundEfficiencyMap(effMaps[K0S], multiplicity, v0.pt(), v0.yK0Short())); @@ -662,7 +662,7 @@ struct PhiStrangenessCorrelation { return; if (!selectionPion(track)) - continue; + return; float weightPhiPion = computeWeight(BoundEfficiencyMap(effMaps[Phi], multiplicity, phiCand.pt(), phiCand.y()), BoundEfficiencyMap(effMaps[Pion], multiplicity, track.pt(), track.rapidity(massPi))); From 5e9923cf840d760c737e2155091b808a17141308 Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 26 Jan 2026 14:01:21 +0100 Subject: [PATCH 3/4] Fix process function for particle efficiency --- .../Strangeness/phiStrangeCorrelation.cxx | 183 ++++++++++-------- 1 file changed, 99 insertions(+), 84 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx index 4e789a4e6d0..840161b003e 100644 --- a/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx +++ b/PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx @@ -283,9 +283,9 @@ struct PhiStrangenessCorrelation { // Preslice for manual slicing struct : PresliceGroup { - // Preslice collPerMCCollision = aod::mccollisionlabel::mcCollisionId; Preslice v0PerCollision = aod::v0::collisionId; Preslice trackPerCollision = aod::track::collisionId; + Preslice mcPartPerMcCollision = aod::mcparticle::mcCollisionId; // Preslice phiCandDataPerCollision = aod::lf_selection_phi_candidate::collisionId; // PresliceUnsorted collPerMCCollision = aod::mccollisionlabel::mcCollisionId; PresliceUnsorted phiCandPerCollision = aod::lf_selection_phi_candidate::collisionId; @@ -675,118 +675,133 @@ struct PhiStrangenessCorrelation { PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiPionDataME, "Process function for Phi-Pion Deltay and Deltaphi 2D Correlations in Data ME", false); - void processParticleEfficiency(MCCollisions::iterator const& mcCollision, soa::SmallGroups const& collisions, FullMCTracks const& fullMCTracks, FullMCV0s const& V0s, V0DauMCTracks const&, aod::McParticles const& mcParticles, aod::PhimesonCandidatesMcReco const& phiCandidatesMcReco) + void processParticleEfficiency(MCCollisions const& mcCollisions, SimCollisions const& collisions, FullMCTracks const& fullMCTracks, FullMCV0s const& V0s, V0DauMCTracks const&, aod::McParticles const& mcParticles, aod::PhimesonCandidatesMcReco const& phiCandidatesMcReco) { - uint16_t numberAssocColls{0}; - std::vector zVtxs; - - // const auto collsThisMCColl = collisions.sliceBy(preslices.collPerMCCollision, mcCollision.globalIndex()); + std::vector> collsGrouped(mcCollisions.size()); for (const auto& collision : collisions) { - histos.fill(HIST("event/hRecoMCMultiplicityPercent"), mcCollision.centFT0M()); - histos.fill(HIST("event/h2RecoMCVertexZvsMult"), collision.posZ(), mcCollision.centFT0M()); + if (!collision.has_mcCollision()) + continue; + const auto& mcCollision = collision.mcCollision_as(); + collsGrouped[mcCollision.globalIndex()].push_back(collision.globalIndex()); + } + + for (const auto& mcCollision : mcCollisions) { + uint16_t numberAssocColls{0}; + std::vector zVtxs; + + const auto& collIndexesThisMcColl = collsGrouped[mcCollision.globalIndex()]; - zVtxs.push_back(collision.posZ()); + for (const auto& collIndex : collIndexesThisMcColl) { + const auto& collision = collisions.rawIteratorAt(collIndex); - if (selectionType == 0) { - const auto phiCandidatesThisColl = phiCandidatesMcReco.sliceBy(preslices.phiCandPerCollision, collision.globalIndex()); - for (const auto& phiCand : phiCandidatesThisColl) { - histos.fill(HIST("phi/h4PhiMCReco"), collision.posZ(), mcCollision.centFT0M(), phiCand.pt(), phiCand.y()); + histos.fill(HIST("event/hRecoMCMultiplicityPercent"), mcCollision.centFT0M()); + histos.fill(HIST("event/h2RecoMCVertexZvsMult"), collision.posZ(), mcCollision.centFT0M()); + + zVtxs.push_back(collision.posZ()); + + if (selectionType == 0) { + const auto phiCandidatesThisColl = phiCandidatesMcReco.sliceBy(preslices.phiCandPerCollision, collision.globalIndex()); + for (const auto& phiCand : phiCandidatesThisColl) { + histos.fill(HIST("phi/h4PhiMCReco"), collision.posZ(), mcCollision.centFT0M(), phiCand.pt(), phiCand.y()); + } } - } - const auto v0sThisColl = V0s.sliceBy(preslices.v0PerCollision, collision.globalIndex()); - const auto fullMCTracksThisColl = fullMCTracks.sliceBy(preslices.trackPerCollision, collision.globalIndex()); + const auto v0sThisColl = V0s.sliceBy(preslices.v0PerCollision, collision.globalIndex()); + const auto fullMCTracksThisColl = fullMCTracks.sliceBy(preslices.trackPerCollision, collision.globalIndex()); - for (const auto& v0 : v0sThisColl) { - if (!selectionV0(v0, collision)) - continue; + for (const auto& v0 : v0sThisColl) { + if (!selectionV0(v0, collision)) + continue; - if (!v0.has_mcParticle()) - continue; + if (!v0.has_mcParticle()) + continue; - const auto& v0McParticle = mcParticles.rawIteratorAt(v0.mcParticleId()); - if (std::abs(v0McParticle.pdgCode()) != PDG_t::kK0Short || !v0McParticle.isPhysicalPrimary()) - continue; + const auto& v0McParticle = mcParticles.rawIteratorAt(v0.mcParticleId()); + if (std::abs(v0McParticle.pdgCode()) != PDG_t::kK0Short || !v0McParticle.isPhysicalPrimary()) + continue; - histos.fill(HIST("k0s/h4K0SMCReco"), collision.posZ(), mcCollision.centFT0M(), v0McParticle.pt(), v0McParticle.y()); - } + histos.fill(HIST("k0s/h4K0SMCReco"), collision.posZ(), mcCollision.centFT0M(), v0McParticle.pt(), v0McParticle.y()); + } - for (const auto& track : fullMCTracksThisColl) { - if (!selectionPion(track)) - continue; + for (const auto& track : fullMCTracksThisColl) { + if (!selectionPion(track)) + continue; - if (!track.has_mcParticle()) - continue; + if (!track.has_mcParticle()) + continue; - const auto& trackMcParticle = mcParticles.rawIteratorAt(track.mcParticleId()); - if (std::abs(trackMcParticle.pdgCode()) != PDG_t::kPiPlus) - continue; + const auto& trackMcParticle = mcParticles.rawIteratorAt(track.mcParticleId()); + if (std::abs(trackMcParticle.pdgCode()) != PDG_t::kPiPlus) + continue; - if (trackMcParticle.isPhysicalPrimary()) { - histos.fill(HIST("pi/h2RecMCDCAxyPrimPi"), track.pt(), track.dcaXY()); - } else { - if (trackMcParticle.getProcess() == TMCProcess::kPDecay) { // Selection of secondary pions from weak decay - histos.fill(HIST("pi/h2RecMCDCAxySecWeakDecayPi"), track.pt(), track.dcaXY()); - } else { // Selection of secondary pions from material interactions - histos.fill(HIST("pi/h2RecMCDCAxySecMaterialPi"), track.pt(), track.dcaXY()); + if (trackMcParticle.isPhysicalPrimary()) { + histos.fill(HIST("pi/h2RecMCDCAxyPrimPi"), track.pt(), track.dcaXY()); + } else { + if (trackMcParticle.getProcess() == TMCProcess::kPDecay) { // Selection of secondary pions from weak decay + histos.fill(HIST("pi/h2RecMCDCAxySecWeakDecayPi"), track.pt(), track.dcaXY()); + } else { // Selection of secondary pions from material interactions + histos.fill(HIST("pi/h2RecMCDCAxySecMaterialPi"), track.pt(), track.dcaXY()); + } + continue; } - continue; + + histos.fill(HIST("pi/h4PiMCReco"), collision.posZ(), mcCollision.centFT0M(), trackMcParticle.pt(), trackMcParticle.y()); } - histos.fill(HIST("pi/h4PiMCReco"), collision.posZ(), mcCollision.centFT0M(), trackMcParticle.pt(), trackMcParticle.y()); + numberAssocColls++; } - numberAssocColls++; - } - - histos.fill(HIST("event/hGenMCMultiplicityPercent"), mcCollision.centFT0M()); + histos.fill(HIST("event/hGenMCMultiplicityPercent"), mcCollision.centFT0M()); - const bool hasAssoc = (numberAssocColls > 0); - const float zVtxRef = hasAssoc ? zVtxs[0] : 0.0f; + const bool hasAssoc = (numberAssocColls > 0); + const float zVtxRef = hasAssoc ? zVtxs[0] : 0.0f; - //////TOBECHANGED////// - if (hasAssoc) { - if (zVtxs.size() > 1) { - for (size_t i = 1; i < zVtxs.size(); ++i) { - histos.fill(HIST("event/hSplitVertexZ"), zVtxs[i] - zVtxRef); + //////TOBECHANGED////// + if (hasAssoc) { + if (zVtxs.size() > 1) { + for (size_t i = 1; i < zVtxs.size(); ++i) { + histos.fill(HIST("event/hSplitVertexZ"), zVtxs[i] - zVtxRef); + } } + + histos.fill(HIST("event/hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M()); + histos.fill(HIST("event/h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M()); } + /////////////////////// - histos.fill(HIST("event/hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M()); - histos.fill(HIST("event/h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M()); - } - /////////////////////// + const auto mcParticlesThisMcColl = mcParticles.sliceBy(preslices.mcPartPerMcCollision, mcCollision.globalIndex()); - auto inYAcceptance = [&](const auto& mcParticle) { - return std::abs(mcParticle.y()) <= yConfigs.cfgYAcceptance; - }; + auto inYAcceptance = [&](const auto& mcParticle) { + return std::abs(mcParticle.y()) <= yConfigs.cfgYAcceptance; + }; - auto fillGenHistos = [&](auto h3Key, auto h4Key, const auto& mcParticle) { - histos.fill(h3Key, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y()); - if (hasAssoc) - histos.fill(h4Key, zVtxRef, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y()); - }; + auto fillGenHistos = [&](auto h3Key, auto h4Key, const auto& mcParticle) { + histos.fill(h3Key, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y()); + if (hasAssoc) + histos.fill(h4Key, zVtxRef, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y()); + }; - for (const auto& mcParticle : mcParticles /*| std::views::filter(inYAcceptance)*/) { - if (!inYAcceptance(mcParticle)) - continue; + for (const auto& mcParticle : mcParticlesThisMcColl /*| std::views::filter(inYAcceptance)*/) { + if (!inYAcceptance(mcParticle)) + continue; - switch (std::abs(mcParticle.pdgCode())) { - case o2::constants::physics::Pdg::kPhi: - if (selectionType == 0 && mcParticle.pt() >= phiConfigs.minPhiPt) - fillGenHistos(HIST("phi/h3PhiMCGen"), HIST("phi/h4PhiMCGenAssocReco"), mcParticle); - break; - case PDG_t::kK0Short: - if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= v0Configs.v0SettingMinPt) - fillGenHistos(HIST("k0s/h3K0SMCGen"), HIST("k0s/h4K0SMCGenAssocReco"), mcParticle); - break; - case PDG_t::kPiPlus: - if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= trackConfigs.cMinPionPtcut) - fillGenHistos(HIST("pi/h3PiMCGen"), HIST("pi/h4PiMCGenAssocReco"), mcParticle); - break; - default: - break; + switch (std::abs(mcParticle.pdgCode())) { + case o2::constants::physics::Pdg::kPhi: + if (selectionType == 0 && mcParticle.pt() >= phiConfigs.minPhiPt) + fillGenHistos(HIST("phi/h3PhiMCGen"), HIST("phi/h4PhiMCGenAssocReco"), mcParticle); + break; + case PDG_t::kK0Short: + if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= v0Configs.v0SettingMinPt) + fillGenHistos(HIST("k0s/h3K0SMCGen"), HIST("k0s/h4K0SMCGenAssocReco"), mcParticle); + break; + case PDG_t::kPiPlus: + if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= trackConfigs.cMinPionPtcut) + fillGenHistos(HIST("pi/h3PiMCGen"), HIST("pi/h4PiMCGenAssocReco"), mcParticle); + break; + default: + break; + } } } } From ca947c77aa47514190530f77479b2a9f24626b9a Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 26 Jan 2026 16:23:14 +0100 Subject: [PATCH 4/4] Index for tables --- PWGLF/DataModel/LFPhiStrangeCorrelationTables.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PWGLF/DataModel/LFPhiStrangeCorrelationTables.h b/PWGLF/DataModel/LFPhiStrangeCorrelationTables.h index 450c1491132..3e12bad91e3 100644 --- a/PWGLF/DataModel/LFPhiStrangeCorrelationTables.h +++ b/PWGLF/DataModel/LFPhiStrangeCorrelationTables.h @@ -38,6 +38,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(InMassRegion, inMassRegion, } // namespace lf_selection_phi_candidate DECLARE_SOA_TABLE(PhimesonCandidatesData, "AOD", "PHICANDDATA", + soa::Index<>, lf_selection_phi_candidate::CollisionId, lf_selection_phi_candidate::M, lf_selection_phi_candidate::Pt, @@ -46,6 +47,7 @@ DECLARE_SOA_TABLE(PhimesonCandidatesData, "AOD", "PHICANDDATA", lf_selection_phi_candidate::InMassRegion); DECLARE_SOA_TABLE(PhimesonCandidatesMcReco, "AOD", "PHICANDMCRECO", + soa::Index<>, lf_selection_phi_candidate::CollisionId, lf_selection_phi_candidate::M, lf_selection_phi_candidate::Pt, @@ -54,6 +56,7 @@ DECLARE_SOA_TABLE(PhimesonCandidatesMcReco, "AOD", "PHICANDMCRECO", lf_selection_phi_candidate::InMassRegion); DECLARE_SOA_TABLE(PhimesonCandidatesMcGen, "AOD", "PHICANDMCGEN", + soa::Index<>, lf_selection_phi_candidate::CollisionId, lf_selection_phi_candidate::M, lf_selection_phi_candidate::Pt,