@@ -63,16 +63,16 @@ struct sigma0builder {
6363 Service<o2::ccdb::BasicCCDBManager> ccdb;
6464 ctpRateFetcher rateFetcher;
6565
66- SliceCache cache;
66+ // SliceCache cache;
6767
6868 Produces<aod::Sigma0Cores> sigma0cores; // save sigma0 candidates for analysis
6969 Produces<aod::SigmaPhotonExtras> sigmaPhotonExtras; // save sigma0 candidates for analysis
7070 Produces<aod::SigmaLambdaExtras> sigmaLambdaExtras; // save sigma0 candidates for analysis
7171 Produces<aod::SigmaMCCores> sigma0mccores;
7272
7373 // For manual sliceBy
74- PresliceUnsorted<V0DerivedMCDatas> perCollisionMCDerived = o2::aod::v0data::straCollisionId;
75- PresliceUnsorted<V0StandardDerivedDatas> perCollisionSTDDerived = o2::aod::v0data::straCollisionId;
74+ // PresliceUnsorted<V0DerivedMCDatas> perCollisionMCDerived = o2::aod::v0data::straCollisionId;
75+ // PresliceUnsorted<V0StandardDerivedDatas> perCollisionSTDDerived = o2::aod::v0data::straCollisionId;
7676 PresliceUnsorted<soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraCollLabels>> perMcCollision = aod::v0data::straMCCollisionId;
7777
7878 // pack track quality but separte also afterburner
@@ -385,7 +385,7 @@ struct sigma0builder {
385385 }
386386
387387 template <typename TCollision>
388- bool IsEventAccepted (TCollision collision, bool fillHists)
388+ bool IsEventAccepted (TCollision const & collision, bool fillHists)
389389 // check whether the collision passes our collision selections
390390 {
391391 if (fillHists)
@@ -1138,14 +1138,25 @@ struct sigma0builder {
11381138
11391139 void processMonteCarlo (soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraStamps, aod::StraCollLabels> const & collisions, V0DerivedMCDatas const & fullV0s, dauTracks const &, aod::MotherMCParts const &, soa::Join<aod::StraMCCollisions, aod::StraMCCollMults> const &, soa::Join<aod::V0MCCores, aod::V0MCCollRefs> const &)
11401140 {
1141+ // Initialize auxiliary vectors
1142+ std::vector<int > bestGammasArray;
1143+ std::vector<int > bestLambdasArray;
1144+
1145+ // brute force grouped index construction
1146+ std::vector<std::vector<int >> v0grouped (collisions.size ());
1147+
1148+ for (const auto & v0 : fullV0s) {
1149+ v0grouped[v0.straCollisionId ()].push_back (v0.globalIndex ());
1150+ }
1151+
11411152 for (const auto & coll : collisions) {
1153+ // Clear vectors
1154+ bestGammasArray.clear ();
1155+ bestLambdasArray.clear ();
11421156
11431157 if (!IsEventAccepted (coll, true ))
11441158 continue ;
11451159
1146- // Do analysis with collision-grouped V0s, retain full collision information
1147- const uint64_t collIdx = coll.globalIndex ();
1148- auto V0s = fullV0s.sliceBy (perCollisionMCDerived, collIdx);
11491160 float centrality = doPPAnalysis ? coll.centFT0M () : coll.centFT0C ();
11501161
11511162 bool fhasMCColl = false ;
@@ -1164,12 +1175,11 @@ struct sigma0builder {
11641175 histos.fill (HIST (" GeneralQA/hCentralityVsInteractionRate" ), centrality, interactionRate);
11651176 }
11661177
1167- std::vector<int > bestGammasArray;
1168- std::vector<int > bestLambdasArray;
1169-
11701178 // _______________________________________________
11711179 // V0s loop
1172- for (auto & v0 : V0s) {
1180+ for (size_t i = 0 ; i < v0grouped[coll.globalIndex ()].size (); i++) {
1181+ auto v0 = fullV0s.rawIteratorAt (v0grouped[coll.globalIndex ()][i]);
1182+
11731183 if (!v0.has_v0MCCore ())
11741184 continue ;
11751185
@@ -1317,14 +1327,25 @@ struct sigma0builder {
13171327
13181328 void processRealData (soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraStamps> const & collisions, V0StandardDerivedDatas const & fullV0s, dauTracks const &)
13191329 {
1330+ // Initialize auxiliary vectors
1331+ std::vector<int > bestGammasArray;
1332+ std::vector<int > bestLambdasArray;
1333+
1334+ // brute force grouped index construction
1335+ std::vector<std::vector<int >> v0grouped (collisions.size ());
1336+
1337+ for (const auto & v0 : fullV0s) {
1338+ v0grouped[v0.straCollisionId ()].push_back (v0.globalIndex ());
1339+ }
1340+
13201341 for (const auto & coll : collisions) {
1342+ // Clear vectors
1343+ bestGammasArray.clear ();
1344+ bestLambdasArray.clear ();
13211345
13221346 if (!IsEventAccepted (coll, true ))
13231347 continue ;
13241348
1325- // Do analysis with collision-grouped V0s, retain full collision information
1326- const uint64_t collIdx = coll.globalIndex ();
1327- auto V0s = fullV0s.sliceBy (perCollisionSTDDerived, collIdx);
13281349 float centrality = doPPAnalysis ? coll.centFT0M () : coll.centFT0C ();
13291350
13301351 // _______________________________________________
@@ -1339,12 +1360,10 @@ struct sigma0builder {
13391360 histos.fill (HIST (" GeneralQA/hCentralityVsInteractionRate" ), centrality, interactionRate);
13401361 }
13411362
1342- std::vector<int > bestGammasArray;
1343- std::vector<int > bestLambdasArray;
1344-
13451363 // _______________________________________________
13461364 // V0s loop
1347- for (auto & v0 : V0s) {
1365+ for (size_t i = 0 ; i < v0grouped[coll.globalIndex ()].size (); i++) {
1366+ auto v0 = fullV0s.rawIteratorAt (v0grouped[coll.globalIndex ()][i]);
13481367 if (processPhotonCandidate (v0, coll)) // selecting photons
13491368 bestGammasArray.push_back (v0.globalIndex ()); // Save indices of best gamma candidates
13501369
0 commit comments