CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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) : 0),
15  yaxis_(_yaxis ? new binning::AxisSpecs(*_yaxis) : 0),
16  zaxis_(_zaxis ? new binning::AxisSpecs(*_zaxis) : 0)
17  {
18  if(btype_ == binning::kUser && ((logicalDimensions_ > 0 && !xaxis_) || (logicalDimensions_ > 1 && !yaxis_)))
19  throw_("Need axis specifications");
20  }
21 
23  MESet(_orig),
24  logicalDimensions_(_orig.logicalDimensions_),
25  xaxis_(_orig.xaxis_ ? new binning::AxisSpecs(*_orig.xaxis_) : 0),
26  yaxis_(_orig.yaxis_ ? new binning::AxisSpecs(*_orig.yaxis_) : 0),
27  zaxis_(_orig.zaxis_ ? new binning::AxisSpecs(*_orig.zaxis_) : 0)
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_ = 0;
45  yaxis_ = 0;
46  zaxis_ = 0;
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(0);
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  // For plot tagging in RenderPlugin; default values are 1 for both
224  // bits 19 - 23 are free in TH1::fBits
225  // can only pack object + logical dimensions into 5 bits (4 bits for object, 1 bit for dim (1 -> dim >= 2))
226  me->getTH1()->SetBit(uint32_t(actualObject + 1) << 20);
227  if(isMap) me->getTH1()->SetBit(0x1 << 19);
228  }
229 
230  if(lumiFlag_) me->setLumiFlag();
231 
232  mes_.push_back(me);
233  }
234 
235  active_ = true;
236  }
237 
238  bool
239  MESetEcal::retrieve(DQMStore::IGetter& _igetter, std::string* _failedPath/* = 0*/) const
240  {
241  clear();
242 
243  std::vector<std::string> mePaths(generatePaths());
244  if(mePaths.size() == 0){
245  if(_failedPath) _failedPath->clear();
246  return false;
247  }
248 
249  for(unsigned iME(0); iME < mePaths.size(); iME++){
250  std::string& path(mePaths[iME]);
251  if(path.find('%') != std::string::npos)
252  throw_("retrieve() called with incompletely formed path [" + path + "]");
253 
254  MonitorElement* me(_igetter.get(path));
255  if(me) mes_.push_back(me);
256  else{
257  clear();
258  if(_failedPath) *_failedPath = path;
259  return false;
260  }
261  }
262 
263  active_ = true;
264  return true;
265  }
266 
267  void
268  MESetEcal::fill(DetId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
269  {
270  if(!active_) return;
271 
272  unsigned iME(binning::findPlotIndex(otype_, _id));
273  checkME_(iME);
274 
275  fill_(iME, _x, _wy, _w);
276  }
277 
278  void
279  MESetEcal::fill(EcalElectronicsId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
280  {
281  if(!active_) return;
282 
283  unsigned iME(binning::findPlotIndex(otype_, _id));
284  checkME_(iME);
285 
286  fill_(iME, _x, _wy, _w);
287  }
288 
289  void
290  MESetEcal::fill(int _dcctccid, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
291  {
292  if(!active_) return;
293 
294  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
295  checkME_(iME);
296 
297  fill_(iME, _x, _wy, _w);
298  }
299 
300  void
301  MESetEcal::fill(double _x, double _wy/* = 1.*/, double _w/* = 1.*/)
302  {
303  if(!active_) return;
304 
305  if(mes_.size() != 1) return;
306 
307  fill_(0, _x, _wy, _w);
308  }
309 
310  void
311  MESetEcal::setBinContent(DetId const& _id, int _bin, double _content)
312  {
313  if(!active_) return;
314 
315  unsigned iME(binning::findPlotIndex(otype_, _id));
316  checkME_(iME);
317 
318  mes_[iME]->setBinContent(_bin, _content);
319  }
320 
321  void
323  {
324  if(!active_) return;
325 
326  unsigned iME(binning::findPlotIndex(otype_, _id));
327  checkME_(iME);
328 
329  mes_[iME]->setBinContent(_bin, _content);
330  }
331 
332  void
333  MESetEcal::setBinContent(int _dcctccid, int _bin, double _content)
334  {
335  if(!active_) return;
336 
337  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
338  checkME_(iME);
339 
340  mes_[iME]->setBinContent(_bin, _content);
341  }
342 
343  void
344  MESetEcal::setBinError(DetId const& _id, int _bin, double _error)
345  {
346  if(!active_) return;
347 
348  unsigned iME(binning::findPlotIndex(otype_, _id));
349  checkME_(iME);
350 
351  mes_[iME]->setBinError(_bin, _error);
352  }
353 
354  void
355  MESetEcal::setBinError(EcalElectronicsId const& _id, int _bin, double _error)
356  {
357  if(!active_) return;
358 
359  unsigned iME(binning::findPlotIndex(otype_, _id));
360  checkME_(iME);
361 
362  mes_[iME]->setBinError(_bin, _error);
363  }
364 
365  void
366  MESetEcal::setBinError(int _dcctccid, int _bin, double _error)
367  {
368  if(!active_) return;
369 
370  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
371  checkME_(iME);
372 
373  mes_[iME]->setBinError(_bin, _error);
374  }
375 
376  void
377  MESetEcal::setBinEntries(DetId const& _id, int _bin, double _entries)
378  {
379  if(!active_) return;
381 
382  unsigned iME(binning::findPlotIndex(otype_, _id));
383  checkME_(iME);
384 
385  mes_[iME]->setBinEntries(_bin, _entries);
386  }
387 
388  void
389  MESetEcal::setBinEntries(EcalElectronicsId const& _id, int _bin, double _entries)
390  {
391  if(!active_) return;
393 
394  unsigned iME(binning::findPlotIndex(otype_, _id));
395  checkME_(iME);
396 
397  mes_[iME]->setBinEntries(_bin, _entries);
398  }
399 
400  void
401  MESetEcal::setBinEntries(int _dcctccid, int _bin, double _entries)
402  {
403  if(!active_) return;
405 
406  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
407  checkME_(iME);
408 
409  mes_[iME]->setBinEntries(_bin, _entries);
410  }
411 
412  double
413  MESetEcal::getBinContent(DetId const& _id, int _bin) const
414  {
415  if(!active_) return 0.;
416 
417  unsigned iME(binning::findPlotIndex(otype_, _id));
418  checkME_(iME);
419 
420  return mes_[iME]->getBinContent(_bin);
421  }
422 
423  double
424  MESetEcal::getBinContent(EcalElectronicsId const& _id, int _bin) const
425  {
426  if(!active_) return 0.;
427 
428  unsigned iME(binning::findPlotIndex(otype_, _id));
429  checkME_(iME);
430 
431  return mes_[iME]->getBinContent(_bin);
432  }
433 
434  double
435  MESetEcal::getBinContent(int _dcctccid, int _bin) const
436  {
437  if(!active_) return 0.;
438 
439  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
440  checkME_(iME);
441 
442  return mes_[iME]->getBinContent(_bin);
443  }
444 
445  double
446  MESetEcal::getBinError(DetId const& _id, int _bin) const
447  {
448  if(!active_) return 0.;
449 
450  unsigned iME(binning::findPlotIndex(otype_, _id));
451  checkME_(iME);
452 
453  return mes_[iME]->getBinError(_bin);
454  }
455 
456  double
457  MESetEcal::getBinError(EcalElectronicsId const& _id, int _bin) const
458  {
459  if(!active_) return 0.;
460 
461  unsigned iME(binning::findPlotIndex(otype_, _id));
462  checkME_(iME);
463 
464  return mes_[iME]->getBinError(_bin);
465  }
466 
467  double
468  MESetEcal::getBinError(int _dcctccid, int _bin) const
469  {
470  if(!active_) return 0.;
471 
472  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
473  checkME_(iME);
474 
475  return mes_[iME]->getBinError(_bin);
476  }
477 
478  double
479  MESetEcal::getBinEntries(DetId const& _id, int _bin) const
480  {
481  if(!active_) return 0.;
483 
484  unsigned iME(binning::findPlotIndex(otype_, _id));
485  checkME_(iME);
486 
487  return mes_[iME]->getBinEntries(_bin);
488  }
489 
490  double
491  MESetEcal::getBinEntries(EcalElectronicsId const& _id, int _bin) const
492  {
493  if(!active_) return 0.;
495 
496  unsigned iME(binning::findPlotIndex(otype_, _id));
497  checkME_(iME);
498 
499  return mes_[iME]->getBinEntries(_bin);
500  }
501 
502  double
503  MESetEcal::getBinEntries(int _dcctccid, int _bin) const
504  {
505  if(!active_) return 0.;
507 
508  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
509  checkME_(iME);
510 
511  return mes_[iME]->getBinEntries(_bin);
512  }
513 
514  int
515  MESetEcal::findBin(DetId const& _id, double _x, double _y/* = 0.*/) const
516  {
517  if(!active_) return -1;
518 
519  unsigned iME(binning::findPlotIndex(otype_, _id));
520  checkME_(iME);
521 
522  return mes_[iME]->getTH1()->FindBin(_x, _y);
523  }
524 
525  int
526  MESetEcal::findBin(EcalElectronicsId const& _id, double _x, double _y/* = 0.*/) const
527  {
528  if(!active_) return -1;
529 
530  unsigned iME(binning::findPlotIndex(otype_, _id));
531  checkME_(iME);
532 
533  return mes_[iME]->getTH1()->FindBin(_x, _y);
534  }
535 
536  int
537  MESetEcal::findBin(int _dcctccid, double _x, double _y/* = 0.*/) const
538  {
539  if(!active_) return -1;
540 
541  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
542  checkME_(iME);
543 
544  return mes_[iME]->getTH1()->FindBin(_x, _y);
545  }
546 
547  bool
549  {
550  return (xaxis_ && xaxis_->edges) || (yaxis_ && yaxis_->edges) || (zaxis_ && zaxis_->edges);
551  }
552 
553  std::vector<std::string>
555  {
556  using namespace std;
557 
558  vector<string> paths(0);
559 
560  unsigned nME(binning::getNObjects(otype_));
561 
562  for(unsigned iME(0); iME < nME; iME++) {
564 
565  string path(path_);
566  map<string, string> replacements;
567 
568  switch(obj){
569  case binning::kEB:
570  case binning::kEBMEM:
571  replacements["subdet"] = "EcalBarrel";
572  replacements["prefix"] = "EB";
573  replacements["suffix"] = "";
574  replacements["subdetshort"] = "EB";
575  replacements["subdetshortsig"] = "EB";
576  replacements["supercrystal"] = "trigger tower";
577  break;
578  case binning::kEE:
579  case binning::kEEMEM:
580  replacements["subdet"] = "EcalEndcap";
581  replacements["prefix"] = "EE";
582  replacements["subdetshort"] = "EE";
583  replacements["subdetshortsig"] = "EE";
584  replacements["supercrystal"] = "super crystal";
585  break;
586  case binning::kEEm:
587  replacements["subdet"] = "EcalEndcap";
588  replacements["prefix"] = "EE";
589  replacements["suffix"] = " EE -";
590  replacements["subdetshort"] = "EE";
591  replacements["subdetshortsig"] = "EEM";
592  replacements["supercrystal"] = "super crystal";
593  break;
594  case binning::kEEp:
595  replacements["subdet"] = "EcalEndcap";
596  replacements["prefix"] = "EE";
597  replacements["suffix"] = " EE +";
598  replacements["subdetshort"] = "EE";
599  replacements["subdetshortsig"] = "EEP";
600  replacements["supercrystal"] = "super crystal";
601  break;
602  case binning::kSM:
603  if(iME <= kEEmHigh || iME >= kEEpLow){
604  replacements["subdet"] = "EcalEndcap";
605  replacements["prefix"] = "EE";
606  replacements["supercrystal"] = "super crystal";
607  }
608  else{
609  replacements["subdet"] = "EcalBarrel";
610  replacements["prefix"] = "EB";
611  replacements["supercrystal"] = "trigger tower";
612  }
613  replacements["sm"] = binning::channelName(iME + 1);
614  break;
615  case binning::kEBSM:
616  replacements["subdet"] = "EcalBarrel";
617  replacements["prefix"] = "EB";
618  replacements["sm"] = binning::channelName(iME + kEBmLow + 1);
619  replacements["supercrystal"] = "trigger tower";
620  break;
621  case binning::kEESM:
622  replacements["subdet"] = "EcalEndcap";
623  replacements["prefix"] = "EE";
624  replacements["sm"] = binning::channelName(iME <= kEEmHigh ? iME + 1 : iME + 37);
625  replacements["supercrystal"] = "super crystal";
626  break;
627  case binning::kSMMEM:
628  {
629  unsigned iDCC(memDCCId(iME) - 1);
630  //dccId(unsigned) skips DCCs without MEM
631  if(iDCC <= kEEmHigh || iDCC >= kEEpLow){
632  replacements["subdet"] = "EcalEndcap";
633  replacements["prefix"] = "EE";
634  }
635  else{
636  replacements["subdet"] = "EcalBarrel";
637  replacements["prefix"] = "EB";
638  }
639  replacements["sm"] = binning::channelName(iDCC + 1);
640  }
641  break;
642  case binning::kEBSMMEM:
643  {
644  unsigned iDCC(memDCCId(iME + 4) - 1);
645  replacements["subdet"] = "EcalBarrel";
646  replacements["prefix"] = "EB";
647  replacements["sm"] = binning::channelName(iDCC + 1);
648  }
649  break;
650  case binning::kEESMMEM:
651  {
652  unsigned iDCC(memDCCId(iME < 4 ? iME : iME + 36) - 1);
653  replacements["subdet"] = "EcalEndcap";
654  replacements["prefix"] = "EE";
655  replacements["sm"] = binning::channelName(iDCC + 1);
656  }
657  default:
658  break;
659  }
660 
661  paths.push_back(formPath(replacements));
662  }
663 
664  return paths;
665  }
666 }
MonitorElement::Kind kind_
Definition: MESet.h:134
int i
Definition: DBlmapReader.cc:9
double getBinError(DetId const &, int) const override
Definition: MESetEcal.cc:446
MESet & operator=(MESet const &) override
Definition: MESetEcal.cc:39
virtual void clear() const
Definition: MESet.cc:93
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:157
void cd(void)
Definition: DQMStore.cc:266
virtual void checkME_(unsigned _iME) const
Definition: MESet.h:115
MonitorElement * get(const std::string &path)
Definition: DQMStore.cc:302
void fill(DetId const &, double=1., double=1., double=1.) override
Definition: MESetEcal.cc:268
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
unsigned getNObjects(ObjectType)
bool retrieve(DQMStore::IGetter &, std::string *=0) const override
Definition: MESetEcal.cc:239
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)
double getBinEntries(DetId const &, int) const override
Definition: MESetEcal.cc:479
ObjectType getObject(ObjectType, unsigned)
dictionary edges
MESet * clone(std::string const &="") const override
Definition: MESetEcal.cc:59
AxisSpecs getBinning(ObjectType, BinningType, bool, int, unsigned)
std::vector< MonitorElement * > mes_
Definition: MESet.h:129
bool isVariableBinning() const override
Definition: MESetEcal.cc:548
void setBinEntries(DetId const &, int, double) override
Definition: MESetEcal.cc:377
double getBinContent(DetId const &, int) const override
Definition: MESetEcal.cc:413
tuple path
else: Piece not in the list, fine.
void throw_(std::string const &_message) const
Definition: MESet.h:124
MonitorElement * bookProfile2D(Args &&...args)
Definition: DQMStore.h:163
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
TH1 * getTH1(void) const
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)
Definition: DetId.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
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:133
unsigned findPlotIndex(ObjectType, DetId const &)
virtual int findBin(DetId const &, double, double=0.) const
Definition: MESetEcal.cc:515
binning::AxisSpecs const * zaxis_
Definition: MESetEcal.h:70
bool active_
Definition: MESet.h:138
void setBinContent(DetId const &, int, double) override
Definition: MESetEcal.cc:311
binning::ObjectType otype_
Definition: MESet.h:132
binning::AxisSpecs const * xaxis_
Definition: MESetEcal.h:68
std::vector< std::string > generatePaths() const
Definition: MESetEcal.cc:554
MonitorElement * bookFloat(Args &&...args)
Definition: DQMStore.h:109
virtual MESet & operator=(MESet const &)
Definition: MESet.cc:70
void setBinError(DetId const &, int, double) override
Definition: MESetEcal.cc:344
void setLumiFlag(void)
this ME is meant to be stored for each luminosity section
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