diff --git a/PWGLF/TableProducer/Strangeness/sigma0builder.cxx b/PWGLF/TableProducer/Strangeness/sigma0builder.cxx index acdae0bca7c..32ed292dddd 100644 --- a/PWGLF/TableProducer/Strangeness/sigma0builder.cxx +++ b/PWGLF/TableProducer/Strangeness/sigma0builder.cxx @@ -63,7 +63,7 @@ struct sigma0builder { Service ccdb; ctpRateFetcher rateFetcher; - SliceCache cache; + // SliceCache cache; Produces sigma0cores; // save sigma0 candidates for analysis Produces sigmaPhotonExtras; // save sigma0 candidates for analysis @@ -71,8 +71,8 @@ struct sigma0builder { Produces sigma0mccores; // For manual sliceBy - PresliceUnsorted perCollisionMCDerived = o2::aod::v0data::straCollisionId; - PresliceUnsorted perCollisionSTDDerived = o2::aod::v0data::straCollisionId; + // PresliceUnsorted perCollisionMCDerived = o2::aod::v0data::straCollisionId; + // PresliceUnsorted perCollisionSTDDerived = o2::aod::v0data::straCollisionId; PresliceUnsorted> perMcCollision = aod::v0data::straMCCollisionId; // pack track quality but separte also afterburner @@ -385,7 +385,7 @@ struct sigma0builder { } template - bool IsEventAccepted(TCollision collision, bool fillHists) + bool IsEventAccepted(TCollision const& collision, bool fillHists) // check whether the collision passes our collision selections { if (fillHists) @@ -1138,14 +1138,25 @@ struct sigma0builder { void processMonteCarlo(soa::Join const& collisions, V0DerivedMCDatas const& fullV0s, dauTracks const&, aod::MotherMCParts const&, soa::Join const&, soa::Join const&) { + // Initialize auxiliary vectors + std::vector bestGammasArray; + std::vector bestLambdasArray; + + // brute force grouped index construction + std::vector> v0grouped(collisions.size()); + + for (const auto& v0 : fullV0s) { + v0grouped[v0.straCollisionId()].push_back(v0.globalIndex()); + } + for (const auto& coll : collisions) { + // Clear vectors + bestGammasArray.clear(); + bestLambdasArray.clear(); if (!IsEventAccepted(coll, true)) continue; - // Do analysis with collision-grouped V0s, retain full collision information - const uint64_t collIdx = coll.globalIndex(); - auto V0s = fullV0s.sliceBy(perCollisionMCDerived, collIdx); float centrality = doPPAnalysis ? coll.centFT0M() : coll.centFT0C(); bool fhasMCColl = false; @@ -1164,12 +1175,11 @@ struct sigma0builder { histos.fill(HIST("GeneralQA/hCentralityVsInteractionRate"), centrality, interactionRate); } - std::vector bestGammasArray; - std::vector bestLambdasArray; - //_______________________________________________ // V0s loop - for (auto& v0 : V0s) { + for (size_t i = 0; i < v0grouped[coll.globalIndex()].size(); i++) { + auto v0 = fullV0s.rawIteratorAt(v0grouped[coll.globalIndex()][i]); + if (!v0.has_v0MCCore()) continue; @@ -1317,14 +1327,25 @@ struct sigma0builder { void processRealData(soa::Join const& collisions, V0StandardDerivedDatas const& fullV0s, dauTracks const&) { + // Initialize auxiliary vectors + std::vector bestGammasArray; + std::vector bestLambdasArray; + + // brute force grouped index construction + std::vector> v0grouped(collisions.size()); + + for (const auto& v0 : fullV0s) { + v0grouped[v0.straCollisionId()].push_back(v0.globalIndex()); + } + for (const auto& coll : collisions) { + // Clear vectors + bestGammasArray.clear(); + bestLambdasArray.clear(); if (!IsEventAccepted(coll, true)) continue; - // Do analysis with collision-grouped V0s, retain full collision information - const uint64_t collIdx = coll.globalIndex(); - auto V0s = fullV0s.sliceBy(perCollisionSTDDerived, collIdx); float centrality = doPPAnalysis ? coll.centFT0M() : coll.centFT0C(); //_______________________________________________ @@ -1339,12 +1360,10 @@ struct sigma0builder { histos.fill(HIST("GeneralQA/hCentralityVsInteractionRate"), centrality, interactionRate); } - std::vector bestGammasArray; - std::vector bestLambdasArray; - //_______________________________________________ // V0s loop - for (auto& v0 : V0s) { + for (size_t i = 0; i < v0grouped[coll.globalIndex()].size(); i++) { + auto v0 = fullV0s.rawIteratorAt(v0grouped[coll.globalIndex()][i]); if (processPhotonCandidate(v0, coll)) // selecting photons bestGammasArray.push_back(v0.globalIndex()); // Save indices of best gamma candidates