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