Skip to content

Commit 86c1cf6

Browse files
authored
[PWGDQ]: Update HistogramManager to automatically populate run-by-run QA histograms (#8227)
1 parent 0519a20 commit 86c1cf6

File tree

3 files changed

+51
-38
lines changed

3 files changed

+51
-38
lines changed

PWGDQ/Core/HistogramManager.cxx

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
121121
int nYbins, double ymin, double ymax, int varY,
122122
int nZbins, double zmin, double zmax, int varZ,
123123
const char* xLabels, const char* yLabels, const char* zLabels,
124-
int varT, int varW, bool isdouble)
124+
int varT, int varW, bool isdouble, bool isFillLabelx)
125125
{
126126
//
127127
// add a histogram (this function can define TH1F,TH2F,TH3F,TProfile,TProfile2D, and TProfile3D)
@@ -180,6 +180,7 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
180180
varVector.push_back(varY);
181181
varVector.push_back(varZ);
182182
varVector.push_back(varT); // variable used for profiling in case of TProfile3D
183+
varVector.push_back(isFillLabelx); // whether to fill with the x-axis labels
183184
std::list varList = fVariablesMap[histClass];
184185
varList.push_back(varVector);
185186
fVariablesMap[histClass] = varList;
@@ -330,7 +331,7 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
330331
int nYbins, double* ybins, int varY,
331332
int nZbins, double* zbins, int varZ,
332333
const char* xLabels, const char* yLabels, const char* zLabels,
333-
int varT, int varW, bool isdouble)
334+
int varT, int varW, bool isdouble, bool isFillLabelx)
334335
{
335336
//
336337
// add a histogram
@@ -389,6 +390,7 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
389390
varVector.push_back(varY);
390391
varVector.push_back(varZ);
391392
varVector.push_back(varT); // variable used for profiling in case of TProfile3D
393+
varVector.push_back(isFillLabelx); // whether to fill with the x-axis labels
392394
std::list varList = fVariablesMap[histClass];
393395
varList.push_back(varVector);
394396
fVariablesMap[histClass] = varList;
@@ -754,6 +756,7 @@ void HistogramManager::FillHistClass(const char* className, Float_t* values)
754756
bool isTHn;
755757
int dimension = 0;
756758
bool isSparse = kFALSE;
759+
bool isFillLabelx = kFALSE;
757760
// TODO: At the moment, maximum 20 dimensions are foreseen for the THn histograms. We should make this more dynamic
758761
// But maybe its better to have it like to avoid dynamically allocating this array in the histogram loop
759762
double fillValues[20] = {0.0};
@@ -783,22 +786,41 @@ void HistogramManager::FillHistClass(const char* className, Float_t* values)
783786
varY = varIter->at(4);
784787
varZ = varIter->at(5);
785788
varT = varIter->at(6);
789+
if (varIter->at(7) == 1) {
790+
isFillLabelx = kTRUE;
791+
}
786792
}
787793

