From f4c33be059971b640e660414395fecc685aaed4b Mon Sep 17 00:00:00 2001 From: louisemillot Date: Mon, 7 Sep 2026 10:56:21 +0200 Subject: [PATCH 1/4] adding track occupancy --- PWGJE/TableProducer/slimTablesProducer.cxx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/PWGJE/TableProducer/slimTablesProducer.cxx b/PWGJE/TableProducer/slimTablesProducer.cxx index 58fea43fdae..c20599160a8 100644 --- a/PWGJE/TableProducer/slimTablesProducer.cxx +++ b/PWGJE/TableProducer/slimTablesProducer.cxx @@ -108,7 +108,8 @@ struct SlimTablesProducer { Configurable trackSelections{"trackSelections", "globalTracks", "set track selections; other option: uniformTracks"}; Configurable 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"}; Configurable applyRCTSelections{"applyRCTSelections", true, "decide to apply RCT selections"}; - + Configurable 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)"}; + Configurable 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)"}; std::vector eventSelectionBits; Service pdgDatabase; int trackSelection = -1; @@ -125,12 +126,14 @@ struct SlimTablesProducer { auto hColl = histos.get(HIST("h_collisions")); hColl->GetXaxis()->SetBinLabel(1, "All"); hColl->GetXaxis()->SetBinLabel(2, "eventSelection"); + hColl->GetXaxis()->SetBinLabel(3, "occupancycut"); histos.add("h_mcCollMCD_counts_weight", "MC event status;event status;weighted entries", {HistType::kTH1F, {{5, 0.0, 5.0}}}); auto hMCD = histos.get(HIST("h_mcCollMCD_counts_weight")); hMCD->GetXaxis()->SetBinLabel(1, "All"); hMCD->GetXaxis()->SetBinLabel(2, "hasMcCollision"); hMCD->GetXaxis()->SetBinLabel(3, "selectCollision"); + hMCD->GetXaxis()->SetBinLabel(4, "occupancycut"); histos.add("h_mcCollMCP_counts_weight", "MC event status;event status;weighted entries", {HistType::kTH1F, {{7, 0.0, 7.0}}}); auto hMCP = histos.get(HIST("h_mcCollMCP_counts_weight")); @@ -171,6 +174,10 @@ struct SlimTablesProducer { return; } histos.fill(HIST("h_collisions"), 1.5); + if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { + return; + } + histos.fill(HIST("h_collisions"), 2.5); slimCollisions(collision.posZ(), collision.collisionTime(), 1.0); auto slimCollIndex = slimCollisions.lastIndex(); for (const auto& track : tracks) { @@ -211,6 +218,11 @@ struct SlimTablesProducer { continue; } histos.fill(HIST("h_mcCollMCD_counts_weight"), 2.5, eventWeightMC); + // occupancy cut only applied to the reconstructed (MCD) collision, not to the mcCollision + if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { + continue; + } + histos.fill(HIST("h_mcCollMCD_counts_weight"), 3.5, eventWeightMC); slimCollisions(collision.posZ(), collision.collisionTime(), eventWeight); auto slimCollIndex = slimCollisions.lastIndex(); auto slicedTracks = tracks.sliceBy(perCollisionTracks, collision.globalIndex()); // tracks associated to the rec collision From 72941290dfeb4e7a4a684307d089232d767a6d08 Mon Sep 17 00:00:00 2001 From: louisemillot Date: Mon, 7 Sep 2026 12:36:17 +0200 Subject: [PATCH 2/4] fill histo --- PWGJE/TableProducer/slimTablesProducer.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/PWGJE/TableProducer/slimTablesProducer.cxx b/PWGJE/TableProducer/slimTablesProducer.cxx index c20599160a8..0f7c71ac574 100644 --- a/PWGJE/TableProducer/slimTablesProducer.cxx +++ b/PWGJE/TableProducer/slimTablesProducer.cxx @@ -123,6 +123,8 @@ struct SlimTablesProducer { histos.add("h_collisions", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}}); histos.add("h2_centrality_collisions", "event status vs. centrality;entries;centrality", {HistType::kTH2F, {centralityAxis, {4, 0.0, 4.0}}}, doSumw2); + histos.add("h_occupancy_raw", "occupancy;occupancy;entries", {HistType::kTH1F, {{200, -10, 10000}}}); + auto hColl = histos.get(HIST("h_collisions")); hColl->GetXaxis()->SetBinLabel(1, "All"); hColl->GetXaxis()->SetBinLabel(2, "eventSelection"); @@ -218,6 +220,7 @@ struct SlimTablesProducer { continue; } histos.fill(HIST("h_mcCollMCD_counts_weight"), 2.5, eventWeightMC); + histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange()); // <-- ici // occupancy cut only applied to the reconstructed (MCD) collision, not to the mcCollision if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { continue; From 53aca84e87af124800dd1c6272817e36b117cac3 Mon Sep 17 00:00:00 2001 From: louisemillot Date: Mon, 7 Sep 2026 18:12:32 +0200 Subject: [PATCH 3/4] fill histo occupancy --- PWGJE/TableProducer/slimTablesProducer.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PWGJE/TableProducer/slimTablesProducer.cxx b/PWGJE/TableProducer/slimTablesProducer.cxx index 0f7c71ac574..4b0f2fa1241 100644 --- a/PWGJE/TableProducer/slimTablesProducer.cxx +++ b/PWGJE/TableProducer/slimTablesProducer.cxx @@ -176,6 +176,7 @@ struct SlimTablesProducer { return; } histos.fill(HIST("h_collisions"), 1.5); + histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange()); if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { return; } @@ -220,7 +221,7 @@ struct SlimTablesProducer { continue; } histos.fill(HIST("h_mcCollMCD_counts_weight"), 2.5, eventWeightMC); - histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange()); // <-- ici + histos.fill(HIST("h_occupancy_raw"), collision.trackOccupancyInTimeRange()); // occupancy cut only applied to the reconstructed (MCD) collision, not to the mcCollision if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) { continue; From 6e797fc5403709891baf5ada3a14a11cda0839b0 Mon Sep 17 00:00:00 2001 From: louisemillot Date: Tue, 8 Sep 2026 10:33:04 +0200 Subject: [PATCH 4/4] PWGJE: fix pdgDatabase init and missing braces (clang-tidy) --- PWGJE/TableProducer/slimTablesProducer.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/PWGJE/TableProducer/slimTablesProducer.cxx b/PWGJE/TableProducer/slimTablesProducer.cxx index 4b0f2fa1241..cbaf139646e 100644 --- a/PWGJE/TableProducer/slimTablesProducer.cxx +++ b/PWGJE/TableProducer/slimTablesProducer.cxx @@ -111,7 +111,7 @@ struct SlimTablesProducer { Configurable 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)"}; Configurable 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)"}; std::vector eventSelectionBits; - Service pdgDatabase; + Service pdgDatabase{}; int trackSelection = -1; bool doSumw2 = false; @@ -231,21 +231,25 @@ struct SlimTablesProducer { auto slimCollIndex = slimCollisions.lastIndex(); auto slicedTracks = tracks.sliceBy(perCollisionTracks, collision.globalIndex()); // tracks associated to the rec collision for (const auto& track : slicedTracks) { - if (!jetderiveddatautilities::selectTrack(track, trackSelection)) + if (!jetderiveddatautilities::selectTrack(track, trackSelection)) { continue; + } histos.fill(HIST("Ntracks_pT"), track.pt(), eventWeight); slimTracks(slimCollIndex, track.px(), track.py(), track.pz()); } slimMcCollisions(mccollision.posZ(), eventWeightMC); auto slimMcCollIndex = slimMcCollisions.lastIndex(); for (const auto& particle : particles) { - if (!particle.isPhysicalPrimary()) + if (!particle.isPhysicalPrimary()) { continue; + } auto pdgParticle = pdgDatabase->GetParticle(particle.pdgCode()); - if (!pdgParticle) + if (!pdgParticle) { continue; - if (pdgParticle->Charge() == 0) // keep charged particles, exclude neutrals + } + if (pdgParticle->Charge() == 0) { // keep charged particles, exclude neutrals continue; + } histos.fill(HIST("Nparticles_pT"), particle.pt(), eventWeightMC); slimParticles(slimMcCollIndex, particle.px(), particle.py(), particle.pz(), particle.energy()); }