Skip to content

Commit 59c3010

Browse files
authored
[PWGLF] Add TPC explicitly in hStrangeCorrelation.cxx (#18609)
1 parent 7b06eaf commit 59c3010

2 files changed

Lines changed: 28 additions & 26 deletions

File tree

‎PWGLF/TableProducer/Strangeness/hStrangeCorrelationFilter.cxx‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ struct HStrangeCorrelationFilter {
451451
if (track.pt() > generalSelections.triggerPtCutMax || track.pt() < generalSelections.triggerPtCutMin) {
452452
return false;
453453
}
454-
if (track.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
454+
// hasTPC() is needed: since O2-7038 (Oct 2026) tracks without TPC report 256 crossed rows
455+
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
455456
return false; // crossed rows
456457
}
457458
if (!track.hasITS() && trackSelections.triggerRequireITS) {
@@ -481,7 +482,7 @@ struct HStrangeCorrelationFilter {
481482
if (assoc.pt() > generalSelections.assocPtCutMax || assoc.pt() < generalSelections.assocPtCutMin) {
482483
return false;
483484
}
484-
if (assoc.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
485+
if (!assoc.hasTPC() || assoc.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
485486
return false; // crossed rows
486487
}
487488
if (!assoc.hasITS() && trackSelections.assocRequireITS) {
@@ -848,10 +849,10 @@ struct HStrangeCorrelationFilter {
848849
auto posdau = v0.posTrack_as<DauTracks>();
849850
auto negdau = v0.negTrack_as<DauTracks>();
850851

851-
if (negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
852+
if (!negdau.hasTPC() || negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
852853
continue;
853854
}
854-
if (posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
855+
if (!posdau.hasTPC() || posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
855856
continue;
856857
}
857858
if (trackSelections.requireClusterInITS && (posdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks)) {
@@ -987,10 +988,10 @@ struct HStrangeCorrelationFilter {
987988
auto posdau = v0.posTrack_as<DauTracksMC>();
988989
auto negdau = v0.negTrack_as<DauTracksMC>();
989990

990-
if (negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
991+
if (!negdau.hasTPC() || negdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
991992
continue;
992993
}
993-
if (posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
994+
if (!posdau.hasTPC() || posdau.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
994995
continue;
995996
}
996997
if (trackSelections.requireClusterInITS && (posdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls() < trackSelections.minITSClustersForDaughterTracks)) {
@@ -1145,13 +1146,13 @@ struct HStrangeCorrelationFilter {
11451146
auto negTrackCast = casc.negTrack_as<DauTracks>();
11461147

11471148
// minimum TPC crossed rows
1148-
if (bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1149+
if (!bachTrackCast.hasTPC() || bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
11491150
continue;
11501151
}
1151-
if (posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1152+
if (!posTrackCast.hasTPC() || posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
11521153
continue;
11531154
}
1154-
if (negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1155+
if (!negTrackCast.hasTPC() || negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
11551156
continue;
11561157
}
11571158
if (rejectAmbiguousAssoc && (isAmbiguousTrack(bachTrackCast) || isAmbiguousTrack(posTrackCast) || isAmbiguousTrack(negTrackCast))) {
@@ -1318,13 +1319,13 @@ struct HStrangeCorrelationFilter {
13181319
auto negTrackCast = casc.negTrack_as<DauTracks>();
13191320

13201321
// minimum TPC crossed rows
1321-
if (bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1322+
if (!bachTrackCast.hasTPC() || bachTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
13221323
continue;
13231324
}
1324-
if (posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1325+
if (!posTrackCast.hasTPC() || posTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
13251326
continue;
13261327
}
1327-
if (negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
1328+
if (!negTrackCast.hasTPC() || negTrackCast.tpcNClsCrossedRows() < trackSelections.minTPCNCrossedRows) {
13281329
continue;
13291330
}
13301331
if (rejectAmbiguousAssoc && (isAmbiguousTrack(bachTrackCast) || isAmbiguousTrack(posTrackCast) || isAmbiguousTrack(negTrackCast))) {

‎PWGLF/Tasks/Strangeness/hStrangeCorrelation.cxx‎

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ struct HStrangeCorrelation {
974974
.eta = track.eta(),
975975
.phi = track.phi(),
976976
.sign = track.sign(),
977-
.tpcCrossedRows = track.tpcNClsCrossedRows(),
977+
.tpcCrossedRows = track.hasTPC() ? static_cast<int>(track.tpcNClsCrossedRows()) : 0, // 0 without TPC, so classifyTriggerTracksFailure rejects it as the filter does
978978
.tpcSharedClusters = track.tpcNClsShared(),
979979
.itsClusters = track.itsNCls(),
980980
.hasLayer0 = static_cast<bool>(TESTBIT(track.itsClusterMap(), 0)),
@@ -1258,7 +1258,8 @@ struct HStrangeCorrelation {
12581258
template <class TTrack>
12591259
bool isValidTrigger(TTrack const& track, bool isLeading)
12601260
{
1261-
if (track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsTrigger) {
1261+
// hasTPC() is needed: since O2-7038 (Oct 2026) tracks without TPC report 256 crossed rows
1262+
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsTrigger) {
12621263
return false; // crossed rows
12631264
}
12641265
if (!track.hasITS() && trackSelection.triggerRequireITS) {
@@ -1298,7 +1299,7 @@ struct HStrangeCorrelation {
12981299
template <class TTrack>
12991300
bool isValidAssocHadron(TTrack const& track)
13001301
{
1301-
if (track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
1302+
if (!track.hasTPC() || track.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
13021303
return false; // crossed rows
13031304
}
13041305
if (!track.hasITS() && trackSelection.assocRequireITS) {
@@ -1584,7 +1585,7 @@ struct HStrangeCorrelation {
15841585
}
15851586

15861587
//---] track quality check [---
1587-
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
1588+
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
15881589
continue;
15891590
}
15901591
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
@@ -2152,7 +2153,7 @@ struct HStrangeCorrelation {
21522153
}
21532154
std::array<double, 3> assocForDeltaPhiStar = {phiProton, ptProton, signProton};
21542155
//---] track quality check [---
2155-
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
2156+
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !bachtrack.hasTPC() || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
21562157
continue;
21572158
}
21582159
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || bachtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
@@ -4043,7 +4044,7 @@ struct HStrangeCorrelation {
40434044
//---] track quality check [---
40444045
auto postrack = v0Data.posTrack_as<TracksComplete>();
40454046
auto negtrack = v0Data.negTrack_as<TracksComplete>();
4046-
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
4047+
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
40474048
continue;
40484049
}
40494050
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
@@ -4268,7 +4269,7 @@ struct HStrangeCorrelation {
42684269
auto postrack = cascData.posTrack_as<TracksComplete>();
42694270
auto negtrack = cascData.negTrack_as<TracksComplete>();
42704271
auto bachtrack = cascData.bachelor_as<TracksComplete>();
4271-
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
4272+
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !bachtrack.hasTPC() || bachtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
42724273
continue;
42734274
}
42744275
if (trackSelection.checksRequireTPCChi2 && (postrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || negtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated || bachtrack.tpcChi2NCl() > trackSelection.maxTPCChi2PerClusterAssociated)) {
@@ -5377,8 +5378,8 @@ struct HStrangeCorrelation {
53775378
const bool passesDaughterDcaAndArmenteros = std::abs(v0.dcapostopv()) > dcaCut && std::abs(v0.dcanegtopv()) > dcaCut && v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
53785379
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
53795380
}
5380-
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
5381-
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
5381+
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
5382+
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
53825383
if (trackSelection.checksRequireTPCChi2) {
53835384
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
53845385
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
@@ -5997,8 +5998,8 @@ struct HStrangeCorrelation {
59975998
const bool passesDaughterDcaAndArmenteros = std::abs(v0.dcapostopv()) > dcaCut && std::abs(v0.dcanegtopv()) > dcaCut && v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
59985999
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
59996000
}
6000-
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
6001-
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
6001+
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
6002+
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
60026003
if (trackSelection.checksRequireTPCChi2) {
60036004
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
60046005
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
@@ -6536,8 +6537,8 @@ struct HStrangeCorrelation {
65366537
v0.qtarm() * v0Selection.armPodCut > std::abs(v0.alpha());
65376538
passesFinalSelection = v0SelectedPbPb(v0) && passesLifetime && passesDaughterDcaAndArmenteros;
65386539
}
6539-
passesFinalSelection = passesFinalSelection && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
6540-
negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
6540+
passesFinalSelection = passesFinalSelection && positiveTrack.hasTPC() && positiveTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated &&
6541+
negativeTrack.hasTPC() && negativeTrack.tpcNClsCrossedRows() >= trackSelection.minTPCNCrossedRowsAssociated;
65416542
if (trackSelection.checksRequireTPCChi2) {
65426543
passesFinalSelection = passesFinalSelection && positiveTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated &&
65436544
negativeTrack.tpcChi2NCl() <= trackSelection.maxTPCChi2PerClusterAssociated;
@@ -7204,7 +7205,7 @@ struct HStrangeCorrelation {
72047205
//---] track quality check [---
72057206
auto postrack = v0Data.posTrack_as<TracksComplete>();
72067207
auto negtrack = v0Data.negTrack_as<TracksComplete>();
7207-
if (postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
7208+
if (!postrack.hasTPC() || postrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated || !negtrack.hasTPC() || negtrack.tpcNClsCrossedRows() < trackSelection.minTPCNCrossedRowsAssociated) {
72087209
continue;
72097210
}
72107211
if (trackSelection.requireClusterInITS && (postrack.itsNCls() < trackSelection.minITSClustersForDaughterTracks || negtrack.itsNCls() < trackSelection.minITSClustersForDaughterTracks)) {

0 commit comments

Comments
 (0)