788794
if (!isTHn) {
789795
switch (dimension) {
790796
case 1:
791797
if (isProfile) {
792798
if (varW > kNothing) {
793-
(reinterpret_cast<TProfile*>(h))->Fill(values[varX], values[varY], values[varW]);
799+
if (isFillLabelx) {
800+
(reinterpret_cast<TProfile*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), values[varW]);
801+
} else {
802+
(reinterpret_cast<TProfile*>(h))->Fill(values[varX], values[varW]);
803+
}
794804
} else {
795-
(reinterpret_cast<TProfile*>(h))->Fill(values[varX], values[varY]);
805+
if (isFillLabelx) {
806+
(reinterpret_cast<TProfile*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), values[varY]);
807+
} else {
808+
(reinterpret_cast<TProfile*>(h))->Fill(values[varX], values[varY]);
809+
}
796810
}
797811
} else {
798812
if (varW > kNothing) {
799-
(reinterpret_cast<TH1*>(h))->Fill(values[varX], values[varW]);
813+
if (isFillLabelx) {
814+
(reinterpret_cast<TH1*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), values[varW]);
815+
} else {
816+
(reinterpret_cast<TH1*>(h))->Fill(values[varX], values[varW]);
817+
}
800818
} else {
801-
(reinterpret_cast<TH1*>(h))->Fill(values[varX]);
819+
if (isFillLabelx) {
820+
(reinterpret_cast<TH1*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), 1.);
821+
} else {
822+
(reinterpret_cast<TH1*>(h))->Fill(values[varX]);
823+
}
802824
}
803825
}
804826
break;
@@ -811,9 +833,17 @@ void HistogramManager::FillHistClass(const char* className, Float_t* values)
811833
}
812834
} else {
813835
if (varW > kNothing) {
814-
(reinterpret_cast<TH2*>(h))->Fill(values[varX], values[varY], values[varW]);
836+
if (isFillLabelx) {
837+
(reinterpret_cast<TH2*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), values[varY], values[varW]);
838+
} else {
839+
(reinterpret_cast<TH2*>(h))->Fill(values[varX], values[varY], values[varW]);
840+
}
815841
} else {
816-
(reinterpret_cast<TH2*>(h))->Fill(values[varX], values[varY]);
842+
if (isFillLabelx) {
843+
(reinterpret_cast<TH2*>(h))->Fill(Form("%d", static_cast<int>(values[varX])), values[varY], 1.);
844+
} else {
845+
(reinterpret_cast<TH2*>(h))->Fill(values[varX], values[varY]);
846+
}
817847
}
818848
}
819849
break;

