@@ -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