Skip to content

Commit dc22c93

Browse files
authored
[PWGJE] add track occupancy selection to SlimTablesProducer (#17818)
1 parent ffce6c8 commit dc22c93

1 file changed

Lines changed: 26 additions & 6 deletions

File tree

PWGJE/TableProducer/slimTablesProducer.cxx

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,10 @@ struct SlimTablesProducer {
108108
Configurable<std::string> trackSelections{"trackSelections", "globalTracks", "set track selections; other option: uniformTracks"};
109109
Configurable<bool> skipMBGapEvents{"skipMBGapEvents", false, "flag to choose to reject min. bias gap events; jet-level rejection can also be applied at the jet finder level for jets only, here rejection is applied for collision and track process functions for the first time, and on jets in case it was set to false at the jet finder level"};
110110
Configurable<bool> applyRCTSelections{"applyRCTSelections", true, "decide to apply RCT selections"};
111-
111+
Configurable<int> trackOccupancyInTimeRangeMax{"trackOccupancyInTimeRangeMax", 999999, "maximum track occupancy of tracks in neighbouring collisions in a given time range; only applied to reconstructed collisions (data and mcd jets), not mc collisions (mcp jets)"};
112+
Configurable<int> trackOccupancyInTimeRangeMin{"trackOccupancyInTimeRangeMin", -999999, "minimum track occupancy of tracks in neighbouring collisions in a given time range; only applied to reconstructed collisions (data and mcd jets), not mc collisions (mcp jets)"};
112113
std::vector<int> eventSelectionBits;
113-
Service<o2::framework::O2DatabasePDG> pdgDatabase;
114+
Service<o2::framework::O2DatabasePDG> pdgDatabase{};
114115
int trackSelection = -1;
115116
bool doSumw2 = false;
116117

@@ -122,15 +123,19 @@ struct SlimTablesProducer {
122123

123124
histos.add("h_collisions", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}});
124125
histos.add("h2_centrality_collisions", "event status vs. centrality;entries;centrality", {HistType::kTH2F, {centralityAxis, {4, 0.0, 4.0}}}, doSumw2);
126+
histos.add("h_occupancy_raw", "occupancy;occupancy;entries", {HistType::kTH1F, {{200, -10, 10000}}});
127+
125128
auto hColl = histos.get<TH1>(HIST("h_collisions"));
126129
hColl->GetXaxis()->SetBinLabel(1, "All");
127130
hColl->GetXaxis()->SetBinLabel(2, "eventSelection");
131+
hColl->GetXaxis()->SetBinLabel(3, "occupancycut");
128132

129133
histos.add("h_mcCollMCD_counts_weight", "MC event status;event status;weighted entries", {HistType::kTH1F, {{5, 0.0, 5.0}}});
130134
auto hMCD = histos.get<TH1>(HIST("h_mcCollMCD_counts_weight"));
131135
hMCD->GetXaxis()->SetBinLabel(1, "All");
132136
hMCD->GetXaxis()->SetBinLabel(2, "hasMcCollision");
133137
hMCD->GetXaxis()->SetBinLabel(3, "selectCollision");
138+
hMCD->GetXaxis()->SetBinLabel(4, "occupancycut");
134139

135140
histos.add("h_mcCollMCP_counts_weight", "MC event status;event status;weighted entries", {HistType::kTH1F, {{7, 0.0, 7.0}}});
136141
auto hMCP = histos.get<TH1>(HIST("h_mcCollMCP_counts_weight"));
@@ -171,6 +176,11 @@ struct SlimTablesProducer {
171176
return;
172177
}
173178
histos.fill(HIST("h_collisions"), 1.5);
179+
histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange());
180+
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
181+
return;
182+
}
183+
histos.fill(HIST("h_collisions"), 2.5);
174184
slimCollisions(collision.posZ(), collision.collisionTime(), 1.0);
175185
auto slimCollIndex = slimCollisions.lastIndex();
176186
for (const auto& track : tracks) {
@@ -211,25 +221,35 @@ struct SlimTablesProducer {
211221
continue;
212222
}
213223
histos.fill(HIST("h_mcCollMCD_counts_weight"), 2.5, eventWeightMC);
224+
histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange());
225+
// occupancy cut only applied to the reconstructed (MCD) collision, not to the mcCollision
226+
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
227+
continue;
228+
}
229+
histos.fill(HIST("h_mcCollMCD_counts_weight"), 3.5, eventWeightMC);
214230
slimCollisions(collision.posZ(), collision.collisionTime(), eventWeight);
215231
auto slimCollIndex = slimCollisions.lastIndex();
216232
auto slicedTracks = tracks.sliceBy(perCollisionTracks, collision.globalIndex()); // tracks associated to the rec collision
217233
for (const auto& track : slicedTracks) {
218-
if (!jetderiveddatautilities::selectTrack(track, trackSelection))
234+
if (!jetderiveddatautilities::selectTrack(track, trackSelection)) {
219235
continue;
236+
}
220237
histos.fill(HIST("Ntracks_pT"), track.pt(), eventWeight);
221238
slimTracks(slimCollIndex, track.px(), track.py(), track.pz());
222239
}
223240
slimMcCollisions(mccollision.posZ(), eventWeightMC);
224241
auto slimMcCollIndex = slimMcCollisions.lastIndex();
225242
for (const auto& particle : particles) {
226-
if (!particle.isPhysicalPrimary())
243+
if (!particle.isPhysicalPrimary()) {
227244
continue;
245+
}
228246
auto pdgParticle = pdgDatabase->GetParticle(particle.pdgCode());
229-
if (!pdgParticle)
247+
if (!pdgParticle) {
230248
continue;
231-
if (pdgParticle->Charge() == 0) // keep charged particles, exclude neutrals
249+
}
250+
if (pdgParticle->Charge() == 0) { // keep charged particles, exclude neutrals
232251
continue;
252+
}
233253
histos.fill(HIST("Nparticles_pT"), particle.pt(), eventWeightMC);
234254
slimParticles(slimMcCollIndex, particle.px(), particle.py(), particle.pz(), particle.energy());
235255
}

0 commit comments

Comments
 (0)