CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SiPixelGainCalibrationAnalysis.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelGainCalibrationAnalysis
4 // Class: SiPixelGainCalibrationAnalysis
5 //
13 //
14 // Original Author: Freya Blekman
15 // Created: Wed Nov 14 15:02:06 CET 2007
16 //
17 //
18 
19 // user include files
21 #include <sstream>
22 #include <vector>
23 #include <cmath>
24 #include "TGraphErrors.h"
25 #include "TMath.h"
26 
27 using std::cout;
28 using std::endl;
29 //
30 // constructors and destructor
31 //
34  conf_(iConfig),
35  bookkeeper_(),
36  bookkeeper_pixels_(),
37  nfitparameters_(iConfig.getUntrackedParameter<int>("numberOfFitParameters", 2)),
38  fitfunction_(iConfig.getUntrackedParameter<std::string>("fitFunctionRootFormula", "pol1")),
39  listofdetids_(conf_.getUntrackedParameter<std::vector<uint32_t> >("listOfDetIDs")),
40  ignoreMode_(conf_.getUntrackedParameter<bool>("ignoreMode", false)),
41  reject_plateaupoints_(iConfig.getUntrackedParameter<bool>("suppressPlateauInFit", true)),
42  reject_single_entries_(iConfig.getUntrackedParameter<bool>("suppressPointsWithOneEntryOrLess", true)),
43  plateau_max_slope_(iConfig.getUntrackedParameter<double>("plateauSlopeMax", 1.0)),
44  reject_first_point_(iConfig.getUntrackedParameter<bool>("rejectVCalZero", true)),
45  reject_badpoints_frac_(iConfig.getUntrackedParameter<double>("suppressZeroAndPlateausInFitFrac", 0)),
46  bookBIGCalibPayload_(iConfig.getUntrackedParameter<bool>("saveFullPayloads", false)),
47  savePixelHists_(iConfig.getUntrackedParameter<bool>("savePixelLevelHists", false)),
48  chi2Threshold_(iConfig.getUntrackedParameter<double>("minChi2NDFforHistSave", 10)),
49  chi2ProbThreshold_(iConfig.getUntrackedParameter<double>("minChi2ProbforHistSave", 0.05)),
50  maxGainInHist_(iConfig.getUntrackedParameter<double>("maxGainInHist", 10)),
51  maxChi2InHist_(iConfig.getUntrackedParameter<double>("maxChi2InHist", 25)),
52  saveALLHistograms_(iConfig.getUntrackedParameter<bool>("saveAllHistograms", false)),
53 
54  filldb_(iConfig.getUntrackedParameter<bool>("writeDatabase", false)),
55  writeSummary_(iConfig.getUntrackedParameter<bool>("writeSummary", true)),
56  recordName_(conf_.getParameter<std::string>("record")),
57 
58  appendMode_(conf_.getUntrackedParameter<bool>("appendMode", true)),
59  /*theGainCalibrationDbInput_(0),
60  theGainCalibrationDbInputOffline_(0),
61  theGainCalibrationDbInputHLT_(0),
62  theGainCalibrationDbInputService_(iConfig),*/
63  gainlow_(10.),
64  gainhi_(0.),
65  pedlow_(255.),
66  pedhi_(0.),
67  useVcalHigh_(conf_.getParameter<bool>("useVCALHIGH")),
68  scalarVcalHigh_VcalLow_(conf_.getParameter<double>("vcalHighToLowConversionFac")) {
70  min_nentries_ = 1;
71  else
72  min_nentries_ = 0;
73  ::putenv((char *)"CORAL_AUTH_USER=me");
74  ::putenv((char *)"CORAL_AUTH_PASSWORD=test");
75  edm::LogInfo("SiPixelGainCalibrationAnalysis") << "now using fit function " << fitfunction_ << ", which has "
76  << nfitparameters_ << " free parameters. " << std::endl;
77  func_ = new TF1("func", fitfunction_.c_str(), 0, 256 * scalarVcalHigh_VcalLow_);
78  graph_ = new TGraphErrors();
79  currentDetID_ = 0;
80  summary_.open("SummaryPerDetID.txt");
81  statusNumbers_ = new int[10];
82  for (int ii = 0; ii < 10; ii++)
83  statusNumbers_[ii] = 0;
84 }
85 
87 // member functions
88 //
89 // ------------ method called once each job just before starting event loop ------------
90 
92  std::vector<float> result;
93  int ncols = bookkeeper_[detid][label]->getNbinsX();
94  int nrows = bookkeeper_[detid][label]->getNbinsY();
95  for (int icol = 1; icol <= ncols; ++icol) {
96  float val = 0;
97  float ntimes = 0;
98  for (int irow = 1; irow <= nrows; ++irow) {
99  val += bookkeeper_[detid][label]->getBinContent(icol, irow);
100  ntimes++;
101  }
102  val /= ntimes;
103  result.push_back(val);
104  }
105  return result;
106 }
107 
109  if (calibrationMode_ == "GainCalibration")
110  return true;
111  else if (ignoreMode_ == true)
112  return true;
113  else if (calibrationMode_ == "unknown") {
114  edm::LogInfo("SiPixelGainCalibrationAnalysis")
115  << "calibration mode is: " << calibrationMode_ << ", continuing anyway...";
116  return true;
117  } else {
118  // edm::LogError("SiPixelGainCalibrationAnalysis") << "unknown calibration mode for Gain calibration, should be \"Gain\" and is \"" << calibrationMode_ << "\"";
119  }
120  return false;
121 }
122 
124 //------- summary printing method. Very verbose.
126  uint32_t detid = 0;
127  for (std::map<uint32_t, std::map<std::string, MonitorElement *> >::const_iterator idet = bookkeeper_.begin();
128  idet != bookkeeper_.end();
129  ++idet) {
130  if (detid == idet->first)
131  continue; // only do things once per detid
132  detid = idet->first;
133  std::vector<float> gainvec = CalculateAveragePerColumn(detid, "gain_2d");
134  std::vector<float> pedvec = CalculateAveragePerColumn(detid, "ped_2d");
135  std::vector<float> chi2vec = CalculateAveragePerColumn(detid, "chi2_2d");
136  std::ostringstream summarytext;
137 
138  summarytext << "Summary for det ID " << detid << "(" << translateDetIdToString(detid) << ")\n";
139  summarytext << "\t Following: values per column: column #, gain, pedestal, chi2\n";
140  for (uint32_t i = 0; i < gainvec.size(); i++)
141  summarytext << "\t " << i << " \t" << gainvec[i] << " \t" << pedvec[i] << " \t" << chi2vec[i] << "\n";
142  summarytext << "\t list of pixels with high chi2 (chi2> " << chi2Threshold_ << "): \n";
143 
144  for (std::map<std::string, MonitorElement *>::const_iterator ipix = bookkeeper_pixels_[detid].begin();
145  ipix != bookkeeper_pixels_[detid].end();
146  ++ipix)
147  summarytext << "\t " << ipix->first << "\n";
148  edm::LogInfo("SiPixelGainCalibrationAnalysis") << summarytext.str() << std::endl;
149  }
150  if (summary_.is_open()) {
151  summary_.close();
152  summary_.open("Summary.txt");
153  summary_ << "Total Number of Pixel computed :" << statusNumbers_[9] << endl;
154  summary_ << "Number of pixel tagged with status :" << endl;
155  for (int ii = 0; ii < 9; ii++)
156  summary_ << ii << " -> " << statusNumbers_[ii] << " ~ "
157  << double(statusNumbers_[ii]) / double(statusNumbers_[9]) * 100. << " %" << endl;
158 
159  summary_.close();
160  }
161 }
162 
163 // ------------ method called once each job just after ending the event loop ------------
164 
166  if (writeSummary_)
167  printSummary();
168 
169  // this is where we loop over all histograms and save the database objects
170  if (filldb_)
171  fillDatabase();
172 }
173 //-----------method to fill the database
175  // only create when necessary.
176  // process the minimum and maximum gain & ped values...
177  edm::LogError("SiPixelGainCalibration::fillDatabase()")
178  << "PLEASE do not fill the database directly from the gain calibration analyzer. This function is currently "
179  "disabled and no DB payloads will be produced!"
180  << std::endl;
181 }
182 // ------------ method called to do fits to all objects available ------------
183 bool SiPixelGainCalibrationAnalysis::doFits(uint32_t detid, std::vector<SiPixelCalibDigi>::const_iterator ipix) {
184  float lowmeanval = 255;
185  float highmeanval = 0;
186  bool makehistopersistent = saveALLHistograms_;
187  std::vector<uint32_t>::const_iterator detidfinder = find(listofdetids_.begin(), listofdetids_.end(), detid);
188  if (detidfinder != listofdetids_.end())
189  makehistopersistent = true;
190  // first, fill the input arrays to the TLinearFitter.
191  double xvals[257];
192  double yvals[256];
193  double yerrvals[256];
194  double xvalsall[257];
195  double yvalsall[256];
196  double yerrvalsall[256];
197  int npoints = 0;
198  int nallpoints = 0;
199  bool use_point = true;
200  int status = 0;
201  statusNumbers_[9]++;
202 
203  bookkeeper_[detid]["status_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, 0);
204  if (writeSummary_ && detid != currentDetID_) {
205  currentDetID_ = detid;
206  summary_ << endl << "DetId_" << currentDetID_ << endl;
207  }
208 
209  for (uint32_t ii = 0; ii < ipix->getnpoints() && ii < 200; ii++) {
210  // std::cout << ipix->getsum(ii) << " " << ipix->getnentries(ii) << " " << ipix->getsumsquares(ii) << std::endl;
211  nallpoints++;
212  use_point = true;
213  if (useVcalHigh_) {
214  xvalsall[ii] = vCalValues_[ii] * scalarVcalHigh_VcalLow_;
215  } else
216  xvalsall[ii] = vCalValues_[ii];
217  yerrvalsall[ii] = yvalsall[ii] = 0;
218 
219  if (ipix->getnentries(ii) > min_nentries_) {
220  yvalsall[ii] = ipix->getsum(ii) / (float)ipix->getnentries(ii);
221  yerrvalsall[ii] = ipix->getsumsquares(ii) / (float)(ipix->getnentries(ii));
222  yerrvalsall[ii] -= pow(yvalsall[ii], 2);
223  yerrvalsall[ii] = sqrt(yerrvalsall[ii]) / sqrt(ipix->getnentries(ii));
224 
225  if (yvalsall[ii] < lowmeanval)
226  lowmeanval = yvalsall[ii];
227  if (yvalsall[ii] > highmeanval)
228  highmeanval = yvalsall[ii];
229  }
230  }
231 
232  // calculate plateau value from last 4 entries
233  double plateauval = 0;
234  bool noPlateau = false;
235  if (nallpoints >= 4) {
236  for (int ii = nallpoints - 1; ii > nallpoints - 5; --ii)
237  plateauval += yvalsall[ii];
238  plateauval /= 4;
239  for (int ii = nallpoints - 1; ii > nallpoints - 5; --ii) {
240  if (fabs(yvalsall[ii] - plateauval) > 5) {
241  plateauval = 255;
242  noPlateau = true;
243  continue;
244  }
245  }
246 
247  int NbofPointsInPlateau = 0;
248  for (int ii = 0; ii < nallpoints; ++ii)
249  if (fabs(yvalsall[ii] - plateauval) < 10 || yvalsall[ii] == 0)
250  NbofPointsInPlateau++;
251  //summary_<<"row_"<<ipix->row()<<" col_"<<ipix->col()<<" "<<plateauval<<" "<<NbofPointsInPlateau<<" "<<nallpoints<<endl;
252  if (NbofPointsInPlateau >= (nallpoints - 2)) {
253  status = -2;
254  bookkeeper_[detid]["status_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, status);
255  if (writeSummary_) {
256  summary_ << "row_" << ipix->row() << " col_" << ipix->col() << " status_" << status << endl;
257  statusNumbers_[abs(status)]++;
258  }
259  return false;
260  }
261  } else
262  plateauval = 255;
263 
264  double maxgoodvalinfit = plateauval * (1. - reject_badpoints_frac_);
265  npoints = 0;
266  for (int ii = 0; ii < nallpoints; ++ii) {
267  // now selecting the appropriate points for the fit.
268  use_point = true;
269  if (reject_first_point_ && xvalsall[ii] < 0.1)
270  use_point = false;
271  if (ipix->getnentries(ii) <= min_nentries_ && reject_single_entries_)
272  use_point = false;
273  if (ipix->getnentries(ii) == 0 && reject_badpoints_)
274  use_point = false;
275  if (yvalsall[ii] > maxgoodvalinfit && !noPlateau)
276  use_point = false;
277  if (ii > 1 && fabs(yvalsall[ii] - yvalsall[ii - 1]) < 5. && yvalsall[ii] > 0.8 * maxgoodvalinfit &&
279  use_point = false;
280  break;
281  }
282 
283  if (use_point) {
284  xvals[npoints] = xvalsall[ii];
285  yvals[npoints] = yvalsall[ii];
286  yerrvals[npoints] = yerrvalsall[ii];
287  npoints++;
288  }
289  }
290 
291  float chi2, slope, intercept, prob, slopeerror, intercepterror;
292  prob = chi2 = -1;
293  slope = intercept = slopeerror = intercepterror = 0;
294 
295  // now check on number of points. If bad just start taking the first 4:
296 
297  if (npoints < 4) {
298  npoints = 0;
299  for (int ii = 0; ii < nallpoints && npoints < 4 && yvalsall[ii] < plateauval * 0.97; ++ii) {
300  if (yvalsall[ii] > 0) {
301  if (ii > 0 && yvalsall[ii] - yvalsall[ii - 1] < 0.1)
302  continue;
303  xvals[npoints] = xvalsall[ii];
304  yvals[npoints] = yvalsall[ii];
305  yerrvals[npoints] = yerrvalsall[ii];
306  npoints++;
307  }
308  }
309  }
310  if (npoints < 2) {
311  status = -7;
312  bookkeeper_[detid]["status_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, status);
313  if (writeSummary_) {
314  summary_ << "row_" << ipix->row() << " col_" << ipix->col() << " status_" << status << endl;
315  statusNumbers_[abs(status)]++;
316  }
317  std::ostringstream pixelinfo;
318  pixelinfo << "GainCurve_row_" << ipix->row() << "_col_" << ipix->col();
319  std::string tempname = translateDetIdToString(detid);
320  tempname += "_";
321  tempname += pixelinfo.str();
322  setDQMDirectory(detid);
323  bookkeeper_pixels_[detid][pixelinfo.str()] = bookDQMHistogram1D(
324  detid, pixelinfo.str(), tempname, 105 * nallpoints, xvalsall[0], xvalsall[nallpoints - 1] * 1.05);
325  for (int ii = 0; ii < nallpoints; ++ii)
326  bookkeeper_pixels_[detid][pixelinfo.str()]->Fill(xvalsall[ii], yvalsall[ii]);
327  return false;
328  }
329 
330  // std::cout << "starting fit!" << std::endl;
331  graph_->Set(npoints);
332 
333  func_->SetParameter(0, 50.);
334  func_->SetParameter(1, 0.25);
335  for (int ipointtemp = 0; ipointtemp < npoints; ++ipointtemp) {
336  graph_->SetPoint(ipointtemp, xvals[ipointtemp], yvals[ipointtemp]);
337  graph_->SetPointError(ipointtemp, 0, yerrvals[ipointtemp]);
338  }
339  Int_t tempresult = graph_->Fit(func_, "FQ0N");
340  slope = func_->GetParameter(1);
341  slopeerror = func_->GetParError(1);
342  intercept = func_->GetParameter(0);
343  intercepterror = func_->GetParError(0);
344  chi2 = func_->GetChisquare() / ((float)npoints - func_->GetNpar());
345  prob = TMath::Prob(func_->GetChisquare(), npoints - func_->GetNpar());
346  size_t ntimes = 0;
347  while ((isnan(slope) || isnan(intercept)) && ntimes < 10) {
348  ntimes++;
349  makehistopersistent = true;
350  // std::cout << slope << " " << intercept << " " << prob << std::endl;
351  edm::LogWarning("SiPixelGainCalibrationAnalysis") << "impossible to fit values, try " << ntimes << ": ";
352  for (int ii = 0; ii < npoints; ++ii) {
353  edm::LogWarning("SiPixelGainCalibrationAnalysis")
354  << "vcal " << xvals[ii] << " response: " << yvals[ii] << "+/-" << yerrvals[ii] << std::endl;
355  }
356  tempresult = graph_->Fit(func_, "FQ0NW");
357  slope = func_->GetParameter(1);
358  slopeerror = func_->GetParError(1);
359  intercept = func_->GetParameter(0);
360  intercepterror = func_->GetParError(0);
361  chi2 = func_->GetChisquare() / ((float)npoints - func_->GetNpar());
362  prob = TMath::Prob(func_->GetChisquare(), npoints - func_->GetNpar());
363  }
364 
365  if (tempresult == 0)
366  status = 1;
367  else
368  status = 0;
369  if (slope != 0)
370  slope = 1. / slope;
371  if (isnan(slope) || isnan(intercept)) {
372  status = -6;
373  bookkeeper_[detid]["status_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, status);
374  if (writeSummary_) {
375  summary_ << "row_" << ipix->row() << " col_" << ipix->col() << " status_" << status << endl;
376  statusNumbers_[abs(status)]++;
377  }
378  //return false;
379  }
380  if (chi2 > chi2Threshold_ && chi2Threshold_ >= 0)
381  status = 5;
382  if (prob < chi2ProbThreshold_)
383  status = 5;
384  if (noPlateau)
385  status = 3;
386  if (nallpoints < 4)
387  status = -7;
388  if (TMath::Abs(slope > maxGainInHist_) || slope < 0)
389  status = -8;
390  if (status != 1)
391  makehistopersistent = true;
392  statusNumbers_[abs(status)]++;
393 
394  if (slope < gainlow_)
395  gainlow_ = slope;
396  if (slope > gainhi_)
397  gainhi_ = slope;
398  if (intercept > pedhi_)
399  pedhi_ = intercept;
400  if (intercept < pedlow_)
401  pedlow_ = intercept;
402  bookkeeper_[detid]["gain_1d"]->Fill(slope);
403  if (slope > maxGainInHist_) {
404  makehistopersistent = true;
405  edm::LogWarning("SiPixelGainCalibration")
406  << "For DETID " << detid << "pixel row,col " << ipix->row() << "," << ipix->col() << " Gain was measured to be "
407  << slope << " which is outside the range of the summary plot (" << maxGainInHist_ << ") !!!! " << std::endl;
408  }
409  bookkeeper_[detid]["dynamicrange_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, highmeanval - lowmeanval);
410  bookkeeper_[detid]["plateau_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, highmeanval);
411  bookkeeper_[detid]["gain_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, slope);
412  bookkeeper_[detid]["errorgain_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, slopeerror);
413  bookkeeper_[detid]["ped_1d"]->Fill(intercept);
414  bookkeeper_[detid]["ped_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, intercept);
415  bookkeeper_[detid]["errorped_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, intercepterror);
416  bookkeeper_[detid]["chi2_1d"]->Fill(chi2);
417  bookkeeper_[detid]["chi2_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, chi2);
418  bookkeeper_[detid]["prob_1d"]->Fill(prob);
419  bookkeeper_[detid]["prob_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, prob);
420  bookkeeper_[detid]["lowpoint_1d"]->Fill(xvals[0]);
421  bookkeeper_[detid]["lowpoint_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, xvals[0]);
422  bookkeeper_[detid]["highpoint_1d"]->Fill(xvals[npoints - 1]);
423  bookkeeper_[detid]["highpoint_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, xvals[npoints - 1]);
424  bookkeeper_[detid]["nfitpoints_1d"]->Fill(npoints);
425  bookkeeper_[detid]["endpoint_1d"]->Fill((255 - intercept) * slope);
426  bookkeeper_[detid]["status_2d"]->setBinContent(ipix->col() + 1, ipix->row() + 1, status);
427 
428  if (!savePixelHists_)
429  return true;
430  if (detidfinder == listofdetids_.end() && !listofdetids_.empty())
431  return true;
432  if (makehistopersistent) {
433  std::ostringstream pixelinfo;
434  pixelinfo << "GainCurve_row_" << ipix->row() << "_col_" << ipix->col();
435  std::string tempname = translateDetIdToString(detid);
436  tempname += "_";
437  tempname += pixelinfo.str();
438 
439  // and book the histo
440  // fill the last value of the vcal array...
441 
442  setDQMDirectory(detid);
443  bookkeeper_pixels_[detid][pixelinfo.str()] = bookDQMHistogram1D(
444  detid, pixelinfo.str(), tempname, 105 * nallpoints, xvalsall[0], xvalsall[nallpoints - 1] * 1.05);
445 
446  edm::LogInfo("SiPixelGainCalibrationAnalysis")
447  << "now saving histogram for pixel " << tempname << ", gain = " << slope << ", pedestal = " << intercept
448  << ", chi2/NDF=" << chi2 << "(prob:" << prob << "), fit status " << status;
449  for (int ii = 0; ii < nallpoints; ++ii) {
450  // std::cout << xvalsall[ii]<<","<<yvalsall[ii]<< " " << tempfloats[ii] << std::endl;
451  bookkeeper_pixels_[detid][pixelinfo.str()]->Fill(xvalsall[ii], yvalsall[ii]);
452  }
453 
454  // addTF1ToDQMMonitoringElement(bookkeeper_pixels_[detid][pixelinfo.str()],func_);
455 
456  if (writeSummary_) {
457  summary_ << "row_" << ipix->row() << " col_" << ipix->col();
458  summary_ << " status_" << status;
459  summary_ << endl;
460 
461  //std::cout<<detid<<" "<<"row " <<ipix->row()<<" col "<<ipix->col()<<" "<<status<<" "<<chi2<<" "<<prob<<" "<<npoints<<" "<<xvals[0]<<" "<<xvals[npoints-1]<<" "<<plateauval<<std::endl;
462  }
463  }
464  return true;
465 }
466 // ------------ method called to do fill new detids ------------
468  setDQMDirectory(detid);
469  std::string tempname = translateDetIdToString(detid);
470  bookkeeper_[detid]["gain_1d"] = bookDQMHistogram1D(detid, "Gain1d", "gain for " + tempname, 100, 0., maxGainInHist_);
471  bookkeeper_[detid]["gain_2d"] = bookDQMHistoPlaquetteSummary2D(detid, "Gain2d", "gain for " + tempname);
472  bookkeeper_[detid]["errorgain_2d"] =
473  bookDQMHistoPlaquetteSummary2D(detid, "ErrorGain2d", "error on gain for " + tempname);
474  bookkeeper_[detid]["ped_1d"] = bookDQMHistogram1D(detid, "Pedestal1d", "pedestal for " + tempname, 256, 0., 256.0);
475  bookkeeper_[detid]["ped_2d"] = bookDQMHistoPlaquetteSummary2D(detid, "Pedestal2d", "pedestal for " + tempname);
476  bookkeeper_[detid]["errorped_2d"] =
477  bookDQMHistoPlaquetteSummary2D(detid, "ErrorPedestal2d", "error on pedestal for " + tempname);
478  bookkeeper_[detid]["chi2_1d"] =
479  bookDQMHistogram1D(detid, "GainChi2NDF1d", "#chi^{2}/NDOF for " + tempname, 100, 0., maxChi2InHist_);
480  bookkeeper_[detid]["chi2_2d"] =
481  bookDQMHistoPlaquetteSummary2D(detid, "GainChi2NDF2d", "#chi^{2}/NDOF for " + tempname);
482  bookkeeper_[detid]["prob_1d"] =
483  bookDQMHistogram1D(detid, "GainChi2Prob1d", "P(#chi^{2},NDOF) for " + tempname, 100, 0., 1.0);
484  bookkeeper_[detid]["prob_2d"] =
485  bookDQMHistoPlaquetteSummary2D(detid, "GainChi2Prob2d", "P(#chi^{2},NDOF) for " + tempname);
486  bookkeeper_[detid]["status_2d"] =
487  bookDQMHistoPlaquetteSummary2D(detid, "GainFitResult2d", "Fit result for " + tempname);
488  bookkeeper_[detid]["endpoint_1d"] = bookDQMHistogram1D(
489  detid, "GainEndPoint1d", "point where fit meets ADC=255 for " + tempname, 256, 0., 256. * scalarVcalHigh_VcalLow_);
490  bookkeeper_[detid]["lowpoint_1d"] = bookDQMHistogram1D(
491  detid, "GainLowPoint1d", "lowest fit point for " + tempname, 256, 0., 256. * scalarVcalHigh_VcalLow_);
492  bookkeeper_[detid]["highpoint_1d"] = bookDQMHistogram1D(
493  detid, "GainHighPoint1d", "highest fit point for " + tempname, 256, 0., 256. * scalarVcalHigh_VcalLow_);
494  bookkeeper_[detid]["nfitpoints_1d"] =
495  bookDQMHistogram1D(detid, "GainNPoints1d", "number of fit point for " + tempname, 20, 0., 20);
496  bookkeeper_[detid]["dynamicrange_2d"] = bookDQMHistoPlaquetteSummary2D(
497  detid, "GainDynamicRange2d", "Difference lowest and highest points on gain curve for " + tempname);
498  bookkeeper_[detid]["lowpoint_2d"] =
499  bookDQMHistoPlaquetteSummary2D(detid, "GainLowPoint2d", "lowest fit point for " + tempname);
500  bookkeeper_[detid]["highpoint_2d"] =
501  bookDQMHistoPlaquetteSummary2D(detid, "GainHighPoint2d", "highest fit point for " + tempname);
502  bookkeeper_[detid]["plateau_2d"] =
503  bookDQMHistoPlaquetteSummary2D(detid, "GainSaturate2d", "Highest points on gain curve for " + tempname);
504 }
505 //define this as a plug-in
std::map< uint32_t, std::map< std::string, MonitorElement * > > bookkeeper_pixels_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
static const double slope[3]
list status
Definition: mps_update.py:107
bool doFits(uint32_t detid, std::vector< SiPixelCalibDigi >::const_iterator ipix) override
std::string translateDetIdToString(uint32_t detid)
Log< level::Error, false > LogError
int ii
Definition: cuy.py:589
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
SiPixelGainCalibrationAnalysis(const edm::ParameterSet &iConfig)
tuple result
Definition: mps_fire.py:311
MonitorElement * bookDQMHistogram1D(uint32_t detid, std::string name, std::string title, int nchX, double lowX, double highX)
char const * label
T sqrt(T t)
Definition: SSEVec.h:19
void calibrationSetup(const edm::EventSetup &iSetup) override
T Abs(T a)
Definition: MathUtil.h:49
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static const int npoints
MonitorElement * bookDQMHistoPlaquetteSummary2D(uint32_t detid, std::string name, std::string title)
Log< level::Info, false > LogInfo
std::map< uint32_t, std::map< std::string, MonitorElement * > > bookkeeper_
std::vector< float > CalculateAveragePerColumn(uint32_t detid, std::string label)
tuple cout
Definition: gather_cfg.py:144
Log< level::Warning, false > LogWarning
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29