11 #include <dqm/utilities/DQMCommonUtils.h>
13 #include <framework/database/DBImportObjPtr.h>
14 #include <framework/database/IntervalOfValidity.h>
15 #include <framework/database/DBObjPtr.h>
23 int DQMCommonUtils::SetFlag(
int Type,
int bin,
const double* pars,
double ratio, TH1F* hist, TH1F* refhist,
27 float WarningLevel = 6.0;
28 float ErrorLevel = 10.0;
29 auto temp = std::unique_ptr<TH1F>(
new TH1F(
"temp",
"temp", hist->GetNbinsX(), hist->GetXaxis()->GetXmin(),
30 hist->GetXaxis()->GetXmax()));
34 for (
int j = 0; j < hist->GetNbinsX(); j++) {
35 double val = hist->GetBinContent(j + 1);
38 temp->SetBinContent(j + 1, val);
39 flagInt += temp->GetBinContent(j + 1);
40 flagrInt += refhist->GetBinContent(j + 1);
44 flaghist->SetBinContent(bin + 1, -1);
47 double flag = temp->GetMean();
48 double flagErr = temp->GetMeanError();
49 double flagRMS = temp->GetRMS();
50 double flagRMSErr = temp->GetRMSError();
51 double flagr = refhist->GetMean();
52 double flagrErr = refhist->GetMeanError();
53 double flagrRMS = refhist->GetRMS();
54 double flagrRMSErr = refhist->GetRMSError();
55 TString strDebugInfo = Form(
"Conditions for Flag--->\n source %f %f+-%f %f+-%f\n referen %f %f+-%f %f+-%f\n",
56 flagInt, flag, flagErr, flagRMS, flagRMSErr,
57 flagrInt, flagr, flagrErr, flagrRMS, flagrRMSErr
59 B2DEBUG(130, strDebugInfo.Data());
61 if ((fabs(flag - flagr) > ErrorLevel * (flagErr + flagrErr)) ||
62 (fabs(flagRMS - flagrRMS) > ErrorLevel * (flagRMSErr + flagrRMSErr)) ||
63 (fabs(flagInt - flagrInt) > ErrorLevel * (sqrt(flagInt) + sqrt(flagrInt)))
65 flaghist->SetBinContent(bin + 1, 2);
66 }
else if ((fabs(flag - flagr) > WarningLevel * (flagErr + flagrErr)) ||
67 (fabs(flagRMS - flagrRMS) > WarningLevel * (flagRMSErr + flagrRMSErr)) ||
68 (fabs(flagInt - flagrInt) > WarningLevel * (sqrt(flagInt) + sqrt(flagrInt)))
70 flaghist->SetBinContent(bin + 1, 1);
72 flaghist->SetBinContent(bin + 1, 0);
75 }
else if (Type == 2) {
76 if (fabs(flagInt - flagrInt) > ErrorLevel * (sqrt(flagInt) + sqrt(flagrInt))) {
77 flaghist->SetBinContent(bin + 1, 2);
78 }
else if (fabs(flagInt - flagrInt) > WarningLevel * (sqrt(flagInt) + sqrt(flagrInt))) {
79 flaghist->SetBinContent(bin + 1, 1);
81 flaghist->SetBinContent(bin + 1, 0);
84 }
else if (Type == 3) {
85 if (fabs(flag - flagr) > ErrorLevel * (flagErr + flagrErr)) {
86 flaghist->SetBinContent(bin + 1, 2);
87 }
else if (fabs(flag - flagr) > WarningLevel * (flagErr + flagrErr)) {
88 flaghist->SetBinContent(bin + 1, 1);
90 flaghist->SetBinContent(bin + 1, 0);
93 }
else if (Type == 4) {
94 if (fabs(flagRMS - flagrRMS) > ErrorLevel * (flagRMSErr + flagrRMSErr)) {
95 flaghist->SetBinContent(bin + 1, 2);
96 }
else if (fabs(flagRMS - flagrRMS) > WarningLevel * (flagRMSErr + flagrRMSErr)) {
97 flaghist->SetBinContent(bin + 1, 1);
99 flaghist->SetBinContent(bin + 1, 0);
102 }
else if (Type == 5) {
103 if ((fabs(flag - flagr) > ErrorLevel * (flagErr + flagrErr)) ||
104 (fabs(flagInt - flagrInt) > ErrorLevel * (sqrt(flagInt) + sqrt(flagrInt)))
106 flaghist->SetBinContent(bin + 1, 2);
107 }
else if ((fabs(flag - flagr) > WarningLevel * (flagErr + flagrErr)) ||
108 (fabs(flagInt - flagrInt) > WarningLevel * (sqrt(flagInt) + sqrt(flagrInt)))
110 flaghist->SetBinContent(bin + 1, 1);
112 flaghist->SetBinContent(bin + 1, 0);
115 }
else if (Type == 9) {
116 flagInt = temp->GetBinContent(bin + 1);
117 flagrInt = refhist->GetBinContent(bin + 1);
118 if (fabs(flagInt - flagrInt) > ErrorLevel * (sqrt(flagInt) + sqrt(flagrInt))) {
119 flaghist->SetBinContent(bin + 1, 2);
120 }
else if (fabs(flagInt - flagrInt) > WarningLevel * (sqrt(flagInt) + sqrt(flagrInt))) {
121 flaghist->SetBinContent(bin + 1, 1);
123 flaghist->SetBinContent(bin + 1, 0);
126 }
else if (Type == 10) {
127 float flag2 = refhist->Chi2Test(temp.get());
128 flaghist->SetBinContent(bin + 1, 0);
130 flaghist->SetBinContent(bin + 1, 2);
132 flaghist->SetBinContent(bin + 1, 1);
134 }
else if (Type == 100) {
135 flaghist->SetBinContent(bin + 1, 0);
138 flaghist->SetBinContent(bin + 1, -3);
141 strDebugInfo = Form(
"SetFlag---> %f, type %i\n", flaghist->GetBinContent(bin + 1), Type);
142 B2DEBUG(130, strDebugInfo.Data());
147 int DQMCommonUtils::SetFlag(
int Type,
int bin,
const double* pars,
double ratio, TH1I* hist, TH1I* refhist,
150 auto histF = std::unique_ptr<TH1F>(
new TH1F(
"histF",
"histF", hist->GetNbinsX(), hist->GetXaxis()->GetXmin(),
151 hist->GetXaxis()->GetXmax()));
152 auto refhistF = std::unique_ptr<TH1F>(
new TH1F(
"refhistF",
"refhistF", refhist->GetNbinsX(), refhist->GetXaxis()->GetXmin(),
153 refhist->GetXaxis()->GetXmax()));
154 for (
int j = 0; j < hist->GetNbinsX(); j++) {
155 histF->SetBinContent(j + 1, hist->GetBinContent(j + 1));
156 refhistF->SetBinContent(j + 1, refhist->GetBinContent(j + 1));
158 int ret = SetFlag(Type, bin, pars, ratio, histF.get(), refhistF.get(), flaghist);
163 void DQMCommonUtils::CreateDBHisto(TH1F* HistoDB)
166 TString Name = Form(
"%s_Ref", HistoDB->GetName());
168 DBHisto.
construct(HistoDB->GetNbinsX() + 3);
169 double* Content =
new double[HistoDB->GetNbinsX() + 3];
170 Content[0] = HistoDB->GetNbinsX();
171 Content[1] = HistoDB->GetXaxis()->GetXmin();
172 Content[2] = HistoDB->GetXaxis()->GetXmax();
173 for (
int i = 0; i < HistoDB->GetNbinsX(); i++) {
174 Content[i + 3] = HistoDB->GetBinContent(i + 1);
176 DBHisto->SetElements(Content);
182 void DQMCommonUtils::CreateDBHisto(TH1I* HistoDB)
185 TString Name = Form(
"%s_Ref", HistoDB->GetName());
187 DBHisto.
construct(HistoDB->GetNbinsX() + 3);
188 double* Content =
new double[HistoDB->GetNbinsX() + 3];
189 Content[0] = HistoDB->GetNbinsX();
190 Content[1] = HistoDB->GetXaxis()->GetXmin();
191 Content[2] = HistoDB->GetXaxis()->GetXmax();
192 for (
int i = 0; i < HistoDB->GetNbinsX(); i++) {
193 Content[i + 3] = HistoDB->GetBinContent(i + 1);
195 DBHisto->SetElements(Content);
201 void DQMCommonUtils::CreateDBHistoGroup(TH1F** HistoDB,
int number)
204 TString Name = Form(
"%s_Ref", HistoDB[0]->GetName());
206 DBHisto.
construct(number * HistoDB[0]->GetNbinsX() + 3);
207 double* Content =
new double[number * HistoDB[0]->GetNbinsX() + 3];
208 Content[0] = HistoDB[0]->GetNbinsX();
209 Content[1] = HistoDB[0]->GetXaxis()->GetXmin();
210 Content[2] = HistoDB[0]->GetXaxis()->GetXmax();
211 for (
int j = 0; j < number; j++) {
212 for (
int i = 0; i < HistoDB[j]->GetNbinsX(); i++) {
213 Content[j * HistoDB[j]->GetNbinsX() + i + 3] = HistoDB[j]->GetBinContent(i + 1);
216 DBHisto->SetElements(Content);
222 void DQMCommonUtils::CreateDBHistoGroup(TH1I** HistoDB,
int number)
225 TString Name = Form(
"%s_Ref", HistoDB[0]->GetName());
227 DBHisto.
construct(number * HistoDB[0]->GetNbinsX() + 3);
228 double* Content =
new double[number * HistoDB[0]->GetNbinsX() + 3];
229 Content[0] = HistoDB[0]->GetNbinsX();
230 Content[1] = HistoDB[0]->GetXaxis()->GetXmin();
231 Content[2] = HistoDB[0]->GetXaxis()->GetXmax();
232 for (
int j = 0; j < number; j++) {
233 for (
int i = 0; i < HistoDB[j]->GetNbinsX(); i++) {
234 Content[j * HistoDB[j]->GetNbinsX() + i + 3] = HistoDB[j]->GetBinContent(i + 1);
237 DBHisto->SetElements(Content);
243 int DQMCommonUtils::LoadDBHisto(TH1F* HistoDB)
245 TString Name = Form(
"%s_Ref", HistoDB->GetName());
250 if (HistoDB->GetNbinsX() != (
int)DBHisto->GetMatrixArray()[0]) ret = 0;
251 if (HistoDB->GetXaxis()->GetXmin() != DBHisto->GetMatrixArray()[1]) ret = 0;
252 if (HistoDB->GetXaxis()->GetXmax() != DBHisto->GetMatrixArray()[2]) ret = 0;
254 for (
int i = 0; i < HistoDB->GetNbinsX(); i++) {
255 HistoDB->SetBinContent(i + 1, (
int)DBHisto->GetMatrixArray()[i + 3]);
260 B2INFO(
"ERROR to open reference histogram: " << Name.Data());
266 int DQMCommonUtils::LoadDBHisto(TH1I* HistoDB)
268 TString Name = Form(
"%s_Ref", HistoDB->GetName());
273 if (HistoDB->GetNbinsX() != (
int)DBHisto->GetMatrixArray()[0]) ret = 0;
274 if (HistoDB->GetXaxis()->GetXmin() != DBHisto->GetMatrixArray()[1]) ret = 0;
275 if (HistoDB->GetXaxis()->GetXmax() != DBHisto->GetMatrixArray()[2]) ret = 0;
277 for (
int i = 0; i < HistoDB->GetNbinsX(); i++) {
278 HistoDB->SetBinContent(i + 1, (
int)DBHisto->GetMatrixArray()[i + 3]);
283 B2INFO(
"ERROR to open reference histogram: " << Name.Data());
289 int DQMCommonUtils::LoadDBHistoGroup(TH1F** HistoDB,
int number)
291 TString Name = Form(
"%s_Ref", HistoDB[0]->GetName());
296 if (HistoDB[0]->GetNbinsX() != (
int)DBHisto->GetMatrixArray()[0]) ret = 0;
297 if (HistoDB[0]->GetXaxis()->GetXmin() != DBHisto->GetMatrixArray()[1]) ret = 0;
298 if (HistoDB[0]->GetXaxis()->GetXmax() != DBHisto->GetMatrixArray()[2]) ret = 0;
299 for (
int j = 0; j < number; j++) {
300 for (
int i = 0; i < HistoDB[j]->GetNbinsX(); i++) {
301 HistoDB[j]->SetBinContent(i + 1, DBHisto->GetMatrixArray()[j * HistoDB[j]->GetNbinsX() + i + 3]);
306 B2INFO(
"ERROR to open reference histogram: " << Name.Data());
312 int DQMCommonUtils::LoadDBHistoGroup(TH1I** HistoDB,
int number)
314 TString Name = Form(
"%s_Ref", HistoDB[0]->GetName());
319 if (HistoDB[0]->GetNbinsX() != (
int)DBHisto->GetMatrixArray()[0]) ret = 0;
320 if (HistoDB[0]->GetXaxis()->GetXmin() != DBHisto->GetMatrixArray()[1]) ret = 0;
321 if (HistoDB[0]->GetXaxis()->GetXmax() != DBHisto->GetMatrixArray()[2]) ret = 0;
322 for (
int j = 0; j < number; j++) {
323 for (
int i = 0; i < HistoDB[j]->GetNbinsX(); i++) {
324 HistoDB[j]->SetBinContent(i + 1, DBHisto->GetMatrixArray()[j * HistoDB[j]->GetNbinsX() + i + 3]);
329 B2INFO(
"ERROR to open reference histogram: " << Name.Data());