15 output.resize(4, output[0]);
16 auto name = [&output](
const char * n)->TString{
17 return Form(n,output[0].GetName());
19 auto title = [&output](
const char * t)->TString{
20 return Form(t,output[0].GetTitle());
22 output[1].SetNameTitle(name(
"leffpixels_found_%s"), title(
"low efficiency pixels, found, %s"));
23 output[2].SetNameTitle(name(
"noisypixels_eff_%s"), title(
"noisy pixels, efficiency, %s"));
24 output[3].SetNameTitle(name(
"leffpixels_eff_%s"), title(
"low efficiency pixels, efficiency, %s"));
25 output[0].SetNameTitle(name(
"noisypixels_found_%s"), title(
"noisy pixels, found, %s"));
27 TH2F& noisypixels_found_output = output[0];
28 TH2F& leffpixels_found_output = output[1];
29 TH2F& noisypixels_eff_output = output[2];
30 TH2F& leffpixels_eff_output = output[3];
33 if(input->GetMaximum()<0.5)
return 0;
35 std::vector<TH2F> vec_found_leff{},vec_found_noisy{},vec_eff_leff{},vec_eff_noisy{};
39 TH2F tmp_eff_noisy, tmp_eff_leff;
40 TH2F tmp_found_leff, tmp_found_noisy;
48 std::tie(tmp_found_leff,tmp_found_noisy,tmp_eff_leff, tmp_eff_noisy) =
findLEffAndNoisyPixels(input, tmp_inact_pix_around, method);
57 tmp_eff_noisy=TH2F(*input);
58 tmp_eff_noisy.SetName(
"tmp_eff_noisy");
59 tmp_eff_noisy.Reset();
60 tmp_eff_leff=TH2F(*input);
61 tmp_eff_leff.SetName(
"tmp_eff_leff");
63 tmp_found_noisy=TH2F(*input);
64 tmp_found_noisy.SetName(
"tmp_found_noisy");
65 tmp_found_noisy.Reset();
66 tmp_found_leff=TH2F(*input);
67 tmp_found_leff.SetName(
"tmp_found_leff");
68 tmp_found_leff.Reset();
72 const double Threshold_LEFF=5.;
75 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
77 for(
int row_ID=1; row_ID<=input->GetNbinsX(); row_ID++)
79 double ratio_leff=0, ratio_noisy=0;
80 double gauss_helper_12 = (col_ID-p[1][row_ID])/p[2][row_ID];
81 double gauss_helper_45 = (col_ID-p[4][row_ID])/p[5][row_ID];
82 double fit = p[0][row_ID]*exp(-0.5*gauss_helper_12*gauss_helper_12)
83 + p[3][row_ID]*exp(-0.5*gauss_helper_45*gauss_helper_45) + p[6][row_ID];
84 double sigma=std::sqrt(fit);
87 double bin_content=input->GetBinContent(row_ID,col_ID);
89 if(fit>=bin_content) ratio_leff = std::abs(fit-bin_content)/sigma;
90 else ratio_noisy = std::abs(fit-bin_content)/sigma;
94 if( ratio_leff > Threshold_LEFF) tmp_found_leff.SetBinContent(row_ID,col_ID,1);
95 if( ratio_noisy > Threshold_NOISY) tmp_found_noisy.SetBinContent(row_ID,col_ID,1);
97 tmp_eff_leff.SetBinContent(row_ID,col_ID,100.*ratio_leff);
98 tmp_eff_noisy.SetBinContent(row_ID,col_ID,100.*ratio_noisy);
104 vec_found_leff.push_back(tmp_found_leff);
105 vec_found_noisy.push_back(tmp_found_noisy);
106 vec_eff_leff.push_back(tmp_eff_leff);
107 vec_eff_noisy.push_back(tmp_eff_noisy);
111 for(
unsigned int m=0; m<
m_methods.size(); m++)
113 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
115 for(
int row_ID=1; row_ID<=input->GetNbinsX(); row_ID++)
117 noisypixels_found_output.Fill(row_ID,col_ID, vec_found_noisy[m].GetBinContent(row_ID,col_ID));
118 leffpixels_found_output.Fill(row_ID,col_ID, vec_found_leff[m].GetBinContent(row_ID,col_ID));
122 noisypixels_eff_output.SetBinContent(row_ID,col_ID, vec_eff_noisy[m].GetBinContent(row_ID,col_ID));
123 leffpixels_eff_output.SetBinContent(row_ID,col_ID, vec_eff_leff[m].GetBinContent(row_ID,col_ID));
127 if(noisypixels_eff_output.GetBinContent(row_ID,col_ID)<vec_eff_noisy[m].GetBinContent(row_ID,col_ID))
129 noisypixels_eff_output.SetBinContent(row_ID,col_ID, vec_eff_noisy[m].GetBinContent(row_ID,col_ID));
131 if(leffpixels_eff_output.GetBinContent(row_ID,col_ID)>vec_eff_leff[m].GetBinContent(row_ID,col_ID))
133 leffpixels_eff_output.SetBinContent(row_ID,col_ID, vec_eff_leff[m].GetBinContent(row_ID,col_ID));
141 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
143 for(
int row_ID=1; row_ID<=input->GetNbinsX(); row_ID++)
145 if(noisypixels_found_output.GetBinContent(row_ID,col_ID)==
m_methods.size()) noisypixels_found_output.SetBinContent(row_ID,col_ID,1);
146 else noisypixels_found_output.SetBinContent(row_ID,col_ID,0);
148 if(leffpixels_found_output.GetBinContent(row_ID,col_ID)==
m_methods.size()) leffpixels_found_output.SetBinContent(row_ID,col_ID,1);
149 else leffpixels_found_output.SetBinContent(row_ID,col_ID,0);
218 TH2F tmp_found_leff(*input);
219 tmp_found_leff.SetName(
"tmp_found_leff");
220 tmp_found_leff.Reset();
222 TH2F tmp_found_noisy(*input);
223 tmp_found_noisy.SetName(
"tmp_found_noisy");
224 tmp_found_noisy.Reset();
226 TH2F tmp_eff_leff(*input);
227 tmp_eff_leff.SetName(
"tmp_eff_leff");
228 tmp_eff_leff.Reset();
230 TH2F tmp_eff_noisy(*input);
231 tmp_eff_noisy.SetName(
"tmp_eff_noisy");
232 tmp_eff_noisy.Reset();
234 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
236 for(
int row_ID=1; row_ID<=input->GetNbinsX(); row_ID++)
238 if(input->GetBinContent(row_ID, col_ID)!=0 && tmp_inact_pix_around.GetBinContent(row_ID, col_ID)<0.1)
244 for(
auto legpix : legit_pixels)
246 sum+=input->GetBinContent(legpix.first,legpix.second);
253 if(method==
"2_ROW" || method==
"2_COL")
255 av_noisy=sum/(std::abs(npixels-4)*0.5);
258 else if(method==
"4_PIX")
260 av_noisy=sum/(std::ceil(npixels*0.5));
263 else if(method==
"8_PIX")
265 av_noisy=sum/(npixels);
270 double ratio_leff = input->GetBinContent(row_ID,col_ID)/av_leff;
271 double ratio_noisy = input->GetBinContent(row_ID,col_ID)/av_noisy;
272 tmp_eff_leff.SetBinContent(row_ID,col_ID,100.*ratio_leff);
273 tmp_eff_noisy.SetBinContent(row_ID,col_ID,100.*ratio_noisy);
275 if(ratio_leff <
m_threshLEff) tmp_found_leff.SetBinContent(row_ID,col_ID,1.);
276 if(ratio_noisy >
m_threshNoisy) tmp_found_noisy.SetBinContent(row_ID,col_ID,1.);
281 return {tmp_found_leff,tmp_found_noisy,tmp_eff_leff,tmp_eff_noisy};
287 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
289 for(
int row_ID=1; row_ID<=input->GetNbinsX(); row_ID++)
291 if(input->GetBinContent(row_ID,col_ID)==0)
continue;
293 int inactive_pixels_around=tmp_inact_pix_around.GetBinContent(row_ID, col_ID);
294 int leff_pixels_around=0;
296 for(
auto legpix : legit_pixels)
298 if(tmp_found_leff.GetBinContent(legpix.first,legpix.second)>0) leff_pixels_around++;
301 if(leff_pixels_around!=0 && inactive_pixels_around==0)
308 for(
auto legpix : legit_pixels)
310 if(tmp_found_leff.GetBinContent(legpix.first,legpix.second)==0)
312 re_av+=input->GetBinContent(legpix.first,legpix.second);
320 for(
auto legpix : legit_pixels)
322 re_av+=input->GetBinContent(legpix.first,legpix.second);
325 if(re_av/input->GetBinContent(row_ID,col_ID)<1.5 && re_av/input->GetBinContent(row_ID,col_ID)>0.5) re_av=1;
332 double ratio_noisy =
m_sensitivity+input->GetBinContent(row_ID,col_ID)/re_av;
333 double ratio_leff = input->GetBinContent(row_ID,col_ID)/re_av;
336 tmp_eff_leff.SetBinContent(row_ID,col_ID,1);
337 tmp_eff_noisy.SetBinContent(row_ID,col_ID,1);
340 if(row_ID!=input->GetNbinsX() && row_ID!=1 && col_ID!=1 && col_ID!=input->GetNbinsY())
344 tmp_found_noisy.SetBinContent(row_ID,col_ID,1);
345 if(re_av!=1) tmp_eff_noisy.SetBinContent(row_ID,col_ID,100.*ratio_noisy);
347 if( ((ratio_leff<
m_threshLEff && re_av!=1) || re_av==1) )
349 tmp_found_leff.SetBinContent(row_ID,col_ID,1);
350 if(re_av!=1) tmp_eff_leff.SetBinContent(row_ID,col_ID,100.*ratio_leff);
364 std::vector<std::vector<double>> params(nParams, std::vector<double>(input->GetNbinsX()+1, 0.));
366 for(
int row_ID=0; row_ID<=input->GetNbinsX(); row_ID++)
368 std::string srow_ID = std::to_string(row_ID);
369 std::unique_ptr<TH1F> hist(
new TH1F((
"ROW"+srow_ID).c_str(), (
"ROW"+srow_ID).c_str(), input->GetNbinsY(), 0.5, input->GetNbinsX()+0.5));
371 for(
int col_ID=1; col_ID<=input->GetNbinsY(); col_ID++)
373 hist->Fill(col_ID, 1.0*input->GetBinContent(row_ID,col_ID));
377 std::shared_ptr<TF1> FIT_2(
new TF1(
"gaus",
"gaus(0)+gaus(3)+[6]",0,input->GetNbinsY(),nParams));
380 FIT_2->SetParameters(25000,hist->GetMean(),hist->GetStdDev()/std::sqrt(2),
381 5000,hist->GetMean(),hist->GetStdDev()/std::sqrt(2),
382 std::max(hist->GetBinContent(2),std::max(hist->GetBinContent(3),hist->GetBinContent(4))) );
386 for(
int par=0;par<nParams;++par)
388 FIT_2->SetParameter(par,params.at(par).at(row_ID-1));
393 hist->Fit(FIT_2.get(),
"Q");
395 for(
int par=0;par<nParams;++par)
397 params.at(par).at(row_ID-1)=FIT_2->GetParameter(par);