@@ -111,88 +111,92 @@ struct FlowMcUpc {
111111
112112 PresliceUnsorted<aod::UDMcParticles> partPerMcCollision = aod::udmcparticle::udMcCollisionId;
113113
114- void processMCTrue (aod::UDMcCollisions::iterator const & mcCollision , aod::UDMcParticles const & mcParts, aod::BCs const & bcs)
114+ void processMCTrue (aod::UDMcCollisions const & mcCollisions , aod::UDMcParticles const & mcParts, aod::BCs const & bcs)
115115 {
116116 if (bcs.size () == 0 ) {
117117 return ;
118118 }
119- histos.fill (HIST (" mcEventCounter" ), 0.5 );
120- float imp = mcCollision.impactParameter ();
121- float vtxz = mcCollision.posZ ();
119+ for (const auto & mcCollision : mcCollisions) {
120+ histos.fill (HIST (" mcEventCounter" ), 0.5 );
121+ float imp = mcCollision.impactParameter ();
122+ float vtxz = mcCollision.posZ ();
122123
123- if (imp >= minB && imp <= maxB) {
124- // event within range
125- histos.fill (HIST (" hImpactParameter" ), imp);
124+ if (imp >= minB && imp <= maxB) {
125+ // event within range
126+ histos.fill (HIST (" hImpactParameter" ), imp);
126127
127- auto const & tempParts = mcParts.sliceBy (partPerMcCollision, static_cast <int64_t >(mcCollision.globalIndex ()));
128+ auto const & tempParts = mcParts.sliceBy (partPerMcCollision, static_cast <int64_t >(mcCollision.globalIndex ()));
128129
129- for (auto const & mcParticle : tempParts) {
130- auto momentum = std::array<double , 3 >{mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
131- int pdgCode = std::abs (mcParticle.pdgCode ());
130+ for (auto const & mcParticle : tempParts) {
131+ auto momentum = std::array<double , 3 >{mcParticle.px (), mcParticle.py (), mcParticle.pz ()};
132+ int pdgCode = std::abs (mcParticle.pdgCode ());
132133
133- double pt = RecoDecay::pt (momentum);
134- double eta = RecoDecay::eta (momentum);
134+ double pt = RecoDecay::pt (momentum);
135+ double eta = RecoDecay::eta (momentum);
135136
136- if (pdgCode != PDG_t::kElectron && pdgCode != PDG_t::kMuonMinus && pdgCode != PDG_t::kPiPlus && pdgCode != PDG_t::kKPlus && pdgCode != PDG_t::kProton )
137- continue ;
137+ if (pdgCode != PDG_t::kElectron && pdgCode != PDG_t::kMuonMinus && pdgCode != PDG_t::kPiPlus && pdgCode != PDG_t::kKPlus && pdgCode != PDG_t::kProton )
138+ continue ;
138139
139- if (!mcParticle.isPhysicalPrimary ())
140- continue ;
141- if (std::fabs (eta) > cfgCutEta) // main acceptance
142- continue ;
140+ if (!mcParticle.isPhysicalPrimary ())
141+ continue ;
142+ if (std::fabs (eta) > cfgCutEta) // main acceptance
143+ continue ;
143144
144- histos.fill (HIST (" hPtMCGen" ), pt);
145- histos.fill (HIST (" hEtaPtVtxzMCGen" ), eta, pt, vtxz);
145+ histos.fill (HIST (" hPtMCGen" ), pt);
146+ histos.fill (HIST (" hEtaPtVtxzMCGen" ), eta, pt, vtxz);
147+ }
146148 }
147149 }
148150 }
149151 PROCESS_SWITCH (FlowMcUpc, processMCTrue, " process pure simulation information" , true );
150152
151153 using MCRecoTracks = soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA, aod::UDMcTrackLabels>;
152- using MCRecoCollisions = soa::Join<aod::UDCollisions, aod::SGCollisions, aod:: UDCollisionSelExtras, aod::UDCollisionsSels, aod::UDZdcsReduced, aod::UDMcCollsLabels>;
154+ using MCRecoCollisions = soa::Join<aod::UDCollisions, aod::UDCollisionSelExtras, aod::UDCollisionsSels, aod::UDZdcsReduced, aod::UDMcCollsLabels>;
153155
154156 // PresliceUnsorted<MCRecoTracks> trackPerMcParticle = aod::udmctracklabel::udMcParticleId;
155157 Preslice<MCRecoTracks> trackPerCollision = aod::udtrack::udCollisionId; // sorted preslice used because the pair track-collision is already sorted in processDataSG function
156158
157- void processReco (MCRecoCollisions::iterator const & collision , MCRecoTracks const & tracks)
159+ void processReco (MCRecoCollisions const & collisions , MCRecoTracks const & tracks)
158160 {
159- histos.fill (HIST (" RecoProcessEventCounter" ), 0.5 );
160- // if (!eventSelected(collision))
161- // return;
162- histos.fill (HIST (" RecoProcessEventCounter" ), 1.5 );
163- if (!collision.has_udMcCollision ())
164- return ;
165- histos.fill (HIST (" RecoProcessEventCounter" ), 2.5 );
166- if (tracks.size () < 1 )
167- return ;
168- histos.fill (HIST (" RecoProcessEventCounter" ), 3.5 );
169-
170- float vtxz = collision.posZ ();
171-
172- auto const & tempTracks = tracks.sliceBy (trackPerCollision, static_cast <int64_t >(collision.globalIndex ()));
173-
174- for (const auto & track : tempTracks) {
175- // focus on bulk: e, mu, pi, k, p
176- auto momentum = std::array<double , 3 >{track.px (), track.py (), track.pz ()};
177- double pt = RecoDecay::pt (momentum);
178- double eta = RecoDecay::eta (momentum);
179- // double phi = RecoDecay::phi(momentum);
180- if (!trackSelected (track) || (!track.has_udMcParticle ()))
181- continue ;
182- auto mcParticle = track.udMcParticle ();
183- int pdgCode = std::abs (mcParticle.pdgCode ());
184-
185- // double pt = recoMC.Pt();
186- // double eta = recoMC.Eta();
187- if (pdgCode != PDG_t::kElectron && pdgCode != PDG_t::kMuonMinus && pdgCode != PDG_t::kPiPlus && pdgCode != PDG_t::kKPlus && pdgCode != PDG_t::kProton )
188- continue ;
189- if (std::fabs (eta) > cfgCutEta) // main acceptance
190- continue ;
191- if (!mcParticle.isPhysicalPrimary ())
192- continue ;
193-
194- histos.fill (HIST (" hPtReco" ), pt);
195- histos.fill (HIST (" hEtaPtVtxzMCReco" ), eta, pt, vtxz);
161+ for (const auto & collision : collisions) {
162+ histos.fill (HIST (" RecoProcessEventCounter" ), 0.5 );
163+ // if (!eventSelected(collision))
164+ // return;
165+ histos.fill (HIST (" RecoProcessEventCounter" ), 1.5 );
166+ if (!collision.has_udMcCollision ())
167+ return ;
168+ histos.fill (HIST (" RecoProcessEventCounter" ), 2.5 );
169+ if (tracks.size () < 1 )
170+ return ;
171+ histos.fill (HIST (" RecoProcessEventCounter" ), 3.5 );
172+
173+ float vtxz = collision.posZ ();
174+
175+ auto const & tempTracks = tracks.sliceBy (trackPerCollision, static_cast <int64_t >(collision.globalIndex ()));
176+
177+ for (const auto & track : tempTracks) {
178+ // focus on bulk: e, mu, pi, k, p
179+ auto momentum = std::array<double , 3 >{track.px (), track.py (), track.pz ()};
180+ double pt = RecoDecay::pt (momentum);
181+ double eta = RecoDecay::eta (momentum);
182+ // double phi = RecoDecay::phi(momentum);
183+ if (!trackSelected (track) || (!track.has_udMcParticle ()))
184+ continue ;
185+ auto mcParticle = track.udMcParticle ();
186+ int pdgCode = std::abs (mcParticle.pdgCode ());
187+
188+ // double pt = recoMC.Pt();
189+ // double eta = recoMC.Eta();
190+ if (pdgCode != PDG_t::kElectron && pdgCode != PDG_t::kMuonMinus && pdgCode != PDG_t::kPiPlus && pdgCode != PDG_t::kKPlus && pdgCode != PDG_t::kProton )
191+ continue ;
192+ if (std::fabs (eta) > cfgCutEta) // main acceptance
193+ continue ;
194+ if (!mcParticle.isPhysicalPrimary ())
195+ continue ;
196+
197+ histos.fill (HIST (" hPtReco" ), pt);
198+ histos.fill (HIST (" hEtaPtVtxzMCReco" ), eta, pt, vtxz);
199+ }
196200 }
197201 }
198202 PROCESS_SWITCH (FlowMcUpc, processReco, " process reconstructed information" , true );
0 commit comments