From fd38da0a74979b87902343ef7713397187cd48a6 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Sat, 25 Apr 2026 00:49:42 +0200 Subject: [PATCH 1/5] corrected the indexing error in mixed phi process --- PWGCF/TableProducer/filter2Prong.cxx | 70 +++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index 156a8240718..d8168cd056b 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -19,9 +19,7 @@ #include "PWGHF/DataModel/TrackIndexSkimmingTables.h" #include "PWGLF/DataModel/LFStrangenessTables.h" -#include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/RecoDecay.h" -#include "Common/DataModel/EventSelection.h" #include "Common/DataModel/PIDResponseITS.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" @@ -31,10 +29,7 @@ #include #include #include -#include #include -#include -#include #include #include #include @@ -49,7 +44,6 @@ #include #include #include -#include #include #include #include @@ -71,6 +65,7 @@ enum LambdaPid { kLambda = 0, struct Filter2Prong { SliceCache cache; Preslice perCollisionCFTrackRefs = aod::track::collisionId; + Preslice perCollisionCFCollRefs = aod::track::collisionId; O2_DEFINE_CONFIGURABLE(cfgVerbosity, int, 0, "Verbosity level (0 = major, 1 = per collision)") O2_DEFINE_CONFIGURABLE(cfgYMax, float, -1.0f, "Maximum candidate rapidity") @@ -806,8 +801,23 @@ struct Filter2Prong { PROCESS_SWITCH(Filter2Prong, processDataPhiV0, "Process data Phi and V0 candidates with invariant mass method", false); using DerivedCollisions = soa::Join; - void processDataPhiMixed(DerivedCollisions const& collisions, Filter2Prong::PIDTrack const& /*tracksP*/, aod::CFTrackRefs const& cftracks) + void processDataPhiMixed(DerivedCollisions const& collisions, Filter2Prong::PIDTrack const& /*tracksP*/, aod::CFCollRefs const& cfcollrefs, aod::CFTrackRefs const& cftracks) { + struct MixedPhiCandidate { + int64_t cfCollisionId; + int64_t cfTrackProng0Id; + int64_t cfTrackProng1Id; + float pt; + float eta; + float phi; + float invMass; + uint8_t decay; + }; + + if (cfcollrefs.size() <= 0 || cftracks.size() <= 0) { + return; + } + auto getMultiplicity = [](auto const& col) { return col.multiplicity(); }; @@ -819,11 +829,23 @@ struct Filter2Prong { using TB = std::tuple_element - 1, decltype(tracksTuple)>::type; Pair pairs{configurableBinningDerived, cfgNoMixedEvents, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip + std::unordered_map collToCF; + collToCF.reserve(cfcollrefs.size()); + for (const auto& cfcollref : cfcollrefs) { + collToCF.emplace(cfcollref.collisionId(), cfcollref.globalIndex()); + } + + std::vector mixedPhiCandidates; o2::aod::ITSResponse itsResponse; for (auto it = pairs.begin(); it != pairs.end(); it++) { auto& [collision1, tracks1, collision2, tracks2] = *it; + auto cfColl1 = collToCF.find(collision1.globalIndex()); + if (cfColl1 == collToCF.end() || collToCF.find(collision2.globalIndex()) == collToCF.end()) { + continue; + } + if (!(collision1.sel8() && collision1.selection_bit(aod::evsel::kNoSameBunchPileup) && collision1.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV) && @@ -890,16 +912,40 @@ struct Filter2Prong { } float phi = RecoDecay::constrainAngle(s.Phi(), 0.0f); - - output2ProngTracks(collision1.globalIndex(), - cftrack1.globalIndex(), cftrack2.globalIndex(), - s.pt(), s.eta(), phi, s.M(), - aod::cf2prongtrack::PhiToKKPID3Mixed); + mixedPhiCandidates.push_back({cfColl1->second, + cftrack1.globalIndex(), + cftrack2.globalIndex(), + s.pt(), + s.eta(), + phi, + s.M(), + aod::cf2prongtrack::PhiToKKPID3Mixed}); } } } } } + + std::sort(mixedPhiCandidates.begin(), mixedPhiCandidates.end(), [](const auto& lhs, const auto& rhs) { + if (lhs.cfCollisionId != rhs.cfCollisionId) { + return lhs.cfCollisionId < rhs.cfCollisionId; + } + if (lhs.cfTrackProng0Id != rhs.cfTrackProng0Id) { + return lhs.cfTrackProng0Id < rhs.cfTrackProng0Id; + } + return lhs.cfTrackProng1Id < rhs.cfTrackProng1Id; + }); + + for (const auto& candidate : mixedPhiCandidates) { + output2ProngTracks(candidate.cfCollisionId, + candidate.cfTrackProng0Id, + candidate.cfTrackProng1Id, + candidate.pt, + candidate.eta, + candidate.phi, + candidate.invMass, + candidate.decay); + } } PROCESS_SWITCH(Filter2Prong, processDataPhiMixed, "Process mixed-event phi candidates using O2 framework", false); From 90d6bda8293cc9ba1e2ab9f065cff96548fcd342 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Sat, 25 Apr 2026 00:55:24 +0200 Subject: [PATCH 2/5] correcting the index error in mixed phi process --- PWGCF/TableProducer/filter2Prong.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index d8168cd056b..6422d30b3aa 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -19,7 +19,9 @@ #include "PWGHF/DataModel/TrackIndexSkimmingTables.h" #include "PWGLF/DataModel/LFStrangenessTables.h" +#include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/RecoDecay.h" +#include "Common/DataModel/EventSelection.h" #include "Common/DataModel/PIDResponseITS.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" @@ -29,7 +31,10 @@ #include #include #include +#include #include +#include +#include #include #include #include @@ -44,6 +49,7 @@ #include #include #include +#include #include #include #include From ac8821a05a3f19d16b1be28eeb312322abdaef77 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Sat, 25 Apr 2026 01:19:22 +0200 Subject: [PATCH 3/5] static casted to float --- PWGCF/TableProducer/filter2Prong.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index 6422d30b3aa..7fdf9df1c82 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -921,10 +921,10 @@ struct Filter2Prong { mixedPhiCandidates.push_back({cfColl1->second, cftrack1.globalIndex(), cftrack2.globalIndex(), - s.pt(), - s.eta(), + static_cast(s.pt()), + static_cast(s.eta()), phi, - s.M(), + static_cast(s.M()), aod::cf2prongtrack::PhiToKKPID3Mixed}); } } From 1d1002052010f25052c50345ae5b269645756583 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Sat, 25 Apr 2026 01:26:43 +0200 Subject: [PATCH 4/5] added header for ordered map --- PWGCF/TableProducer/filter2Prong.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index 7fdf9df1c82..bf3ecd52d03 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -55,6 +55,7 @@ #include #include #include +#include using namespace o2; using namespace o2::framework; From baba6d4176f88a10b2272a092200ec64b0c5cf01 Mon Sep 17 00:00:00 2001 From: Prottay Das Date: Sat, 25 Apr 2026 01:29:12 +0200 Subject: [PATCH 5/5] clang error --- PWGCF/TableProducer/filter2Prong.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGCF/TableProducer/filter2Prong.cxx b/PWGCF/TableProducer/filter2Prong.cxx index bf3ecd52d03..bff2a81ee2c 100644 --- a/PWGCF/TableProducer/filter2Prong.cxx +++ b/PWGCF/TableProducer/filter2Prong.cxx @@ -54,8 +54,8 @@ #include #include #include -#include #include +#include using namespace o2; using namespace o2::framework;