4444#include < TMath.h>
4545#include < TString.h>
4646
47+ #include " TrackTools/TrackGeometry.h"
4748#include < sys/types.h>
4849
4950#include < bitset>
@@ -390,6 +391,9 @@ struct EventSelectionQaTask {
390391 histos.add (" occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_StandardDeltaTimeCut" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
391392 histos.add (" occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_GoodITSLayersAllCut" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksPV, axisOccupancyTracks});
392393 histos.add (" occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_GoodITSLayersAllCut" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
394+ // check at R=85 cm (Oct 2026)
395+ histos.add (" occupancyQA/hNumTracksITS_isValidAt85cm_EtaPtCuts_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
396+ histos.add (" occupancyQA/hNumTracksPV_isValidAt85cm_EtaPtSel8VxCuts_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
393397 // requested by TPC experts: nTPConly tracks vs occupancy
394398 histos.add (" occupancyQA/hNumTracksTPConly_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
395399 histos.add (" occupancyQA/hNumTracksTPConlyNoITS_vs_V0A_vs_occupancy" , " " , kTH3F , {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
@@ -1185,6 +1189,8 @@ struct EventSelectionQaTask {
11851189
11861190 int nTracksITS = 0 ;
11871191 int nTracksITSTPC = 0 ;
1192+ int nTracksITSValidAt85cmAfterEtaPtCuts = 0 ;
1193+ int nContributorsAt85cmAfterEtaPtSel8VxCuts = 0 ;
11881194
11891195 bool isTVX = col.selection_bit (kIsTriggerTVX );
11901196
@@ -1202,11 +1208,27 @@ struct EventSelectionQaTask {
12021208 nTPConlyNoITS++;
12031209 }
12041210
1211+ // Oct 2026: test presence of track at 85 cm radius using new tools - https://github.com/AliceO2Group/AliceO2/tree/dev/Common/TrackTools
1212+ const float bzKG = 5 .f ;
1213+ const float radiusOfInterest = 85 .f ; // cm
1214+ auto trackParLocal = o2::recohelpers::makeTrackParFromLocalParameters (
1215+ track.x (),
1216+ track.alpha (),
1217+ track.y (),
1218+ track.z (),
1219+ track.snp (),
1220+ track.tgl (),
1221+ track.signed1Pt ());
1222+ auto trackAt85 = o2::recohelpers::getParametersAtRadiusH (trackParLocal, radiusOfInterest, bzKG);
1223+ bool isTrackAt85 = trackAt85.valid ();
1224+
12051225 if (std::fabs (track.eta ()) < 0.8 && track.pt () > 0.2 ) {
12061226 if (track.hasITS ()) {
12071227 nTracksITS++;
12081228 if (track.hasTPC ())
12091229 nTracksITSTPC++;
1230+ if (isTrackAt85)
1231+ nTracksITSValidAt85cmAfterEtaPtCuts++;
12101232 }
12111233 }
12121234
@@ -1234,12 +1256,18 @@ struct EventSelectionQaTask {
12341256 histos.fill (HIST (" occupancyQA/tpcNCrossedRows_vs_V0A_vs_occupancy" ), multV0A, track.tpcNClsFindable () - tpcNClsFindableMinusCrossedRowsCorrected, occupancyByTracks);
12351257 }
12361258 } // end of hasTPC
1237- if (col.sel8 () && fabs (col.posZ ()) < 10 && track.tpcNClsFound () > 50 && track.tpcNClsCrossedRows () > 80 && track.itsChi2NCl () < 36 && track.tpcChi2NCl () < 4 ) {
1238- nContributorsAfterEtaTPCCuts++;
1239- // ROF border QA
1240- histos.fill (HIST (" ITSROFborderQA/hFoundBC_kTVX_nITSlayers_for_ITSTPCtracks" ), localBC, track.itsNCls ());
1241- histos.fill (HIST (" ITSROFborderQA/hFoundBC_kTVX_counter_ITSTPCtracks" ), localBC);
1242- }
1259+ if (col.sel8 () && fabs (col.posZ ()) < 10 ) {
1260+ if (track.tpcNClsFound () > 50 && track.tpcNClsCrossedRows () > 80 && track.itsChi2NCl () < 36 && track.tpcChi2NCl () < 4 ) {
1261+ nContributorsAfterEtaTPCCuts++;
1262+ // ROF border QA
1263+ histos.fill (HIST (" ITSROFborderQA/hFoundBC_kTVX_nITSlayers_for_ITSTPCtracks" ), localBC, track.itsNCls ());
1264+ histos.fill (HIST (" ITSROFborderQA/hFoundBC_kTVX_counter_ITSTPCtracks" ), localBC);
1265+ }
1266+
1267+ if (isTrackAt85) {
1268+ nContributorsAt85cmAfterEtaPtSel8VxCuts++;
1269+ }
1270+ } // end of sel8 and vZ cuts
12431271 }
12441272 if (!track.hasTPC ())
12451273 histos.fill (HIST (" hITStrackBcDiff" ), trackBcDiff);
@@ -1268,6 +1296,10 @@ struct EventSelectionQaTask {
12681296 histos.fill (HIST (" occupancyQA/hNumTracksPVTPCLooseCuts_vs_V0A_vs_occupancy" ), multV0A, nContributorsAfterEtaTPCLooseCuts, occupancyByTracks);
12691297 histos.fill (HIST (" occupancyQA/hNumTracksITS_vs_V0A_vs_occupancy" ), multV0A, nTracksITS, occupancyByTracks);
12701298 histos.fill (HIST (" occupancyQA/hNumTracksITSTPC_vs_V0A_vs_occupancy" ), multV0A, nTracksITSTPC, occupancyByTracks);
1299+
1300+ histos.fill (HIST (" occupancyQA/hNumTracksITS_isValidAt85cm_EtaPtCuts_vs_V0A_vs_occupancy" ), multV0A, nTracksITSValidAt85cmAfterEtaPtCuts, occupancyByTracks);
1301+ histos.fill (HIST (" occupancyQA/hNumTracksPV_isValidAt85cm_EtaPtSel8VxCuts_vs_V0A_vs_occupancy" ), multV0A, nContributorsAt85cmAfterEtaPtSel8VxCuts, occupancyByTracks);
1302+
12711303 if (col.selection_bit (kNoCollInTimeRangeNarrow )) {
12721304 histos.fill (HIST (" occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_NarrowDeltaTimeCut" ), multV0A, nPV, occupancyByTracks);
12731305 histos.fill (HIST (" occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_NarrowDeltaTimeCut" ), multV0A, nContributorsAfterEtaTPCCuts, occupancyByTracks);
0 commit comments