Skip to content

Commit 18d74f3

Browse files
author
Igor Altsybeev
committed
update usage of TrackTools to check tracks with NrowsThreshold in evSelQA
1 parent 8fabf95 commit 18d74f3

2 files changed

Lines changed: 46 additions & 26 deletions

File tree

‎DPG/Tasks/AOTEvent/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
o2physics_add_dpl_workflow(event-selection-qa
1313
SOURCES eventSelectionQa.cxx
14-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::AnalysisCCDB O2::DetectorsBase O2::DataFormatsITSMFT
14+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::AnalysisCCDB O2::DetectorsBase O2::DataFormatsITSMFT O2::TPCBase
1515
COMPONENT_NAME Analysis)
1616

1717
o2physics_add_dpl_workflow(lumi-qa

‎DPG/Tasks/AOTEvent/eventSelectionQa.cxx‎

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#include <TMath.h>
4545
#include <TString.h>
4646

47-
#include "TrackTools/TrackGeometry.h"
47+
#include <TrackTools/TrackGeometry.h>
4848
#include <sys/types.h>
4949

5050
#include <bitset>
@@ -74,6 +74,7 @@ struct EventSelectionQaTask {
7474
Configurable<bool> isLowFlux{"isLowFlux", 1, "1 - low flux (pp, pPb), 0 - high flux (PbPb)"};
7575
Configurable<bool> fillITSdeadStaveHists{"fillITSdeadStaveHists", 0, "0 - no, 1 - yes"};
7676
Configurable<bool> fillTPCnClsVsOccupancyHists{"fillTPCnClsVsOccupancyHists", 0, "0 - no, 1 - yes"};
77+
Configurable<bool> useTestWithTrackTools{"useTestWithTrackTools", 0, "0 - no, 1 - yes"};
7778

7879
Service<o2::ccdb::BasicCCDBManager> ccdb;
7980
HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};
@@ -92,6 +93,8 @@ struct EventSelectionQaTask {
9293
std::string strPassName = ""; // RecoPassName (for data) or AnchorPassName (for MC) from metadata
9394
bool isMC = false;
9495

96+
o2::tpc::recohelpers::TPCSectorEdgeConfig tpcSectorEdgeConfig; // for special selection of tracks within TPC
97+
9598
std::bitset<nBCsPerOrbit> bcPatternA;
9699
std::bitset<nBCsPerOrbit> bcPatternC;
97100
std::bitset<nBCsPerOrbit> bcPatternB;
@@ -122,6 +125,12 @@ struct EventSelectionQaTask {
122125
strLPMProductionTag = metadataInfo.get("LPMProductionTag"); // to extract info from ccdb by the tag
123126
strPassName = metadataInfo.get(isMC ? "AnchorPassName" : "RecoPassName");
124127

128+
// for special selection of tracks within TPC (Oct 2026)
129+
tpcSectorEdgeConfig.guardLowerCm = 0.5f;
130+
tpcSectorEdgeConfig.guardUpperCm = 0.5f;
131+
tpcSectorEdgeConfig.zMaxCm = 250.f;
132+
tpcSectorEdgeConfig.maxSnp = 0.9f;
133+
125134
const AxisSpec axisMultV0M{1000, 0., 40000., "V0M multiplicity"};
126135
const AxisSpec axisMultV0A{1000, 0., isLowFlux ? 40000. : 200000., "V0A multiplicity"};
127136
const AxisSpec axisMultV0C{1000, 0., 30000., "V0C multiplicity"};
@@ -391,9 +400,11 @@ struct EventSelectionQaTask {
391400
histos.add("occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_StandardDeltaTimeCut", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
392401
histos.add("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_GoodITSLayersAllCut", "", kTH3F, {axisMultV0AForOccup, axisNtracksPV, axisOccupancyTracks});
393402
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});
403+
// requested by TPC experts: check with tracks at given NrowsThreshold
404+
if (useTestWithTrackTools) {
405+
histos.add("occupancyQA/hNumTracksITS_isValidAtNrowsThreshold_EtaPtCuts_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
406+
histos.add("occupancyQA/hNumTracksPV_isValidAtNrowsThreshold_EtaPtSel8VxCuts_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
407+
}
397408
// requested by TPC experts: nTPConly tracks vs occupancy
398409
histos.add("occupancyQA/hNumTracksTPConly_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
399410
histos.add("occupancyQA/hNumTracksTPConlyNoITS_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksTPConly, axisOccupancyTracks});
@@ -416,7 +427,7 @@ struct EventSelectionQaTask {
416427

417428
histos.add("occupancyQA/dEdx_vs_centr_vs_occup_narrow_p_win", "dE/dx", kTH3F, {{20, 0, 4000, "n PV tracks"}, {60, 0, 15000, "occupancy"}, {800, 0.0, 800.0, "dE/dx (a. u.)"}});
418429
}
419-
}
430+
} // end of init()
420431

421432
void processRun2(
422433
ColEvSels const& cols,
@@ -1189,8 +1200,8 @@ struct EventSelectionQaTask {
11891200

11901201
int nTracksITS = 0;
11911202
int nTracksITSTPC = 0;
1192-
int nTracksITSValidAt85cmAfterEtaPtCuts = 0;
1193-
int nContributorsAt85cmAfterEtaPtSel8VxCuts = 0;
1203+
int nTracksITSValidAtNrowsThresholdAfterEtaPtCuts = 0;
1204+
int nContributorsAtNrowsThresholdAfterEtaPtSel8VxCuts = 0;
11941205

11951206
bool isTVX = col.selection_bit(kIsTriggerTVX);
11961207

@@ -1209,26 +1220,33 @@ struct EventSelectionQaTask {
12091220
}
12101221

12111222
// 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();
1223+
bool isTrackWithNrowsAvailable = false;
1224+
if (useTestWithTrackTools) {
1225+
const float bzKG = 5.f;
1226+
const float radiusOfInterest = 85.f; // cm
1227+
auto trackParLocal = o2::recohelpers::makeTrackParFromLocalParameters(
1228+
track.x(),
1229+
track.alpha(),
1230+
track.y(),
1231+
track.z(),
1232+
track.snp(),
1233+
track.tgl(),
1234+
track.signed1Pt());
1235+
auto trackAt85 = o2::recohelpers::getParametersAtRadiusH(trackParLocal, radiusOfInterest, bzKG);
1236+
auto l0 = o2::tpc::recohelpers::sectorEdgeStackLinear(trackParLocal, bzKG, tpcSectorEdgeConfig);
1237+
const int nRowsThreshold = 120; // minimum number of TPC rows required at 85 cm radius
1238+
1239+
isTrackWithNrowsAvailable = (trackAt85.valid() && l0.nRowsAvailable > nRowsThreshold);
1240+
}
12241241

12251242
if (std::fabs(track.eta()) < 0.8 && track.pt() > 0.2) {
12261243
if (track.hasITS()) {
12271244
nTracksITS++;
12281245
if (track.hasTPC())
12291246
nTracksITSTPC++;
1230-
if (isTrackAt85)
1231-
nTracksITSValidAt85cmAfterEtaPtCuts++;
1247+
if (useTestWithTrackTools && isTrackWithNrowsAvailable) {
1248+
nTracksITSValidAtNrowsThresholdAfterEtaPtCuts++;
1249+
}
12321250
}
12331251
}
12341252

@@ -1264,8 +1282,8 @@ struct EventSelectionQaTask {
12641282
histos.fill(HIST("ITSROFborderQA/hFoundBC_kTVX_counter_ITSTPCtracks"), localBC);
12651283
}
12661284

1267-
if (isTrackAt85) {
1268-
nContributorsAt85cmAfterEtaPtSel8VxCuts++;
1285+
if (useTestWithTrackTools && isTrackWithNrowsAvailable) {
1286+
nContributorsAtNrowsThresholdAfterEtaPtSel8VxCuts++;
12691287
}
12701288
} // end of sel8 and vZ cuts
12711289
}
@@ -1297,8 +1315,10 @@ struct EventSelectionQaTask {
12971315
histos.fill(HIST("occupancyQA/hNumTracksITS_vs_V0A_vs_occupancy"), multV0A, nTracksITS, occupancyByTracks);
12981316
histos.fill(HIST("occupancyQA/hNumTracksITSTPC_vs_V0A_vs_occupancy"), multV0A, nTracksITSTPC, occupancyByTracks);
12991317

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);
1318+
if (useTestWithTrackTools) {
1319+
histos.fill(HIST("occupancyQA/hNumTracksITS_isValidAtNrowsThreshold_EtaPtCuts_vs_V0A_vs_occupancy"), multV0A, nTracksITSValidAtNrowsThresholdAfterEtaPtCuts, occupancyByTracks);
1320+
histos.fill(HIST("occupancyQA/hNumTracksPV_isValidAtNrowsThreshold_EtaPtSel8VxCuts_vs_V0A_vs_occupancy"), multV0A, nContributorsAtNrowsThresholdAfterEtaPtSel8VxCuts, occupancyByTracks);
1321+
}
13021322

13031323
if (col.selection_bit(kNoCollInTimeRangeNarrow)) {
13041324
histos.fill(HIST("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_NarrowDeltaTimeCut"), multV0A, nPV, occupancyByTracks);

0 commit comments

Comments
 (0)