@@ -957,6 +957,9 @@ struct lambdakzeroPreselector {
957957 // context-aware selections
958958 Configurable<bool > dPreselectOnlyBaryons{" dPreselectOnlyBaryons" , false , " apply TPC dE/dx and quality only to baryon daughters" };
959959
960+ // for debugging and further tests
961+ Configurable<bool > forceITSOnlyMesons{" forceITSOnlyMesons" , false , " force meson-like daughters to be ITS-only to pass Lambda/AntiLambda selections (yes/no)" };
962+
960963 // for bit-packed maps
961964 std::vector<uint16_t > selectionMask;
962965 enum v0bit { bitInteresting = 0 ,
@@ -995,17 +998,33 @@ struct lambdakzeroPreselector {
995998 auto lNegTrack = lV0Candidate.template negTrack_as <TTrackTo>();
996999 auto lPosTrack = lV0Candidate.template posTrack_as <TTrackTo>();
9971000
1001+ // crossed rows conditionals
1002+ bool posRowsOK = lPosTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows;
1003+ bool negRowsOK = lNegTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows;
1004+
1005+ // check track explicitly for absence of TPC
1006+ bool posITSonly = !lPosTrack.hasTPC ();
1007+ bool negITSonly = !lNegTrack.hasTPC ();
1008+
9981009 // No baryons in decay
999- if (((bitcheck (maskElement, bitdEdxGamma) || bitcheck (maskElement, bitdEdxK0Short)) || passdEdx) && (lPosTrack. tpcNClsCrossedRows () >= dTPCNCrossedRows && lNegTrack. tpcNClsCrossedRows () >= dTPCNCrossedRows ))
1010+ if (((bitcheck (maskElement, bitdEdxGamma) || bitcheck (maskElement, bitdEdxK0Short)) || passdEdx) && (posRowsOK && negRowsOK) && (!forceITSOnlyMesons || (posITSonly && negITSonly) ))
10001011 bitset (maskElement, bitTrackQuality);
10011012 // With baryons in decay
1002- if ((bitcheck (maskElement, bitdEdxLambda) || passdEdx) && (lPosTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows && (lNegTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows || dPreselectOnlyBaryons)))
1013+ if ((bitcheck (maskElement, bitdEdxLambda) || passdEdx) &&
1014+ (posRowsOK && (negRowsOK || dPreselectOnlyBaryons)) &&
1015+ (!forceITSOnlyMesons || negITSonly))
10031016 bitset (maskElement, bitTrackQuality);
1004- if ((bitcheck (maskElement, bitdEdxAntiLambda) || passdEdx) && (lNegTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows && (lPosTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows || dPreselectOnlyBaryons)))
1017+ if ((bitcheck (maskElement, bitdEdxAntiLambda) || passdEdx) &&
1018+ (negRowsOK && (posRowsOK || dPreselectOnlyBaryons)) &&
1019+ (!forceITSOnlyMesons || posITSonly))
10051020 bitset (maskElement, bitTrackQuality);
1006- if ((bitcheck (maskElement, bitdEdxHypertriton) || passdEdx) && (lPosTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows && (lNegTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows || dPreselectOnlyBaryons)))
1021+ if ((bitcheck (maskElement, bitdEdxHypertriton) || passdEdx) &&
1022+ (posRowsOK && (negRowsOK || dPreselectOnlyBaryons)) &&
1023+ (!forceITSOnlyMesons || negITSonly))
10071024 bitset (maskElement, bitTrackQuality);
1008- if ((bitcheck (maskElement, bitdEdxAntiHypertriton) || passdEdx) && (lNegTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows && (lPosTrack.tpcNClsCrossedRows () >= dTPCNCrossedRows || dPreselectOnlyBaryons)))
1025+ if ((bitcheck (maskElement, bitdEdxAntiHypertriton) || passdEdx) &&
1026+ (negRowsOK && (posRowsOK || dPreselectOnlyBaryons)) &&
1027+ (!forceITSOnlyMesons || posITSonly))
10091028 bitset (maskElement, bitTrackQuality);
10101029 }
10111030 // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
0 commit comments