@@ -130,7 +130,7 @@ struct StrangenessInJetsIons {
130130
131131 // Track analysis parameters
132132 Configurable<int > minITSnCls{" minITSnCls" , 4 , " Minimum number of ITS clusters" };
133- Configurable<int > minNCrossedRowsTPC{" minNCrossedRowsTPC" , 80 , " Minimum number of TPC crossed rows" };
133+ Configurable<int > minNCrossedRowsTPC{" minNCrossedRowsTPC" , 70 , " Minimum number of TPC crossed rows" };
134134 Configurable<double > maxChi2TPC{" maxChi2TPC" , 4 .0f , " Maximum chi2 per cluster TPC" };
135135 Configurable<double > etaMin{" etaMin" , -0 .8f , " Minimum eta" };
136136 Configurable<double > etaMax{" etaMax" , +0 .8f , " Maximum eta" };
@@ -148,12 +148,22 @@ struct StrangenessInJetsIons {
148148 Configurable<bool > requireTOF{" requireTOF" , false , " Require TOF hit" };
149149
150150 // V0 analysis parameters
151- Configurable<double > minimumV0Radius{" minimumV0Radius" , 0 .5f , " Minimum V0 Radius" };
152- Configurable<double > maximumV0Radius{" maximumV0Radius" , 40 .0f , " Maximum V0 Radius" };
153- Configurable<double > dcanegtoPVmin{" dcanegtoPVmin" , 0 .1f , " Minimum DCA of negative track to primary vertex" };
154- Configurable<double > dcapostoPVmin{" dcapostoPVmin" , 0 .1f , " Minimum DCA of positive track to primary vertex" };
155- Configurable<double > v0cospaMin{" v0cospaMin" , 0 .99f , " Minimum V0 cosine of pointing angle" };
156- Configurable<double > dcaV0DaughtersMax{" dcaV0DaughtersMax" , 0 .5f , " Maximum DCA between V0 daughters" };
151+ Configurable<double > minimumV0Radius{" minimumV0Radius" , 1 .2f , " Minimum V0 Radius (cm)" };
152+ Configurable<double > maximumV0Radius{" maximumV0Radius" , 40 .0f , " Maximum V0 Radius (cm)" };
153+ Configurable<double > v0cospaMin{" v0cospaMin" , 0 .995f , " Minimum V0 cosine of pointing angle" };
154+ Configurable<double > dcaV0DaughtersMax{" dcaV0DaughtersMax" , 1 .0f , " Maximum DCA between V0 daughters" };
155+ Configurable<bool > requireV0type{" requireV0type" , true , " Require V0 type Cut" };
156+ Configurable<int > v0type{" v0type" , 1 , " 0: solely for cascades (does not pass standard V0 cuts), 1: standard 2, 3: photon-like with TPC-only use. Regular analysis should always use type 1" };
157+ // K0S parameters
158+ Configurable<double > dcaNegToPVminK0s{" dcaNegToPVminK0s" , 0 .1f , " Minimum DCA of negative track to primary vertex in K0S decays (cm)" };
159+ Configurable<double > dcaPosToPVminK0s{" dcaPosToPVminK0s" , 0 .1f , " Minimum DCA of positive track to primary vertex in K0S decays (cm)" };
160+ Configurable<bool > requireArmenterosCut{" requireArmenterosCut" , true , " Require Armenteros Cut" };
161+ Configurable<float > paramArmenterosCut{" paramArmenterosCut" , 2 .0f , " Parameter Armenteros Cut (K0S only). This parameters multiplies qtarm" };
162+ Configurable<float > ctauK0s{" ctauK0s" , 20 .0f , " C tau K0S (cm)" };
163+ // Lambda/anti-Lambda paramaters
164+ Configurable<double > dcaProtonToPVmin{" dcaProtonToPVmin" , 0 .05f , " Minimum DCA of proton/anti-proton track to primary vertex in Lambda/anti-Lambda decays (cm)" };
165+ Configurable<double > dcaPionToPVmin{" dcaPionToPVmin" , 0 .2f , " Minimum DCA of pion-/pion+ track to primary vertex in Lambda/anti-Lambda decays (cm)" };
166+ Configurable<float > ctauLambda{" ctauLambda" , 30 .0f , " C tau Lambda (cm)" };
157167
158168 // Cascade analysis parameters
159169 Configurable<float > minimumCascRadius{" minimumCascRadius" , 0 .1f , " Minimum cascade radius" };
@@ -162,6 +172,8 @@ struct StrangenessInJetsIons {
162172 Configurable<float > dcabachtopvMin{" dcabachtopvMin" , 0 .1f , " Minimum DCA of bachelor to primary vertex" };
163173 Configurable<float > dcaV0topvMin{" dcaV0topvMin" , 0 .1f , " Minimum DCA of V0 to primary vertex" };
164174 Configurable<float > dcaCascDaughtersMax{" dcaCascDaughtersMax" , 0 .5f , " Maximum DCA between daughters" };
175+ Configurable<double > dcaNegToPVminV0{" dcaNegToPVminV0" , 0 .1f , " Minimum DCA of V0 negative track to primary vertex in cascades" };
176+ Configurable<double > dcaPosToPVminV0{" dcaPosToPVminV0" , 0 .1f , " Minimum DCA of V0 positive track to primary vertex in cascades" };
165177 Configurable<float > deltaMassXi{" deltaMassXi" , 0 .02f , " Mass window for Xi rejection" };
166178 Configurable<float > deltaMassOmega{" deltaMassOmega" , 0 .02f , " Mass window for Omega rejection" };
167179 Configurable<float > deltaMassLambda{" deltaMassLambda" , 0 .02f , " Mass window for Lambda inclusion" };
@@ -219,6 +231,9 @@ struct StrangenessInJetsIons {
219231 LOG (fatal) << " No particles selected. Select at least one particle." << endl;
220232 }
221233
234+ // Histograms for checks
235+ registryQC.add (" V0_type" , " V0_type" , HistType::kTH1F , {{10 , -0.5 , 9.5 , " V0 type" }});
236+
222237 // Histograms for real data
223238 if (doprocessData) {
224239
@@ -574,7 +589,7 @@ struct StrangenessInJetsIons {
574589
575590 // Lambda selections
576591 template <typename Lambda, typename TrackPos, typename TrackNeg>
577- bool passedLambdaSelection (const Lambda& v0, const TrackPos& ptrack, const TrackNeg& ntrack)
592+ bool passedLambdaSelection (const Lambda& v0, const TrackPos& ptrack, const TrackNeg& ntrack, const TVector3& vtxPos )
578593 {
579594 // Single-track selections
580595 if (!passedSingleTrackSelection (ptrack) || !passedSingleTrackSelection (ntrack))
@@ -595,12 +610,18 @@ struct StrangenessInJetsIons {
595610 return false ;
596611 if (v0.v0radius () < minimumV0Radius || v0.v0radius () > maximumV0Radius)
597612 return false ;
613+ if (v0.distovertotmom (vtxPos.X (), vtxPos.Y (), vtxPos.Z ()) * o2::constants::physics::MassLambda0 > ctauLambda)
614+ return false ;
598615 if (std::fabs (v0.dcaV0daughters ()) > dcaV0DaughtersMax)
599616 return false ;
600- if (std::fabs (v0.dcapostopv ()) < dcapostoPVmin )
617+ if (std::fabs (v0.dcapostopv ()) < dcaProtonToPVmin )
601618 return false ;
602- if (std::fabs (v0.dcanegtopv ()) < dcanegtoPVmin )
619+ if (std::fabs (v0.dcanegtopv ()) < dcaPionToPVmin )
603620 return false ;
621+ if (v0.v0Type () != v0type && requireV0type) {
622+ registryQC.fill (HIST (" V0_type" ), v0.v0Type ());
623+ return false ;
624+ }
604625
605626 // PID selections (TPC): positive track = proton, negative track = pion
606627 if (ptrack.tpcNSigmaPr () < nsigmaTPCmin || ptrack.tpcNSigmaPr () > nsigmaTPCmax)
@@ -620,7 +641,7 @@ struct StrangenessInJetsIons {
620641
621642 // AntiLambda selections
622643 template <typename AntiLambda, typename TrackPos, typename TrackNeg>
623- bool passedAntiLambdaSelection (const AntiLambda& v0, const TrackPos& ptrack, const TrackNeg& ntrack)
644+ bool passedAntiLambdaSelection (const AntiLambda& v0, const TrackPos& ptrack, const TrackNeg& ntrack, const TVector3& vtxPos )
624645 {
625646 // Single-track selections
626647 if (!passedSingleTrackSelection (ptrack) || !passedSingleTrackSelection (ntrack))
@@ -641,12 +662,18 @@ struct StrangenessInJetsIons {
641662 return false ;
642663 if (v0.v0radius () < minimumV0Radius || v0.v0radius () > maximumV0Radius)
643664 return false ;
665+ if (v0.distovertotmom (vtxPos.X (), vtxPos.Y (), vtxPos.Z ()) * o2::constants::physics::MassLambda0 > ctauLambda)
666+ return false ;
644667 if (std::fabs (v0.dcaV0daughters ()) > dcaV0DaughtersMax)
645668 return false ;
646- if (std::fabs (v0.dcapostopv ()) < dcapostoPVmin)
669+ if (std::fabs (v0.dcapostopv ()) < dcaPionToPVmin)
670+ return false ;
671+ if (std::fabs (v0.dcanegtopv ()) < dcaProtonToPVmin)
647672 return false ;
648- if (std::fabs (v0.dcanegtopv ()) < dcanegtoPVmin)
673+ if (v0.v0Type () != v0type && requireV0type) {
674+ registryQC.fill (HIST (" V0_type" ), v0.v0Type ());
649675 return false ;
676+ }
650677
651678 // PID selections (TPC): negative track = proton, positive track = pion
652679 if (ptrack.tpcNSigmaPi () < nsigmaTPCmin || ptrack.tpcNSigmaPi () > nsigmaTPCmax)
@@ -666,7 +693,7 @@ struct StrangenessInJetsIons {
666693
667694 // K0s selections
668695 template <typename K0short, typename TrackPos, typename TrackNeg>
669- bool passedK0ShortSelection (const K0short& v0, const TrackPos& ptrack, const TrackNeg& ntrack)
696+ bool passedK0ShortSelection (const K0short& v0, const TrackPos& ptrack, const TrackNeg& ntrack, const TVector3& vtxPos )
670697 {
671698 // Single-Track Selections
672699 if (!passedSingleTrackSelection (ptrack) || !passedSingleTrackSelection (ntrack))
@@ -682,17 +709,27 @@ struct StrangenessInJetsIons {
682709 if (pionNeg.Pt () < ptMinK0Pion || pionNeg.Pt () > ptMaxK0Pion)
683710 return false ;
684711
712+ // Armenteros-Podolanski cut
713+ if (std::abs (v0.alpha ()) >= (paramArmenterosCut * v0.qtarm ()) && (requireArmenterosCut))
714+ return false ;
715+
685716 // V0 selections
686717 if (v0.v0cosPA () < v0cospaMin)
687718 return false ;
688719 if (v0.v0radius () < minimumV0Radius || v0.v0radius () > maximumV0Radius)
689720 return false ;
721+ if (v0.distovertotmom (vtxPos.X (), vtxPos.Y (), vtxPos.Z ()) * o2::constants::physics::MassK0Short > ctauK0s)
722+ return false ;
690723 if (std::fabs (v0.dcaV0daughters ()) > dcaV0DaughtersMax)
691724 return false ;
692- if (std::fabs (v0.dcapostopv ()) < dcapostoPVmin)
725+ if (std::fabs (v0.dcapostopv ()) < dcaPosToPVminK0s)
726+ return false ;
727+ if (std::fabs (v0.dcanegtopv ()) < dcaNegToPVminK0s)
693728 return false ;
694- if (std::fabs (v0.dcanegtopv ()) < dcanegtoPVmin)
729+ if (v0.v0Type () != v0type && requireV0type) {
730+ registryQC.fill (HIST (" V0_type" ), v0.v0Type ());
695731 return false ;
732+ }
696733
697734 // PID selections (TPC)
698735 if (ptrack.tpcNSigmaPi () < nsigmaTPCmin || ptrack.tpcNSigmaPi () > nsigmaTPCmax)
@@ -791,9 +828,9 @@ struct StrangenessInJetsIons {
791828 return false ;
792829 if (std::fabs (casc.dcaV0daughters ()) > dcaV0DaughtersMax)
793830 return false ;
794- if (std::fabs (casc.dcapostopv ()) < dcapostoPVmin )
831+ if (std::fabs (casc.dcapostopv ()) < dcaPosToPVminV0 )
795832 return false ;
796- if (std::fabs (casc.dcanegtopv ()) < dcanegtoPVmin )
833+ if (std::fabs (casc.dcanegtopv ()) < dcaNegToPVminV0 )
797834 return false ;
798835
799836 // Cascade selections
@@ -905,9 +942,9 @@ struct StrangenessInJetsIons {
905942 return false ;
906943 if (std::fabs (casc.dcaV0daughters ()) > dcaV0DaughtersMax)
907944 return false ;
908- if (std::fabs (casc.dcapostopv ()) < dcapostoPVmin )
945+ if (std::fabs (casc.dcapostopv ()) < dcaPosToPVminV0 )
909946 return false ;
910- if (std::fabs (casc.dcanegtopv ()) < dcanegtoPVmin )
947+ if (std::fabs (casc.dcanegtopv ()) < dcaNegToPVminV0 )
911948 return false ;
912949
913950 // Cascade selections
@@ -1119,8 +1156,11 @@ struct StrangenessInJetsIons {
11191156 const float deltaPhiUe2 = getDeltaPhi (v0dir.Phi (), ue2[i].Phi ());
11201157 const float deltaRue2 = std::sqrt (deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2);
11211158
1159+ // Vertex position vector
1160+ TVector3 vtxPos (collision.posX (), collision.posY (), collision.posZ ());
1161+
11221162 // K0s
1123- if (passedK0ShortSelection (v0, pos, neg)) {
1163+ if (passedK0ShortSelection (v0, pos, neg, vtxPos )) {
11241164 if (deltaRjet < rJet) {
11251165 registryData.fill (HIST (" K0s_in_jet" ), multiplicity, v0.pt (), v0.mK0Short ());
11261166 }
@@ -1129,7 +1169,7 @@ struct StrangenessInJetsIons {
11291169 }
11301170 }
11311171 // Lambda
1132- if (passedLambdaSelection (v0, pos, neg)) {
1172+ if (passedLambdaSelection (v0, pos, neg, vtxPos )) {
11331173 if (deltaRjet < rJet) {
11341174 registryData.fill (HIST (" Lambda_in_jet" ), multiplicity, v0.pt (), v0.mLambda ());
11351175 }
@@ -1138,7 +1178,7 @@ struct StrangenessInJetsIons {
11381178 }
11391179 }
11401180 // AntiLambda
1141- if (passedAntiLambdaSelection (v0, pos, neg)) {
1181+ if (passedAntiLambdaSelection (v0, pos, neg, vtxPos )) {
11421182 if (deltaRjet < rJet) {
11431183 registryData.fill (HIST (" AntiLambda_in_jet" ), multiplicity, v0.pt (), v0.mAntiLambda ());
11441184 }
@@ -1722,8 +1762,11 @@ struct StrangenessInJetsIons {
17221762 double deltaPhiUe2 = getDeltaPhi (v0dir.Phi (), ue2[i].Phi ());
17231763 double deltaRue2 = std::sqrt (deltaEtaUe2 * deltaEtaUe2 + deltaPhiUe2 * deltaPhiUe2);
17241764
1765+ // Vertex position vector
1766+ TVector3 vtxPos (collision.posX (), collision.posY (), collision.posZ ());
1767+
17251768 // K0s
1726- if (passedK0ShortSelection (v0, pos, neg) && pdgParent == kK0Short && isPhysPrim) {
1769+ if (passedK0ShortSelection (v0, pos, neg, vtxPos ) && pdgParent == kK0Short && isPhysPrim) {
17271770 if (deltaRjet < rJet) {
17281771 registryMC.fill (HIST (" K0s_reconstructed_jet" ), multiplicity, v0.pt ());
17291772 }
@@ -1732,7 +1775,7 @@ struct StrangenessInJetsIons {
17321775 }
17331776 }
17341777 // Lambda
1735- if (passedLambdaSelection (v0, pos, neg) && pdgParent == kLambda0 && isPhysPrim) {
1778+ if (passedLambdaSelection (v0, pos, neg, vtxPos ) && pdgParent == kLambda0 && isPhysPrim) {
17361779 if (deltaRjet < rJet) {
17371780 registryMC.fill (HIST (" Lambda_reconstructed_jet" ), multiplicity, v0.pt ());
17381781 }
@@ -1741,7 +1784,7 @@ struct StrangenessInJetsIons {
17411784 }
17421785 }
17431786 // AntiLambda
1744- if (passedAntiLambdaSelection (v0, pos, neg) && pdgParent == kLambda0Bar && isPhysPrim) {
1787+ if (passedAntiLambdaSelection (v0, pos, neg, vtxPos ) && pdgParent == kLambda0Bar && isPhysPrim) {
17451788 if (deltaRjet < rJet) {
17461789 registryMC.fill (HIST (" AntiLambda_reconstructed_jet" ), multiplicity, v0.pt ());
17471790 }
@@ -1752,7 +1795,7 @@ struct StrangenessInJetsIons {
17521795
17531796 // Fill inclusive spectra
17541797 // K0s
1755- if (passedK0ShortSelection (v0, pos, neg) && pdgParent == kK0Short ) {
1798+ if (passedK0ShortSelection (v0, pos, neg, vtxPos ) && pdgParent == kK0Short ) {
17561799 if (deltaRjet < rJet) {
17571800 registryMC.fill (HIST (" K0s_reconstructed_jet_incl" ), multiplicity, v0.pt ());
17581801 }
@@ -1761,7 +1804,7 @@ struct StrangenessInJetsIons {
17611804 }
17621805 }
17631806 // Lambda
1764- if (passedLambdaSelection (v0, pos, neg) && pdgParent == kLambda0 ) {
1807+ if (passedLambdaSelection (v0, pos, neg, vtxPos ) && pdgParent == kLambda0 ) {
17651808 if (deltaRjet < rJet) {
17661809 registryMC.fill (HIST (" Lambda_reconstructed_jet_incl" ), multiplicity, v0.pt ());
17671810 }
@@ -1770,7 +1813,7 @@ struct StrangenessInJetsIons {
17701813 }
17711814 }
17721815 // AntiLambda
1773- if (passedAntiLambdaSelection (v0, pos, neg) && pdgParent == kLambda0Bar ) {
1816+ if (passedAntiLambdaSelection (v0, pos, neg, vtxPos ) && pdgParent == kLambda0Bar ) {
17741817 if (deltaRjet < rJet) {
17751818 registryMC.fill (HIST (" AntiLambda_reconstructed_jet_incl" ), multiplicity, v0.pt ());
17761819 }
0 commit comments