From 886a5b5397ea26ec9bf4daf9679b10b54065e206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 11:09:23 +0100 Subject: [PATCH 1/7] Add histograms for hyperons and update long-lived handling Added histograms for K0s, Lambda, and AntiLambda in full events. Updated handling of long-lived particles and their reconstruction. --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 295 ++++++++++++------ 1 file changed, 207 insertions(+), 88 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index 4c704407157..40fbaa3c94f 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -281,6 +281,10 @@ struct StrangenessInJets { registryMC.add("Lambda_generated_ue", "Lambda_generated_ue", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("AntiLambda_generated_jet", "AntiLambda_generated_jet", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("AntiLambda_generated_ue", "AntiLambda_generated_ue", HistType::kTH2F, {multAxis, ptAxis}); + // Histograms to calculate probability of hyperons to be found within jets + registryMC.add("K0s_generated_fullevent", "K0s_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("Lambda_generated_fullevent", "Lambda_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("AntiLambda_generated_fullevent", "AntiLambda_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); } if (enabledSignals.value[ParticleOfInterest::kCascades]) { registryMC.add("XiPos_generated_jet", "XiPos_generated_jet", HistType::kTH2F, {multAxis, ptAxis}); @@ -291,43 +295,31 @@ struct StrangenessInJets { registryMC.add("OmegaPos_generated_ue", "OmegaPos_generated_ue", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("OmegaNeg_generated_jet", "OmegaNeg_generated_jet", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("OmegaNeg_generated_ue", "OmegaNeg_generated_ue", HistType::kTH2F, {multAxis, ptAxis}); + // Histograms to calculate probability of hyperons to be found within jets + registryMC.add("XiPos_generated_fullevent", "XiPos_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("XiNeg_generated_fullevent", "XiNeg_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("OmegaPos_generated_fullevent", "OmegaPos_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("OmegaNeg_generated_fullevent", "OmegaNeg_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); } if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.add("Pion_Plus_generated_in_jet", "Pion_Plus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Pion_Plus_generated_in_ue", "Pion_Plus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Pion_Plus_generated_fullevent", "Pion_Plus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Pion_Minus_generated_in_jet", "Pion_Minus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Pion_Minus_generated_in_ue", "Pion_Minus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Pion_Minus_generated_fullevent", "Pion_Minus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.add("Kaon_Plus_generated_in_jet", "Kaon_Plus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Kaon_Plus_generated_in_ue", "Kaon_Plus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Kaon_Plus_generated_fullevent", "Kaon_Plus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Kaon_Minus_generated_in_jet", "Kaon_Minus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Kaon_Minus_generated_in_ue", "Kaon_Minus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Kaon_Minus_generated_fullevent", "Kaon_Minus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.add("Proton_Plus_generated_in_jet", "Proton_Plus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Proton_Plus_generated_in_ue", "Proton_Plus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Proton_Plus_generated_fullevent", "Proton_Plus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Proton_Minus_generated_in_jet", "Proton_Minus_generated_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Proton_Minus_generated_in_ue", "Proton_Minus_generated_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); registryMC.add("Proton_Minus_generated_fullevent", "Proton_Minus_generated_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } - - // Histograms to calculate probability of hyperons to be found within jets - if (enabledSignals.value[ParticleOfInterest::kV0Particles]) { - registryMC.add("K0s_generated_fullevent", "K0s_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("Lambda_generated_fullevent", "Lambda_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("AntiLambda_generated_fullevent", "AntiLambda_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - } - if (enabledSignals.value[ParticleOfInterest::kCascades]) { - registryMC.add("XiPos_generated_fullevent", "XiPos_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("XiNeg_generated_fullevent", "XiNeg_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("OmegaPos_generated_fullevent", "OmegaPos_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("OmegaNeg_generated_fullevent", "OmegaNeg_generated_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + if (enabledSignals.value[ParticleOfInterest::kPions] || + enabledSignals.value[ParticleOfInterest::kKaons] || + enabledSignals.value[ParticleOfInterest::kProtons]) { + const AxisSpec axisInJetOutOfJet = AxisSpec{2, -2., 2., "In jet / Out of jet"}; + const AxisSpec axisCharge = AxisSpec{2, -2., 2., "Charge"}; + const AxisSpec axisParticleType = AxisSpec{3, -0.5, 2.5, "Particle Type"}; + registryData.add("LongLivedGenerated", "LongLivedGenerated", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis}); } } @@ -353,6 +345,10 @@ struct StrangenessInJets { registryMC.add("Lambda_reconstructed_ue_incl", "Lambda_reconstructed_ue_incl", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("AntiLambda_reconstructed_jet_incl", "AntiLambda_reconstructed_jet_incl", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("AntiLambda_reconstructed_ue_incl", "AntiLambda_reconstructed_ue_incl", HistType::kTH2F, {multAxis, ptAxis}); + // Histograms to calculate probability of hyperons to be found within jets + registryMC.add("K0s_reconstructed_fullevent", "K0s_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("Lambda_reconstructed_fullevent", "Lambda_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("AntiLambda_reconstructed_fullevent", "AntiLambda_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); } if (enabledSignals.value[ParticleOfInterest::kCascades]) { @@ -364,31 +360,32 @@ struct StrangenessInJets { registryMC.add("OmegaPos_reconstructed_ue", "OmegaPos_reconstructed_ue", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("OmegaNeg_reconstructed_jet", "OmegaNeg_reconstructed_jet", HistType::kTH2F, {multAxis, ptAxis}); registryMC.add("OmegaNeg_reconstructed_ue", "OmegaNeg_reconstructed_ue", HistType::kTH2F, {multAxis, ptAxis}); + // Histograms to calculate probability of hyperons to be found within jets + registryMC.add("XiPos_reconstructed_fullevent", "XiPos_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("XiNeg_reconstructed_fullevent", "XiNeg_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("OmegaPos_reconstructed_fullevent", "OmegaPos_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("OmegaNeg_reconstructed_fullevent", "OmegaNeg_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); } if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.add("Pion_reconstructed_in_jet", "Pion_reconstructed_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Pion_reconstructed_in_ue", "Pion_reconstructed_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); + registryMC.add("Pion_Plus_reconstructed_fullevent", "Pion_Plus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); + registryMC.add("Pion_Minus_reconstructed_fullevent", "Pion_Minus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.add("Kaon_reconstructed_in_jet", "Kaon_reconstructed_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Kaon_reconstructed_in_ue", "Kaon_reconstructed_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); + registryMC.add("Kaon_Plus_reconstructed_fullevent", "Kaon_Plus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); + registryMC.add("Kaon_Minus_reconstructed_fullevent", "Kaon_Minus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.add("Proton_reconstructed_in_jet", "Proton_reconstructed_in_jet", HistType::kTH2F, {multAxis, ptAxisLongLived}); - registryMC.add("Proton_reconstructed_in_ue", "Proton_reconstructed_in_ue", HistType::kTH2F, {multAxis, ptAxisLongLived}); - } - - // Histograms to calculate probability of hyperons to be found within jets - if (enabledSignals.value[ParticleOfInterest::kV0Particles]) { - registryMC.add("K0s_reconstructed_fullevent", "K0s_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("Lambda_reconstructed_fullevent", "Lambda_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("AntiLambda_reconstructed_fullevent", "AntiLambda_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + registryMC.add("Proton_Plus_reconstructed_fullevent", "Proton_Plus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); + registryMC.add("Proton_Minus_reconstructed_fullevent", "Proton_Minus_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxisLongLived}); } - if (enabledSignals.value[ParticleOfInterest::kCascades]) { - registryMC.add("XiPos_reconstructed_fullevent", "XiPos_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("XiNeg_reconstructed_fullevent", "XiNeg_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("OmegaPos_reconstructed_fullevent", "OmegaPos_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); - registryMC.add("OmegaNeg_reconstructed_fullevent", "OmegaNeg_reconstructed_fullevent", HistType::kTH2F, {multAxis, ptAxis}); + if (enabledSignals.value[ParticleOfInterest::kPions] || + enabledSignals.value[ParticleOfInterest::kKaons] || + enabledSignals.value[ParticleOfInterest::kProtons]) { + const AxisSpec axisInJetOutOfJet = AxisSpec{2, -2., 2., "In jet / Out of jet"}; + const AxisSpec axisCharge = AxisSpec{2, -2., 2., "Charge"}; + const AxisSpec axisParticleType = AxisSpec{3, -0.5, 2.5, "Particle Type"}; + const AxisSpec axisDetector = AxisSpec{2, -0.5, 1.5, "TPC / TOF"}; + registryData.add("LongLivedReconstructed", "LongLivedReconstructed", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis, axisDetector}); } } } @@ -396,17 +393,13 @@ struct StrangenessInJets { // Delta phi calculation double getDeltaPhi(double a1, double a2) { - double deltaPhi(0); - double phi1 = TVector2::Phi_0_2pi(a1); - double phi2 = TVector2::Phi_0_2pi(a2); - double diff = std::fabs(phi1 - phi2); - + const double phi1 = TVector2::Phi_0_2pi(a1); + const double phi2 = TVector2::Phi_0_2pi(a2); + const double diff = std::fabs(phi1 - phi2); if (diff <= PI) - deltaPhi = diff; + return diff; if (diff > PI) - deltaPhi = TwoPI - diff; - - return deltaPhi; + return TwoPI - diff; } // Check if particle is a physical primary or a decay product of a heavy-flavor hadron @@ -1432,32 +1425,32 @@ struct StrangenessInJets { break; case kPiPlus: if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("Pion_Plus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 0.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kKPlus: if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("Kaon_Plus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 1.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kProton: if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("Proton_Plus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 2.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kPiMinus: if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("Pion_Minus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 0.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; case kKMinus: if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("Kaon_Minus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 1.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; case kProtonBar: if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("Proton_Minus_generated_in_jet"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), -1.f, 2.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; default: @@ -1505,32 +1498,32 @@ struct StrangenessInJets { break; case kPiPlus: if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("Pion_Plus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 0.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kKPlus: if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("Kaon_Plus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 1.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kProton: if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("Proton_Plus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 2.f, 1.f, hadron.first.Pt(), genMultiplicity); } break; case kPiMinus: if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("Pion_Minus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 0.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; case kKMinus: if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("Kaon_Minus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 1.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; case kProtonBar: if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("Proton_Minus_generated_in_ue"), genMultiplicity, hadron.first.Pt()); + registryMC.fill(HIST("LongLivedGenerated"), 1.f, 2.f, -1.f, hadron.first.Pt(), genMultiplicity); } break; default: @@ -1590,9 +1583,9 @@ struct StrangenessInJets { const float multiplicity = mcCollision.centFT0M(); // Number of V0 and cascades per collision - auto v0sPerColl = fullV0s.sliceBy(perCollisionV0, collision.globalIndex()); - auto cascPerColl = Cascades.sliceBy(perCollisionCasc, collision.globalIndex()); - auto tracksPerColl = mcTracks.sliceBy(perCollisionTrk, collision.globalIndex()); + const auto& v0sPerColl = fullV0s.sliceBy(perCollisionV0, collision.globalIndex()); + const auto& cascPerColl = Cascades.sliceBy(perCollisionCasc, collision.globalIndex()); + const auto& tracksPerColl = mcTracks.sliceBy(perCollisionTrk, collision.globalIndex()); // V0 particles if (enabledSignals.value[ParticleOfInterest::kV0Particles]) { @@ -1677,13 +1670,66 @@ struct StrangenessInJets { } } + // Long lived + if (enabledSignals.value[ParticleOfInterest::kPions] || + enabledSignals.value[ParticleOfInterest::kKaons] || + enabledSignals.value[ParticleOfInterest::kProtons]) { + for (const auto& trk : tracksPerColl) { + + if (!trk.has_mcParticle()) { + continue; + } + if (!passedSingleTrackSelection(trk)) { + continue; + } + const auto& mcParticle = trk.mcParticle_as(); + if (!mcParticle.isPhysicalPrimary()) { + continue; + } + + switch (mcParticle.pdgCode()) { + case kPiPlus: + if (enabledSignals.value[ParticleOfInterest::kPions]) { + registryMC.fill(HIST("Pion_Plus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + case kPiMinus: + if (enabledSignals.value[ParticleOfInterest::kPions]) { + registryMC.fill(HIST("Pion_Minus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + break; + case kKPlus: + if (enabledSignals.value[ParticleOfInterest::kKaons]) { + registryMC.fill(HIST("Kaon_Plus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + break; + case kKMinus: + if (enabledSignals.value[ParticleOfInterest::kKaons]) { + registryMC.fill(HIST("Kaon_Minus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + break; + case kProton: + if (enabledSignals.value[ParticleOfInterest::kProtons]) { + registryMC.fill(HIST("Proton_Plus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + break; + case kProtonBar: + if (enabledSignals.value[ParticleOfInterest::kProtons]) { + registryMC.fill(HIST("Proton_Minus_reconstructed_fullevent"), multiplicity, trk.pt()); + } + break; + default: + break; + } + } + } + // Loop over reconstructed tracks - for (auto const& track : tracksPerColl) { - if (!passedTrackSelectionForJetReconstruction(track)) + for (auto const& trk : tracksPerColl) { + if (!passedTrackSelectionForJetReconstruction(trk)) continue; // 4-momentum representation of a particle - fastjet::PseudoJet fourMomentum(track.px(), track.py(), track.pz(), track.energy(o2::constants::physics::MassPionCharged)); + fastjet::PseudoJet fourMomentum(trk.px(), trk.py(), trk.pz(), trk.energy(o2::constants::physics::MassPionCharged)); fjParticles.emplace_back(fourMomentum); } @@ -1834,23 +1880,23 @@ struct StrangenessInJets { // Cascades if (enabledSignals.value[ParticleOfInterest::kCascades]) { for (const auto& casc : cascPerColl) { - auto bach = casc.bachelor_as(); - auto pos = casc.posTrack_as(); - auto neg = casc.negTrack_as(); + const auto& bach = casc.bachelor_as(); + const auto& pos = casc.posTrack_as(); + const auto& neg = casc.negTrack_as(); // Get MC particles if (!bach.has_mcParticle() || !pos.has_mcParticle() || !neg.has_mcParticle()) continue; - auto posParticle = pos.mcParticle_as(); - auto negParticle = neg.mcParticle_as(); - auto bachParticle = bach.mcParticle_as(); + const auto& posParticle = pos.mcParticle_as(); + const auto& negParticle = neg.mcParticle_as(); + const auto& bachParticle = bach.mcParticle_as(); if (!posParticle.has_mothers() || !negParticle.has_mothers() || !bachParticle.has_mothers()) continue; // Select particles originating from the same parent - auto motherPos = mcParticles.iteratorAt(posParticle.mothersIds()[0]); - auto motherNeg = mcParticles.iteratorAt(negParticle.mothersIds()[0]); - auto motherBach = mcParticles.iteratorAt(bachParticle.mothersIds()[0]); + const auto& motherPos = mcParticles.iteratorAt(posParticle.mothersIds()[0]); + const auto& motherNeg = mcParticles.iteratorAt(negParticle.mothersIds()[0]); + const auto& motherBach = mcParticles.iteratorAt(bachParticle.mothersIds()[0]); if (motherPos != motherNeg) continue; if (std::abs(motherPos.pdgCode()) != kLambda0) @@ -1859,16 +1905,16 @@ struct StrangenessInJets { continue; // Compute distances from jet and UE axes - TVector3 cascadeDir(casc.px(), casc.py(), casc.pz()); - double deltaEtaJet = cascadeDir.Eta() - selectedJet[i].Eta(); - double deltaPhiJet = getDeltaPhi(cascadeDir.Phi(), selectedJet[i].Phi()); - double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - double deltaEtaUe1 = cascadeDir.Eta() - ue1[i].Eta(); - double deltaPhiUe1 = getDeltaPhi(cascadeDir.Phi(), ue1[i].Phi()); - double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - double deltaEtaUe2 = cascadeDir.Eta() - ue2[i].Eta(); - double deltaPhiUe2 = getDeltaPhi(cascadeDir.Phi(), ue2[i].Phi()); - double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const TVector3 cascadeDir(casc.px(), casc.py(), casc.pz()); + const double deltaEtaJet = cascadeDir.Eta() - selectedJet[i].Eta(); + const double deltaPhiJet = getDeltaPhi(cascadeDir.Phi(), selectedJet[i].Phi()); + const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); + const double deltaEtaUe1 = cascadeDir.Eta() - ue1[i].Eta(); + const double deltaPhiUe1 = getDeltaPhi(cascadeDir.Phi(), ue1[i].Phi()); + const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); + const double deltaEtaUe2 = cascadeDir.Eta() - ue2[i].Eta(); + const double deltaPhiUe2 = getDeltaPhi(cascadeDir.Phi(), ue2[i].Phi()); + const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); // Xi+ if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() > 0 && motherBach.pdgCode() == kXiPlusBar) { @@ -1908,6 +1954,79 @@ struct StrangenessInJets { } } } + + // Long lived + if (enabledSignals.value[ParticleOfInterest::kPions] || + enabledSignals.value[ParticleOfInterest::kKaons] || + enabledSignals.value[ParticleOfInterest::kProtons]) { + for (const auto& trk : tracksPerColl) { + + if (!trk.has_mcParticle()) { + continue; + } + const auto& mcParticle = trk.mcParticle_as(); + if (!mcParticle.isPhysicalPrimary()) { + continue; + } + if (!passedSingleTrackSelection(trk)) { + continue; + } + const TVector3 trackDir(trk.px(), trk.py(), trk.pz()); + + // Compute distances from jet and UE axes + const double deltaEtaJet = trackDir.Eta() - selectedJet[i].Eta(); + const double deltaPhiJet = getDeltaPhi(trackDir.Phi(), selectedJet[i].Phi()); + const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); + const double deltaEtaUe1 = trackDir.Eta() - ue1[i].Eta(); + const double deltaPhiUe1 = getDeltaPhi(trackDir.Phi(), ue1[i].Phi()); + const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); + const double deltaEtaUe2 = trackDir.Eta() - ue2[i].Eta(); + const double deltaPhiUe2 = getDeltaPhi(trackDir.Phi(), ue2[i].Phi()); + const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + + float indexParticle = -1; + float indexCharge = 0; + switch (mcParticle.pdgCode()) { + case kPiPlus: + if (enabledSignals.value[ParticleOfInterest::kPions]) { + indexParticle = 0; + indexCharge = 1; + } + break; + case kPiMinus: + if (enabledSignals.value[ParticleOfInterest::kPions]) { + indexParticle = 0; + indexCharge = -1; + } + break; + case kKPlus: + if (enabledSignals.value[ParticleOfInterest::kKaons]) { + indexParticle = 1; + indexCharge = 1; + } + case kKMinus: + if (enabledSignals.value[ParticleOfInterest::kKaons]) { + indexParticle = 1; + indexCharge = -1; + } + break; + case kProton: + if (enabledSignals.value[ParticleOfInterest::kProtons]) { + indexParticle = 2; + indexCharge = 1; + } + } + if (indexParticle <= -0.5f) { + continue; + } + if (deltaRjet < rJet) { + registryMC.fill(HIST("LongLivedReconstructed"), -1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + } + if (deltaRue1 < rJet || deltaRue2 < rJet) { + registryMC.fill(HIST("LongLivedReconstructed"), 1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + } + } + } } } } From 88719d767d15a2bd1be0e2c3a8e4ca9c33da7914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 12:06:14 +0100 Subject: [PATCH 2/7] Update strangenessInJets.cxx --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 141 ++++++------------ 1 file changed, 45 insertions(+), 96 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index 40fbaa3c94f..ea90ef046e7 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -67,14 +67,10 @@ #include #include -using namespace std; using namespace o2; -using namespace o2::soa; -using namespace o2::aod; using namespace o2::framework; using namespace o2::framework::expressions; using namespace o2::constants::math; -using std::array; // Define convenient aliases for joined AOD tables using SelCollisions = soa::Join; @@ -197,7 +193,7 @@ struct StrangenessInJets { enabled += checkEnabled(ParticleOfInterest::kKaons); enabled += checkEnabled(ParticleOfInterest::kProtons); if (enabled == 0) { - LOG(fatal) << "At least one particle species must be enabled for the analysis. Please check the configuration of the task." << endl; + LOG(fatal) << "At least one particle species must be enabled for the analysis. Please check the configuration of the task."; } // Define binning and axis specifications for multiplicity, eta, pT, PID, and invariant mass histograms @@ -319,7 +315,7 @@ struct StrangenessInJets { const AxisSpec axisInJetOutOfJet = AxisSpec{2, -2., 2., "In jet / Out of jet"}; const AxisSpec axisCharge = AxisSpec{2, -2., 2., "Charge"}; const AxisSpec axisParticleType = AxisSpec{3, -0.5, 2.5, "Particle Type"}; - registryData.add("LongLivedGenerated", "LongLivedGenerated", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis}); + registryMC.add("LongLivedGenerated", "LongLivedGenerated", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis}); } } @@ -385,11 +381,31 @@ struct StrangenessInJets { const AxisSpec axisCharge = AxisSpec{2, -2., 2., "Charge"}; const AxisSpec axisParticleType = AxisSpec{3, -0.5, 2.5, "Particle Type"}; const AxisSpec axisDetector = AxisSpec{2, -0.5, 1.5, "TPC / TOF"}; - registryData.add("LongLivedReconstructed", "LongLivedReconstructed", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis, axisDetector}); + registryMC.add("LongLivedReconstructed", "LongLivedReconstructed", HistType::kTHnSparseF, {axisInJetOutOfJet, axisParticleType, axisCharge, ptAxisLongLived, multAxis, axisDetector}); } } } + bool pdgToLongLivedIndex(const int pdg, float& particle, float& charge) + { + switch (std::abs(pdg)) { + case PDG_t::kPiPlus: + particle = 0; // pion + charge = (pdg > 0) ? 1 : -1; + return enabledSignals.value[ParticleOfInterest::kPions]; + case PDG_t::kKPlus: + particle = 1; // kaon + charge = (pdg > 0) ? 1 : -1; + return enabledSignals.value[ParticleOfInterest::kKaons]; + case PDG_t::kProton: + particle = 2; // proton + charge = (pdg > 0) ? 1 : -1; + return enabledSignals.value[ParticleOfInterest::kProtons]; + default: + return false; + } + } + // Delta phi calculation double getDeltaPhi(double a1, double a2) { @@ -1129,7 +1145,9 @@ struct StrangenessInJets { } } } - if (enabledSignals.value[ParticleOfInterest::kPions] || enabledSignals.value[ParticleOfInterest::kKaons] || enabledSignals.value[ParticleOfInterest::kProtons]) { + if (enabledSignals.value[ParticleOfInterest::kPions] || + enabledSignals.value[ParticleOfInterest::kKaons] || + enabledSignals.value[ParticleOfInterest::kProtons]) { for (const auto& trk : tracks) { if (!passedSingleTrackSelection(trk)) { @@ -1424,33 +1442,14 @@ struct StrangenessInJets { } break; case kPiPlus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 0.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; - case kKPlus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 1.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; - case kProton: - if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 2.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; case kPiMinus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 0.f, -1.f, hadron.first.Pt(), genMultiplicity); - } - break; + case kKPlus: case kKMinus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 1.f, -1.f, hadron.first.Pt(), genMultiplicity); - } - break; + case kProton: case kProtonBar: - if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("LongLivedGenerated"), -1.f, 2.f, -1.f, hadron.first.Pt(), genMultiplicity); + float particleId, chargeId; + if (pdgToLongLivedIndex(hadron.second, particleId, chargeId)) { + registryMC.fill(HIST("LongLivedGenerated"), -1.f, particleId, chargeId, hadron.first.Pt(), genMultiplicity); } break; default: @@ -1497,33 +1496,14 @@ struct StrangenessInJets { } break; case kPiPlus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 0.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; - case kKPlus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 1.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; - case kProton: - if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 2.f, 1.f, hadron.first.Pt(), genMultiplicity); - } - break; case kPiMinus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 0.f, -1.f, hadron.first.Pt(), genMultiplicity); - } - break; + case kKPlus: case kKMinus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 1.f, -1.f, hadron.first.Pt(), genMultiplicity); - } - break; + case kProton: case kProtonBar: - if (enabledSignals.value[ParticleOfInterest::kProtons]) { - registryMC.fill(HIST("LongLivedGenerated"), 1.f, 2.f, -1.f, hadron.first.Pt(), genMultiplicity); + float particleId, chargeId; + if (pdgToLongLivedIndex(hadron.second, particleId, chargeId)) { + registryMC.fill(HIST("LongLivedGenerated"), 1.f, particleId, chargeId, hadron.first.Pt(), genMultiplicity); } break; default: @@ -1692,6 +1672,7 @@ struct StrangenessInJets { if (enabledSignals.value[ParticleOfInterest::kPions]) { registryMC.fill(HIST("Pion_Plus_reconstructed_fullevent"), multiplicity, trk.pt()); } + break; case kPiMinus: if (enabledSignals.value[ParticleOfInterest::kPions]) { registryMC.fill(HIST("Pion_Minus_reconstructed_fullevent"), multiplicity, trk.pt()); @@ -1984,46 +1965,14 @@ struct StrangenessInJets { const double deltaPhiUe2 = getDeltaPhi(trackDir.Phi(), ue2[i].Phi()); const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); - float indexParticle = -1; - float indexCharge = 0; - switch (mcParticle.pdgCode()) { - case kPiPlus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - indexParticle = 0; - indexCharge = 1; - } - break; - case kPiMinus: - if (enabledSignals.value[ParticleOfInterest::kPions]) { - indexParticle = 0; - indexCharge = -1; - } - break; - case kKPlus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - indexParticle = 1; - indexCharge = 1; - } - case kKMinus: - if (enabledSignals.value[ParticleOfInterest::kKaons]) { - indexParticle = 1; - indexCharge = -1; - } - break; - case kProton: - if (enabledSignals.value[ParticleOfInterest::kProtons]) { - indexParticle = 2; - indexCharge = 1; - } - } - if (indexParticle <= -0.5f) { - continue; - } - if (deltaRjet < rJet) { - registryMC.fill(HIST("LongLivedReconstructed"), -1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); - } - if (deltaRue1 < rJet || deltaRue2 < rJet) { - registryMC.fill(HIST("LongLivedReconstructed"), 1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + float particleId, chargeId; + if (pdgToLongLivedIndex(mcParticle.pdgCode(), particleId, chargeId)) { + if (deltaRjet < rJet) { + registryMC.fill(HIST("LongLivedReconstructed"), -1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + } + if (deltaRue1 < rJet || deltaRue2 < rJet) { + registryMC.fill(HIST("LongLivedReconstructed"), 1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + } } } } From d4d3de2b84bc9b328cc483a6b13ee7044ca241d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 12:06:50 +0100 Subject: [PATCH 3/7] Update particle ID usage in strangenessInJets --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index ea90ef046e7..8cf5bb0d8f7 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -1968,10 +1968,10 @@ struct StrangenessInJets { float particleId, chargeId; if (pdgToLongLivedIndex(mcParticle.pdgCode(), particleId, chargeId)) { if (deltaRjet < rJet) { - registryMC.fill(HIST("LongLivedReconstructed"), -1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + registryMC.fill(HIST("LongLivedReconstructed"), -1.f, particleId, chargeId, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); } if (deltaRue1 < rJet || deltaRue2 < rJet) { - registryMC.fill(HIST("LongLivedReconstructed"), 1.f, indexParticle, indexCharge, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); + registryMC.fill(HIST("LongLivedReconstructed"), 1.f, particleId, chargeId, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); } } } From 6b4a353b8efc1909dc4946a80030874fc11dc80f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 12:34:15 +0100 Subject: [PATCH 4/7] Update strangenessInJets.cxx --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 186 ++++++++---------- 1 file changed, 82 insertions(+), 104 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index 8cf5bb0d8f7..502f8485931 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -163,6 +163,36 @@ struct StrangenessInJets { // Instantiate utility class for jet background subtraction JetBkgSubUtils backgroundSub; + struct ParticlePositionWithRespectToJet { + void ParticlePositionWithRespectToJet(const float px, const float py, const float pz, + const TVector3& jet, + const TVector3& ue1, + const TVector3& ue2) + { + const TVector3 candidateDirection(px, py, pz); + const double deltaEtaJet = candidateDirection.Eta() - jet.Eta(); + const double deltaPhiJet = getDeltaPhi(candidateDirection.Phi(), jet.Phi()); + const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); + const double deltaEtaUe1 = candidateDirection.Eta() - ue1.Eta(); + const double deltaPhiUe1 = getDeltaPhi(candidateDirection.Phi(), ue1.Phi()); + const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); + const double deltaEtaUe2 = candidateDirection.Eta() - ue2.Eta(); + const double deltaPhiUe2 = getDeltaPhi(candidateDirection.Phi(), ue2.Phi()); + const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + mInJet = deltaRjet < rJet; + mInUE1 = deltaRue1 < rJet; + mInUE2 = deltaRue2 < rJet; + } + bool isInJet() const { return mInJet; } + bool isInUE1() const { return mInUE1; } + bool isInUE2() const { return mInUE2; } + + private: + bool mInJet = false; + bool mInUE1 = false; + bool mInUE2 = false; + }; + // Initialize CCDB access and histogram registry for Zorro processing void initCCDB(aod::BCsWithTimestamps::iterator const& bc) { @@ -561,8 +591,8 @@ struct StrangenessInJets { return false; // Momentum of lambda daughters - TVector3 proton(v0.pxpos(), v0.pypos(), v0.pzpos()); - TVector3 pion(v0.pxneg(), v0.pyneg(), v0.pzneg()); + const TVector3 proton(v0.pxpos(), v0.pypos(), v0.pzpos()); + const TVector3 pion(v0.pxneg(), v0.pyneg(), v0.pzneg()); // Selection on pt of Lambda daughters if (proton.Pt() < ptMinV0Proton || proton.Pt() > ptMaxV0Proton) @@ -607,8 +637,8 @@ struct StrangenessInJets { return false; // Momentum AntiLambda daughters - TVector3 pion(v0.pxpos(), v0.pypos(), v0.pzpos()); - TVector3 proton(v0.pxneg(), v0.pyneg(), v0.pzneg()); + const TVector3 pion(v0.pxpos(), v0.pypos(), v0.pzpos()); + const TVector3 proton(v0.pxneg(), v0.pyneg(), v0.pzneg()); // Selections on pt of Antilambda daughters if (proton.Pt() < ptMinV0Proton || proton.Pt() > ptMaxV0Proton) @@ -653,8 +683,8 @@ struct StrangenessInJets { return false; // Momentum of K0s daughters - TVector3 pionPos(v0.pxpos(), v0.pypos(), v0.pzpos()); - TVector3 pionNeg(v0.pxneg(), v0.pyneg(), v0.pzneg()); + const TVector3 pionPos(v0.pxpos(), v0.pypos(), v0.pzpos()); + const TVector3 pionNeg(v0.pxneg(), v0.pyneg(), v0.pzneg()); // Selections on pt of K0s daughters if (pionPos.Pt() < ptMinK0Pion || pionPos.Pt() > ptMaxK0Pion) @@ -1014,7 +1044,7 @@ struct StrangenessInJets { isAtLeastOneJetSelected = true; // Calculation of perpendicular cones - TVector3 jetAxis(jet.px(), jet.py(), jet.pz()); + const TVector3 jetAxis(jet.px(), jet.py(), jet.pz()); TVector3 ueAxis1(0, 0, 0), ueAxis2(0, 0, 0); getPerpendicularDirections(jetAxis, ueAxis1, ueAxis2); if (ueAxis1.Mag() == 0 || ueAxis2.Mag() == 0) { @@ -1045,43 +1075,34 @@ struct StrangenessInJets { // Get V0 daughters const auto& pos = v0.posTrack_as(); const auto& neg = v0.negTrack_as(); - TVector3 v0dir(v0.px(), v0.py(), v0.pz()); // Calculate distance from jet and UE axes - const float deltaEtaJet = v0dir.Eta() - selectedJet[i].Eta(); - const float deltaPhiJet = getDeltaPhi(v0dir.Phi(), selectedJet[i].Phi()); - const float deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const float deltaEtaUe1 = v0dir.Eta() - ue1[i].Eta(); - const float deltaPhiUe1 = getDeltaPhi(v0dir.Phi(), ue1[i].Phi()); - const float deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const float deltaEtaUe2 = v0dir.Eta() - ue2[i].Eta(); - const float deltaPhiUe2 = getDeltaPhi(v0dir.Phi(), ue2[i].Phi()); - const float deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const ParticlePositionWithRespectToJet position{v0.px(), v0.py(), v0.pz(), selectedJet[i], ue1[i], ue2[i]}; // K0s if (passedK0ShortSelection(v0, pos, neg)) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("K0s_in_jet"), multiplicity, v0.pt(), v0.mK0Short()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("K0s_in_ue"), multiplicity, v0.pt(), v0.mK0Short()); } } // Lambda if (passedLambdaSelection(v0, pos, neg)) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("Lambda_in_jet"), multiplicity, v0.pt(), v0.mLambda()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("Lambda_in_ue"), multiplicity, v0.pt(), v0.mLambda()); } } // AntiLambda if (passedAntiLambdaSelection(v0, pos, neg)) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("AntiLambda_in_jet"), multiplicity, v0.pt(), v0.mAntiLambda()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("AntiLambda_in_ue"), multiplicity, v0.pt(), v0.mAntiLambda()); } } @@ -1097,49 +1118,41 @@ struct StrangenessInJets { TVector3 cascadeDir(casc.px(), casc.py(), casc.pz()); // Calculate distance from jet and UE axes - const double deltaEtaJet = cascadeDir.Eta() - selectedJet[i].Eta(); - const double deltaPhiJet = getDeltaPhi(cascadeDir.Phi(), selectedJet[i].Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = cascadeDir.Eta() - ue1[i].Eta(); - const double deltaPhiUe1 = getDeltaPhi(cascadeDir.Phi(), ue1[i].Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = cascadeDir.Eta() - ue2[i].Eta(); - const double deltaPhiUe2 = getDeltaPhi(cascadeDir.Phi(), ue2[i].Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const ParticlePositionWithRespectToJet position{casc.px(), casc.py(), casc.pz(), selectedJet[i], ue1[i], ue2[i]}; // Xi+ if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() > 0) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("XiPos_in_jet"), multiplicity, casc.pt(), casc.mXi()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("XiPos_in_ue"), multiplicity, casc.pt(), casc.mXi()); } } // Xi- if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() < 0) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("XiNeg_in_jet"), multiplicity, casc.pt(), casc.mXi()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("XiNeg_in_ue"), multiplicity, casc.pt(), casc.mXi()); } } // Omega+ if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() > 0) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("OmegaPos_in_jet"), multiplicity, casc.pt(), casc.mOmega()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("OmegaPos_in_ue"), multiplicity, casc.pt(), casc.mOmega()); } } // Omega- if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() < 0) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryData.fill(HIST("OmegaNeg_in_jet"), multiplicity, casc.pt(), casc.mOmega()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryData.fill(HIST("OmegaNeg_in_ue"), multiplicity, casc.pt(), casc.mOmega()); } } @@ -1154,17 +1167,9 @@ struct StrangenessInJets { continue; } - const double deltaEtaJet = trk.eta() - selectedJet[i].Eta(); - const double deltaPhiJet = getDeltaPhi(trk.phi(), selectedJet[i].Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = trk.eta() - ue1[i].Eta(); - const double deltaPhiUe1 = getDeltaPhi(trk.phi(), ue1[i].Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = trk.eta() - ue2[i].Eta(); - const double deltaPhiUe2 = getDeltaPhi(trk.phi(), ue2[i].Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); - - if (deltaRjet < rJet) { + const ParticlePositionWithRespectToJet position{trk.px(), trk.py(), trk.pz(), selectedJet[i], ue1[i], ue2[i]}; + + if (position.isInJet()) { if (enabledSignals.value[ParticleOfInterest::kPions]) { registryData.fill(HIST("LongLived"), 1.f, 0.f, trk.sign(), trk.pt(), multiplicity, trk.tpcNSigmaPi(), trk.tofNSigmaPi(), trk.dcaXY()); } @@ -1175,7 +1180,7 @@ struct StrangenessInJets { registryData.fill(HIST("LongLived"), 1.f, 2.f, trk.sign(), trk.pt(), multiplicity, trk.tpcNSigmaPr(), trk.tofNSigmaPr(), trk.dcaXY()); } } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { if (enabledSignals.value[ParticleOfInterest::kPions]) { registryData.fill(HIST("LongLived"), -1.f, 0.f, trk.sign(), trk.pt(), multiplicity, trk.tpcNSigmaPi(), trk.tofNSigmaPi(), trk.dcaXY()); } @@ -1769,7 +1774,6 @@ struct StrangenessInJets { for (const auto& v0 : v0sPerColl) { const auto& pos = v0.posTrack_as(); const auto& neg = v0.negTrack_as(); - const TVector3 v0dir(v0.px(), v0.py(), v0.pz()); // Get MC particles if (!pos.has_mcParticle() || !neg.has_mcParticle()) @@ -1789,40 +1793,32 @@ struct StrangenessInJets { const bool isPhysPrim = motherPos.isPhysicalPrimary(); // Compute distance from jet and UE axes - const double deltaEtaJet = v0dir.Eta() - selectedJet[i].Eta(); - const double deltaPhiJet = getDeltaPhi(v0dir.Phi(), selectedJet[i].Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = v0dir.Eta() - ue1[i].Eta(); - const double deltaPhiUe1 = getDeltaPhi(v0dir.Phi(), ue1[i].Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = v0dir.Eta() - ue2[i].Eta(); - const double deltaPhiUe2 = getDeltaPhi(v0dir.Phi(), ue2[i].Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const ParticlePositionWithRespectToJet position{v0.px(), v0.py(), v0.pz(), selectedJet[i], ue1[i], ue2[i]}; // K0s if (passedK0ShortSelection(v0, pos, neg) && motherPos.pdgCode() == kK0Short && isPhysPrim) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("K0s_reconstructed_jet"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("K0s_reconstructed_ue"), multiplicity, v0.pt()); } } // Lambda if (passedLambdaSelection(v0, pos, neg) && motherPos.pdgCode() == kLambda0 && isPhysPrim) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("Lambda_reconstructed_jet"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("Lambda_reconstructed_ue"), multiplicity, v0.pt()); } } // AntiLambda if (passedAntiLambdaSelection(v0, pos, neg) && motherPos.pdgCode() == kLambda0Bar && isPhysPrim) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("AntiLambda_reconstructed_jet"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("AntiLambda_reconstructed_ue"), multiplicity, v0.pt()); } } @@ -1830,28 +1826,28 @@ struct StrangenessInJets { // Fill inclusive spectra // K0s if (passedK0ShortSelection(v0, pos, neg) && motherPos.pdgCode() == kK0Short) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("K0s_reconstructed_jet_incl"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("K0s_reconstructed_ue_incl"), multiplicity, v0.pt()); } } // Lambda if (passedLambdaSelection(v0, pos, neg) && motherPos.pdgCode() == kLambda0) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("Lambda_reconstructed_jet_incl"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("Lambda_reconstructed_ue_incl"), multiplicity, v0.pt()); } } // AntiLambda if (passedAntiLambdaSelection(v0, pos, neg) && motherPos.pdgCode() == kLambda0Bar) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("AntiLambda_reconstructed_jet_incl"), multiplicity, v0.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("AntiLambda_reconstructed_ue_incl"), multiplicity, v0.pt()); } } @@ -1886,50 +1882,41 @@ struct StrangenessInJets { continue; // Compute distances from jet and UE axes - const TVector3 cascadeDir(casc.px(), casc.py(), casc.pz()); - const double deltaEtaJet = cascadeDir.Eta() - selectedJet[i].Eta(); - const double deltaPhiJet = getDeltaPhi(cascadeDir.Phi(), selectedJet[i].Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = cascadeDir.Eta() - ue1[i].Eta(); - const double deltaPhiUe1 = getDeltaPhi(cascadeDir.Phi(), ue1[i].Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = cascadeDir.Eta() - ue2[i].Eta(); - const double deltaPhiUe2 = getDeltaPhi(cascadeDir.Phi(), ue2[i].Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const ParticlePositionWithRespectToJet position{casc.px(), casc.py(), casc.pz(), selectedJet[i], ue1[i], ue2[i]}; // Xi+ if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() > 0 && motherBach.pdgCode() == kXiPlusBar) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("XiPos_reconstructed_jet"), multiplicity, casc.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("XiPos_reconstructed_ue"), multiplicity, casc.pt()); } } // Xi- if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() < 0 && motherBach.pdgCode() == kXiMinus) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("XiNeg_reconstructed_jet"), multiplicity, casc.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("XiNeg_reconstructed_ue"), multiplicity, casc.pt()); } } // Omega+ if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() > 0 && motherBach.pdgCode() == kOmegaPlusBar) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("OmegaPos_reconstructed_jet"), multiplicity, casc.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("OmegaPos_reconstructed_ue"), multiplicity, casc.pt()); } } // Omega- if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() < 0 && motherBach.pdgCode() == kOmegaMinus) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("OmegaNeg_reconstructed_jet"), multiplicity, casc.pt()); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("OmegaNeg_reconstructed_ue"), multiplicity, casc.pt()); } } @@ -1952,25 +1939,16 @@ struct StrangenessInJets { if (!passedSingleTrackSelection(trk)) { continue; } - const TVector3 trackDir(trk.px(), trk.py(), trk.pz()); // Compute distances from jet and UE axes - const double deltaEtaJet = trackDir.Eta() - selectedJet[i].Eta(); - const double deltaPhiJet = getDeltaPhi(trackDir.Phi(), selectedJet[i].Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = trackDir.Eta() - ue1[i].Eta(); - const double deltaPhiUe1 = getDeltaPhi(trackDir.Phi(), ue1[i].Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = trackDir.Eta() - ue2[i].Eta(); - const double deltaPhiUe2 = getDeltaPhi(trackDir.Phi(), ue2[i].Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + const ParticlePositionWithRespectToJet position{trk.px(), trk.py(), trk.pz(), selectedJet[i], ue1[i], ue2[i]}; float particleId, chargeId; if (pdgToLongLivedIndex(mcParticle.pdgCode(), particleId, chargeId)) { - if (deltaRjet < rJet) { + if (position.isInJet()) { registryMC.fill(HIST("LongLivedReconstructed"), -1.f, particleId, chargeId, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); } - if (deltaRue1 < rJet || deltaRue2 < rJet) { + if (position.isInUE1() || position.isInUE2()) { registryMC.fill(HIST("LongLivedReconstructed"), 1.f, particleId, chargeId, trk.pt(), multiplicity, (trk.hasTOF() ? 1 : 0)); } } From be8a29e88c6e025a2b61e41f995701bb5bea423d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 12:47:02 +0100 Subject: [PATCH 5/7] Refactor ParticlePositionWithRespectToJet structure --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 63 ++++++++++--------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index 502f8485931..f38d4a8d5ec 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -163,36 +163,6 @@ struct StrangenessInJets { // Instantiate utility class for jet background subtraction JetBkgSubUtils backgroundSub; - struct ParticlePositionWithRespectToJet { - void ParticlePositionWithRespectToJet(const float px, const float py, const float pz, - const TVector3& jet, - const TVector3& ue1, - const TVector3& ue2) - { - const TVector3 candidateDirection(px, py, pz); - const double deltaEtaJet = candidateDirection.Eta() - jet.Eta(); - const double deltaPhiJet = getDeltaPhi(candidateDirection.Phi(), jet.Phi()); - const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); - const double deltaEtaUe1 = candidateDirection.Eta() - ue1.Eta(); - const double deltaPhiUe1 = getDeltaPhi(candidateDirection.Phi(), ue1.Phi()); - const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); - const double deltaEtaUe2 = candidateDirection.Eta() - ue2.Eta(); - const double deltaPhiUe2 = getDeltaPhi(candidateDirection.Phi(), ue2.Phi()); - const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); - mInJet = deltaRjet < rJet; - mInUE1 = deltaRue1 < rJet; - mInUE2 = deltaRue2 < rJet; - } - bool isInJet() const { return mInJet; } - bool isInUE1() const { return mInUE1; } - bool isInUE2() const { return mInUE2; } - - private: - bool mInJet = false; - bool mInUE1 = false; - bool mInUE2 = false; - }; - // Initialize CCDB access and histogram registry for Zorro processing void initCCDB(aod::BCsWithTimestamps::iterator const& bc) { @@ -204,6 +174,7 @@ struct StrangenessInJets { void init(InitContext const&) { + ParticlePositionWithRespectToJet::mJetRadius = rJet.value; if (cfgSkimmedProcessing) { zorroSummary.setObject(zorro.getZorroSummary()); } @@ -448,6 +419,38 @@ struct StrangenessInJets { return TwoPI - diff; } + struct ParticlePositionWithRespectToJet { + ParticlePositionWithRespectToJet(const float px, const float py, const float pz, + const TVector3& jet, + const TVector3& ue1, + const TVector3& ue2) + { + const TVector3 candidateDirection(px, py, pz); + const double deltaEtaJet = candidateDirection.Eta() - jet.Eta(); + const double deltaPhiJet = getDeltaPhi(candidateDirection.Phi(), jet.Phi()); + const double deltaRjet = std::sqrt(deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet); + const double deltaEtaUe1 = candidateDirection.Eta() - ue1.Eta(); + const double deltaPhiUe1 = getDeltaPhi(candidateDirection.Phi(), ue1.Phi()); + const double deltaRue1 = std::sqrt(deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1); + const double deltaEtaUe2 = candidateDirection.Eta() - ue2.Eta(); + const double deltaPhiUe2 = getDeltaPhi(candidateDirection.Phi(), ue2.Phi()); + const double deltaRue2 = std::sqrt(deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2); + mInJet = deltaRjet < mJetRadius; + mInUE1 = deltaRue1 < mJetRadius; + mInUE2 = deltaRue2 < mJetRadius; + } + bool isInJet() const { return mInJet; } + bool isInUE1() const { return mInUE1; } + bool isInUE2() const { return mInUE2; } + + static double mJetRadius = 0.f; + + private: + bool mInJet = false; + bool mInUE1 = false; + bool mInUE2 = false; + }; + // Check if particle is a physical primary or a decay product of a heavy-flavor hadron bool isPhysicalPrimaryOrFromHF(aod::McParticle const& particle, aod::McParticles const& mcParticles) { From 52b117d5dda526fc894e0f8225307a1613b5f71b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 12:53:28 +0100 Subject: [PATCH 6/7] Change getDeltaPhi to static and update mJetRadius --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index f38d4a8d5ec..1c759c0f7e5 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -408,7 +408,7 @@ struct StrangenessInJets { } // Delta phi calculation - double getDeltaPhi(double a1, double a2) + static double getDeltaPhi(const double a1, const double a2) { const double phi1 = TVector2::Phi_0_2pi(a1); const double phi2 = TVector2::Phi_0_2pi(a2); @@ -443,7 +443,7 @@ struct StrangenessInJets { bool isInUE1() const { return mInUE1; } bool isInUE2() const { return mInUE2; } - static double mJetRadius = 0.f; + static double mJetRadius; private: bool mInJet = false; From 0c5dd8192b6a4bc32bf88e9019f4b68810763267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sun, 1 Feb 2026 13:06:56 +0100 Subject: [PATCH 7/7] Add fallback return in angle difference calculation Added a fallback return statement for unexpected cases. --- PWGLF/Tasks/Strangeness/strangenessInJets.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx index 1c759c0f7e5..7e7150f14db 100644 --- a/PWGLF/Tasks/Strangeness/strangenessInJets.cxx +++ b/PWGLF/Tasks/Strangeness/strangenessInJets.cxx @@ -417,6 +417,7 @@ struct StrangenessInJets { return diff; if (diff > PI) return TwoPI - diff; + return diff; // should not happen } struct ParticlePositionWithRespectToJet {