CMS 3D CMS Logo

MESetEcal.cc
Go to the documentation of this file.
2 
5 
6 #include <limits>
7 #include <sstream>
8 
9 namespace ecaldqm
10 {
11  MESetEcal::MESetEcal(std::string const& _fullPath, binning::ObjectType _otype, binning::BinningType _btype, MonitorElement::Kind _kind, unsigned _logicalDimensions, binning::AxisSpecs const* _xaxis/* = 0*/, binning::AxisSpecs const* _yaxis/* = 0*/, binning::AxisSpecs const* _zaxis/* = 0*/) :
12  MESet(_fullPath, _otype, _btype, _kind),
13  logicalDimensions_(_logicalDimensions),
14  xaxis_(_xaxis ? new binning::AxisSpecs(*_xaxis) : nullptr),
15  yaxis_(_yaxis ? new binning::AxisSpecs(*_yaxis) : nullptr),
16  zaxis_(_zaxis ? new binning::AxisSpecs(*_zaxis) : nullptr)
17  {
18  if(btype_ == binning::kUser && ((logicalDimensions_ > 0 && !xaxis_) || (logicalDimensions_ > 1 && !yaxis_)))
19  throw_("Need axis specifications");
20  }
21 
23  MESet(_orig),
25  xaxis_(_orig.xaxis_ ? new binning::AxisSpecs(*_orig.xaxis_) : nullptr),
26  yaxis_(_orig.yaxis_ ? new binning::AxisSpecs(*_orig.yaxis_) : nullptr),
27  zaxis_(_orig.zaxis_ ? new binning::AxisSpecs(*_orig.zaxis_) : nullptr)
28  {
29  }
30 
32  {
33  delete xaxis_;
34  delete yaxis_;
35  delete zaxis_;
36  }
37 
38  MESet&
40  {
41  delete xaxis_;
42  delete yaxis_;
43  delete zaxis_;
44  xaxis_ = nullptr;
45  yaxis_ = nullptr;
46  zaxis_ = nullptr;
47 
48  MESetEcal const* pRhs(dynamic_cast<MESetEcal const*>(&_rhs));
49  if(pRhs){
51  if(pRhs->xaxis_) xaxis_ = new binning::AxisSpecs(*pRhs->xaxis_);
52  if(pRhs->yaxis_) yaxis_ = new binning::AxisSpecs(*pRhs->yaxis_);
53  if(pRhs->zaxis_) zaxis_ = new binning::AxisSpecs(*pRhs->zaxis_);
54  }
55  return MESet::operator=(_rhs);
56  }
57 
58  MESet*
59  MESetEcal::clone(std::string const& _path/* = ""*/) const
60  {
62  if(_path != "") path_ = _path;
63  MESet* copy(new MESetEcal(*this));
64  path_ = path;
65  return copy;
66  }
67 
68  void
70  {
71  using namespace std;
72 
73  clear();
74 
75  vector<string> mePaths(generatePaths());
76 
77  for(unsigned iME(0); iME < mePaths.size(); iME++){
78  string& path(mePaths[iME]);
79  if(path.find('%') != string::npos)
80  throw_("book() called with incompletely formed path [" + path + "]");
81 
82  binning::ObjectType actualObject(binning::getObject(otype_, iME));
83 
84  binning::AxisSpecs xaxis, yaxis, zaxis;
85 
86  bool isHistogram(logicalDimensions_ > 0);
87  bool isMap(logicalDimensions_ > 1);
88 
89  if(isHistogram){
90 
91  if(xaxis_) xaxis = *xaxis_;
92  if(yaxis_) yaxis = *yaxis_;
93  if(zaxis_) zaxis = *zaxis_;
94 
95  if(xaxis.nbins == 0){ // uses preset
96  binning::AxisSpecs xdef(binning::getBinning(actualObject, btype_, isMap, 1, iME));
97  if(xaxis.labels || xaxis.title != ""){ // PSet specifies title / label only
98  std::string* labels(xaxis.labels);
99  std::string title(xaxis.title);
100  xaxis = xdef;
101  delete [] xaxis.labels;
102  xaxis.labels = labels;
103  xaxis.title = title;
104  }
105  else
106  xaxis = xdef;
107  }
108 
109  if(isMap && yaxis.nbins == 0){
110  binning::AxisSpecs ydef(binning::getBinning(actualObject, btype_, isMap, 2, iME));
111  if(yaxis.labels || yaxis.title != ""){ // PSet specifies title / label only
112  std::string* labels(yaxis.labels);
113  std::string title(yaxis.title);
114  yaxis = ydef;
115  delete [] yaxis.labels;
116  yaxis.labels = labels;
117  yaxis.title = title;
118  }
119  else
120  yaxis = ydef;
121  }
122 
123  if(yaxis.high - yaxis.low < 1.e-10){
124  yaxis.low = -numeric_limits<double>::max();
126  }
127 
128  if(zaxis.high - zaxis.low < 1.e-10){
129  zaxis.low = -numeric_limits<double>::max();
131  }
132  }
133 
134  size_t slashPos(path.find_last_of('/'));
135  string name(path.substr(slashPos + 1));
136  _ibooker.cd();
137  _ibooker.setCurrentFolder(path.substr(0, slashPos));
138 
139  MonitorElement* me(nullptr);
140 
141  switch(kind_) {
143  me = _ibooker.bookFloat(name);
144 
145  break;
146 
148  if(xaxis.edges)
149  me = _ibooker.book1D(name, name, xaxis.nbins, xaxis.edges);
150  else
151  me = _ibooker.book1D(name, name, xaxis.nbins, xaxis.low, xaxis.high);
152 
153  break;
154 
156  if(xaxis.edges){
157  // DQMStore bookProfile interface uses double* for bin edges
158  double* edges(new double[xaxis.nbins + 1]);
159  std::copy(xaxis.edges, xaxis.edges + xaxis.nbins + 1, edges);
160  me = _ibooker.bookProfile(name, name, xaxis.nbins, edges, yaxis.low, yaxis.high, "");
161  delete [] edges;
162  }
163  else
164  me = _ibooker.bookProfile(name, name, xaxis.nbins, xaxis.low, xaxis.high, yaxis.low, yaxis.high, "");
165 
166  break;
167 
169  if(xaxis.edges || yaxis.edges) {
170  binning::AxisSpecs* specs[] = {&xaxis, &yaxis};
171  for(int iSpec(0); iSpec < 2; iSpec++){
172  if(!specs[iSpec]->edges){
173  specs[iSpec]->edges = new float[specs[iSpec]->nbins + 1];
174  int nbins(specs[iSpec]->nbins);
175  double low(specs[iSpec]->low), high(specs[iSpec]->high);
176  for(int i(0); i < nbins + 1; i++)
177  specs[iSpec]->edges[i] = low + (high - low) / nbins * i;
178  }
179  }
180  me = _ibooker.book2D(name, name, xaxis.nbins, xaxis.edges, yaxis.nbins, yaxis.edges);
181  }
182  else
183  me = _ibooker.book2D(name, name, xaxis.nbins, xaxis.low, xaxis.high, yaxis.nbins, yaxis.low, yaxis.high);
184 
185  break;
186 
188  if(zaxis.edges) {
189  zaxis.low = zaxis.edges[0];
190  zaxis.high = zaxis.edges[zaxis.nbins];
191  }
192  if(xaxis.edges || yaxis.edges)
193  throw_("Variable bin size for 2D profile not implemented");
194  me = _ibooker.bookProfile2D(name, name, xaxis.nbins, xaxis.low, xaxis.high, yaxis.nbins, yaxis.low, yaxis.high, zaxis.low, zaxis.high, "");
195 
196  break;
197 
198  default :
199  break;
200  }
201 
202  if(!me)
203  throw_("ME could not be booked");
204 
205  if(isHistogram){
206  me->setAxisTitle(xaxis.title, 1);
207  me->setAxisTitle(yaxis.title, 2);
208  if(isMap) me->setAxisTitle(zaxis.title, 3);
209 
210  if(xaxis.labels){
211  for(int iBin(1); iBin <= xaxis.nbins; ++iBin)
212  me->setBinLabel(iBin, xaxis.labels[iBin - 1], 1);
213  }
214  if(yaxis.labels){
215  for(int iBin(1); iBin <= yaxis.nbins; ++iBin)
216  me->setBinLabel(iBin, yaxis.labels[iBin - 1], 2);
217  }
218  if(zaxis.labels){
219  for(int iBin(1); iBin <= zaxis.nbins; ++iBin)
220  me->setBinLabel(iBin, zaxis.labels[iBin - 1], 3);
221  }
222 
223  /* FIX: In ROOT 6.0.12 bit 20 is used by ROOT (bit 19 was already in use in 6.0.x). Talking with the ROOT team, users
224  should never use SetBit for their own purpose since those bits are reserved for ROOT internally.
225  See https://github.com/cms-sw/cmssw/issues/21423 for some alternative ways of attaching
226  additional information to a TH1
227 
228  // For plot tagging in RenderPlugin; default values are 1 for both
229  // bits 19 - 23 are free in TH1::fBits
230  // can only pack object + logical dimensions into 5 bits (4 bits for object, 1 bit for dim (1 -> dim >= 2))
231  me->getTH1()->SetBit(uint32_t(actualObject + 1) << 20);
232  if(isMap) me->getTH1()->SetBit(0x1 << 19);
233  */
234  }
235 
236  if(lumiFlag_) me->setLumiFlag();
237 
238  mes_.push_back(me);
239  }
240 
241  active_ = true;
242  }
243 
244  bool
245  MESetEcal::retrieve(DQMStore::IGetter& _igetter, std::string* _failedPath/* = 0*/) const
246  {
247  clear();
248 
249  std::vector<std::string> mePaths(generatePaths());
250  if(mePaths.empty()){
251  if(_failedPath) _failedPath->clear();
252  return false;
253  }
254 
255  for(unsigned iME(0); iME < mePaths.size(); iME++){
256  std::string& path(mePaths[iME]);
257  if(path.find('%') != std::string::npos)
258  throw_("retrieve() called with incompletely formed path [" + path + "]");
259 
260  MonitorElement* me(_igetter.get(path));
261  if(me) mes_.push_back(me);
262  else{
263  clear();
264  if(_failedPath) *_failedPath = path;
265  return false;
266  }
267  }
268 
269  active_ = true;
270  return true;
271  }
272 
273  void
274  MESetEcal::fill(DetId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
275  {
276  if(!active_) return;
277 
278  unsigned iME(binning::findPlotIndex(otype_, _id));
279  checkME_(iME);
280 
281  fill_(iME, _x, _wy, _w);
282  }
283 
284  void
285  MESetEcal::fill(EcalElectronicsId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
286  {
287  if(!active_) return;
288 
289  unsigned iME(binning::findPlotIndex(otype_, _id));
290  checkME_(iME);
291 
292  fill_(iME, _x, _wy, _w);
293  }
294 
295  void
296  MESetEcal::fill(int _dcctccid, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
297  {
298  if(!active_) return;
299 
300  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
301  checkME_(iME);
302 
303  fill_(iME, _x, _wy, _w);
304  }
305 
306  void
307  MESetEcal::fill(double _x, double _wy/* = 1.*/, double _w/* = 1.*/)
308  {
309  if(!active_) return;
310 
311  if(mes_.size() != 1) return;
312 
313  fill_(0, _x, _wy, _w);
314  }
315 
316  void
317  MESetEcal::setBinContent(DetId const& _id, int _bin, double _content)
318  {
319  if(!active_) return;
320 
321  unsigned iME(binning::findPlotIndex(otype_, _id));
322  checkME_(iME);
323 
324  mes_[iME]->setBinContent(_bin, _content);
325  }
326 
327  void
329  {
330  if(!active_) return;
331 
332  unsigned iME(binning::findPlotIndex(otype_, _id));
333  checkME_(iME);
334 
335  mes_[iME]->setBinContent(_bin, _content);
336  }
337 
338  void
339  MESetEcal::setBinContent(int _dcctccid, int _bin, double _content)
340  {
341  if(!active_) return;
342 
343  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
344  checkME_(iME);
345 
346  mes_[iME]->setBinContent(_bin, _content);
347  }
348 
349  void
350  MESetEcal::setBinError(DetId const& _id, int _bin, double _error)
351  {
352  if(!active_) return;
353 
354  unsigned iME(binning::findPlotIndex(otype_, _id));
355  checkME_(iME);
356 
357  mes_[iME]->setBinError(_bin, _error);
358  }
359 
360  void
361  MESetEcal::setBinError(EcalElectronicsId const& _id, int _bin, double _error)
362  {
363  if(!active_) return;
364 
365  unsigned iME(binning::findPlotIndex(otype_, _id));
366  checkME_(iME);
367 
368  mes_[iME]->setBinError(_bin, _error);
369  }
370 
371  void
372  MESetEcal::setBinError(int _dcctccid, int _bin, double _error)
373  {
374  if(!active_) return;
375 
376  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
377  checkME_(iME);
378 
379  mes_[iME]->setBinError(_bin, _error);
380  }
381 
382  void
383  MESetEcal::setBinEntries(DetId const& _id, int _bin, double _entries)
384  {
385  if(!active_) return;
387 
388  unsigned iME(binning::findPlotIndex(otype_, _id));
389  checkME_(iME);
390 
391  mes_[iME]->setBinEntries(_bin, _entries);
392  }
393 
394  void
395  MESetEcal::setBinEntries(EcalElectronicsId const& _id, int _bin, double _entries)
396  {
397  if(!active_) return;
399 
400  unsigned iME(binning::findPlotIndex(otype_, _id));
401  checkME_(iME);
402 
403  mes_[iME]->setBinEntries(_bin, _entries);
404  }
405 
406  void
407  MESetEcal::setBinEntries(int _dcctccid, int _bin, double _entries)
408  {
409  if(!active_) return;
411 
412  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
413  checkME_(iME);
414 
415  mes_[iME]->setBinEntries(_bin, _entries);
416  }
417 
418  double
419  MESetEcal::getBinContent(DetId const& _id, int _bin) const
420  {
421  if(!active_) return 0.;
422 
423  unsigned iME(binning::findPlotIndex(otype_, _id));
424  checkME_(iME);
425 
426  return mes_[iME]->getBinContent(_bin);
427  }
428 
429  double
431  {
432  if(!active_) return 0.;
433 
434  unsigned iME(binning::findPlotIndex(otype_, _id));
435  checkME_(iME);
436 
437  return mes_[iME]->getBinContent(_bin);
438  }
439 
440  double
441  MESetEcal::getBinContent(int _dcctccid, int _bin) const
442  {
443  if(!active_) return 0.;
444 
445  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
446  checkME_(iME);
447 
448  return mes_[iME]->getBinContent(_bin);
449  }
450 
451  double
452  MESetEcal::getBinError(DetId const& _id, int _bin) const
453  {
454  if(!active_) return 0.;
455 
456  unsigned iME(binning::findPlotIndex(otype_, _id));
457  checkME_(iME);
458 
459  return mes_[iME]->getBinError(_bin);
460  }
461 
462  double
464  {
465  if(!active_) return 0.;
466 
467  unsigned iME(binning::findPlotIndex(otype_, _id));
468  checkME_(iME);
469 
470  return mes_[iME]->getBinError(_bin);
471  }
472 
473  double
474  MESetEcal::getBinError(int _dcctccid, int _bin) const
475  {
476  if(!active_) return 0.;
477 
478  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
479  checkME_(iME);
480 
481  return mes_[iME]->getBinError(_bin);
482  }
483 
484  double
485  MESetEcal::getBinEntries(DetId const& _id, int _bin) const
486  {
487  if(!active_) return 0.;
489 
490  unsigned iME(binning::findPlotIndex(otype_, _id));
491  checkME_(iME);
492 
493  return mes_[iME]->getBinEntries(_bin);
494  }
495 
496  double
498  {
499  if(!active_) return 0.;
501 
502  unsigned iME(binning::findPlotIndex(otype_, _id));
503  checkME_(iME);
504 
505  return mes_[iME]->getBinEntries(_bin);
506  }
507 
508  double
509  MESetEcal::getBinEntries(int _dcctccid, int _bin) const
510  {
511  if(!active_) return 0.;
513 
514  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
515  checkME_(iME);
516 
517  return mes_[iME]->getBinEntries(_bin);
518  }
519 
520  int
521  MESetEcal::findBin(DetId const& _id, double _x, double _y/* = 0.*/) const
522  {
523  if(!active_) return -1;
524 
525  unsigned iME(binning::findPlotIndex(otype_, _id));
526  checkME_(iME);
527 
528  return mes_[iME]->getTH1()->FindBin(_x, _y);
529  }
530 
531  int
532  MESetEcal::findBin(EcalElectronicsId const& _id, double _x, double _y/* = 0.*/) const
533  {
534  if(!active_) return -1;
535 
536  unsigned iME(binning::findPlotIndex(otype_, _id));
537  checkME_(iME);
538 
539  return mes_[iME]->getTH1()->FindBin(_x, _y);
540  }
541 
542  int
543  MESetEcal::findBin(int _dcctccid, double _x, double _y/* = 0.*/) const
544  {
545  if(!active_) return -1;
546 
547  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
548  checkME_(iME);
549 
550  return mes_[iME]->getTH1()->FindBin(_x, _y);
551  }
552 
553  bool
555  {
556  return (xaxis_ && xaxis_->edges) || (yaxis_ && yaxis_->edges) || (zaxis_ && zaxis_->edges);
557  }
558 
559  std::vector<std::string>
561  {
562  using namespace std;
563 
564  vector<string> paths(0);
565 
566  unsigned nME(binning::getNObjects(otype_));
567 
568  for(unsigned iME(0); iME < nME; iME++) {
570 
571  string path(path_);
572  map<string, string> replacements;
573 
574  switch(obj){
575  case binning::kEB:
576  case binning::kEBMEM:
577  replacements["subdet"] = "EcalBarrel";
578  replacements["prefix"] = "EB";
579  replacements["suffix"] = "";
580  replacements["subdetshort"] = "EB";
581  replacements["subdetshortsig"] = "EB";
582  replacements["supercrystal"] = "trigger tower";
583  break;
584  case binning::kEE:
585  case binning::kEEMEM:
586  replacements["subdet"] = "EcalEndcap";
587  replacements["prefix"] = "EE";
588  replacements["subdetshort"] = "EE";
589  replacements["subdetshortsig"] = "EE";
590  replacements["supercrystal"] = "super crystal";
591  break;
592  case binning::kEEm:
593  replacements["subdet"] = "EcalEndcap";
594  replacements["prefix"] = "EE";
595  replacements["suffix"] = " EE -";
596  replacements["subdetshort"] = "EE";
597  replacements["subdetshortsig"] = "EEM";
598  replacements["supercrystal"] = "super crystal";
599  break;
600  case binning::kEEp:
601  replacements["subdet"] = "EcalEndcap";
602  replacements["prefix"] = "EE";
603  replacements["suffix"] = " EE +";
604  replacements["subdetshort"] = "EE";
605  replacements["subdetshortsig"] = "EEP";
606  replacements["supercrystal"] = "super crystal";
607  break;
608  case binning::kSM:
609  if(iME <= kEEmHigh || iME >= kEEpLow){
610  replacements["subdet"] = "EcalEndcap";
611  replacements["prefix"] = "EE";
612  replacements["supercrystal"] = "super crystal";
613  }
614  else{
615  replacements["subdet"] = "EcalBarrel";
616  replacements["prefix"] = "EB";
617  replacements["supercrystal"] = "trigger tower";
618  }
619  replacements["sm"] = binning::channelName(iME + 1);
620  break;
621  case binning::kEBSM:
622  replacements["subdet"] = "EcalBarrel";
623  replacements["prefix"] = "EB";
624  replacements["sm"] = binning::channelName(iME + kEBmLow + 1);
625  replacements["supercrystal"] = "trigger tower";
626  break;
627  case binning::kEESM:
628  replacements["subdet"] = "EcalEndcap";
629  replacements["prefix"] = "EE";
630  replacements["sm"] = binning::channelName(iME <= kEEmHigh ? iME + 1 : iME + 37);
631  replacements["supercrystal"] = "super crystal";
632  break;
633  case binning::kSMMEM:
634  {
635  unsigned iDCC(memDCCId(iME) - 1);
636  //dccId(unsigned) skips DCCs without MEM
637  if(iDCC <= kEEmHigh || iDCC >= kEEpLow){
638  replacements["subdet"] = "EcalEndcap";
639  replacements["prefix"] = "EE";
640  }
641  else{
642  replacements["subdet"] = "EcalBarrel";
643  replacements["prefix"] = "EB";
644  }
645  replacements["sm"] = binning::channelName(iDCC + 1);
646  }
647  break;
648  case binning::kEBSMMEM:
649  {
650  unsigned iDCC(memDCCId(iME + 4) - 1);
651  replacements["subdet"] = "EcalBarrel";
652  replacements["prefix"] = "EB";
653  replacements["sm"] = binning::channelName(iDCC + 1);
654  }
655  break;
656  case binning::kEESMMEM:
657  {
658  unsigned iDCC(memDCCId(iME < 4 ? iME : iME + 36) - 1);
659  replacements["subdet"] = "EcalEndcap";
660  replacements["prefix"] = "EE";
661  replacements["sm"] = binning::channelName(iDCC + 1);
662  }
663  default:
664  break;
665  }
666 
667  paths.push_back(formPath(replacements));
668  }
669 
670  return paths;
671  }
672 }
MonitorElement::Kind kind_
Definition: MESet.h:134
double getBinError(DetId const &, int) const override
Definition: MESetEcal.cc:452
double getBinContent(DetId const &, int) const override
Definition: MESetEcal.cc:419
MESet & operator=(MESet const &) override
Definition: MESetEcal.cc:39
def copy(args, dbName)
virtual void clear() const
Definition: MESet.cc:93
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:160
virtual void checkME_(unsigned _iME) const
Definition: MESet.h:115
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:307
void fill(DetId const &, double=1., double=1., double=1.) override
Definition: MESetEcal.cc:274
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
MESet * clone(std::string const &="") const override
Definition: MESetEcal.cc:59
unsigned getNObjects(ObjectType)
~MESetEcal() override
Definition: MESetEcal.cc:31
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
#define nullptr
ObjectType getObject(ObjectType, unsigned)
AxisSpecs getBinning(ObjectType, BinningType, bool, int, unsigned)
std::vector< MonitorElement * > mes_
Definition: MESet.h:129
void setBinEntries(DetId const &, int, double) override
Definition: MESetEcal.cc:383
void setLumiFlag()
this ME is meant to be stored for each luminosity section
void throw_(std::string const &_message) const
Definition: MESet.h:124
bool isVariableBinning() const override
Definition: MESetEcal.cc:554
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:166
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
bool lumiFlag_
Definition: MESet.h:135
std::string channelName(uint32_t, BinningType _btype=kDCC)
virtual void fill_(unsigned, int, double)
Definition: MESet.cc:278
std::string formPath(PathReplacements const &) const
Definition: MESet.cc:163
unsigned memDCCId(unsigned)
double getBinEntries(DetId const &, int) const override
Definition: MESetEcal.cc:485
Definition: DetId.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
MESetEcal(std::string const &, binning::ObjectType, binning::BinningType, MonitorElement::Kind, unsigned, binning::AxisSpecs const *=0, binning::AxisSpecs const *=0, binning::AxisSpecs const *=0)
Definition: MESetEcal.cc:11
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
unsigned findPlotIndex(ObjectType, DetId const &)
virtual int findBin(DetId const &, double, double=0.) const
Definition: MESetEcal.cc:521
binning::AxisSpecs const * zaxis_
Definition: MESetEcal.h:70
bool active_
Definition: MESet.h:138
bool retrieve(DQMStore::IGetter &, std::string *=0) const override
Definition: MESetEcal.cc:245
void setBinContent(DetId const &, int, double) override
Definition: MESetEcal.cc:317
binning::ObjectType otype_
Definition: MESet.h:132
binning::AxisSpecs const * xaxis_
Definition: MESetEcal.h:68
std::vector< std::string > generatePaths() const
Definition: MESetEcal.cc:560
MonitorElement * bookFloat(Args &&...args)
Definition: DQMStore.h:112
virtual MESet & operator=(MESet const &)
Definition: MESet.cc:70
void setBinError(DetId const &, int, double) override
Definition: MESetEcal.cc:350
binning::AxisSpecs const * yaxis_
Definition: MESetEcal.h:69
binning::BinningType btype_
Definition: MESet.h:133
std::string path_
Definition: MESet.h:131
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void book(DQMStore::IBooker &) override
Definition: MESetEcal.cc:69
unsigned logicalDimensions_
Definition: MESetEcal.h:67