From 86dad2195df90ab5b2e7d644846ca5c47e08ce49 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Wed, 5 Aug 2026 01:55:59 -0400 Subject: [PATCH 1/2] Add time reclustering, plus centrality selection and event subtraction for light/heavy-ion processing --- PWGJE/Tasks/jetLundPlane.cxx | 52 +++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/PWGJE/Tasks/jetLundPlane.cxx b/PWGJE/Tasks/jetLundPlane.cxx index ade6f2ed3b9..5974d65ad43 100644 --- a/PWGJE/Tasks/jetLundPlane.cxx +++ b/PWGJE/Tasks/jetLundPlane.cxx @@ -58,11 +58,13 @@ DECLARE_SOA_COLUMN(MiniCollTag, miniCollTag, uint8_t); DECLARE_SOA_COLUMN(MiniCollMcCollisionId, miniCollMcCollisionId, int64_t); DECLARE_SOA_COLUMN(MiniCollWeight, miniCollWeight, float); DECLARE_SOA_COLUMN(MiniCollPtHard, miniCollPtHard, float); +DECLARE_SOA_COLUMN(MiniCollCentrality, miniCollCentrality, float); DECLARE_SOA_TABLE(MiniCollisions, "AOD", "MINICOLL", MiniCollTag, MiniCollMcCollisionId, MiniCollWeight, - MiniCollPtHard); + MiniCollPtHard, + MiniCollCentrality); // MiniJets -> MiniCollisions DECLARE_SOA_INDEX_COLUMN_CUSTOM(MiniCollision, miniCollision, "MINICOLLS"); @@ -283,6 +285,9 @@ struct JetLundPlaneUnfolding { Configurable jetEtaMax{"jetEtaMax", 0.5f, "max jet eta"}; Configurable jetR{"jetR", 0.4f, "jet radius (must match derived tables)"}; Configurable trackPtMin{"trackPtMin", 0.15f, "min constituent pT"}; + Configurable centralityMin{"centralityMin", 0.f, "minimum FT0M centrality for subtracted data"}; + Configurable centralityMax{"centralityMax", 100.f, "maximum FT0M centrality for subtracted data"}; + Configurable reclusteringAlgorithm{"reclusteringAlgorithm", 0, "reclustering algorithm: 0 = C/A, 1 = generalized-kT p=0.5 (tau)"}; Configurable nBinsJetPt{"nBinsJetPt", 200, "jet pT bins"}; Configurable jetPtMax{"jetPtMax", 200.f, "jet pT max"}; @@ -312,7 +317,7 @@ struct JetLundPlaneUnfolding { Produces outMiniSplittingsAll; Produces outMiniJetMatches; - // FastJet reclustering setup (C/A) + // FastJet reclustering setup JetFinder reclusterer; std::vector jetReclustered; @@ -403,7 +408,13 @@ struct JetLundPlaneUnfolding { // reclusterer config reclusterer.isReclustering = true; - reclusterer.algorithm = fastjet::cambridge_algorithm; + if (reclusteringAlgorithm.value == 0) { + reclusterer.algorithm = fastjet::cambridge_algorithm; + } else if (reclusteringAlgorithm.value == 1) { + reclusterer.algorithm = fastjet::genkt_algorithm; + reclusterer.fastjetExtraParam = 0.5; + } + reclusterer.jetR = 1.0; // recluster radius for declustering tree reclusterer.recombScheme = fastjet::E_scheme; reclusterer.strategy = fastjet::Best; @@ -422,6 +433,8 @@ struct JetLundPlaneUnfolding { // Type aliases using RecoJets = soa::Join; + using SubtractedRecoJets = soa::Join; using DetJetsMatched = soa::Join; @@ -537,15 +550,14 @@ struct JetLundPlaneUnfolding { } // DATA / RECO PROCESSING - void processData(soa::Filtered::iterator const&, - soa::Filtered const& jets, - aod::JetTracks const& tracks) + template + void processDataImpl(JetTableT const& jets, ConstituentTableT const& tracks, float centrality) { registry.fill(HIST("hEventCount"), 0.5); int miniCollIdx = -1; if (writeMiniAOD.value) { - outMiniCollisions(static_cast(0), int64_t{-1}, 1.f, -1.f); + outMiniCollisions(static_cast(0), int64_t{-1}, 1.f, -1.f, centrality); miniCollIdx = outMiniCollisions.lastIndex(); } for (auto const& jet : jets) { @@ -570,7 +582,27 @@ struct JetLundPlaneUnfolding { } } } - PROCESS_SWITCH(JetLundPlaneUnfolding, processData, "Reco/data Lund + jet spectra", true); + + void processData(soa::Filtered::iterator const&, + soa::Filtered const& jets, + aod::JetTracks const& tracks) + { + processDataImpl(jets, tracks, -1.f); + } + PROCESS_SWITCH(JetLundPlaneUnfolding, processData, "Unsubtracted reco/data Lund + jet spectra", true); + + void processDataEventWiseSubCentrality(soa::Filtered::iterator const& collision, + soa::Filtered const& jets, + aod::JetTracksSub const& tracks) + { + const float centrality = collision.centFT0M(); + if (centrality < centralityMin.value || centrality >= centralityMax.value) { + return; + } + processDataImpl(jets, tracks, centrality); + } + PROCESS_SWITCH(JetLundPlaneUnfolding, processDataEventWiseSubCentrality, + "Event-wise constituent-subtracted reco/data Lund with FT0M centrality", false); // MC PROCESSING (det + part + response) @@ -651,7 +683,7 @@ struct JetLundPlaneUnfolding { int partMiniCollIdx = -1; auto collIt = partMiniCollByKey.find(partCollKey); if (collIt == partMiniCollByKey.end()) { - outMiniCollisions(static_cast(0), partMcInfo.mcCollisionId, partMcInfo.weight, partMcInfo.ptHard); + outMiniCollisions(static_cast(0), partMcInfo.mcCollisionId, partMcInfo.weight, partMcInfo.ptHard, -1.f); partMiniCollIdx = outMiniCollisions.lastIndex(); partMiniCollByKey.emplace(partCollKey, partMiniCollIdx); } else { @@ -730,7 +762,7 @@ struct JetLundPlaneUnfolding { int detMiniCollIdx = -1; auto collIt = detMiniCollByKey.find(detCollKey); if (collIt == detMiniCollByKey.end()) { - outMiniCollisions(static_cast(0), detMcInfo.mcCollisionId, detMcInfo.weight, detMcInfo.ptHard); + outMiniCollisions(static_cast(0), detMcInfo.mcCollisionId, detMcInfo.weight, detMcInfo.ptHard, -1.f); detMiniCollIdx = outMiniCollisions.lastIndex(); detMiniCollByKey.emplace(detCollKey, detMiniCollIdx); } else { From a100c4ead206843f7de4286a97013a94b90e5b79 Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Wed, 5 Aug 2026 13:43:40 -0400 Subject: [PATCH 2/2] Add fixed to clang-tidy style errors --- PWGJE/Tasks/jetLundPlane.cxx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/PWGJE/Tasks/jetLundPlane.cxx b/PWGJE/Tasks/jetLundPlane.cxx index 5974d65ad43..e956ff1e530 100644 --- a/PWGJE/Tasks/jetLundPlane.cxx +++ b/PWGJE/Tasks/jetLundPlane.cxx @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -222,7 +223,7 @@ std::vector buildUniqueSplittingMatches(const std::vector -std::vector buildFastJetInputs(ConstituentRangeT&& constituents, float trackPtMin) +std::vector buildFastJetInputs(ConstituentRangeT const& constituents, float trackPtMin) { std::vector fjInputs; fjInputs.reserve(64); @@ -636,7 +637,7 @@ struct JetLundPlaneUnfolding { for (auto const& mcCollision : mcCollisions) { const int64_t mcCollisionId = mcCollision.globalIndex(); mcEventInfoById.emplace(mcCollisionId, - McEventInfo{mcCollisionId, mcCollision.weight(), mcCollision.ptHard()}); + McEventInfo{.mcCollisionId = mcCollisionId, .weight = mcCollision.weight(), .ptHard = mcCollision.ptHard()}); } std::unordered_map mcEventInfoByDetCollisionId; @@ -790,7 +791,7 @@ struct JetLundPlaneUnfolding { for (auto const& candPartJet : detJet.template matchedJetGeo_as>()) { const uint64_t candTruthKey = candPartJet.globalIndex(); - if (acceptedTruthJetKeys.find(candTruthKey) == acceptedTruthJetKeys.end()) { + if (!acceptedTruthJetKeys.contains(candTruthKey)) { continue; } @@ -885,9 +886,9 @@ struct JetLundPlaneUnfolding { for (const auto& m : splitMatches) { const auto& detS = detSpl[m.recoIdx]; const auto& partS = bestPartSpl[m.truthIdx]; - double x[6] = {detS.lnRoverDR, detS.lnkt, detJet.pt(), - partS.lnRoverDR, partS.lnkt, bestPartPt}; - h6->Fill(x); + const std::array x{detS.lnRoverDR, detS.lnkt, detJet.pt(), + partS.lnRoverDR, partS.lnkt, bestPartPt}; + h6->Fill(x.data()); registry.fill(HIST("hLnRoverDRResidual"), detS.lnRoverDR - partS.lnRoverDR); registry.fill(HIST("hLnKtResidual"), detS.lnkt - partS.lnkt); } @@ -904,7 +905,7 @@ struct JetLundPlaneUnfolding { continue; } - if (mcEventInfoById.find(partJet.mcCollisionId()) == mcEventInfoById.end()) { + if (!mcEventInfoById.contains(partJet.mcCollisionId())) { continue; }