@@ -218,6 +218,10 @@ struct derivedlambdakzeroanalysis {
218218 Configurable<bool > skipTPConly{" skipTPConly" , false , " skip V0s comprised of at least one TPC only prong" };
219219 Configurable<bool > requirePosITSonly{" requirePosITSonly" , false , " require that positive track is ITSonly (overrides TPC quality)" };
220220 Configurable<bool > requireNegITSonly{" requireNegITSonly" , false , " require that negative track is ITSonly (overrides TPC quality)" };
221+ Configurable<bool > requirePosTPConly{" requirePosTPConly" , false , " require that positive track is TPConly (overrides ITS-TOF quality)" };
222+ Configurable<bool > requireNegTPConly{" requireNegTPConly" , false , " require that negative track is TPConly (overrides ITS-TOF quality)" };
223+ Configurable<bool > requirePosDeepSec{" requirePosDeepSec" , false , " require that positive track is a deep secondary (overrides ITS quality)" };
224+ Configurable<bool > requireNegDeepSec{" requireNegDeepSec" , false , " require that negative track is a deep secondary (overrides ITS quality)" };
221225 Configurable<bool > rejectPosITSafterburner{" rejectPosITSafterburner" , false , " reject positive track formed out of afterburner ITS tracks" };
222226 Configurable<bool > rejectNegITSafterburner{" rejectNegITSafterburner" , false , " reject negative track formed out of afterburner ITS tracks" };
223227 Configurable<bool > requirePosITSafterburnerOnly{" requirePosITSafterburnerOnly" , false , " require positive track formed out of afterburner ITS tracks" };
@@ -418,6 +422,10 @@ struct derivedlambdakzeroanalysis {
418422 selNegGoodITSTrack, // at least min # ITS clusters
419423 selPosItsOnly,
420424 selNegItsOnly,
425+ selPosTPCOnly,
426+ selNegTPCOnly,
427+ selPosDeepSec,
428+ selNegDeepSec,
421429 selPosNotTPCOnly,
422430 selNegNotTPCOnly,
423431 selConsiderK0Short, // for mc tagging
@@ -530,6 +538,31 @@ struct derivedlambdakzeroanalysis {
530538 if (v0Selections.requirePosITSonly ) {
531539 BITSET (maskTrackProperties, selPosItsOnly);
532540 BITSET (maskTrackProperties, selPosGoodITSTrack);
541+ } else if (v0Selections.requirePosTPConly ) {
542+ BITSET (maskTrackProperties, selPosTPCOnly);
543+ BITSET (maskTrackProperties, selPosGoodTPCTrack);
544+ } else if (v0Selections.requirePosDeepSec ) {
545+ BITSET (maskTrackProperties, selPosDeepSec);
546+ BITSET (maskTrackProperties, selPosGoodTPCTrack);
547+ // TPC signal is available: ask for positive track PID
548+ if (v0Selections.tpcPidNsigmaCut < 1e+5 ) { // safeguard for no cut
549+ BITSET (maskK0ShortSpecific, selTPCPIDPositivePion);
550+ BITSET (maskLambdaSpecific, selTPCPIDPositiveProton);
551+ BITSET (maskAntiLambdaSpecific, selTPCPIDPositivePion);
552+ }
553+ // TOF PID
554+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requirePosHasTOF || v0Selections.tofPidNsigmaCutK0Pi < 1e+5 || v0Selections.maxDeltaTimePion < 1e+6 ) { // safeguard for no cut
555+ BITSET (maskK0ShortSpecific, selTOFNSigmaPositivePionK0Short);
556+ BITSET (maskK0ShortSpecific, selTOFDeltaTPositivePionK0Short);
557+ }
558+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requirePosHasTOF || v0Selections.tofPidNsigmaCutLaPr < 1e+5 || v0Selections.maxDeltaTimeProton < 1e+6 ) { // safeguard for no cut
559+ BITSET (maskLambdaSpecific, selTOFNSigmaPositiveProtonLambda);
560+ BITSET (maskLambdaSpecific, selTOFDeltaTPositiveProtonLambda);
561+ }
562+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requirePosHasTOF || v0Selections.tofPidNsigmaCutLaPi < 1e+5 || v0Selections.maxDeltaTimePion < 1e+6 ) { // safeguard for no cut
563+ BITSET (maskAntiLambdaSpecific, selTOFNSigmaPositivePionLambda);
564+ BITSET (maskAntiLambdaSpecific, selTOFDeltaTPositivePionLambda);
565+ }
533566 } else {
534567 BITSET (maskTrackProperties, selPosGoodTPCTrack);
535568 BITSET (maskTrackProperties, selPosGoodITSTrack);
@@ -556,6 +589,31 @@ struct derivedlambdakzeroanalysis {
556589 if (v0Selections.requireNegITSonly ) {
557590 BITSET (maskTrackProperties, selNegItsOnly);
558591 BITSET (maskTrackProperties, selNegGoodITSTrack);
592+ } else if (v0Selections.requireNegTPConly ) {
593+ BITSET (maskTrackProperties, selNegTPCOnly);
594+ BITSET (maskTrackProperties, selNegGoodTPCTrack);
595+ } else if (v0Selections.requireNegDeepSec ) {
596+ BITSET (maskTrackProperties, selNegDeepSec);
597+ BITSET (maskTrackProperties, selNegGoodTPCTrack);
598+ // TPC signal is available: ask for negative track PID
599+ if (v0Selections.tpcPidNsigmaCut < 1e+5 ) { // safeguard for no cut
600+ BITSET (maskK0ShortSpecific, selTPCPIDNegativePion);
601+ BITSET (maskLambdaSpecific, selTPCPIDNegativePion);
602+ BITSET (maskAntiLambdaSpecific, selTPCPIDNegativeProton);
603+ }
604+ // TOF PID
605+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requireNegHasTOF || v0Selections.tofPidNsigmaCutK0Pi < 1e+5 || v0Selections.maxDeltaTimePion < 1e+6 ) { // safeguard for no cut
606+ BITSET (maskK0ShortSpecific, selTOFNSigmaNegativePionK0Short);
607+ BITSET (maskK0ShortSpecific, selTOFDeltaTNegativePionK0Short);
608+ }
609+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requireNegHasTOF || v0Selections.tofPidNsigmaCutLaPi < 1e+5 || v0Selections.maxDeltaTimePion < 1e+6 ) { // safeguard for no cut
610+ BITSET (maskLambdaSpecific, selTOFNSigmaNegativePionLambda);
611+ BITSET (maskLambdaSpecific, selTOFDeltaTNegativePionLambda);
612+ }
613+ if (v0Selections.requireAtLeastOneHasTOF || v0Selections.requireNegHasTOF || v0Selections.tofPidNsigmaCutLaPr < 1e+5 || v0Selections.maxDeltaTimeProton < 1e+6 ) { // safeguard for no cut
614+ BITSET (maskAntiLambdaSpecific, selTOFNSigmaNegativeProtonLambda);
615+ BITSET (maskAntiLambdaSpecific, selTOFDeltaTNegativeProtonLambda);
616+ }
559617 } else {
560618 BITSET (maskTrackProperties, selNegGoodTPCTrack);
561619 BITSET (maskTrackProperties, selNegGoodITSTrack);
@@ -775,6 +833,10 @@ struct derivedlambdakzeroanalysis {
775833 hSelectionV0s->GetXaxis ()->SetBinLabel (selNegGoodITSTrack + 2 , " Neg. good ITS track" );
776834 hSelectionV0s->GetXaxis ()->SetBinLabel (selPosItsOnly + 2 , " Pos. ITS-only" );
777835 hSelectionV0s->GetXaxis ()->SetBinLabel (selNegItsOnly + 2 , " Neg. ITS-only" );
836+ hSelectionV0s->GetXaxis ()->SetBinLabel (selPosTPCOnly + 2 , " Pos. TPC-only" );
837+ hSelectionV0s->GetXaxis ()->SetBinLabel (selNegTPCOnly + 2 , " Neg. TPC-only" );
838+ hSelectionV0s->GetXaxis ()->SetBinLabel (selPosDeepSec + 2 , " Pos. deep sec." );
839+ hSelectionV0s->GetXaxis ()->SetBinLabel (selNegDeepSec + 2 , " Neg. deep sec." );
778840 hSelectionV0s->GetXaxis ()->SetBinLabel (selPosNotTPCOnly + 2 , " Pos. not TPC-only" );
779841 hSelectionV0s->GetXaxis ()->SetBinLabel (selNegNotTPCOnly + 2 , " Neg. not TPC-only" );
780842 hSelectionV0s->GetXaxis ()->SetBinLabel (selConsiderK0Short + 2 , " True K^{0}_{S}" );
@@ -1488,6 +1550,41 @@ struct derivedlambdakzeroanalysis {
14881550 BITSET (bitMap, selPosNotTPCOnly);
14891551 if (negTrackExtra.detectorMap () != o2::aod::track::TPC)
14901552 BITSET (bitMap, selNegNotTPCOnly);
1553+ if (!verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1554+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TOF)) &&
1555+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD)) &&
1556+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC)) &&
1557+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS)) &&
1558+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1559+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TOF)) &&
1560+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TRD)) &&
1561+ verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::TPC)))
1562+ BITSET (bitMap, selPosTPCOnly);
1563+ if (!verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1564+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TOF)) &&
1565+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD)) &&
1566+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC)) &&
1567+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS)) &&
1568+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1569+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TOF)) &&
1570+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC | o2::aod::track::TRD)) &&
1571+ verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC)))
1572+ BITSET (bitMap, selNegTPCOnly);
1573+ // deep secondary : TPC-TRD, TPC-TOF, TPC-TRD-TOF
1574+ if (!verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1575+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TOF)) &&
1576+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD)) &&
1577+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC)) &&
1578+ !verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::ITS)) &&
1579+ verifyMask (posTrackExtra.detectorMap (), (o2::aod::track::TPC)))
1580+ BITSET (bitMap, selPosDeepSec);
1581+ if (!verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD | o2::aod::track::TOF)) &&
1582+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TOF)) &&
1583+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC | o2::aod::track::TRD)) &&
1584+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS | o2::aod::track::TPC)) &&
1585+ !verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::ITS)) &&
1586+ verifyMask (negTrackExtra.detectorMap (), (o2::aod::track::TPC)))
1587+ BITSET (bitMap, selNegDeepSec);
14911588
14921589 // proper lifetime
14931590 if (v0.distovertotmom (collision.posX (), collision.posY (), collision.posZ ()) * o2::constants::physics::MassLambda0 < v0Selections.lifetimecut ->get (" lifetimecutLambda" ))
0 commit comments