Skip to content

Commit 5a1d987

Browse files
committed
PWGLF: add configurable Micro001 ITS and TPC QA
1 parent 8b1d6cf commit 5a1d987

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

PWGLF/TableProducer/Resonances/resonanceModuleInitializer.cxx

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,6 +1008,7 @@ struct ResonanceDaughterInitializer {
10081008
static constexpr float MomentumQuantizationScale = 1000.f;
10091009
static constexpr std::size_t StoredMCRelationCount = 2;
10101010
static constexpr std::size_t MaxCandidateDaughters = 3;
1011+
static constexpr int NumberOfITSLayers = 7;
10111012

10121013
/// Selected-candidate state and the optional global daughter-ID veto set.
10131014
/// By default only candidate existence is recorded and daughter reuse is
@@ -1132,6 +1133,8 @@ struct ResonanceDaughterInitializer {
11321133
// General daughter output options
11331134
Configurable<bool> cfgFillQA{"cfgFillQA", false, "Fill QA histograms"};
11341135
Configurable<bool> cfgDetailTrackQA{"cfgDetailTrackQA", false, "Fill detailed QA histograms for enabled track output tables"};
1136+
Configurable<bool> cfgQAITS{"cfgQAITS", false, "Fill Micro001 ITS quality vs pT (requires cfgFillQA and cfgFillMicroTracks)"};
1137+
Configurable<bool> cfgQATPC{"cfgQATPC", false, "Fill Micro001 TPC crossed rows vs pT (requires cfgFillQA and cfgFillMicroTracks)"};
11351138

11361139
// Track pre-selection and DCA cuts
11371140
struct : ConfigurableGroup {
@@ -1511,6 +1514,24 @@ struct ResonanceDaughterInitializer {
15111514
}
15121515
}
15131516

1517+
if ((processTrackDataEnabled || processTrackMCEnabled) && FilterForDerivedTables.cfgFillMicroTracks) {
1518+
AxisSpec qualityPtAxis = {300, 0.f, 30.f, "#it{p}_{T} (GeV/#it{c})"};
1519+
if (cfgQAITS) {
1520+
AxisSpec itsMapAxis = {128, -0.5, 127.5, "ITS cluster map"};
1521+
AxisSpec itsNClsAxis = {8, -0.5, 7.5, "ITS occupied layers"};
1522+
AxisSpec itsInnerBarrelNClsAxis = {4, -0.5, 3.5, "ITS inner-barrel occupied layers"};
1523+
AxisSpec itsLayerAxis = {NumberOfITSLayers, -0.5, NumberOfITSLayers - 0.5, "ITS layer (0 = innermost)"};
1524+
qaRegistry.add("QA/h2MicroTrackITSClusterMapVsPt", "ResoMicroTracks ITS cluster map vs pT", kTH2D, {qualityPtAxis, itsMapAxis});
1525+
qaRegistry.add("QA/h2MicroTrackITSNClsVsPt", "ResoMicroTracks ITS occupied layers vs pT", kTH2D, {qualityPtAxis, itsNClsAxis});
1526+
qaRegistry.add("QA/h2MicroTrackITSNClsInnerBarrelVsPt", "ResoMicroTracks ITS inner-barrel occupied layers vs pT", kTH2D, {qualityPtAxis, itsInnerBarrelNClsAxis});
1527+
qaRegistry.add("QA/h2MicroTrackITSLayerHitsVsPt", "ResoMicroTracks ITS hits vs pT (one entry per occupied layer)", kTH2D, {qualityPtAxis, itsLayerAxis});
1528+
}
1529+
if (cfgQATPC) {
1530+
AxisSpec tpcCrossedRowsAxis = {256, -0.5, 255.5, "TPC crossed rows"};
1531+
qaRegistry.add("QA/h2MicroTrackTPCCrossedRowsVsPt", "ResoMicroTracks TPC crossed rows vs pT", kTH2D, {qualityPtAxis, tpcCrossedRowsAxis});
1532+
}
1533+
}
1534+
15141535
if (processV0DataEnabled || doprocessV0MC) {
15151536
qaRegistry.add("QA/hGoodV0Indices", "hGoodV0Indices", kTH1D, {idxAxis});
15161537
auto v0Selection = qaRegistry.get<TH1>(HIST("QA/hGoodV0Indices"));
@@ -2193,6 +2214,22 @@ struct ResonanceDaughterInitializer {
21932214
qaRegistry.fill(HIST("QA/h4MicroTrackTOFnSigma"), track.pt(), track.tofNSigmaPi(), track.tofNSigmaKa(), track.tofNSigmaPr());
21942215
}
21952216
}
2217+
// Quality QA follows the same selected rows as Micro001, independently
2218+
// of the detailed PID/DCA QA. ITS count getters count occupied layers.
2219+
if (cfgFillQA && cfgQAITS) {
2220+
const auto itsClusterMap = track.itsClusterMap();
2221+
qaRegistry.fill(HIST("QA/h2MicroTrackITSClusterMapVsPt"), track.pt(), itsClusterMap);
2222+
qaRegistry.fill(HIST("QA/h2MicroTrackITSNClsVsPt"), track.pt(), track.itsNCls());
2223+
qaRegistry.fill(HIST("QA/h2MicroTrackITSNClsInnerBarrelVsPt"), track.pt(), track.itsNClsInnerBarrel());
2224+
for (int layer = 0; layer < NumberOfITSLayers; ++layer) {
2225+
if ((itsClusterMap & (1u << layer)) != 0) {
2226+
qaRegistry.fill(HIST("QA/h2MicroTrackITSLayerHitsVsPt"), track.pt(), layer);
2227+
}
2228+
}
2229+
}
2230+
if (cfgFillQA && cfgQATPC) {
2231+
qaRegistry.fill(HIST("QA/h2MicroTrackTPCCrossedRowsVsPt"), track.pt(), track.tpcNClsCrossedRows());
2232+
}
21962233
reso2microtrks(collision.globalIndex(),
21972234
track.globalIndex(),
21982235
track.px(),

0 commit comments

Comments
 (0)