Skip to content

Commit c407842

Browse files
Reduce CPU usage in processSim by reordering particle–jet loops
1 parent 20122cc commit c407842

File tree

1 file changed

+52
-15
lines changed

1 file changed

+52
-15
lines changed

PWGJE/Tasks/jetShape.cxx

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -683,35 +683,72 @@ struct JetShapeTask {
683683
}
684684
PROCESS_SWITCH(JetShapeTask, processReco, "process reconstructed simulation information", true);
685685

686-
void processSim(soa::Join<aod::McCollisions, aod::McCentFT0Ms>::iterator const& mcCollision, aod::ChargedMCParticleLevelJets const& mcpjets, aod::McParticles const& mcParticles)
686+
void processSim(soa::Join<aod::McCollisions, aod::McCentFT0Ms>::iterator const& mcCollision,
687+
aod::ChargedMCParticleLevelJets const& mcpjets,
688+
aod::McParticles const& mcParticles)
687689
{
688-
690+
if (std::abs(mcCollision.posZ()) > vertexZCut) {
691+
return;
692+
}
693+
// --- centrality ---
689694
float centrality = mcCollision.centFT0M();
690695
registry.fill(HIST("mcCentralitySim"), centrality);
691696

692-
for (const auto& mcpjet : mcpjets) {
697+
const float maxR2 = distanceMax * distanceMax;
698+
699+
// --- loop over MC particles only once ---
700+
for (const auto& mcParticle : mcParticles) {
701+
702+
// --- early cuts on particle ---
703+
if (!mcParticle.isPhysicalPrimary()) {
704+
continue;
705+
}
706+
707+
if (std::abs(mcParticle.y()) > mcRapidityMax) {
708+
continue;
709+
}
710+
711+
int absPdg = std::abs(mcParticle.pdgCode());
712+
if (absPdg != PDG_t::kPiPlus &&
713+
absPdg != PDG_t::kKPlus &&
714+
absPdg != PDG_t::kProton) {
715+
continue;
716+
}
693717

694-
for (const auto& mcParticle : mcParticles) {
718+
const float partPt = mcParticle.pt();
719+
const float partEta = mcParticle.eta();
720+
const float partPhi = mcParticle.phi();
695721

696-
float dEta = mcParticle.eta() - mcpjet.eta();
697-
float dPhi = std::abs(mcParticle.phi() - mcpjet.phi());
722+
// --- loop over jets ---
723+
for (const auto& mcpjet : mcpjets) {
698724

725+
// --- delta eta cut first ---
726+
float dEta = partEta - mcpjet.eta();
727+
if (std::abs(dEta) > distanceMax) {
728+
continue;
729+
}
730+
731+
// --- delta phi ---
732+
float dPhi = std::abs(partPhi - mcpjet.phi());
699733
if (dPhi > o2::constants::math::PI) {
700734
dPhi = o2::constants::math::TwoPI - dPhi;
701735
}
702736

703-
float deltaR = std::sqrt(dEta * dEta + dPhi * dPhi);
704-
if (deltaR > distanceMax) {
737+
// --- delta R^2 ---
738+
float dR2 = dEta * dEta + dPhi * dPhi;
739+
if (dR2 > maxR2) {
705740
continue;
706741
}
707742

708-
if (mcParticle.isPhysicalPrimary() && std::fabs(mcParticle.y()) < mcRapidityMax) {
709-
if (std::abs(mcParticle.pdgCode()) == PDG_t::kPiPlus)
710-
registry.fill(HIST("ptGeneratedPion"), mcParticle.pt(), mcpjet.pt(), centrality);
711-
if (std::abs(mcParticle.pdgCode()) == PDG_t::kKPlus)
712-
registry.fill(HIST("ptGeneratedKaon"), mcParticle.pt(), mcpjet.pt(), centrality);
713-
if (std::abs(mcParticle.pdgCode()) == PDG_t::kProton)
714-
registry.fill(HIST("ptGeneratedProton"), mcParticle.pt(), mcpjet.pt(), centrality);
743+
const float jetPt = mcpjet.pt();
744+
745+
// --- histogram fill ---
746+
if (absPdg == PDG_t::kPiPlus) {
747+
registry.fill(HIST("ptGeneratedPion"), partPt, jetPt, centrality);
748+
} else if (absPdg == PDG_t::kKPlus) {
749+
registry.fill(HIST("ptGeneratedKaon"), partPt, jetPt, centrality);
750+
} else {
751+
registry.fill(HIST("ptGeneratedProton"), partPt, jetPt, centrality);
715752
}
716753
}
717754
}

0 commit comments

Comments
 (0)