@@ -149,6 +149,9 @@ using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
149149// For dE/dx association in pre-selection
150150using TracksExtraWithPID = soa::Join<aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullPr, aod::pidTPCFullKa, aod::pidTPCFullHe>;
151151
152+ // simple checkers, but ensure 8 bit integers
153+ #define BITSET (var, nbit ) ((var) |= (static_cast <uint8_t >(1 ) << static_cast <uint8_t >(nbit)))
154+
152155struct StrangenessBuilder {
153156 // helper object
154157 o2::pwglf::strangenessBuilderHelper straHelper;
@@ -193,6 +196,16 @@ struct StrangenessBuilder {
193196 kCascFoundTags ,
194197 nTables };
195198
199+ enum V0PreSelection : uint8_t { selGamma = 0 ,
200+ selK0Short,
201+ selLambda,
202+ selAntiLambda };
203+
204+ enum CascPreSelection : uint8_t { selXiMinus = 0 ,
205+ selXiPlus,
206+ selOmegaMinus,
207+ selOmegaPlus };
208+
196209 struct : ProducesGroup {
197210 // __________________________________________________
198211 // V0 tables
@@ -356,12 +369,24 @@ struct StrangenessBuilder {
356369 static constexpr float defaultLambdaWindowParameters[1 ][4 ] = {{1.17518e-03 , 1.24099e-04 , 5.47937e-03 , 3.08009e-01 }};
357370 static constexpr float defaultXiMassWindowParameters[1 ][4 ] = {{1.43210e-03 , 2.03561e-04 , 2.43187e-03 , 7.99668e-01 }};
358371 static constexpr float defaultOmMassWindowParameters[1 ][4 ] = {{1.43210e-03 , 2.03561e-04 , 2.43187e-03 , 7.99668e-01 }};
372+
373+ static constexpr float defaultLifetimeCuts[1 ][4 ] = {{20 , 60 , 40 , 20 }};
374+
359375 // preselection options
360376 struct : ConfigurableGroup {
361377 std::string prefix = " preSelectOpts" ;
362378 Configurable<bool > preselectOnlyDesiredV0s{" preselectOnlyDesiredV0s" , false , " preselect only V0s with compatible TPC PID and mass info" };
363379 Configurable<bool > preselectOnlyDesiredCascades{" preselectOnlyDesiredCascades" , false , " preselect only Cascades with compatible TPC PID and mass info" };
364380
381+ // lifetime preselection options
382+ // apply lifetime cuts to V0 and cascade candidates
383+ // unit of measurement: centimeters
384+ // lifetime of K0Short ~2.6844 cm, no feeddown and plenty to cut
385+ // lifetime of Lambda ~7.9 cm but keep in mind feeddown from cascades
386+ // lifetime of Xi ~4.91 cm
387+ // lifetime of Omega ~2.461 cm
388+ Configurable<LabeledArray<float >> lifetimeCut{" lifetimeCut" , {defaultLifetimeCuts[0 ], 4 , {" lifetimeCutK0S" , " lifetimeCutLambda" , " lifetimeCutXi" , " lifetimeCutOmega" }}, " Lifetime cut for V0s and cascades (cm)" };
389+
365390 // mass preselection options
366391 Configurable<float > massCutPhoton{" massCutPhoton" , 0.3 , " Photon max mass" };
367392 Configurable<LabeledArray<float >> massCutK0{" massCutK0" , {defaultK0MassWindowParameters[0 ], 4 , {" constant" , " linear" , " expoConstant" , " expoRelax" }}, " mass parameters for K0" };
@@ -514,6 +539,46 @@ struct StrangenessBuilder {
514539 hDeduplicationStatistics->GetXaxis ()->SetBinLabel (2 , " Deduplicated V0s" );
515540 }
516541
542+ if (preSelectOpts.preselectOnlyDesiredV0s .value == true ) {
543+ auto hPreselectionV0s = histos.add <TH1>(" hPreselectionV0s" , " hPreselectionV0s" , kTH1D , {{16 , -0 .5f , 15 .5f }});
544+ hPreselectionV0s->GetXaxis ()->SetBinLabel (1 , " Not preselected" );
545+ hPreselectionV0s->GetXaxis ()->SetBinLabel (2 , " #gamma" );
546+ hPreselectionV0s->GetXaxis ()->SetBinLabel (3 , " K^{0}_{S}" );
547+ hPreselectionV0s->GetXaxis ()->SetBinLabel (4 , " #gamma, K^{0}_{S}" );
548+ hPreselectionV0s->GetXaxis ()->SetBinLabel (5 , " #Lambda" );
549+ hPreselectionV0s->GetXaxis ()->SetBinLabel (6 , " #gamma, #Lambda" );
550+ hPreselectionV0s->GetXaxis ()->SetBinLabel (7 , " K^{0}_{S}, #Lambda" );
551+ hPreselectionV0s->GetXaxis ()->SetBinLabel (8 , " #gamma, K^{0}_{S}, #Lambda" );
552+ hPreselectionV0s->GetXaxis ()->SetBinLabel (9 , " #bar{#Lambda}" );
553+ hPreselectionV0s->GetXaxis ()->SetBinLabel (10 , " #gamma, #bar{#Lambda}" );
554+ hPreselectionV0s->GetXaxis ()->SetBinLabel (11 , " K^{0}_{S}, #bar{#Lambda}" );
555+ hPreselectionV0s->GetXaxis ()->SetBinLabel (12 , " #gamma, K^{0}_{S}, #bar{#Lambda}" );
556+ hPreselectionV0s->GetXaxis ()->SetBinLabel (13 , " #Lambda, #bar{#Lambda}" );
557+ hPreselectionV0s->GetXaxis ()->SetBinLabel (14 , " #gamma, #Lambda, #bar{#Lambda}" );
558+ hPreselectionV0s->GetXaxis ()->SetBinLabel (15 , " K^{0}_{S}, #Lambda, #bar{#Lambda}" );
559+ hPreselectionV0s->GetXaxis ()->SetBinLabel (16 , " #gamma, K^{0}_{S}, #Lambda, #bar{#Lambda}" );
560+ }
561+
562+ if (preSelectOpts.preselectOnlyDesiredCascades .value == true ) {
563+ auto hPreselectionCascades = histos.add <TH1>(" hPreselectionCascades" , " hPreselectionCascades" , kTH1D , {{16 , -0 .5f , 15 .5f }});
564+ hPreselectionCascades->GetXaxis ()->SetBinLabel (1 , " Not preselected" );
565+ hPreselectionCascades->GetXaxis ()->SetBinLabel (2 , " #Xi^{-}" );
566+ hPreselectionCascades->GetXaxis ()->SetBinLabel (3 , " #Xi^{+}" );
567+ hPreselectionCascades->GetXaxis ()->SetBinLabel (4 , " #Xi^{-}, #Xi^{+}" );
568+ hPreselectionCascades->GetXaxis ()->SetBinLabel (5 , " #Omega^{-}" );
569+ hPreselectionCascades->GetXaxis ()->SetBinLabel (6 , " #Xi^{-}, #Omega^{-}" );
570+ hPreselectionCascades->GetXaxis ()->SetBinLabel (7 , " #Xi^{+}, #Omega^{-}" );
571+ hPreselectionCascades->GetXaxis ()->SetBinLabel (8 , " #Xi^{-}, #Xi^{+}, #Omega^{-}" );
572+ hPreselectionCascades->GetXaxis ()->SetBinLabel (9 , " #Omega^{+}" );
573+ hPreselectionCascades->GetXaxis ()->SetBinLabel (10 , " #Xi^{-}, #Omega^{+}" );
574+ hPreselectionCascades->GetXaxis ()->SetBinLabel (11 , " #Xi^{+}, #Omega^{+}" );
575+ hPreselectionCascades->GetXaxis ()->SetBinLabel (12 , " #Xi^{-}, #Xi^{+}, #Omega^{+}" );
576+ hPreselectionCascades->GetXaxis ()->SetBinLabel (13 , " #Omega^{-}, #Omega^{+}" );
577+ hPreselectionCascades->GetXaxis ()->SetBinLabel (14 , " #Xi^{-}, #Omega^{-}, #Omega^{+}" );
578+ hPreselectionCascades->GetXaxis ()->SetBinLabel (15 , " #Xi^{+}, #Omega^{-}, #Omega^{+}" );
579+ hPreselectionCascades->GetXaxis ()->SetBinLabel (16 , " #Xi^{-}, #Xi^{+}, #Omega^{-}, #Omega^{+}" );
580+ }
581+
517582 if (mc_findableMode.value > 0 ) {
518583 // save statistics of findable candidate processing
519584 auto hFindable = histos.add <TH1>(" hFindableStatistics" , " hFindableStatistics" , kTH1D , {{6 , -0 .5f , 5 .5f }});
@@ -648,6 +713,11 @@ struct StrangenessBuilder {
648713 straHelper.cascadeselections .maxDaughterEta = cascadeBuilderOpts.maxDaughterEta ;
649714 }
650715
716+ bool verifyMask (uint8_t bitmap, uint8_t mask)
717+ {
718+ return (bitmap & mask) == mask;
719+ }
720+
651721 // for sorting
652722 template <typename T>
653723 std::vector<std::size_t > sort_indices (const std::vector<T>& v, bool doSorting = false )
@@ -1367,23 +1437,55 @@ struct StrangenessBuilder {
13671437 straHelper.v0 .positiveMomentum [0 ] + straHelper.v0 .negativeMomentum [0 ],
13681438 straHelper.v0 .positiveMomentum [1 ] + straHelper.v0 .negativeMomentum [1 ]);
13691439
1370- if (
1371- !( // photon PID and mass selection
1372- std::abs (posTrack.tpcNSigmaEl ()) < preSelectOpts.maxTPCpidNsigma &&
1373- std::abs (negTrack.tpcNSigmaEl ()) < preSelectOpts.maxTPCpidNsigma &&
1374- std::abs (straHelper.v0 .massGamma ) < preSelectOpts.massCutPhoton ) &&
1375- !( // K0Short PID and mass selection
1376- std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1377- std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1378- std::abs (straHelper.v0 .massK0Short - o2::constants::physics::MassKaonNeutral) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaK0Short (lPt) + preSelectOpts.massWindowSafetyMargin ) &&
1379- !( // Lambda PID and mass selection
1380- std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1381- std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1382- std::abs (straHelper.v0 .massLambda - o2::constants::physics::MassLambda) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaLambda (lPt) + preSelectOpts.massWindowSafetyMargin ) &&
1383- !( // antiLambda PID and mass selection
1384- std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1385- std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1386- std::abs (straHelper.v0 .massAntiLambda - o2::constants::physics::MassLambda) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaLambda (lPt) + preSelectOpts.massWindowSafetyMargin )) {
1440+ float lPtot = RecoDecay::sqrtSumOfSquares (
1441+ straHelper.v0 .positiveMomentum [0 ] + straHelper.v0 .negativeMomentum [0 ],
1442+ straHelper.v0 .positiveMomentum [1 ] + straHelper.v0 .negativeMomentum [1 ],
1443+ straHelper.v0 .positiveMomentum [2 ] + straHelper.v0 .negativeMomentum [2 ]);
1444+
1445+ float lLengthTraveled = RecoDecay::sqrtSumOfSquares (
1446+ straHelper.v0 .position [0 ] - pvX,
1447+ straHelper.v0 .position [1 ] - pvY,
1448+ straHelper.v0 .position [2 ] - pvZ);
1449+
1450+ uint8_t maskV0Preselection = 0 ;
1451+
1452+ if ( // photon PID, mass, lifetime selection
1453+ std::abs (posTrack.tpcNSigmaEl ()) < preSelectOpts.maxTPCpidNsigma &&
1454+ std::abs (negTrack.tpcNSigmaEl ()) < preSelectOpts.maxTPCpidNsigma &&
1455+ std::abs (straHelper.v0 .massGamma ) < preSelectOpts.massCutPhoton ) {
1456+ BITSET (maskV0Preselection, selGamma);
1457+ }
1458+
1459+ if ( // K0Short PID, mass, lifetime selection
1460+ std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1461+ std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1462+ o2::constants::physics::MassKaonNeutral * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutK0S" ) &&
1463+ std::abs (straHelper.v0 .massK0Short - o2::constants::physics::MassKaonNeutral) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaK0Short (lPt) + preSelectOpts.massWindowSafetyMargin ) {
1464+ BITSET (maskV0Preselection, selK0Short);
1465+ }
1466+
1467+ if ( // Lambda PID, mass, lifetime selection
1468+ std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1469+ std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1470+ o2::constants::physics::MassLambda * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
1471+ std::abs (straHelper.v0 .massLambda - o2::constants::physics::MassLambda) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaLambda (lPt) + preSelectOpts.massWindowSafetyMargin ) {
1472+ BITSET (maskV0Preselection, selLambda);
1473+ }
1474+
1475+ if ( // antiLambda PID, mass, lifetime selection
1476+ std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1477+ std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1478+ o2::constants::physics::MassLambda * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
1479+ std::abs (straHelper.v0 .massAntiLambda - o2::constants::physics::MassLambda) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaLambda (lPt) + preSelectOpts.massWindowSafetyMargin ) {
1480+ BITSET (maskV0Preselection, selAntiLambda);
1481+ }
1482+
1483+ histos.fill (HIST (" hPreselectionV0s" ), maskV0Preselection);
1484+
1485+ if (!verifyMask (maskV0Preselection, selGamma) &&
1486+ !verifyMask (maskV0Preselection, selK0Short) &&
1487+ !verifyMask (maskV0Preselection, selLambda) &&
1488+ !verifyMask (maskV0Preselection, selAntiLambda)) {
13871489 products.v0dataLink (-1 , -1 );
13881490 continue ;
13891491 }
@@ -1871,35 +1973,82 @@ struct StrangenessBuilder {
18711973
18721974 if constexpr (requires { posTrack.tpcNSigmaEl (); }) {
18731975 if (preSelectOpts.preselectOnlyDesiredCascades ) {
1874- if (
1875- float lPt = RecoDecay::sqrtSumOfSquares (
1876- straHelper.cascade .bachelorMomentum [0 ] + straHelper.cascade .positiveMomentum [0 ] + straHelper.cascade .negativeMomentum [0 ],
1877- straHelper.cascade .bachelorMomentum [1 ] + straHelper.cascade .positiveMomentum [1 ] + straHelper.cascade .negativeMomentum [1 ]);
1878-
1879- !( // XiMinus PID and mass selection
1880- straHelper.cascade .charge < 0 &&
1881- std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1882- std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1883- std::abs (bachTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1884- std::abs (straHelper.cascade .massXi - o2::constants::physics::MassXiMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaXi (lPt) + preSelectOpts.massWindowSafetyMargin ) &&
1885- !( // XiPlus PID and mass selection
1886- straHelper.cascade .charge > 0 &&
1887- std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1888- std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1889- std::abs (bachTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1890- std::abs (straHelper.cascade .massXi - o2::constants::physics::MassXiMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaXi (lPt) + preSelectOpts.massWindowSafetyMargin ) &&
1891- !( // OmegaMinus PID and mass selection
1892- straHelper.cascade .charge < 0 &&
1893- std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1894- std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1895- std::abs (bachTrack.tpcNSigmaKa ()) < preSelectOpts.maxTPCpidNsigma &&
1896- std::abs (straHelper.cascade .massOmega - o2::constants::physics::MassOmegaMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaOmega (lPt) + preSelectOpts.massWindowSafetyMargin ) &&
1897- !( // OmegaPlus PID and mass selection
1898- straHelper.cascade .charge > 0 &&
1899- std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
1900- std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
1901- std::abs (bachTrack.tpcNSigmaKa ()) < preSelectOpts.maxTPCpidNsigma &&
1902- std::abs (straHelper.cascade .massOmega - o2::constants::physics::MassOmegaMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaOmega (lPt) + preSelectOpts.massWindowSafetyMargin )) {
1976+ float lPt = RecoDecay::sqrtSumOfSquares (
1977+ straHelper.cascade .bachelorMomentum [0 ] + straHelper.cascade .positiveMomentum [0 ] + straHelper.cascade .negativeMomentum [0 ],
1978+ straHelper.cascade .bachelorMomentum [1 ] + straHelper.cascade .positiveMomentum [1 ] + straHelper.cascade .negativeMomentum [1 ]);
1979+
1980+ float lPtot = RecoDecay::sqrtSumOfSquares (
1981+ straHelper.cascade .bachelorMomentum [0 ] + straHelper.cascade .positiveMomentum [0 ] + straHelper.cascade .negativeMomentum [0 ],
1982+ straHelper.cascade .bachelorMomentum [1 ] + straHelper.cascade .positiveMomentum [1 ] + straHelper.cascade .negativeMomentum [1 ],
1983+ straHelper.cascade .bachelorMomentum [2 ] + straHelper.cascade .positiveMomentum [2 ] + straHelper.cascade .negativeMomentum [2 ]);
1984+
1985+ float lV0Ptot = RecoDecay::sqrtSumOfSquares (
1986+ straHelper.cascade .positiveMomentum [0 ] + straHelper.cascade .negativeMomentum [0 ],
1987+ straHelper.cascade .positiveMomentum [1 ] + straHelper.cascade .negativeMomentum [1 ],
1988+ straHelper.cascade .positiveMomentum [2 ] + straHelper.cascade .negativeMomentum [2 ]);
1989+
1990+ float lLengthTraveled = RecoDecay::sqrtSumOfSquares (
1991+ straHelper.cascade .cascadePosition [0 ] - pvX,
1992+ straHelper.cascade .cascadePosition [1 ] - pvY,
1993+ straHelper.cascade .cascadePosition [2 ] - pvZ);
1994+
1995+ float lV0LengthTraveled = RecoDecay::sqrtSumOfSquares (
1996+ straHelper.cascade .v0Position [0 ] - straHelper.cascade .cascadePosition [0 ],
1997+ straHelper.cascade .v0Position [1 ] - straHelper.cascade .cascadePosition [1 ],
1998+ straHelper.cascade .v0Position [2 ] - straHelper.cascade .cascadePosition [2 ]);
1999+
2000+ uint8_t maskCascadePreselection = 0 ;
2001+
2002+ if ( // XiMinus PID and mass selection
2003+ straHelper.cascade .charge < 0 &&
2004+ std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
2005+ std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2006+ std::abs (bachTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2007+ o2::constants::physics::MassLambda * lV0LengthTraveled / (lV0Ptot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
2008+ o2::constants::physics::MassXiMinus * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutXi" ) &&
2009+ std::abs (straHelper.cascade .massXi - o2::constants::physics::MassXiMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaXi (lPt) + preSelectOpts.massWindowSafetyMargin ) {
2010+ BITSET (maskCascadePreselection, selXiMinus);
2011+ }
2012+
2013+ if ( // XiPlus PID and mass selection
2014+ straHelper.cascade .charge > 0 &&
2015+ std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2016+ std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
2017+ std::abs (bachTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2018+ o2::constants::physics::MassLambda * lV0LengthTraveled / (lV0Ptot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
2019+ o2::constants::physics::MassXiMinus * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutXi" ) &&
2020+ std::abs (straHelper.cascade .massXi - o2::constants::physics::MassXiMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaXi (lPt) + preSelectOpts.massWindowSafetyMargin ) {
2021+ BITSET (maskCascadePreselection, selXiPlus);
2022+ }
2023+
2024+ if ( // OmegaMinus PID and mass selection
2025+ straHelper.cascade .charge < 0 &&
2026+ std::abs (posTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
2027+ std::abs (negTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2028+ std::abs (bachTrack.tpcNSigmaKa ()) < preSelectOpts.maxTPCpidNsigma &&
2029+ o2::constants::physics::MassLambda * lV0LengthTraveled / (lV0Ptot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
2030+ o2::constants::physics::MassOmegaMinus * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutOmega" ) &&
2031+ std::abs (straHelper.cascade .massOmega - o2::constants::physics::MassOmegaMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaOmega (lPt) + preSelectOpts.massWindowSafetyMargin ) {
2032+ BITSET (maskCascadePreselection, selOmegaMinus);
2033+ }
2034+
2035+ if ( // OmegaPlus PID and mass selection
2036+ straHelper.cascade .charge > 0 &&
2037+ std::abs (posTrack.tpcNSigmaPi ()) < preSelectOpts.maxTPCpidNsigma &&
2038+ std::abs (negTrack.tpcNSigmaPr ()) < preSelectOpts.maxTPCpidNsigma &&
2039+ std::abs (bachTrack.tpcNSigmaKa ()) < preSelectOpts.maxTPCpidNsigma &&
2040+ o2::constants::physics::MassLambda * lV0LengthTraveled / (lV0Ptot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutLambda" ) &&
2041+ o2::constants::physics::MassOmegaMinus * lLengthTraveled / (lPtot + 1e-13 ) < preSelectOpts.lifetimeCut ->get (" lifetimeCutOmega" ) &&
2042+ std::abs (straHelper.cascade .massOmega - o2::constants::physics::MassOmegaMinus) < preSelectOpts.massWindownumberOfSigmas * getMassSigmaOmega (lPt) + preSelectOpts.massWindowSafetyMargin ) {
2043+ BITSET (maskCascadePreselection, selOmegaPlus);
2044+ }
2045+
2046+ histos.fill (HIST (" hPreselectionCascades" ), maskCascadePreselection);
2047+
2048+ if (!verifyMask (maskCascadePreselection, selXiMinus) &&
2049+ !verifyMask (maskCascadePreselection, selXiPlus) &&
2050+ !verifyMask (maskCascadePreselection, selOmegaMinus) &&
2051+ !verifyMask (maskCascadePreselection, selOmegaPlus)) {
19032052 products.cascdataLink (-1 );
19042053 interlinks.cascadeToCascCores .push_back (-1 );
19052054 continue ;
0 commit comments