Skip to content

Commit 2c46716

Browse files
authored
updated qa plots
1 parent 2a4802b commit 2c46716

1 file changed

Lines changed: 103 additions & 5 deletions

File tree

‎DPG/Tasks/AOTEvent/macros/plotBcOccupancyQa.C‎

Lines changed: 103 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)