CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalMonitorClient.cc
Go to the documentation of this file.
1 /*
2  * \file HcalMonitorClient.cc
3  *
4  * \author J. Temple
5  *
6  */
7 
25 
33 
36 
41 
44 
45 #include <iostream>
46 #include <iomanip>
47 #include <fstream>
48 
49 #include "TROOT.h"
50 #include "TH1.h"
51 
52 //'using' declarations should only be used within classes/functions, and 'using namespace std;' should not be used,
53 // according to Bill Tanenbaum (DQM development hypernews, 25 March 2010)
54 
56 {
57  debug_ = ps.getUntrackedParameter<int>("debug",0);
58  inputFile_ = ps.getUntrackedParameter<std::string>("inputFile","");
59  mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
60  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
61  prescaleFactor_ = ps.getUntrackedParameter<int>("prescaleFactor", -1);
62  prefixME_ = ps.getUntrackedParameter<std::string>("subSystemFolder", "Hcal/");
63  if (prefixME_.substr(prefixME_.size()-1,prefixME_.size())!="/")
64  prefixME_.append("/");
65  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
66  enabledClients_ = ps.getUntrackedParameter<std::vector<std::string> >("enabledClients", enabledClients_);
67 
68  updateTime_ = ps.getUntrackedParameter<int>("UpdateTime",0);
69  baseHtmlDir_ = ps.getUntrackedParameter<std::string>("baseHtmlDir", "");
70  htmlUpdateTime_ = ps.getUntrackedParameter<int>("htmlUpdateTime", 0);
71  htmlFirstUpdate_ = ps.getUntrackedParameter<int>("htmlFirstUpdate",20);
72  databasedir_ = ps.getUntrackedParameter<std::string>("databaseDir","");
73  databaseUpdateTime_ = ps.getUntrackedParameter<int>("databaseUpdateTime",0);
74  databaseFirstUpdate_ = ps.getUntrackedParameter<int>("databaseFirstUpdate",10);
75 
76  saveByLumiSection_ = ps.getUntrackedParameter<bool>("saveByLumiSection",false);
77  Online_ = ps.getUntrackedParameter<bool>("online",false);
78 
79 
80  doPedSetup_ = true;
81  doChanStatSetup_ = true;
82 
83 
84  if (debug_>0)
85  {
86  std::cout <<"HcalMonitorClient:: The following clients are enabled:"<<std::endl;
87  for (unsigned int i=0;i<enabledClients_.size();++i)
88  std::cout <<enabledClients_[i]<<std::endl;
89  } // if (debug_>0)
90 
91  // Set all EtaPhiHists pointers to 0 to start
92  ChannelStatus=0;
97 
98  // Add all relevant clients
99  clients_.clear();
100  clients_.reserve(15); // any reason to reserve ahead of time?
101  summaryClient_=0;
102 
103  clients_.push_back(new HcalBaseDQClient((std::string)"HcalMonitorModule",ps));
104  if (find(enabledClients_.begin(), enabledClients_.end(),"DeadCellMonitor")!=enabledClients_.end())
105  clients_.push_back(new HcalDeadCellClient((std::string)"DeadCellMonitor",ps));
106  if (find(enabledClients_.begin(), enabledClients_.end(),"HotCellMonitor")!=enabledClients_.end())
107  clients_.push_back(new HcalHotCellClient((std::string)"HotCellMonitor",ps));
108  if (find(enabledClients_.begin(), enabledClients_.end(),"RecHitMonitor")!=enabledClients_.end())
109  clients_.push_back(new HcalRecHitClient((std::string)"RecHitMonitor",ps));
110  if (find(enabledClients_.begin(), enabledClients_.end(),"DigiMonitor")!=enabledClients_.end())
111  clients_.push_back(new HcalDigiClient((std::string)"DigiMonitor",ps));
112  if (find(enabledClients_.begin(), enabledClients_.end(),"RawDataMonitor")!=enabledClients_.end())
113  clients_.push_back(new HcalRawDataClient((std::string)"RawDataMonitor",ps));
114  if (find(enabledClients_.begin(), enabledClients_.end(),"TrigPrimMonitor")!=enabledClients_.end())
115  clients_.push_back(new HcalTrigPrimClient((std::string)"TrigPrimMonitor",ps));
116  if (find(enabledClients_.begin(), enabledClients_.end(),"NZSMonitor")!=enabledClients_.end())
117  clients_.push_back(new HcalNZSClient((std::string)"NZSMonitor",ps));
118  if (find(enabledClients_.begin(), enabledClients_.end(),"BeamMonitor")!=enabledClients_.end())
119  clients_.push_back(new HcalBeamClient((std::string)"BeamMonitor",ps));
120  if (find(enabledClients_.begin(), enabledClients_.end(),"DetDiagPedestalMonitor")!=enabledClients_.end())
121  clients_.push_back(new HcalDetDiagPedestalClient((std::string)"DetDiagPedestalMonitor",ps));
122  if (find(enabledClients_.begin(), enabledClients_.end(),"DetDiagLaserMonitor")!=enabledClients_.end())
123  clients_.push_back(new HcalDetDiagLaserClient((std::string)"DetDiagLaserMonitor",ps));
124  if (find(enabledClients_.begin(), enabledClients_.end(),"DetDiagLEDMonitor")!=enabledClients_.end())
125  clients_.push_back(new HcalDetDiagLEDClient((std::string)"DetDiagLEDMonitor",ps));
126  if (find(enabledClients_.begin(), enabledClients_.end(),"DetDiagNoiseMonitor")!=enabledClients_.end())
127  clients_.push_back(new HcalDetDiagNoiseMonitorClient((std::string)"DetDiagNoiseMonitor",ps));
128  if (find(enabledClients_.begin(), enabledClients_.end(),"DetDiagTimingMonitor")!=enabledClients_.end())
129  clients_.push_back(new HcalDetDiagTimingClient((std::string)"DetDiagTimingMonitor",ps));
130  if (find(enabledClients_.begin(), enabledClients_.end(),"CoarsePedestalMonitor")!=enabledClients_.end())
131  clients_.push_back(new HcalCoarsePedestalClient((std::string)"CoarsePedestalMonitor",ps));
132  if (find(enabledClients_.begin(), enabledClients_.end(),"ZDCMonitor")!=enabledClients_.end())
133  clients_.push_back(new ZDCMonitorClient((std::string)"ZDCMonitor",ps));
134 
135  if (find(enabledClients_.begin(), enabledClients_.end(),"Summary")!=enabledClients_.end())
136  summaryClient_ = new HcalSummaryClient((std::string)"ReportSummaryClient",ps);
137 
138  // Contents of the beginJob(void) method (this was moved here during the MT migration
139  begin_run_ = false;
140  end_run_ = false;
141 
143  ievt_ = 0;
144  jevt_ =0;
145 
147  last_time_html_ = 0;
148  last_time_db_ = 0;
149 
150 
151 } // HcalMonitorClient constructor
152 
153 
155 {
156  if (debug_>0) std::cout <<"<HcalMonitorClient> Exiting..."<<std::endl;
157  for (unsigned int i=0;i<clients_.size();++i)
158  delete clients_[i];
159  //if (summaryClient_) delete summaryClient_;
160 
161 }
162 
163 
165 {
166  if (debug_>0) std::cout <<"<HcalMonitorClient::beginRun(r,c)>"<<std::endl;
167  begin_run_ = true;
168  end_run_ = false;
169 
170  run_ = r.id().run();
171  jevt_ = 0;
172  htmlcounter_ = 0;
173 
174  // Store list of bad channels and their values
175  std::map <HcalDetId, unsigned int> badchannelmap;
176  badchannelmap.clear();
177 
178  // Let's get the channel status quality
180  c.get<IdealGeometryRecord>().get(topo);
181 
183  c.get<HcalChannelQualityRcd>().get("withTopo",p);
184  chanquality_= p.product();
185 
186  // Find only channels with non-zero quality, and add them to badchannelmap
187  std::vector<DetId> mydetids = chanquality_->getAllChannels();
188  for (std::vector<DetId>::const_iterator i = mydetids.begin();i!=mydetids.end();++i)
189  {
190  if (i->det()!=DetId::Hcal) continue; // not an hcal cell
191  HcalDetId id=HcalDetId(*i);
192  int status=(chanquality_->getValues(id))->getValue();
193  //if (status!=status) status=-1; // protects against NaN values
194  // The above line doesn't seem to work in identifying NaNs; ints for bad values come back as negative numbers (at least in run 146501)
195  if (status==0) continue;
196  badchannelmap[id]=status;
197 
198  // Fill Channel Status histogram
199  int depth=id.depth();
200  if (depth<1 || depth>4) continue;
201  int ieta=id.ieta();
202  int iphi=id.iphi();
203  if (id.subdet()==HcalForward)
204  ieta>0 ? ++ieta: --ieta;
205 
206  double logstatus = 0;
207  // Fill ChannelStatus value with '-1' when a 'NaN' occurs
208  if (status<0)
209  logstatus=-1*(log2(-1.*status)+1);
210  else
211  logstatus=log2(1.*status)+1;
212  if (ChannelStatus && ChannelStatus->depth[depth-1]) ChannelStatus->depth[depth-1]->Fill(ieta,iphi,logstatus);
213  }
214 
215  for (unsigned int i=0;i<clients_.size();++i)
216  {
217  if (clients_[i]->name()=="RawDataMonitor") clients_[i]->setEventSetup(c);
218  clients_[i]->beginRun();
219  clients_[i]->setStatusMap(badchannelmap);
220  }
221 
222  if (summaryClient_!=0)
223  {
226  }
227 
228 } // void HcalMonitorClient::beginRun(const Run& r, const EventSetup& c)
229 
230 
232 {
233  // no setup required
234 }
235 
236 
237 
239 {
240  if (debug_>0)
241  std::cout <<"HcalMonitorClient::analyze() "<<std::endl;
243  // no ievt_, jevt_ counters needed here: this function gets called at endlumiblock, after default analyze function runs
244  for (unsigned int i=0;i<clients_.size();++i)
245  clients_[i]->analyze(ib,ig);
246  if (summaryClient_!=0)
247  {
248  // Always call basic analyze to form histograms for each task
249  summaryClient_->analyze(ib,ig,LS);
250  // Call this if LS-by-LS enabling is set to true
251  if (saveByLumiSection_==true)
253  }
254 } // void HcalMonitorClient::analyze()
255 
256 
258 {
259 
261  if ( doPedSetup_ ) setupPedestalMon(ib);
262 
263  if (debug_>0) std::cout <<"<HcalMonitorClient::dqmEndLuminosityBlock>"<<std::endl;
265  if (updateTime_>0)
266  {
268  return;
270  }
271  this->analyze(ib,ig,l.luminosityBlock());
272 
273  if (databaseUpdateTime_>0)
274  {
275  if (
276  // first update occurs at after databaseFirstUpdate_ minutes
278  ||
279  // following updates follow once every databaseUpdateTime_ minutes
281  )
282  {
283  this->writeChannelStatus();
285  }
286  }
287 
288  if (htmlUpdateTime_>0)
289  {
290  if (
292  //
294  ) // htmlUpdateTime_ in minutes
295  {
296  this->writeHtml(ib,ig);
298  }
299  }
300 
301 
302 } // void HcalMonitorClient::endLuminosityBlock
303 
305 {
306  begin_run_ = false;
307  end_run_ = true;
308 
309  // Always fill summaryClient at end of run (as opposed to the end-lumi fills, which may just contain info for a single LS)
310  // At the end of this run, set LS=-1 (LS-based plotting in doesn't work yet anyway)
311  if (summaryClient_)
312  summaryClient_->analyze(ib,ig,-1);
313 
314  if (databasedir_.size()>0)
315  this->writeChannelStatus();
316  // writeHtml takes longer; run it last
317  // Also, don't run it if htmlUpdateTime_>0 -- it should have already been run
318  if (baseHtmlDir_.size()>0 && htmlUpdateTime_==0)
319  this->writeHtml(ib,ig);
320 }
321 
323 {
324  // Set values here, because the "analyze" method occasionally times out,
325  // which keeps the endRun() call from being made. This causes endJob to
326  // crash, since end_run_ is still set to false at that point.
327  begin_run_ = false;
328  end_run_ = true;
329 
330  // pedestal values
331  if ( !doPedSetup_ ) {
332  edm::ESHandle<HcalDbService> conditions;
333  c.get<HcalDbRecord>().get(conditions);
334  PlotPedestalValues(*conditions);
335  }
336 
337 }
338 
340 {
341  // Temporary fix for crash of April 2011 in online DQM
342  if (Online_==true)
343  return;
344 
345  if (! end_run_)
346  {
347  this->analyze(ib,ig);
348  this->endRun(ib,ig);
349  }
350  this->cleanup(); // currently does nothing
351 
352  for ( unsigned int i=0; i<clients_.size(); i++ )
353  clients_[i]->endJob();
354  //if ( summaryClient_ ) summaryClient_->endJob();
355 
356 } // void HcalMonitorClient::endJob(void)
357 
359 {
360  if (!enableCleanup_) return;
361  // other cleanup?
362 } // void HcalMonitorClient::cleanup(void)
363 
364 
366 {
367  if (debug_>0) std::cout << "Preparing HcalMonitorClient html output ..." << std::endl;
368 
369 
370  // global ROOT style
371  gStyle->Reset("Default");
372  gStyle->SetCanvasColor(0);
373  gStyle->SetPadColor(0);
374  gStyle->SetFillColor(0);
375  gStyle->SetTitleFillColor(10);
376  // gStyle->SetOptStat(0);
377  gStyle->SetOptStat("ouemr");
378  gStyle->SetPalette(1);
379 
380  char tmp[20];
381 
382  if (run_ != edm::invalidRunNumber) {
383  sprintf(tmp, "DQM_%s_R%09d_%i", prefixME_.substr(0,prefixME_.size()-1).c_str(),run_,htmlcounter_);
384  } else {
385  sprintf(tmp, "DQM_%s_R%09d_%i", prefixME_.substr(0,prefixME_.size()-1).c_str(),0,htmlcounter_);
386  }
387  std::string htmlDir = baseHtmlDir_ + "/" + tmp + "/";
388  system(("/bin/mkdir -p " + htmlDir).c_str());
389 
390  ++htmlcounter_;
391 
392  std::ofstream htmlFile;
393  htmlFile.open((htmlDir + "index.html").c_str());
394 
395  // html page header
396  htmlFile << "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> " << std::endl;
397  htmlFile << "<html> " << std::endl;
398  htmlFile << "<head> " << std::endl;
399  htmlFile << " <meta content=\"text/html; charset=ISO-8859-1\" " << std::endl;
400  htmlFile << " http-equiv=\"content-type\"> " << std::endl;
401  htmlFile << " <title>Hcal Data Quality Monitor</title> " << std::endl;
402  htmlFile << "</head> " << std::endl;
403  htmlFile << "<body> " << std::endl;
404  htmlFile << "<br> " << std::endl;
405  htmlFile << "<center><h1>Hcal Data Quality Monitor</h1></center>" << std::endl;
406  htmlFile << "<h2>Run Number:&nbsp;&nbsp;&nbsp;" << std::endl;
407  htmlFile << "<span style=\"color: rgb(0, 0, 153);\">" << run_ <<"</span></h2> " << std::endl;
408  htmlFile << "<h2>Events processed:&nbsp;&nbsp;&nbsp;" << std::endl;
409  htmlFile << "<span style=\"color: rgb(0, 0, 153);\">" << ievt_ <<"</span></h2> " << std::endl;
410  htmlFile << "<hr>" << std::endl;
411  htmlFile << "<ul>" << std::endl;
412 
413  for (unsigned int i=0;i<clients_.size();++i)
414  {
415  if (clients_[i]->validHtmlOutput(ib,ig)==true)
416  {
417  clients_[i]->htmlOutput(ib,ig,htmlDir);
418  // Always print this out? Or only when validHtmlOutput is true?
419  htmlFile << "<table border=0 WIDTH=\"50%\"><tr>" << std::endl;
420  htmlFile << "<td WIDTH=\"35%\"><a href=\"" << clients_[i]->name_ << ".html"<<"\">"<<clients_[i]->name_<<"</a></td>" << std::endl;
421  if(clients_[i]->hasErrors_Temp()) htmlFile << "<td bgcolor=red align=center>This monitor task has errors.</td>" << std::endl;
422  else if(clients_[i]->hasWarnings_Temp()) htmlFile << "<td bgcolor=yellow align=center>This monitor task has warnings.</td>" << std::endl;
423  else if(clients_[i]->hasOther_Temp()) htmlFile << "<td bgcolor=aqua align=center>This monitor task has messages.</td>" << std::endl;
424  else htmlFile << "<td bgcolor=lime align=center>This monitor task has no problems</td>" << std::endl;
425  htmlFile << "</tr></table>" << std::endl;
426  }
427  }
428 
429  // Add call to reportSummary html output
430  if (summaryClient_)
431  {
432  summaryClient_->htmlOutput(ib,ig,htmlDir);
433  htmlFile << "<table border=0 WIDTH=\"50%\"><tr>" << std::endl;
434  htmlFile << "<td WIDTH=\"35%\"><a href=\"" << summaryClient_->name_ << ".html"<<"\">"<<summaryClient_->name_<<"</a></td>" << std::endl;
435  if(summaryClient_->hasErrors_Temp()) htmlFile << "<td bgcolor=red align=center>This monitor task has errors.</td>" << std::endl;
436  else if(summaryClient_->hasWarnings_Temp()) htmlFile << "<td bgcolor=yellow align=center>This monitor task has warnings.</td>" << std::endl;
437  else if(summaryClient_->hasOther_Temp()) htmlFile << "<td bgcolor=aqua align=center>This monitor task has messages.</td>" << std::endl;
438  else htmlFile << "<td bgcolor=lime align=center>This monitor task has no problems</td>" << std::endl;
439  htmlFile << "</tr></table>" << std::endl;
440  }
441 
442  htmlFile << "</ul>" << std::endl;
443 
444  // html page footer
445  htmlFile << "</body> " << std::endl;
446  htmlFile << "</html> " << std::endl;
447 
448  htmlFile.close();
449  if (debug_>0) std::cout << "HcalMonitorClient html output done..." << std::endl;
450 
451 } // void HcalMonitorClient::writeHtml()
452 
454 {
455  if (databasedir_.size()==0) return;
456  if (debug_>0) std::cout <<"<HcalMonitorClient::writeDBfile> Writing file for database"<<std::endl;
457 
458  std::map<HcalDetId, unsigned int> myquality; //map of quality flags as reported by each client
459  // Get status from all channels (we need to store all channels in case a bad channel suddenly becomes good)
461  clients_[i]->updateChannelStatus(myquality);
462 
463  if (debug_>0) std::cout <<"<HcalMonitorClient::writeChannelStatus()> myquality size = "<<myquality.size()<<std::endl;
464 
465  std::vector<DetId> mydetids = chanquality_->getAllChannels();
467 
468  for (unsigned int i=0;i<mydetids.size();++i)
469  {
470  if (mydetids[i].det()!=DetId::Hcal) continue; // not hcal
471 
472  HcalDetId id=mydetids[i];
473  // get original channel status item
474  const HcalChannelStatus* origstatus=chanquality_->getValues(mydetids[i]);
475  // make copy of status
476  HcalChannelStatus* mystatus=new HcalChannelStatus(origstatus->rawId(),origstatus->getValue());
477  // loop over myquality flags
478  if (myquality.find(id)!=myquality.end())
479  {
480 
481  // check dead cells
482  if ((myquality[id]>>HcalChannelStatus::HcalCellDead)&0x1)
484  else
486  // check hot cells
487  if ((myquality[id]>>HcalChannelStatus::HcalCellHot)&0x1)
489  else
491  } // if (myquality.find_...)
492  newChanQual->addValues(*mystatus);
493  } // for (unsigned int i=0;...)
494 
495  //Now dump out to text file
496  std::ostringstream file;
497  databasedir_=databasedir_+"/"; // add extra slash, just in case
498  //file <<databasedir_<<"HcalDQMstatus_"<<run_<<".txt";
499  file <<databasedir_<<"HcalDQMstatus.txt";
500  std::ofstream outStream(file.str().c_str());
501  outStream<<"### Run # "<<run_<<std::endl;
502  HcalDbASCIIIO::dumpObject (outStream, (*newChanQual));
503  return;
504 } // void HcalMonitorClient::writeChannelStatus()
505 
506 
508 {
509 
510  double ADC_ped=0;
511  double ADC_width=0;
512  double fC_ped=0;
513  double fC_width=0;
514  double temp_ADC=0;
515  double temp_fC=0;
516 
517  int ieta=-9999;
518  int iphi=-9999;
519  HcalCalibrations calibs_;
520 
525 
526 
527  for (int subdet=1; subdet<=4;++subdet)
528  {
529  for (int depth=0;depth<4;++depth)
530  {
531  int etabins= ADC_PedestalFromDBByDepth->depth[depth]->getNbinsX();
532  int phibins = ADC_PedestalFromDBByDepth->depth[depth]->getNbinsY();
533  for (int eta=0;eta<etabins;++eta)
534  {
535  ieta=CalcIeta(subdet,eta,depth+1);
536  if (ieta==-9999) continue;
537  for (int phi=0;phi<phibins;++phi)
538  {
539  iphi=phi+1;
540  if (!validDetId((HcalSubdetector)(subdet), ieta, iphi, depth+1)) continue;
541  HcalDetId detid((HcalSubdetector)(subdet), ieta, iphi, depth+1);
542  ADC_ped=0;
543  ADC_width=0;
544  fC_ped=0;
545  fC_width=0;
546  calibs_= cond.getHcalCalibrations(detid);
547  const HcalPedestalWidth* pedw = cond.getPedestalWidth(detid);
548  const HcalQIECoder* channelCoder_ = cond.getHcalCoder(detid);
549  const HcalQIEShape* shape_ = cond.getHcalShape(channelCoder_);
550 
551  // Loop over capIDs
552  for (unsigned int capid=0;capid<4;++capid)
553  {
554  // Still need to determine how to convert widths to ADC or fC
555  // calibs_.pedestal value is always in fC, according to Radek
556  temp_fC = calibs_.pedestal(capid);
557  fC_ped+= temp_fC;
558  // convert to ADC from fC
559  temp_ADC=channelCoder_->adc(*shape_,
560  (float)calibs_.pedestal(capid),
561  capid);
562  ADC_ped+=temp_ADC;
563  // Pedestals assumed to be read out in fC
564  temp_fC=pedw->getSigma(capid,capid);
565  fC_width+=temp_fC;
566  temp_ADC=pedw->getSigma(capid,capid)*pow(1.*channelCoder_->adc(*shape_,(float)calibs_.pedestal(capid),capid)/calibs_.pedestal(capid),2);
567  ADC_width+=temp_ADC;
568  }//capid loop
569 
570  // Pedestal values are average over four cap IDs
571  // widths are sqrt(SUM [sigma_ii^2])/4.
572  fC_ped/=4.;
573  ADC_ped/=4.;
574 
575  // Divide width by 2, or by four?
576  // Dividing by 2 gives subtracted results closer to zero -- estimate of variance?
577  fC_width=pow(fC_width,0.5)/2.;
578  ADC_width=pow(ADC_width,0.5)/2.;
579 
580  if (debug_>1)
581  {
582  std::cout <<"<HcalMonitorClient::PlotPedestalValues> HcalDet ID = "<<(HcalSubdetector)subdet<<": ("<<ieta<<", "<<iphi<<", "<<depth<<")"<<std::endl;
583  std::cout <<"\tADC pedestal = "<<ADC_ped<<" +/- "<<ADC_width<<std::endl;
584  std::cout <<"\tfC pedestal = "<<fC_ped<<" +/- "<<fC_width<<std::endl;
585  }
586  // Shift HF by -/+1 when filling eta-phi histograms
587  int zside=0;
588  if (subdet==4)
589  {
590  if (ieta<0) zside=-1;
591  else zside=1;
592  }
593  ADC_PedestalFromDBByDepth->depth[depth]->Fill(ieta+zside,iphi,ADC_ped);
594  ADC_WidthFromDBByDepth->depth[depth]->Fill(ieta+zside, iphi, ADC_width);
595  fC_PedestalFromDBByDepth->depth[depth]->Fill(ieta+zside,iphi,fC_ped);
596  fC_WidthFromDBByDepth->depth[depth]->Fill(ieta+zside, iphi, fC_width);
597  } // phi loop
598  } // eta loop
599  } //depth loop
600 
601  } // subdet loop
606 
607  // Center ADC pedestal values near 3 +/- 1
608  for (unsigned int i=0;i<ADC_PedestalFromDBByDepth->depth.size();++i)
609  {
610  ADC_PedestalFromDBByDepth->depth[i]->getTH2F()->SetMinimum(0);
611  if (ADC_PedestalFromDBByDepth->depth[i]->getTH2F()->GetMaximum()<6)
612  ADC_PedestalFromDBByDepth->depth[i]->getTH2F()->SetMaximum(6);
613  }
614 
615  for (unsigned int i=0;i<ADC_WidthFromDBByDepth->depth.size();++i)
616  {
617  ADC_WidthFromDBByDepth->depth[i]->getTH2F()->SetMinimum(0);
618  if (ADC_WidthFromDBByDepth->depth[i]->getTH2F()->GetMaximum()<2)
619  ADC_WidthFromDBByDepth->depth[i]->getTH2F()->SetMaximum(2);
620  }
621 
622 }
623 
624 
625 //
626 // setupPedestalMon
627 //
629 {
630 
631  // Now let's setup pedestals
632  ib.setCurrentFolder(prefixME_+"HcalInfo/PedestalsFromCondDB");
634  {
636  ADC_PedestalFromDBByDepth->setup(ib,"ADC Pedestals From Conditions DB");
637  }
638  if (ADC_WidthFromDBByDepth==0)
639  {
641  ADC_WidthFromDBByDepth->setup(ib,"ADC Widths From Conditions DB");
642  }
644  {
646  fC_PedestalFromDBByDepth->setup(ib,"fC Pedestals From Conditions DB");
647  }
648  if (fC_WidthFromDBByDepth==0)
649  {
651  fC_WidthFromDBByDepth->setup(ib,"fC Widths From Conditions DB");
652  }
653 
654  doPedSetup_ = false;
655 }
656 
657 //
658 // setupChannelStatus
659 //
661 {
662 
663  if (ChannelStatus==0)
664  {
665  ib.setCurrentFolder(prefixME_+"HcalInfo/ChannelStatus");
667  ChannelStatus->setup(ib,"ChannelStatus");
668  std::stringstream x;
669  for (unsigned int d=0;d<ChannelStatus->depth.size();++d)
670  {
671  ChannelStatus->depth[d]->Reset();
672  x<<"1+log2(status) for HCAL depth "<<d+1;
673  if (ChannelStatus->depth[d]) ChannelStatus->depth[d]->setTitle(x.str().c_str());
674  x.str("");
675  }
676  }
677 
678  doChanStatSetup_ = false;
679 
680 }
681 
std::vector< std::string > enabledClients_
T getUntrackedParameter(std::string const &, T const &) const
void setup(void)
Setup.
int i
Definition: DBlmapReader.cc:9
void cleanup(void)
Cleanup.
EtaPhiHists * fC_WidthFromDBByDepth
RunID const & id() const
Definition: RunBase.h:41
EtaPhiHists * ADC_PedestalFromDBByDepth
int ib
Definition: cuy.py:660
void setupPedestalMon(DQMStore::IBooker &)
void PlotPedestalValues(const HcalDbService &cond)
RunNumber_t run() const
Definition: RunID.h:39
std::string databasedir_
float getSigma(int fCapId1, int fCapId2) const
get correlation element for capId1/2 = 0..3
RunNumber_t const invalidRunNumber
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
void Reset(void)
EtaPhiHists * fC_PedestalFromDBByDepth
#define NULL
Definition: scimark2.h:8
virtual void htmlOutput(DQMStore::IBooker &, DQMStore::IGetter &, std::string htmlDir)
double pedestal(int fCapId) const
get pedestal for capid=0..3
EtaPhiHists * ADC_WidthFromDBByDepth
const Item * getValues(DetId fId, bool throwOnFail=true) const
int zside(DetId const &)
void setupChannelStatusMon(DQMStore::IBooker &)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
void unsetBit(unsigned int bitnumber)
uint16_t size_type
void setBit(unsigned int bitnumber)
uint32_t rawId() const
LuminosityBlockNumber_t luminosityBlock() const
void beginRun(const edm::Run &r, const edm::EventSetup &c)
BeginRun.
tuple d
Definition: ztail.py:151
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &)
EndJob.
const HcalPedestalWidth * getPedestalWidth(const HcalGenericDetId &fId) const
virtual void endJob() final
std::string baseHtmlDir_
HcalMonitorClient(const edm::ParameterSet &ps)
std::vector< MonitorElement * > depth
std::string inputFile_
int CalcIeta(int subdet, int eta, int depth)
void analyze(DQMStore::IBooker &, DQMStore::IGetter &, int LS=-1)
std::vector< DetId > getAllChannels() const
HcalSubdetector
Definition: HcalAssistant.h:31
void setup(DQMStore::IBooker &m_dbe, std::string Name, std::string Units="")
void analyze(DQMStore::IBooker &ib, DQMStore::IGetter &, int LS=-1)
Analyze.
HcalSummaryClient * summaryClient_
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, const edm::LuminosityBlock &l, const edm::EventSetup &c)
EndLumiBlock.
std::vector< HcalBaseDQClient * > clients_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
const HcalQIECoder * getHcalCoder(const HcalGenericDetId &fId) const
void FillUnphysicalHEHFBins(std::vector< TH2F > &hh)
EtaPhiHists * ChannelStatus
const HcalQIEShape * getHcalShape(const HcalGenericDetId &fId) const
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
bool dumpObject(std::ostream &fOutput, const HcalPedestals &fObject)
void writeHtml(DQMStore::IBooker &, DQMStore::IGetter &)
const HcalChannelQuality * chanquality_
edm::RunNumber_t run_
unsigned adc(const HcalQIEShape &fShape, float fCharge, unsigned fCapId) const
fC + capid [0..3] -&gt; ADC conversion
Definition: HcalQIECoder.cc:27
const JetExtendedData & getValue(const Container &, const reco::JetBaseRef &)
get value for the association. Throw exception if no association found
tuple cout
Definition: gather_cfg.py:121
void fillReportSummaryLSbyLS(DQMStore::IBooker &, DQMStore::IGetter &, int LS)
tuple status
Definition: ntuplemaker.py:245
uint32_t getValue() const
void endRun(DQMStore::IBooker &, DQMStore::IGetter &)
EndRun.
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
bool addValues(const Item &myItem)
void getFriends(const std::vector< HcalBaseDQClient * > &clients)
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
Definition: Run.h:41
const HcalTopology * topo() const
bool validDetId(HcalSubdetector sd, int ies, int ip, int dp)