From 37b7ea998b5889938d499254422b2714c4f7a7d5 Mon Sep 17 00:00:00 2001 From: ynishida-style Date: Thu, 18 Dec 2025 23:15:30 +0900 Subject: [PATCH 1/3] Add missing event selection to processReco --- PWGJE/Tasks/jetShape.cxx | 41 +++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/PWGJE/Tasks/jetShape.cxx b/PWGJE/Tasks/jetShape.cxx index 4c14536f776..9a6fb994956 100644 --- a/PWGJE/Tasks/jetShape.cxx +++ b/PWGJE/Tasks/jetShape.cxx @@ -79,8 +79,8 @@ struct JetShapeTask { {"tofPi", "tofPi", {HistType::kTH2F, {{nBinsPt, 0, ptMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}}, {"tpcPr", "tpcPr", {HistType::kTH2F, {{nBinsP, 0, pMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}}, {"tofPr", "tofPr", {HistType::kTH2F, {{nBinsPt, 0, ptMax}, {nBinsNSigma, nSigmaMin, nSigmaMax}}}}, - {"tpcDedx", "tpcDedx", {HistType::kTHnSparseD, {{nBinsPForDedx, 0, pMax}, {nBinsTpcDedx, 0, 1000}}}}, - {"tofBeta", "tofBeta", {HistType::kTH2F, {{nBinsPForBeta, 0, pMax}, {nBinsTofBeta, 0.4, 1.1}}}}, + {"tpcDedx", "tpcDedx", {HistType::kTHnSparseD, {{nBinsPForDedx, 0, pMax}, {nBinsTpcDedx, 0, 1000}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, + {"tofBeta", "tofBeta", {HistType::kTHnSparseD, {{nBinsPForBeta, 0, pMax}, {nBinsTofBeta, 0.4, 1.1}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, {"pVsPtForPr", "pVsPtForPr", {HistType::kTHnSparseD, {{nBinsP, 0, pMax}, {nBinsPt, 0, ptMax}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, {"pVsPtForPi", "pVsPtPi", {HistType::kTHnSparseD, {{nBinsP, 0, pMax}, {nBinsPt, 0, ptMax}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, {"tofMass", "tofMass", {HistType::kTH1F, {{90, 0, 3}}}}, @@ -114,7 +114,6 @@ struct JetShapeTask { {"rho", "rho", {HistType::kTH1F, {{120, 0, 300}}}}, {"ptCorr", "Corrected jet pT; p_{T}^{corr} (GeV/c); Counts", {HistType::kTH1F, {{200, 0, 200}}}}, {"ptCorrVsDistance", "ptcorr_vs_distance", {HistType::kTH2F, {{70, 0, 0.7}, {100, 0, 100}}}}, - {"distanceVsTrackpt", "trackpt_vs_distance", {HistType::kTH2F, {{70, 0, 0.7}, {100, 0, 100}}}}, {"jetDistanceVsTrackpt", "trackpt_vs_distance_injet", {HistType::kTH2F, {{70, 0, 0.7}, {100, 0, 100}}}}, {"ptSum", "ptSum", {HistType::kTHnSparseD, {{14, 0, 0.7}, {nBinsJetShapeFunc, 0, jetShapeFuncMax}, {nBinsJetPt, jetPtMinForCut, jetPtMaxForCut}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, {"ptSumBg1", "ptSumBg1", {HistType::kTHnSparseD, {{14, 0, 0.7}, {nBinsJetShapeFunc, 0, jetShapeFuncMax}, {nBinsJetPt, jetPtMinForCut, jetPtMaxForCut}, {nBinsCentrality, centralityMinForCut, centralityMaxForCut}}}}, @@ -229,6 +228,10 @@ struct JetShapeTask { void processJetShape(soa::Filtered>::iterator const& collision, aod::JetTracks const& tracks, soa::Join const& jets) { + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { + return; + } + size_t nBins = distanceCategory->size() - 1; float maxDistance = distanceCategory->at(nBins); @@ -273,7 +276,9 @@ struct JetShapeTask { } for (const auto& track : tracks) { - + if (!jetderiveddatautilities::selectTrack(track, trackSelection)) { + continue; + } float trkPt = track.pt(); float trkPhi = track.phi(); float trkEta = track.eta(); @@ -403,7 +408,9 @@ struct JetShapeTask { } for (const auto& track : tracks) { - + if (!jetderiveddatautilities::selectTrack(track, trackSelection)) { + continue; + } if (std::abs(track.eta()) > etaTrUp) continue; if (track.tpcNClsCrossedRows() < nclcrossTpcMin) @@ -499,8 +506,10 @@ struct JetShapeTask { PROCESS_SWITCH(JetShapeTask, processJetProductionRatio, "production ratio around jets", false); - void processInclusiveProductionRatio(soa::Filtered>::iterator const& collision, soa::Join const& tracks) + void processInclusiveProductionRatio(soa::Filtered>::iterator const& collision, soa::Join const& tracks) { + if (!collision.sel8()) + return; // tracks conditions for (const auto& track : tracks) { @@ -513,6 +522,10 @@ struct JetShapeTask { registry.fill(HIST("trackEta"), track.eta()); registry.fill(HIST("trackPhi"), track.phi()); + if (!track.isGlobalTrack()) { + continue; + } + if (std::abs(track.eta()) > etaTrUp) continue; if (track.tpcNClsCrossedRows() < nclcrossTpcMin) @@ -534,6 +547,8 @@ struct JetShapeTask { registry.fill(HIST("tofPi"), track.pt(), track.tofNSigmaPi()); registry.fill(HIST("tpcPr"), track.p(), track.tpcNSigmaPr()); registry.fill(HIST("tofPr"), track.pt(), track.tofNSigmaPr()); + registry.fill(HIST("tpcDedx"), track.p(), track.tpcSignal(), collision.centFT0M()); + registry.fill(HIST("tofBeta"), track.p(), track.beta(), collision.centFT0M()); if (std::abs(track.tofNSigmaPr()) < nSigmaTofCut) { registry.fill(HIST("tpcTofPr"), track.p(), track.tpcNSigmaPr(), collision.centFT0M()); @@ -556,14 +571,18 @@ struct JetShapeTask { void processReco( soa::Filtered>::iterator const& collision, - soa::Join const& tracks, aod::ChargedMCDetectorLevelJets const& jets, aod::McParticles const& mcParticles) + soa::Join const& tracks, aod::ChargedMCDetectorLevelJets const& jets, aod::McParticles const& mcParticles) { + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { + return; + } + (void)mcParticles; registry.fill(HIST("eventCounter"), 0.5); float centrality = collision.centFT0M(); - float rho = collision.rho(); + // float rho = collision.rho(); registry.fill(HIST("mcCentralityReco"), centrality); struct CachedJet { @@ -578,11 +597,15 @@ struct JetShapeTask { for (const auto& jet : jets) { registry.fill(HIST("jetPt"), jet.pt()); - float mcdPtCorr = jet.pt() - rho * jet.area(); + float mcdPtCorr = jet.pt(); cachedJets.push_back({jet.pt(), jet.eta(), jet.phi(), mcdPtCorr}); } for (const auto& track : tracks) { + + if (!track.isGlobalTrack()) + continue; + if (!track.has_mcParticle()) continue; From 20122cc1c661f9a4b8b7d3cf53ddbd9135b798ad Mon Sep 17 00:00:00 2001 From: ynishida-style Date: Fri, 19 Dec 2025 18:06:21 +0900 Subject: [PATCH 2/3] Improvement of the track selection method --- PWGJE/Tasks/jetShape.cxx | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/PWGJE/Tasks/jetShape.cxx b/PWGJE/Tasks/jetShape.cxx index 9a6fb994956..34a64dccfc4 100644 --- a/PWGJE/Tasks/jetShape.cxx +++ b/PWGJE/Tasks/jetShape.cxx @@ -506,10 +506,11 @@ struct JetShapeTask { PROCESS_SWITCH(JetShapeTask, processJetProductionRatio, "production ratio around jets", false); - void processInclusiveProductionRatio(soa::Filtered>::iterator const& collision, soa::Join const& tracks) + void processInclusiveProductionRatio(soa::Filtered::iterator const& collision, soa::Join const& tracks) { - if (!collision.sel8()) + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { return; + } // tracks conditions for (const auto& track : tracks) { @@ -522,7 +523,7 @@ struct JetShapeTask { registry.fill(HIST("trackEta"), track.eta()); registry.fill(HIST("trackPhi"), track.phi()); - if (!track.isGlobalTrack()) { + if (!jetderiveddatautilities::selectTrack(track, trackSelection)) { continue; } @@ -571,7 +572,7 @@ struct JetShapeTask { void processReco( soa::Filtered>::iterator const& collision, - soa::Join const& tracks, aod::ChargedMCDetectorLevelJets const& jets, aod::McParticles const& mcParticles) + soa::Join const& tracks, aod::ChargedMCDetectorLevelJets const& jets, aod::McParticles const& mcParticles) { if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { return; @@ -582,7 +583,8 @@ struct JetShapeTask { registry.fill(HIST("eventCounter"), 0.5); float centrality = collision.centFT0M(); - // float rho = collision.rho(); + float rho = collision.rho(); + registry.fill(HIST("mcCentralityReco"), centrality); struct CachedJet { @@ -597,14 +599,15 @@ struct JetShapeTask { for (const auto& jet : jets) { registry.fill(HIST("jetPt"), jet.pt()); - float mcdPtCorr = jet.pt(); + float mcdPtCorr = jet.pt() - rho * jet.area(); cachedJets.push_back({jet.pt(), jet.eta(), jet.phi(), mcdPtCorr}); } for (const auto& track : tracks) { - if (!track.isGlobalTrack()) + if (!jetderiveddatautilities::selectTrack(track, trackSelection)) { continue; + } if (!track.has_mcParticle()) continue; From c4078426f3942a62c03e585b26218ad3f4c1b2c9 Mon Sep 17 00:00:00 2001 From: ynishida-style Date: Mon, 22 Dec 2025 18:54:42 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Reduce=20CPU=20usage=20in=20processSim=20by?= =?UTF-8?q?=20reordering=20particle=E2=80=93jet=20loops?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PWGJE/Tasks/jetShape.cxx | 67 +++++++++++++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/PWGJE/Tasks/jetShape.cxx b/PWGJE/Tasks/jetShape.cxx index 34a64dccfc4..597dc845546 100644 --- a/PWGJE/Tasks/jetShape.cxx +++ b/PWGJE/Tasks/jetShape.cxx @@ -683,35 +683,72 @@ struct JetShapeTask { } PROCESS_SWITCH(JetShapeTask, processReco, "process reconstructed simulation information", true); - void processSim(soa::Join::iterator const& mcCollision, aod::ChargedMCParticleLevelJets const& mcpjets, aod::McParticles const& mcParticles) + void processSim(soa::Join::iterator const& mcCollision, + aod::ChargedMCParticleLevelJets const& mcpjets, + aod::McParticles const& mcParticles) { - + if (std::abs(mcCollision.posZ()) > vertexZCut) { + return; + } + // --- centrality --- float centrality = mcCollision.centFT0M(); registry.fill(HIST("mcCentralitySim"), centrality); - for (const auto& mcpjet : mcpjets) { + const float maxR2 = distanceMax * distanceMax; + + // --- loop over MC particles only once --- + for (const auto& mcParticle : mcParticles) { + + // --- early cuts on particle --- + if (!mcParticle.isPhysicalPrimary()) { + continue; + } + + if (std::abs(mcParticle.y()) > mcRapidityMax) { + continue; + } + + int absPdg = std::abs(mcParticle.pdgCode()); + if (absPdg != PDG_t::kPiPlus && + absPdg != PDG_t::kKPlus && + absPdg != PDG_t::kProton) { + continue; + } - for (const auto& mcParticle : mcParticles) { + const float partPt = mcParticle.pt(); + const float partEta = mcParticle.eta(); + const float partPhi = mcParticle.phi(); - float dEta = mcParticle.eta() - mcpjet.eta(); - float dPhi = std::abs(mcParticle.phi() - mcpjet.phi()); + // --- loop over jets --- + for (const auto& mcpjet : mcpjets) { + // --- delta eta cut first --- + float dEta = partEta - mcpjet.eta(); + if (std::abs(dEta) > distanceMax) { + continue; + } + + // --- delta phi --- + float dPhi = std::abs(partPhi - mcpjet.phi()); if (dPhi > o2::constants::math::PI) { dPhi = o2::constants::math::TwoPI - dPhi; } - float deltaR = std::sqrt(dEta * dEta + dPhi * dPhi); - if (deltaR > distanceMax) { + // --- delta R^2 --- + float dR2 = dEta * dEta + dPhi * dPhi; + if (dR2 > maxR2) { continue; } - if (mcParticle.isPhysicalPrimary() && std::fabs(mcParticle.y()) < mcRapidityMax) { - if (std::abs(mcParticle.pdgCode()) == PDG_t::kPiPlus) - registry.fill(HIST("ptGeneratedPion"), mcParticle.pt(), mcpjet.pt(), centrality); - if (std::abs(mcParticle.pdgCode()) == PDG_t::kKPlus) - registry.fill(HIST("ptGeneratedKaon"), mcParticle.pt(), mcpjet.pt(), centrality); - if (std::abs(mcParticle.pdgCode()) == PDG_t::kProton) - registry.fill(HIST("ptGeneratedProton"), mcParticle.pt(), mcpjet.pt(), centrality); + const float jetPt = mcpjet.pt(); + + // --- histogram fill --- + if (absPdg == PDG_t::kPiPlus) { + registry.fill(HIST("ptGeneratedPion"), partPt, jetPt, centrality); + } else if (absPdg == PDG_t::kKPlus) { + registry.fill(HIST("ptGeneratedKaon"), partPt, jetPt, centrality); + } else { + registry.fill(HIST("ptGeneratedProton"), partPt, jetPt, centrality); } } }