16 #include "TProfile2D.h"
19 constexpr
double Zmass = 91.1876;
26 m_minMuonEffWindow(0.8),
27 m_maxMuonEffWindow(1.05)
32 declareInterface<MuonDQAFitFunc>(
this);
41 double width_error=0.;
44 TF1 *ZmumFit =
new TF1(
"ZmumFit",
"gaus",89.,93.);
47 ZmumFit->SetParameter(1,3.097);
48 ZmumFit->SetParameter(2,0.05);
49 h1[
i]->Fit(
"ZmumFit",
"RQNM");
51 mass_error=ZmumFit->GetParError(1);
52 width=ZmumFit->GetParameter(2);
53 width_error=ZmumFit->GetParError(2);
54 hmass->SetBinContent(
i+1,
mass);
55 hmass->SetBinError(
i+1,mass_error);
56 hwidth->SetBinContent(
i+1,
width);
57 hwidth->SetBinError(
i+1,width_error);
58 if( (std::abs(
mass)+mass_error)>maxmass ) maxmass=std::abs(
mass)+mass_error;
59 if( (std::abs(
width)+width_error)>maxwidth ) maxwidth=std::abs(
width)+width_error;
62 if (maxmass>0.1) maxmass=0.1;
63 if (maxwidth>0.2) maxwidth=0.2;
64 hmass->SetAxisRange(-maxmass,maxmass,
"Y");
65 hwidth->SetAxisRange(0.,maxwidth,
"Y");
73 nBins = h_Num->GetNbinsX();
75 int nPass =
int(h_Num->GetBinContent(
bin+1));
76 int nFail =
int(h_Denom->GetBinContent(
bin+1)) - nPass;
77 double x = h_Denom->GetBinCenter(
bin+1);
78 for (
int pass=0; pass!=nPass; ++pass) {
94 nBins = h_Num->GetNbinsX();
95 nBinsY = h_Num->GetNbinsY();
98 int nPass =
int(h_Num->GetBinContent(
bin+1,
binY+1));
99 int nFail =
int(h_Denom->GetBinContent(
bin+1,
binY+1)) - nPass;
100 double x = h_Denom->GetXaxis()->GetBinCenter(
bin+1);
101 double y = h_Denom->GetYaxis()->GetBinCenter(
binY+1);
102 for (
int pass=0; pass!=nPass; ++pass) {
119 float min=hProf->GetMinimum();
120 float max=hProf->GetMaximum();
121 float margin=0.05*(
max-
min);
122 if(
min > windowMin)
min=windowMin-margin;
123 if(
max < windowMax)
max=windowMax+margin;
124 hProf->SetMinimum(
min);
125 hProf->SetMaximum(
max);
132 float min=hProf->GetMinimum();
133 float max=hProf->GetMaximum();
134 float margin=0.05*(
max-
min);
135 if(
min > windowMin)
min=windowMin-margin;
136 if(
max < windowMax)
max=windowMax+margin;
137 hProf->SetMinimum(
min);
138 hProf->SetMaximum(
max);
148 int nBins_2d = h2d->GetNbinsX();
149 int nBins_1d = h1d->GetNbinsX();
151 if(nBins_2d!=nBins_1d)
ATH_MSG_DEBUG(
"Mean/RMS Histograms not set up correctly - nBins mismatch");
157 h1d->SetBit(TH1::kIsAverage);
159 for(
int j = 1; j!=nBins_2d+1; j++){
161 TH1F* hproj = (
TH1F*)h2d->ProjectionY(
"Proj",j,j,
"e");
164 if(hproj->GetEntries()<=0) {
170 h1d->SetBinContent(j,hproj->GetMean());
171 h1d->SetBinError(j,hproj->GetMeanError());
175 h1d->SetBinContent(j,hproj->GetRMS());
176 h1d->SetBinError(j,hproj->GetRMSError());
178 else ATH_MSG_DEBUG(
"Incorrect switch in MeanRMSProjectionsBarrel()");
192 int nBins = hProf->GetNbinsX();
194 for(
int j = 1; j!=
nBins+1; j++){
196 float bincentre = (
float)hProf->GetBinCenter(j);
199 float binerr = (
float)hProf->GetBinError(j);
202 float binentries = (
float)hProf->GetBinEntries(j);
205 float rms = (
float)binerr*(std::sqrt(binentries));
207 hRms->Fill(bincentre,
rms);
221 int nBins = hProf_char->GetNbinsX();
223 for(
int j = 1; j!=
nBins+1; j++){
226 const char* BinLabel_char = hProf_char->GetXaxis()->GetBinLabel(j);
229 float binerr = (
float)hProf_char->GetBinError(j);
232 float binentries = (
float)hProf_char->GetBinEntries(j);
235 float rms = (
float)binerr*(std::sqrt(binentries));
237 hRms_char->SetCanExtend(TH1::kAllAxes);
238 hRms_char->Fill(BinLabel_char,
rms);
242 hRms_char->LabelsDeflate(
"X");
243 if (hRms_char->GetEntries() > 0) hRms_char->LabelsOption(
"v");
258 h1d->SetBit(TH1::kIsAverage);
260 int nBins_2d = h2d->GetNbinsX();
261 int nBins_1d = h1d->GetNbinsX();
263 if(nBins_2d!=nBins_1d)
ATH_MSG_DEBUG(
"Mean/Width Histograms not set up correctly - nBins mismatch");
265 for(
int i = 1;
i!=nBins_2d+1;
i++){
267 TH1F* hProj = (
TH1F*)h2d->ProjectionY(
"Proj",
i,
i,
"e");
270 if(hProj->GetEntries()<=0) {
275 TF1 *
fit =
new TF1(
"fit",
"gaus",MinFit,MaxFit);
277 hProj->Fit(
"fit",
"RQNM");
278 float Mean =
fit->GetParameter(1);
279 float MeanSigma =
fit->GetParError(1);
280 float Width =
fit->GetParameter(2);
281 float WidthSigma =
fit->GetParError(2);
284 h1d->SetBinContent(
i,
Mean);
285 h1d->SetBinError(
i,MeanSigma);
288 h1d->SetBinContent(
i,Width);
289 h1d->SetBinError(
i,WidthSigma);
291 else ATH_MSG_DEBUG(
"Incorrect switch in FillGausMeanOrWidth");
313 h1d->SetBit(TH1::kIsAverage);
315 int nBins_2d = h2d->GetNbinsX();
316 int nBins_1d = h1d->GetNbinsX();
318 if(nBins_2d!=nBins_1d)
ATH_MSG_DEBUG(
"Mean/Width Histograms not set up correctly - nBins mismatch");
320 for(
int i = 1;
i!=nBins_2d+1;
i++){
322 TH1F* hProj = (
TH1F*)h2d->ProjectionY(
"Proj",
i,
i,
"e");
324 int numNonEmptyBins = 0;
325 for (
int ii = 0; ii < (
int)hProj->GetNbinsX()+1; ++ii)
327 if (hProj->GetBinContent(ii)>0.) ++numNonEmptyBins;
332 if((hProj->GetEntries()<=0)||(numNonEmptyBins<2)) {
337 TF1 *
fit =
new TF1(
"fit",
"gaus",MinFit,MaxFit);
339 hProj->Fit(
"fit",
"RQNM");
340 float Mean =
fit->GetParameter(1);
342 float Width =
fit->GetParameter(2);
345 h1d->SetBinContent(
i,
Mean);
346 h1d->SetBinError(
i, Width);
352 h1d->SetEntries(h2d->GetEntries());
369 h2->SetBit(TH1::kIsAverage);
372 if(
h1->GetEntries()<=0)
return;
374 TF1 *
fit =
new TF1(
"fit",
"gaus",MinFit,MaxFit);
375 h1->Fit(
"fit",
"RQNM");
376 float Mean =
fit->GetParameter(1);
378 float Width =
fit->GetParameter(2);
381 h2->SetBinContent(nbin,
Mean);
382 h2->SetBinError(nbin,Width);
384 h2->SetEntries(
h1->GetEntries());