Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions PWGLF/TableProducer/Strangeness/hStrangeCorrelationFilter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,8 @@ struct HStrangeCorrelationFilter {
if (track.pt() > generalSelections.triggerPtCutMax || track.pt() < generalSelections.triggerPtCutMin) {
return false;
}
if (track.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
// hasTPC() is needed: since O2-7038 (Oct 2026) tracks without TPC report 256 crossed rows
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
return false; // crossed rows
}
if (!track.hasITS() && trackSelections.triggerRequireITS) {
Expand Down Expand Up @@ -481,7 +482,7 @@ struct HStrangeCorrelationFilter {
if (assoc.pt() > generalSelections.assocPtCutMax || assoc.pt() < generalSelections.assocPtCutMin) {
return false;
}
if (assoc.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!assoc.hasTPC() || assoc.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
return false; // crossed rows
}
if (!assoc.hasITS() && trackSelections.assocRequireITS) {
Expand Down Expand Up @@ -848,10 +849,10 @@ struct HStrangeCorrelationFilter {
auto posdau = v0.posTrack_as<DauTracks>();
auto negdau = v0.negTrack_as<DauTracks>();

if (negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!negdau.hasTPC() || negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!posdau.hasTPC() || posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (trackSelections.requireClusterInITS && (posdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks)) {
Expand Down Expand Up @@ -987,10 +988,10 @@ struct HStrangeCorrelationFilter {
auto posdau = v0.posTrack_as<DauTracksMC>();
auto negdau = v0.negTrack_as<DauTracksMC>();

if (negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!negdau.hasTPC() || negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!posdau.hasTPC() || posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (trackSelections.requireClusterInITS && (posdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks)) {
Expand Down Expand Up @@ -1145,13 +1146,13 @@ struct HStrangeCorrelationFilter {
auto negTrackCast = casc.negTrack_as<DauTracks>();

// minimum TPC crossed rows
if (bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!bachTrackCast.hasTPC() || bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!posTrackCast.hasTPC() || posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!negTrackCast.hasTPC() || negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (rejectAmbiguousAssoc && (isAmbiguousTrack(bachTrackCast) || isAmbiguousTrack(posTrackCast) || isAmbiguousTrack(negTrackCast))) {
Expand Down Expand Up @@ -1318,13 +1319,13 @@ struct HStrangeCorrelationFilter {
auto negTrackCast = casc.negTrack_as<DauTracks>();

// minimum TPC crossed rows
if (bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!bachTrackCast.hasTPC() || bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!posTrackCast.hasTPC() || posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
if (!negTrackCast.hasTPC() || negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
continue;
}
if (rejectAmbiguousAssoc && (isAmbiguousTrack(bachTrackCast) || isAmbiguousTrack(posTrackCast) || isAmbiguousTrack(negTrackCast))) {
Expand Down
29 changes: 15 additions & 14 deletions PWGLF/Tasks/Strangeness/hStrangeCorrelation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ struct HStrangeCorrelation {
.eta = track.eta(),
.phi = track.phi(),
.sign = track.sign(),
.tpcCrossedRows = track.tpcNClsCrossedRows(),
.tpcCrossedRows = track.hasTPC() ? static_cast<int>(track.tpcNClsCrossedRows()) : 0, // 0 without TPC, so classifyTriggerTracksFailure rejects it as the filter does
.tpcSharedClusters = track.tpcNClsShared(),
.itsClusters = track.itsNCls(),
.hasLayer0 = static_cast<bool>(TESTBIT(track.itsClusterMap(), 0)),
Expand Down Expand Up @@ -1258,7 +1258,8 @@ struct HStrangeCorrelation {
template <class TTrack>
bool isValidTrigger(TTrack const& track, bool isLeading)
{
if (track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsTrigger) {
// hasTPC() is needed: since O2-7038 (Oct 2026) tracks without TPC report 256 crossed rows
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsTrigger) {
return false; // crossed rows
}
if (!track.hasITS() && trackSelection.triggerRequireITS) {
Expand Down Expand Up @@ -1298,7 +1299,7 @@ struct HStrangeCorrelation {
template <class TTrack>
bool isValidAssocHadron(TTrack const& track)
{
if (track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
return false; // crossed rows
}
if (!track.hasITS() && trackSelection.assocRequireITS) {
Expand Down Expand Up @@ -1584,7 +1585,7 @@ struct HStrangeCorrelation {
}

//---] track quality check [---
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
continue;
}
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
Expand Down Expand Up @@ -2152,7 +2153,7 @@ struct HStrangeCorrelation {
}
std::array<double, 3> assocForDeltaPhiStar = {phiProton, ptProton, signProton};
//---] track quality check [---
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !bachtrack.hasTPC() || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
continue;
}
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || bachtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
Expand Down Expand Up @@ -4043,7 +4044,7 @@ struct HStrangeCorrelation {
//---] track quality check [---
auto postrack = v0Data.posTrack_as<TracksComplete>();
auto negtrack = v0Data.negTrack_as<TracksComplete>();
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
continue;
}
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
Expand Down Expand Up @@ -4268,7 +4269,7 @@ struct HStrangeCorrelation {
auto postrack = cascData.posTrack_as<TracksComplete>();
auto negtrack = cascData.negTrack_as<TracksComplete>();
auto bachtrack = cascData.bachelor_as<TracksComplete>();
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !bachtrack.hasTPC() || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
continue;
}
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || bachtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
Expand Down Expand Up @@ -5377,8 +5378,8 @@ struct HStrangeCorrelation {
const bool passesDaughterDcaAndArmenteros = std::abs(v0.dcapostopv()) > dcaCut && std::abs(v0.dcanegtopv()) > dcaCut && v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
}
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
if (trackSelection.checksRequireTPCChi2) {
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
Expand Down Expand Up @@ -5997,8 +5998,8 @@ struct HStrangeCorrelation {
const bool passesDaughterDcaAndArmenteros = std::abs(v0.dcapostopv()) > dcaCut && std::abs(v0.dcanegtopv()) > dcaCut && v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
}
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
if (trackSelection.checksRequireTPCChi2) {
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
Expand Down Expand Up @@ -6536,8 +6537,8 @@ struct HStrangeCorrelation {
v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
}
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
if (trackSelection.checksRequireTPCChi2) {
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
Expand Down Expand Up @@ -7204,7 +7205,7 @@ struct HStrangeCorrelation {
//---] track quality check [---
auto postrack = v0Data.posTrack_as<TracksComplete>();
auto negtrack = v0Data.negTrack_as<TracksComplete>();
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
continue;
}
if (trackSelection.requireClusterInITS && (postrack.itsNCls() < trackSelection.minITSClustersForDaughterTracks || negtrack.itsNCls() < trackSelection.minITSClustersForDaughterTracks)) {
Expand Down
Loading