@@ -109,6 +109,8 @@ struct FlowMcUpc {
109109 return true ;
110110 }
111111
112+ PresliceUnsorted<aod::UDMcParticles> partPerMcCollision = aod::udmcparticle::udMcCollisionId;
113+
112114 void processMCTrue (aod::UDMcCollisions::iterator const & mcCollision, McParts const & mcParts, aod::BCs const & bcs)
113115 {
114116 if (bcs.size () == 0 ) {
@@ -122,7 +124,9 @@ struct FlowMcUpc {
122124 // event within range
123125 histos.fill (HIST (" hImpactParameter" ), imp);
124126
125- for (auto const & mcParticle : mcParts) {
127+ auto const & tempParts = mcParts.sliceBy (partPerMcCollision, static_cast <int64_t >(mcCollision.globalIndex ()));
128+
129+ for (auto const & mcParticle : tempParts) {
126130 auto momentum = std::array<double , 3 >{mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
127131 int pdgCode = std::abs (mcParticle.pdgCode ());
128132
@@ -147,6 +151,9 @@ struct FlowMcUpc {
147151 using MCRecoTracks = soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA, aod::UDMcTrackLabels>;
148152 using MCRecoCollisions = soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionSelExtras, aod::UDCollisionsSels, aod::UDZdcsReduced, aod::UDMcCollsLabels>;
149153
154+ // PresliceUnsorted<MCRecoTracks> trackPerMcParticle = aod::udmctracklabel::udMcParticleId;
155+ Preslice<MCRecoTracks> trackPerCollision = aod::udtrack::udCollisionId; // sorted preslice used because the pair track-collision is already sorted in processDataSG function
156+
150157 void processReco (MCRecoCollisions::iterator const & collision, MCRecoTracks const & tracks)
151158 {
152159 histos.fill (HIST (" RecoProcessEventCounter" ), 0.5 );
@@ -162,7 +169,9 @@ struct FlowMcUpc {
162169
163170 float vtxz = collision.posZ ();
164171
165- for (const auto & track : tracks) {
172+ auto const & tempTracks = tracks.sliceBy (trackPerCollision, static_cast <int64_t >(collision.globalIndex ()));
173+
174+ for (const auto & track : tempTracks) {
166175 // focus on bulk: e, mu, pi, k, p
167176 auto momentum = std::array<double , 3 >{track.px (), track.py (), track.pz ()};
168177 double pt = RecoDecay::pt (momentum);
0 commit comments