PWGDQ/Core/HistogramManager.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ class HistogramManager : public TNamed
6767
int nYbins = 0, double ymin = 0, double ymax = 0, int varY = -1,
6868
int nZbins = 0, double zmin = 0, double zmax = 0, int varZ = -1,
6969
const char* xLabels = "", const char* yLabels = "", const char* zLabels = "",
70-
int varT = -1, int varW = -1, bool isdouble = false);
70+
int varT = -1, int varW = -1, bool isdouble = false, bool isFillLabelx = false);
7171
// Similar to the above function, with the difference that the user can specify non-equidistant binning
7272
void AddHistogram(const char* histClass, const char* name, const char* title, bool isProfile,
7373
int nXbins, double* xbins, int varX,
7474
int nYbins = 0, double* ybins = nullptr, int varY = -1,
7575
int nZbins = 0, double* zbins = nullptr, int varZ = -1,
7676
const char* xLabels = "", const char* yLabels = "", const char* zLabels = "",
77-
int varT = -1, int varW = -1, bool isdouble = false);
77+
int varT = -1, int varW = -1, bool isdouble = false, bool isFillLabelx = false);
7878
// Create a THn histogram (either THnF or THnSparse) with equidistant binning
7979
void AddHistogram(const char* histClass, const char* name, const char* title,
8080
int nDimensions, int* vars, int* nBins, double* xmin, double* xmax,

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
3030
if (!groupStr.CompareTo("event")) {
3131
if (!subGroupStr.Contains("generator")) {
3232
hm->AddHistogram(histClass, "VtxZ", "Vtx Z", false, 60, -15.0, 15.0, VarManager::kVtxZ);
33-
hm->AddHistogram(histClass, "VtxZ_Run", "Vtx Z", true, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo, 60, -15.0, 15.0, VarManager::kVtxZ, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
33+
hm->AddHistogram(histClass, "VtxZ_Run", "Vtx Z", true, 1, -0.5, 0.5, VarManager::kRunNo, 60, -15.0, 15.0, VarManager::kVtxZ, 1, 0, 1, VarManager::kNothing, "", "", "", VarManager::kNothing, VarManager::kNothing, false, true);
3434
hm->AddHistogram(histClass, "BC", "Event per BC", false, 3564, 0.0, 3564.0, VarManager::kBCOrbit);
3535
}
3636
if (subGroupStr.Contains("trigger")) {
@@ -76,7 +76,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
7676
hm->AddHistogram(histClass, "CentFT0C", "CentFT0C", false, 100, 0., 100., VarManager::kCentFT0C);
7777
hm->AddHistogram(histClass, "CentFT0C_vtxZ", "CentFT0C vs Vtx Z", false, 60, -15.0, 15.0, VarManager::kVtxZ, 20, 0., 100., VarManager::kCentFT0C);
7878
hm->AddHistogram(histClass, "CentFT0C_MultTPC", "CentFT0C vs MultTPC", false, 100, 0., 100., VarManager::kCentFT0C, 100, 0., 50000., VarManager::kMultTPC);
79-
hm->AddHistogram(histClass, "CentFT0C_Run", "Cent FT0C", true, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo, 100, 0., 100., VarManager::kCentFT0C, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
79+
hm->AddHistogram(histClass, "CentFT0C_Run", "Cent FT0C", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, 0., 100., VarManager::kCentFT0C, 1, 0, 1, VarManager::kNothing, "", "", "", VarManager::kNothing, VarManager::kNothing, false, true);
8080
}
8181
if (subGroupStr.Contains("mult")) {
8282
if (subGroupStr.Contains("pp")) {
@@ -401,8 +401,6 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
401401
hm->AddHistogram(histClass, "TPCncls_vsTimeFromSOR", "Number of cluster in TPC vs time from SOR", true, 10000, 0.0, 1000., VarManager::kTimeFromSOR, 160, -0.5, 159.5, VarManager::kTPCncls);
402402
hm->AddHistogram(histClass, "TPCncls_Phi", "Number of cluster in TPC vs #varphi", true, 720, 0.0, TMath::TwoPi(), VarManager::kPhi, 10, 0.0, 200.0, VarManager::kTPCncls);
403403
hm->AddHistogram(histClass, "TPCncls_PhiPt", "Number of cluster in TPC vs p_{T} and #varphi", true, 20, 0.0, 10.0, VarManager::kPt, 720, 0.0, TMath::TwoPi(), VarManager::kPhi, 10, 0.0, 200.0, VarManager::kTPCncls);
404-
hm->AddHistogram(histClass, "TPCncls_Run", "Number of cluster in TPC", true, (VarManager::GetNRuns() > 0 ? VarManager::GetNRuns() : 1), 0.5, 0.5 + VarManager::GetNRuns(), VarManager::kRunId,
405-
10, -0.5, 159.5, VarManager::kTPCncls, 10, 0., 1., VarManager::kNothing, VarManager::GetRunStr().Data());
406404
hm->AddHistogram(histClass, "TPCnclsCR", "Number of crossed rows in TPC", false, 160, -0.5, 159.5, VarManager::kTPCnclsCR);
407405
hm->AddHistogram(histClass, "TPCncls_TPCnclsCR", "Number of TPC cluster vs Number of crossed rows in TPC", false, 160, -0.5, 159.5, VarManager::kTPCncls, 160, -0.5, 159.5, VarManager::kTPCnclsCR);
408406
hm->AddHistogram(histClass, "IsTPCrefit", "", false, 2, -0.5, 1.5, VarManager::kIsTPCrefit);
@@ -651,30 +649,15 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
651649
}
652650
}
653651
if (subGroupStr.Contains("runbyrun")) {
654-
hm->AddHistogram(histClass, "TPCncls_run", "Number of cluster in TPC vs RunNumber", false, (VarManager::GetNRuns() > 0 ? VarManager::GetNRuns() : 1), -0.5, -0.5 + VarManager::GetNRuns(), VarManager::kRunIndex,
655-
160, -0.5, 159.5, VarManager::kTPCncls, 10, 0., 1., VarManager::kNothing, VarManager::GetRunStr().Data());
656-
hm->AddHistogram(histClass, "TPCdEdx_run", "TPCdEdx vs RunNumber", false, (VarManager::GetNRuns() > 0 ? VarManager::GetNRuns() : 1), -0.5, -0.5 + VarManager::GetNRuns(), VarManager::kRunIndex,
657-
300, 0., 300., VarManager::kTPCsignal, 10, 0., 1., VarManager::kNothing, VarManager::GetRunStr().Data());
658-
hm->AddHistogram(histClass, "TPCchi2_run", "TPCchi2 vs RunNumber", false, (VarManager::GetNRuns() > 0 ? VarManager::GetNRuns() : 1), -0.5, -0.5 + VarManager::GetNRuns(), VarManager::kRunIndex,
659-
100, 0., 10., VarManager::kTPCchi2, 10, 0., 1., VarManager::kNothing, VarManager::GetRunStr().Data());
660-
hm->AddHistogram(histClass, "Pt_Run", "p_{T} distribution", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
661-
2000, 0.0, 20.0, VarManager::kPt, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
662-
hm->AddHistogram(histClass, "ITSncls_Run", "Number of cluster in ITS", false, 100, -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
663-
8, -0.5, 7.5, VarManager::kITSncls, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
664-
hm->AddHistogram(histClass, "ITSchi2_Run", "ITS chi2", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
665-
100, 0.0, 50.0, VarManager::kITSchi2, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
666-
hm->AddHistogram(histClass, "TPCncls_Run", "Number of cluster in TPC", false, 100, -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
667-
160, -0.5, 159.5, VarManager::kTPCncls, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
668-
hm->AddHistogram(histClass, "TPCchi2_Run", "TPC chi2", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
669-
100, 0.0, 10.0, VarManager::kTPCchi2, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
670-
hm->AddHistogram(histClass, "TPCdedx_Run", "TPC dE/dx", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
671-
200, 0.0, 200., VarManager::kTPCsignal, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
672-
hm->AddHistogram(histClass, "TPCnSigEle_Run", "TPC n-#sigma(e)", false, 100, -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
673-
100, -5.0, 5.0, VarManager::kTPCnSigmaEl, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
674-
hm->AddHistogram(histClass, "DCAxy_Run", "DCA_{xy}", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
675-
400, -2.0, 2.0, VarManager::kTrackDCAxy, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
676-
hm->AddHistogram(histClass, "DCAz_Run", "DCA_{z}", false, VarManager::GetDummyNRuns(), -0.5 + VarManager::GetDummyFirst(), 0.5 + VarManager::GetDummyLast(), VarManager::kRunNo,
677-
800, -4.0, 4.0, VarManager::kTrackDCAz, 1, 0, 1, VarManager::kNothing, VarManager::GetRunStr().Data());
652+
hm->AddHistogram(histClass, "TPCncls_Run", "Number of cluster in TPC vs RunNumber", true, 1, -0.5, 0.5, VarManager::kRunNo, 160, -0.5, 159.5, VarManager::kTPCncls, 1, 0., 1., VarManager::kNothing, "", "", "", -1, -1, false, true);
653+
hm->AddHistogram(histClass, "TPCdEdx_Run", "TPCdEdx vs RunNumber", true, 1, -0.5, 0.5, VarManager::kRunNo, 300, 0., 300., VarManager::kTPCsignal, 1, 0., 1., VarManager::kNothing, "", "", "", -1, -1, false, true);
654+
hm->AddHistogram(histClass, "TPCchi2_Run", "TPCchi2 vs RunNumber", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, 0., 10., VarManager::kTPCchi2, 1, 0., 1., VarManager::kNothing, "", "", "", -1, -1, false, true);
655+
hm->AddHistogram(histClass, "Pt_Run", "p_{T} distribution", true, 1, -0.5, 0.5, VarManager::kRunNo, 2000, 0.0, 20.0, VarManager::kPt, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
656+
hm->AddHistogram(histClass, "ITSncls_Run", "Number of cluster in ITS", true, 1, -0.5, 0.5, VarManager::kRunNo, 8, -0.5, 7.5, VarManager::kITSncls, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
657+
hm->AddHistogram(histClass, "ITSchi2_Run", "ITS chi2", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, 0.0, 50.0, VarManager::kITSchi2, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
658+
hm->AddHistogram(histClass, "TPCnSigEle_Run", "TPC n-#sigma(e)", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, -5.0, 5.0, VarManager::kTPCnSigmaEl, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
659+
hm->AddHistogram(histClass, "DCAxy_Run", "DCA_{xy}", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, -1.0, 1.0, VarManager::kTrackDCAxy, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
660+
hm->AddHistogram(histClass, "DCAz_Run", "DCA_{z}", true, 1, -0.5, 0.5, VarManager::kRunNo, 100, -1.0, 1.0, VarManager::kTrackDCAz, 1, 0, 1, VarManager::kNothing, "", "", "", -1, -1, false, true);
678661
}
679662
if (subGroupStr.Contains("dca")) {
680663
hm->AddHistogram(histClass, "DCAxy", "DCA_{xy}", false, 400, -2.0, 2.0, VarManager::kTrackDCAxy);

0 commit comments

Comments
 (0)