@@ -61,7 +61,10 @@ T* getHist(const char* name)
6161 return nullptr ;
6262 }
6363 h -> SetDirectory (nullptr );
64- h -> SetStats (false); // also when the saved canvases are drawn later
64+ h -> SetStats (false); // also when the saved canvases are drawn later
65+ TString uniqueName = name ; // histograms from subdirectories (e.g. "BcOccs/hBcCounter"): unique names in the output file
66+ uniqueName .ReplaceAll ("/" , "_" );
67+ h -> SetName (uniqueName );
6568 return h ;
6669}
6770
@@ -109,6 +112,9 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
109112
110113 auto* hBcCounter = getHist < TH1 > ("hBcCounter" );
111114 auto* hNumCollsInBC = getHist < TH1 > ("hNumCollsInBC" );
115+ auto* hNumCollsInRof = getHist < TH1 > ("hNumCollsInRof" );
116+ auto* hNumCollsInRofVsInBC = getHist < TH2 > ("hNumCollsInRofVsInBC" );
117+ auto* hNumCollsInRofUpcMode = getHist < TH1 > ("hNumCollsInRofUpcMode" );
112118 auto* hBcInTF = getHist < TH1 > ("hBcInTF" );
113119 auto* hBcInTFDefined = getHist < TH1 > ("hBcInTFOccupancyDefined" );
114120 auto* hOccTracks = getHist < TH1 > ("hOccupancyByTracks" );
@@ -120,6 +126,12 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
120126 auto* hFlags = getHist < TH1 > ("hOccupancyFlags" );
121127 auto* hFlagsVsOcc = getHist < TH2 > ("hOccupancyFlagsVsOccupancyByTracks" );
122128 auto* hBcIndexCheck = getHist < TH1 > ("hBcIndexCheck" );
129+ // aod::BcOccs, and its comparison with aod::BcOccsAll
130+ auto* hBcOccsCounter = getHist < TH1 > ("BcOccs/hBcCounter" );
131+ auto* hBcOccsOccTracks = getHist < TH1 > ("BcOccs/hOccupancyByTracks" );
132+ auto* hBcOccsOccTracksVsFT0C = getHist < TH2 > ("BcOccs/hOccupancyByTracksVsFT0C" );
133+ auto* hBcOccsFlags = getHist < TH1 > ("BcOccs/hOccupancyFlags" );
134+ auto* hBcOccsVsBcOccsAll = getHist < TH1 > ("BcOccsVsBcOccsAll/hCheck" );
123135
124136 // ### summary
125137 std ::printf ("\n=== BC occupancy QA: %s ===\n" , fileName );
@@ -136,6 +148,15 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
136148 nAll > 0 ? 100. * hNumCollsInBC -> Integral (hNumCollsInBC -> FindBin (1 ), hNumCollsInBC -> GetNbinsX () + 1 ) / nAll : 0. ,
137149 nAll > 0 ? 100. * hNumCollsInBC -> Integral (hNumCollsInBC -> FindBin (2 ), hNumCollsInBC -> GetNbinsX () + 1 ) / nAll : 0. );
138150 }
151+ if (hNumCollsInRof && hNumCollsInRof -> GetEntries () > 0 ) {
152+ const double nAll = hNumCollsInRof -> GetEntries ();
153+ const double nNotAvailable = hNumCollsInRof -> GetBinContent (hNumCollsInRof -> FindBin (-1 ));
154+ std ::printf ("collisions in the ITS ROF of a BC: mean %.3f, BCs in ROFs with >= 2 collisions: %.2f%%, not available (-1): %.0f\n" ,
155+ hNumCollsInRof -> GetMean (), 100. * hNumCollsInRof -> Integral (hNumCollsInRof -> FindBin (2 ), hNumCollsInRof -> GetNbinsX () + 1 ) / nAll , nNotAvailable );
156+ if (hNumCollsInRofUpcMode ) {
157+ std ::printf ("BCs in ITS ROFs in UPC mode (kUpcMode): %.2f%%\n" , 100. * hNumCollsInRofUpcMode -> GetEntries () / nAll );
158+ }
159+ }
139160 if (hFlags && hFlags -> GetBinContent (1 ) > 0 ) {
140161 std ::printf ("fraction of BCs (with calculated occupancy) passing each flag:\n" );
141162 for (int i = 2 ; i <= hFlags -> GetNbinsX (); i ++ ) {
@@ -151,6 +172,18 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
151172 hBcIndexCheck -> GetBinContent (6 ), hBcIndexCheck -> GetBinContent (5 ), ok ? "OK" : "MISMATCH" );
152173 }
153174
175+ if (hBcOccsCounter && hBcOccsCounter -> GetBinContent (1 ) > 0 ) {
176+ const double nAll = hBcOccsCounter -> GetBinContent (1 ), nDef = hBcOccsCounter -> GetBinContent (2 );
177+ std ::printf ("BcOccs: BCs %.0f, with calculated occupancy: %.0f (%.2f%%)\n" , nAll , nDef , 100. * nDef / nAll );
178+ }
179+ if (hBcOccsVsBcOccsAll && hBcOccsVsBcOccsAll -> GetBinContent (1 ) > 0 ) {
180+ // all BCs found in BcOccsAll should have identical values
181+ const auto bin = [hBcOccsVsBcOccsAll ](int i ) { return hBcOccsVsBcOccsAll -> GetBinContent (i ); };
182+ const bool ok = bin (3 ) == bin (2 ) && bin (4 ) == bin (2 ) && bin (6 ) == bin (5 );
183+ std ::printf ("BcOccs vs BcOccsAll: BCs found %.0f / %.0f (not found %.0f), same collision counts %.0f, same kUpcMode %.0f, same occupancy and flags %.0f / %.0f -> %s\n" ,
184+ bin (2 ), bin (1 ), bin (7 ), bin (3 ), bin (4 ), bin (6 ), bin (5 ), ok ? "OK" : "MISMATCH" );
185+ }
186+
154187 // ### plots
155188 const double maxOccTracks = hOccTracks ? upperEdgeOfFilledRange (hOccTracks ) : 0. ;
156189 const double maxOccFT0C = hOccFT0C ? upperEdgeOfFilledRange (hOccFT0C ) : 0. ;
@@ -165,8 +198,8 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
165198 };
166199 TCanvas * c = nullptr ;
167200
168- // page 1: BC counters and the cross-check of the lookup by global BC
169- c = newPage ("cBcCounters" , "BC counters" , 1500 , 550 , 3 , 1 );
201+ // page 1: BC counters, collisions in the BC and in the ITS ROF, and the cross-check of the lookup by global BC
202+ c = newPage ("cBcCounters" , "BC counters" , 1500 , 1000 , 3 , 2 );
170203 if (hBcCounter ) {
171204 c -> cd (1 )-> SetLeftMargin (0.15 );
172205 hBcCounter -> SetTitle ("number of BCs" );
@@ -185,6 +218,28 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
185218 hBcIndexCheck -> SetMinimum (0.5 );
186219 hBcIndexCheck -> Draw ("hist text" );
187220 }
221+ const double maxNumCollsInRof = hNumCollsInRof ? upperEdgeOfFilledRange (hNumCollsInRof ) + 1. : 0. ;
222+ if (hNumCollsInRof ) {
223+ c -> cd (4 )-> SetLogy ();
224+ c -> cd (4 )-> SetLeftMargin (0.15 );
225+ hNumCollsInRof -> SetTitle ("all BCs;number of collisions in the ITS ROF of the BC;N BCs" );
226+ hNumCollsInRof -> GetXaxis ()-> SetRangeUser (-1.5 , maxNumCollsInRof );
227+ hNumCollsInRof -> Draw ("hist" );
228+ if (hNumCollsInRofUpcMode ) {
229+ hNumCollsInRofUpcMode -> SetLineColor (kRed + 1 );
230+ hNumCollsInRofUpcMode -> Draw ("hist same" );
231+ auto* legRof = new TLegend (0.5 , 0.75 , 0.89 , 0.89 );
232+ legRof -> AddEntry (hNumCollsInRof , "all BCs" , "l" );
233+ legRof -> AddEntry (hNumCollsInRofUpcMode , "BCs in UPC-mode ROFs" , "l" );
234+ legRof -> Draw ();
235+ }
236+ }
237+ if (hNumCollsInRofVsInBC ) {
238+ c -> cd (5 )-> SetLogz ();
239+ hNumCollsInRofVsInBC -> SetTitle ("all BCs;number of collisions in the BC;number of collisions in the ITS ROF of the BC" );
240+ hNumCollsInRofVsInBC -> GetYaxis ()-> SetRangeUser (-1.5 , maxNumCollsInRof );
241+ hNumCollsInRofVsInBC -> Draw ("colz" );
242+ }
188243
189244 // page 2: occupancy distributions
190245 c = newPage ("cOccupancy" , "occupancy distributions" , 1200 , 800 , 2 , 2 );
@@ -272,6 +327,48 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
272327 pOccVsBcInOrbit -> Draw ("hist" ); // 3564 bins: error bars would hide the pattern
273328 }
274329
330+ // page 5: aod::BcOccs and its comparison with aod::BcOccsAll
331+ c = newPage ("cBcOccs" , "BcOccs and comparison with BcOccsAll" , 1500 , 1000 , 3 , 2 );
332+ if (hBcOccsCounter ) {
333+ c -> cd (1 )-> SetLeftMargin (0.15 );
334+ hBcOccsCounter -> SetTitle ("BcOccs: number of BCs" );
335+ hBcOccsCounter -> Draw ("hist text" );
336+ }
337+ if (hBcOccsFlags && hBcOccsFlags -> GetBinContent (1 ) > 0 ) {
338+ c -> cd (2 )-> SetBottomMargin (0.3 );
339+ auto* hFlagsFracBcOccs = static_cast < TH1 * > (hBcOccsFlags -> Clone ("BcOccs_hFlagsFrac" ));
340+ hFlagsFracBcOccs -> Scale (1. / hBcOccsFlags -> GetBinContent (1 ));
341+ hFlagsFracBcOccs -> SetTitle ("BcOccs: fraction of BCs passing each flag;;fraction of BCs" );
342+ hFlagsFracBcOccs -> GetXaxis ()-> LabelsOption ("v" );
343+ hFlagsFracBcOccs -> SetMinimum (0. );
344+ hFlagsFracBcOccs -> SetMaximum (1.1 );
345+ hFlagsFracBcOccs -> Draw ("hist text" );
346+ derivedHists .push_back (hFlagsFracBcOccs );
347+ }
348+ if (hBcOccsVsBcOccsAll ) {
349+ c -> cd (3 )-> SetBottomMargin (0.35 );
350+ c -> cd (3 )-> SetLogy ();
351+ hBcOccsVsBcOccsAll -> SetTitle ("BcOccs vs BcOccsAll (BCs of aod::BCs);;counts" );
352+ hBcOccsVsBcOccsAll -> GetXaxis ()-> LabelsOption ("v" );
353+ hBcOccsVsBcOccsAll -> SetMinimum (0.5 );
354+ hBcOccsVsBcOccsAll -> Draw ("hist text" );
355+ }
356+ if (hBcOccsOccTracks ) {
357+ c -> cd (4 )-> SetLeftMargin (0.15 );
358+ c -> cd (4 )-> SetLogy ();
359+ hBcOccsOccTracks -> SetTitle ("BcOccs: occupancy by ITS tracks;occupancy by ITS tracks;N BCs" );
360+ hBcOccsOccTracks -> GetXaxis ()-> SetRangeUser (0. , maxOccTracks );
361+ hBcOccsOccTracks -> Draw ("hist" );
362+ }
363+ if (hBcOccsOccTracksVsFT0C ) {
364+ c -> cd (5 )-> SetLeftMargin (0.15 );
365+ c -> cd (5 )-> SetLogz ();
366+ hBcOccsOccTracksVsFT0C -> SetTitle ("BcOccs: occupancy, ITS tracks vs FT0C;occupancy by FT0C amplitudes;occupancy by ITS tracks" );
367+ hBcOccsOccTracksVsFT0C -> GetXaxis ()-> SetRangeUser (0. , maxOccFT0C );
368+ hBcOccsOccTracksVsFT0C -> GetYaxis ()-> SetRangeUser (0. , maxOccTracks );
369+ hBcOccsOccTracksVsFT0C -> Draw ("colz" );
370+ }
371+
275372 // PDF: each page with the aspect ratio of its canvas
276373 for (size_t i = 0 ; i < canvases .size (); i ++ ) {
277374 gStyle -> SetPaperSize (30. , 30. * canvases [i ]-> GetWh () / canvases [i ]-> GetWw ());
@@ -304,8 +401,9 @@ void plotBcOccupancyQa(const char* fileName = "AnalysisResults.root", const char
304401 canvas -> Write ();
305402 }
306403 fOut -> mkdir ("histograms" )-> cd ();
307- for (TH1 * h : {static_cast < TH1 * > (hBcCounter ), hNumCollsInBC , hBcInTF , hBcInTFDefined , hOccTracks , hOccFT0C , static_cast < TH1 * > (hOccTracksVsFT0C ), hMedianTime ,
308- static_cast < TH1 * > (pOccVsBcInTF ), static_cast < TH1 * > (pOccVsBcInOrbit ), hFlags , static_cast < TH1 * > (hFlagsVsOcc ), hBcIndexCheck }) {
404+ for (TH1 * h : {static_cast < TH1 * > (hBcCounter ), hNumCollsInBC , hNumCollsInRof , static_cast < TH1 * > (hNumCollsInRofVsInBC ), hNumCollsInRofUpcMode , hBcInTF , hBcInTFDefined , hOccTracks , hOccFT0C , static_cast < TH1 * > (hOccTracksVsFT0C ), hMedianTime ,
405+ static_cast < TH1 * > (pOccVsBcInTF ), static_cast < TH1 * > (pOccVsBcInOrbit ), hFlags , static_cast < TH1 * > (hFlagsVsOcc ), hBcIndexCheck ,
406+ hBcOccsCounter , hBcOccsOccTracks , static_cast < TH1 * > (hBcOccsOccTracksVsFT0C ), hBcOccsFlags , hBcOccsVsBcOccsAll }) {
309407 if (h ) {
310408 h -> Write ();
311409 }
0 commit comments