Skip to content

Commit f32bcb5

Browse files
committed
Adding selections for V0s
1 parent c585c36 commit f32bcb5

File tree

1 file changed

+72
-29
lines changed

1 file changed

+72
-29
lines changed

PWGLF/Tasks/Strangeness/strangenessInJetsIons.cxx

Lines changed: 72 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)