@@ -140,6 +140,16 @@ struct StronglyIntensiveCorr {
140140 std::vector<double > centClassEdges (centEdges.begin (), centEdges.end ());
141141 AxisSpec centClassAxis = {centClassEdges, " centrality class (%)" };
142142 AxisSpec etaGapAxis = {NEtaGaps, -0.05 , 1.55 , " #Delta#eta" };
143+
144+ // Seven physical, non-overlapping FB gaps:
145+ // DeltaEta = 0.0, 0.2, ..., 1.2.
146+ std::vector<double > physicalGapEdges = {
147+ -0.1 , 0.1 , 0.3 , 0.5 ,
148+ 0.7 , 0.9 , 1.1 , 1.3 };
149+
150+ AxisSpec physicalGapAxis = {
151+ physicalGapEdges,
152+ " #Delta#eta" };
143153 AxisSpec nAxis = {500 , 0.0 , 500.0 , " N" };
144154 AxisSpec counterAxis = {20 , 0.5 , 20.5 , " counter" };
145155 AxisSpec ptAxis = {{0.2 , 0.5 , 0.8 , 1.0 , 1.5 , 2.0 , 5.0 }, " #it{p}_{T} (GeV/#it{c})" };
@@ -175,6 +185,20 @@ struct StronglyIntensiveCorr {
175185 histos.add (" QA/fb/nFminusNB" , " nF-nB;nF-nB;Counts" , kTH1D , {{500 , -250.0 , 250.0 }});
176186 histos.add (" QA/fb/nFplusNB" , " nF+nB;nF+nB;Counts" , kTH1D , {{500 , 0.0 , 500.0 }});
177187
188+ // Event-level multiplicity QA for every physical gap.
189+ // Axes: centrality x DeltaEta x multiplicity.
190+ histos.add (
191+ " QA/fbAllGaps/nFvsCentGap" ,
192+ " Forward multiplicity;centrality (%);#Delta#eta;n_{F}" ,
193+ kTH3D ,
194+ {centAxis, physicalGapAxis, nAxis});
195+
196+ histos.add (
197+ " QA/fbAllGaps/nBvsCentGap" ,
198+ " Backward multiplicity;centrality (%);#Delta#eta;n_{B}" ,
199+ kTH3D ,
200+ {centAxis, physicalGapAxis, nAxis});
201+
178202 histos.add (" QA/mcReco/nRecoAll" , " MC reco all selected;n;Counts" , kTH1D , {nAxis});
179203 histos.add (" QA/mcReco/nRecoPrimary" , " MC reco primary selected;n;Counts" , kTH1D , {nAxis});
180204 histos.add (" QA/mcReco/nRecoSecondary" , " MC reco secondary selected;n;Counts" , kTH1D , {nAxis});
@@ -626,6 +650,37 @@ struct StronglyIntensiveCorr {
626650 histos.fill (HIST (" QA/fb/nFplusNB" ), nf + nb);
627651 }
628652
653+ void fillAllGapMultiplicityQA (
654+ float cent,
655+ std::array<double , NEtaGaps> const & nF,
656+ std::array<double , NEtaGaps> const & nB)
657+ {
658+ for (int i = 0 ; i < NEtaGaps; ++i) {
659+ const double gap =
660+ 2.0 * (etaCenter[i] -
661+ cfgEtaWidth.value / 2.0 );
662+
663+ // etaCenter = 0 corresponds to overlapping windows and
664+ // gives DeltaEta = -0.2. Keep only the seven physical,
665+ // non-overlapping values from 0.0 to 1.2.
666+ if (gap < -1 .e -6 || gap > 1.200001 ) {
667+ continue ;
668+ }
669+
670+ histos.fill (
671+ HIST (" QA/fbAllGaps/nFvsCentGap" ),
672+ cent,
673+ gap,
674+ nF[i]);
675+
676+ histos.fill (
677+ HIST (" QA/fbAllGaps/nBvsCentGap" ),
678+ cent,
679+ gap,
680+ nB[i]);
681+ }
682+ }
683+
629684 void fillInclusiveEtaGapMoments (std::array<double , NEtaGaps> const & nF,
630685 std::array<double , NEtaGaps> const & nB)
631686 {
@@ -944,6 +999,7 @@ struct StronglyIntensiveCorr {
944999
9451000 histos.fill (HIST (" QA/hCentrality" ), cent);
9461001 fillFBQA (cent, nF, nB);
1002+ fillAllGapMultiplicityQA (cent, nF, nB);
9471003 fillInclusiveEtaGapMoments (nF, nB);
9481004 fillCentClassEtaGapMoments (centClass, nF, nB);
9491005 fillCentWindowEtaGapMoments (centWindowClass, nF, nB);
0 commit comments