Skip to content

Commit 1d0df15

Browse files
authored
[PWGUD] iterate collision manually (#15825)
1 parent 7358811 commit 1d0df15

File tree

1 file changed

+64
-60
lines changed

1 file changed

+64
-60
lines changed

PWGUD/Tasks/flowMcUpc.cxx

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)