@@ -168,10 +168,16 @@ struct StrangenessInJetsIons {
168168 Configurable<bool > requireArmenterosCut{" requireArmenterosCut" , true , " Require Armenteros Cut" };
169169 Configurable<float > paramArmenterosCut{" paramArmenterosCut" , 0 .2f , " Parameter Armenteros Cut (K0S only). This parameters multiplies alphaArm (Check if: qtarm >= this * |alphaArm|)" };
170170 Configurable<float > ctauK0s{" ctauK0s" , 20 .0f , " C tau K0S (cm)" };
171+ Configurable<bool > requireK0sMassCuts{" requireK0sMassCuts" , true , " [K0S] Require mass window for K0S selection and for Lambda rejection" };
172+ Configurable<double > lamRejWindow{" lamRejWindow" , 0 .005f , " [K0S] Mass window for Lambda rejection" };
173+ Configurable<double > k0sMassWindow{" k0sMassWindow" , 0 .1f , " [K0S] Mass window for K0S selection" };
171174 // Lambda/anti-Lambda paramaters
172175 Configurable<double > dcaProtonToPVmin{" dcaProtonToPVmin" , 0 .05f , " Minimum DCA of proton/anti-proton track to primary vertex in Lambda/anti-Lambda decays (cm)" };
173176 Configurable<double > dcaPionToPVmin{" dcaPionToPVmin" , 0 .2f , " Minimum DCA of pion-/pion+ track to primary vertex in Lambda/anti-Lambda decays (cm)" };
174177 Configurable<float > ctauLambda{" ctauLambda" , 30 .0f , " C tau Lambda (cm)" };
178+ Configurable<bool > requireLambdaMassCuts{" requireLambdaMassCuts" , true , " [Lambda] Require mass window for Lambda selection and for K0S rejection" };
179+ Configurable<double > k0sRejWindow{" k0sRejWindow" , 0 .010f , " [Lambda] Mass window for K0S rejection" };
180+ Configurable<double > lamMassWindow{" lamMassWindow" , 0 .1f , " [Lambda] Mass window for Lambda selection" };
175181 } configV0;
176182
177183 // Cascade analysis parameters
@@ -359,7 +365,7 @@ struct StrangenessInJetsIons {
359365 }
360366 if (particleOfInterestDict[ParticleOfInterest::kPions ]) {
361367 registryMC.add (" PionPos_generated_jet" , " PionPos_generated_jet" , HistType::kTH2F , {multAxis, ptAxisLongLived});
362- registryMC.add (" PionNeg_generated_jet" , " PionNeg_generated_jet" , HistType::kTH2F , {multAxis, ptAxisLongLived});
368+ registryMC.add (" PionNeg_generated_jet" , " PionNeg_generated_jet" , HistType::kTH2F , {multAxis, ptAxisLongLived});
363369 registryMC.add (" PionPos_generated_ue" , " PionPos_generated_ue" , HistType::kTH2F , {multAxis, ptAxisLongLived});
364370 registryMC.add (" PionNeg_generated_ue" , " PionNeg_generated_ue" , HistType::kTH2F , {multAxis, ptAxisLongLived});
365371
@@ -426,6 +432,14 @@ struct StrangenessInJetsIons {
426432 registryMC.add (" AntiLambda_reconstructed_jet_incl" , " AntiLambda_reconstructed_jet_incl" , HistType::kTH2F , {multAxis, ptAxis});
427433 registryMC.add (" AntiLambda_reconstructed_ue_incl" , " AntiLambda_reconstructed_ue_incl" , HistType::kTH2F , {multAxis, ptAxis});
428434
435+ // Histograms for generated particles in reconstructed events
436+ registryMC.add (" K0s_gen_recoEvent_jet" , " K0s_gen_recoEvent_jet" , HistType::kTH2F , {multAxis, ptAxis});
437+ registryMC.add (" K0s_gen_recoEvent_ue" , " K0s_gen_recoEvent_ue" , HistType::kTH2F , {multAxis, ptAxis});
438+ registryMC.add (" Lambda_gen_recoEvent_jet" , " Lambda_gen_recoEvent_jet" , HistType::kTH2F , {multAxis, ptAxis});
439+ registryMC.add (" Lambda_gen_recoEvent_ue" , " Lambda_gen_recoEvent_ue" , HistType::kTH2F , {multAxis, ptAxis});
440+ registryMC.add (" AntiLambda_gen_recoEvent_jet" , " AntiLambda_gen_recoEvent_jet" , HistType::kTH2F , {multAxis, ptAxis});
441+ registryMC.add (" AntiLambda_gen_recoEvent_ue" , " AntiLambda_gen_recoEvent_ue" , HistType::kTH2F , {multAxis, ptAxis});
442+
429443 // Histograms for the full event (without jets)
430444 registryMC.add (" K0s_reconstructed_MB" , " K0s_reconstructed_MB" , HistType::kTH2F , {multAxis, ptAxis});
431445 registryMC.add (" Lambda_reconstructed_MB" , " Lambda_reconstructed_MB" , HistType::kTH2F , {multAxis, ptAxis});
@@ -667,6 +681,14 @@ struct StrangenessInJetsIons {
667681 if (ntrack.tpcNSigmaPi () < configTracks.nsigmaTPCmin || ntrack.tpcNSigmaPi () > configTracks.nsigmaTPCmax )
668682 return false ;
669683
684+ if (configV0.requireLambdaMassCuts &&
685+ std::abs (v0.mK0Short () - o2::constants::physics::MassK0Short) < configV0.k0sRejWindow )
686+ return false ;
687+
688+ if (configV0.requireLambdaMassCuts &&
689+ std::abs (v0.mLambda () - o2::constants::physics::MassLambda) > configV0.lamMassWindow )
690+ return false ;
691+
670692 // PID selections (TOF): positive track = proton, negative track = pion
671693 if (configTracks.requireTOF ) {
672694 if (ptrack.tofNSigmaPr () < configTracks.nsigmaTOFmin || ptrack.tofNSigmaPr () > configTracks.nsigmaTOFmax )
@@ -720,6 +742,14 @@ struct StrangenessInJetsIons {
720742 if (ntrack.tpcNSigmaPr () < configTracks.nsigmaTPCmin || ntrack.tpcNSigmaPr () > configTracks.nsigmaTPCmax )
721743 return false ;
722744
745+ if (configV0.requireLambdaMassCuts &&
746+ std::abs (v0.mK0Short () - o2::constants::physics::MassK0Short) < configV0.k0sRejWindow )
747+ return false ;
748+
749+ if (configV0.requireLambdaMassCuts &&
750+ std::abs (v0.mLambda () - o2::constants::physics::MassLambda) > configV0.lamMassWindow )
751+ return false ;
752+
723753 // PID selections (TOF): negative track = proton, positive track = pion
724754 if (configTracks.requireTOF ) {
725755 if (ptrack.tofNSigmaPi () < configTracks.nsigmaTOFmin || ptrack.tofNSigmaPi () > configTracks.nsigmaTOFmax )
@@ -778,6 +808,15 @@ struct StrangenessInJetsIons {
778808 if (ntrack.tpcNSigmaPi () < configTracks.nsigmaTPCmin || ntrack.tpcNSigmaPi () > configTracks.nsigmaTPCmax )
779809 return false ;
780810
811+ if (configV0.requireK0sMassCuts &&
812+ (std::abs (v0.mLambda () - o2::constants::physics::MassLambda) < configV0.lamRejWindow ||
813+ std::abs (v0.mAntiLambda () - o2::constants::physics::MassLambda) < configV0.lamRejWindow ))
814+ return false ;
815+
816+ if (configV0.requireK0sMassCuts &&
817+ std::abs (v0.mK0Short () - o2::constants::physics::MassK0Short) > configV0.k0sMassWindow )
818+ return false ;
819+
781820 // PID selections (TOF)
782821 if (configTracks.requireTOF ) {
783822 if (ptrack.tofNSigmaPi () < configTracks.nsigmaTOFmin || ptrack.tofNSigmaPi () > configTracks.nsigmaTOFmax )
@@ -1971,6 +2010,7 @@ struct StrangenessInJetsIons {
19712010 auto v0sPerColl = fullV0s.sliceBy (perCollisionV0, collision.globalIndex ());
19722011 auto cascPerColl = Cascades.sliceBy (perCollisionCasc, collision.globalIndex ());
19732012 auto tracksPerColl = mcTracks.sliceBy (perCollisionTrk, collision.globalIndex ());
2013+ const auto & mcParticlesPerColl = mcParticles.sliceBy (perMCCollision, mcCollision.globalIndex ());
19742014
19752015 FillFullEventHistoMCREC (collision, mcParticles, v0sPerColl,
19762016 cascPerColl, tracksPerColl, multiplicity);
@@ -2035,6 +2075,75 @@ struct StrangenessInJetsIons {
20352075 // Loop over selected jets
20362076 for (int i = 0 ; i < static_cast <int >(selectedJet.size ()); i++) {
20372077
2078+ // ------------------------------------------------
2079+ // --- Generated hadrons in reconstructed jets ----
2080+ for (auto & particle : mcParticlesPerColl) {
2081+ if (!particle.isPhysicalPrimary () || std::abs (particle.eta ()) > 0.8 )
2082+ continue ;
2083+
2084+ int absPdg = std::abs (particle.pdgCode ());
2085+ if (absPdg != kK0Short && absPdg != kLambda0 )
2086+ continue ;
2087+
2088+ TVector3 momVec (particle.px (), particle.py (), particle.pz ());
2089+
2090+ // Compute distance of particles from jet and UE axes
2091+ const double deltaEtaJet = momVec.Eta () - selectedJet[i].Eta ();
2092+ const double deltaPhiJet = getDeltaPhi (momVec.Phi (), selectedJet[i].Phi ());
2093+ const double deltaRJet = std::sqrt (deltaEtaJet * deltaEtaJet + deltaPhiJet * deltaPhiJet);
2094+ const double deltaEtaUe1 = momVec.Eta () - ue1[i].Eta ();
2095+ const double deltaPhiUe1 = getDeltaPhi (momVec.Phi (), ue1[i].Phi ());
2096+ const double deltaRUe1 = std::sqrt (deltaEtaUe1 * deltaEtaUe1 + deltaPhiUe1 * deltaPhiUe1);
2097+ const double deltaEtaUe2 = momVec.Eta () - ue2[i].Eta ();
2098+ const double deltaPhiUe2 = getDeltaPhi (momVec.Phi (), ue2[i].Phi ());
2099+ const double deltaRUe2 = std::sqrt (deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2);
2100+
2101+ // Select particles inside jet
2102+ if (deltaRJet < rJet) {
2103+ switch (particle.pdgCode ()) {
2104+ case kK0Short :
2105+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2106+ registryMC.fill (HIST (" K0s_gen_recoEvent_jet" ), multiplicity, momVec.Pt ());
2107+ }
2108+ break ;
2109+ case kLambda0 :
2110+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2111+ registryMC.fill (HIST (" Lambda_gen_recoEvent_jet" ), multiplicity, momVec.Pt ());
2112+ }
2113+ break ;
2114+ case kLambda0Bar :
2115+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2116+ registryMC.fill (HIST (" AntiLambda_gen_recoEvent_jet" ), multiplicity, momVec.Pt ());
2117+ }
2118+ break ;
2119+ default :
2120+ break ;
2121+ }
2122+ }
2123+ if (deltaRUe1 < rJet || deltaRUe2 < rJet) {
2124+ switch (particle.pdgCode ()) {
2125+ case kK0Short :
2126+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2127+ registryMC.fill (HIST (" K0s_gen_recoEvent_ue" ), multiplicity, momVec.Pt ());
2128+ }
2129+ break ;
2130+ case kLambda0 :
2131+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2132+ registryMC.fill (HIST (" Lambda_gen_recoEvent_ue" ), multiplicity, momVec.Pt ());
2133+ }
2134+ break ;
2135+ case kLambda0Bar :
2136+ if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
2137+ registryMC.fill (HIST (" AntiLambda_gen_recoEvent_ue" ), multiplicity, momVec.Pt ());
2138+ }
2139+ break ;
2140+ default :
2141+ break ;
2142+ }
2143+ }
2144+ }
2145+ // ----------------------------------------
2146+
20382147 // V0 particles
20392148 if (particleOfInterestDict[ParticleOfInterest::kV0Particles ]) {
20402149 for (const auto & v0 : v0sPerColl) {
0 commit comments