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.empty()) 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.empty()){ // 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.empty()){ // 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  // The render plugin requires some metadata in order to set the correct rendering for each plot.
236  // The original solution was to use bits number 19 to 23 in TH1::fBits, but these were meant for ROOT's internal usage and eventually started breaking things, see: https://github.com/cms-sw/cmssw/issues/21423
237  // The current solution is to use the UniqueID field in the parent TObject, which is expected to work if there is no TRef pointing to the TObject.
238 
239  // To check that indeed there is no such TRef, one can use TestBit(kIsReferenced), e.g.
240  // std::cout << "Need to set unique ID at path = " << path << "; for this path, TestBit(kIsReferenced) is: " << (me->getTH1()->TestBit(kIsReferenced)? "true": "false") << std::endl; // should always output false for the solution to work
241 
242  // Originally, bit 19 in TH1::fBits was set to isMap, while bits 20-23 contained (actualObject+1).
243  // The idea is to make sure that both these variables are easily recoverable in the render plugin,
244  // as in this solution, where isMap is the last bit.
245  me->getTH1()->SetUniqueID(uint32_t(2*(actualObject + 1) + (isMap? 1: 0)));
246  }
247 
248  if(lumiFlag_) me->setLumiFlag();
249 
250  mes_.push_back(me);
251  }
252 
253  active_ = true;
254  }
255 
256  bool
257  MESetEcal::retrieve(DQMStore::IGetter& _igetter, std::string* _failedPath/* = 0*/) const
258  {
259  clear();
260 
261  std::vector<std::string> mePaths(generatePaths());
262  if(mePaths.empty()){
263  if(_failedPath) _failedPath->clear();
264  return false;
265  }
266 
267  for(unsigned iME(0); iME < mePaths.size(); iME++){
268  std::string& path(mePaths[iME]);
269  if(path.find('%') != std::string::npos)
270  throw_("retrieve() called with incompletely formed path [" + path + "]");
271 
272  MonitorElement* me(_igetter.get(path));
273  if(me) mes_.push_back(me);
274  else{
275  clear();
276  if(_failedPath) *_failedPath = path;
277  return false;
278  }
279  }
280 
281  active_ = true;
282  return true;
283  }
284 
285  void
286  MESetEcal::fill(DetId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
287  {
288  if(!active_) return;
289 
290  unsigned iME(binning::findPlotIndex(otype_, _id));
291  checkME_(iME);
292 
293  fill_(iME, _x, _wy, _w);
294  }
295 
296  void
297  MESetEcal::fill(EcalElectronicsId const& _id, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
298  {
299  if(!active_) return;
300 
301  unsigned iME(binning::findPlotIndex(otype_, _id));
302  checkME_(iME);
303 
304  fill_(iME, _x, _wy, _w);
305  }
306 
307  void
308  MESetEcal::fill(int _dcctccid, double _x/* = 1.*/, double _wy/* = 1.*/, double _w/* = 1.*/)
309  {
310  if(!active_) return;
311 
312  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
313  checkME_(iME);
314 
315  fill_(iME, _x, _wy, _w);
316  }
317 
318  void
319  MESetEcal::fill(double _x, double _wy/* = 1.*/, double _w/* = 1.*/)
320  {
321  if(!active_) return;
322 
323  if(mes_.size() != 1) return;
324 
325  fill_(0, _x, _wy, _w);
326  }
327 
328  void
329  MESetEcal::setBinContent(DetId const& _id, int _bin, double _content)
330  {
331  if(!active_) return;
332 
333  unsigned iME(binning::findPlotIndex(otype_, _id));
334  checkME_(iME);
335 
336  mes_[iME]->setBinContent(_bin, _content);
337  }
338 
339  void
341  {
342  if(!active_) return;
343 
344  unsigned iME(binning::findPlotIndex(otype_, _id));
345  checkME_(iME);
346 
347  mes_[iME]->setBinContent(_bin, _content);
348  }
349 
350  void
351  MESetEcal::setBinContent(int _dcctccid, int _bin, double _content)
352  {
353  if(!active_) return;
354 
355  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
356  checkME_(iME);
357 
358  mes_[iME]->setBinContent(_bin, _content);
359  }
360 
361  void
362  MESetEcal::setBinError(DetId const& _id, int _bin, double _error)
363  {
364  if(!active_) return;
365 
366  unsigned iME(binning::findPlotIndex(otype_, _id));
367  checkME_(iME);
368 
369  mes_[iME]->setBinError(_bin, _error);
370  }
371 
372  void
373  MESetEcal::setBinError(EcalElectronicsId const& _id, int _bin, double _error)
374  {
375  if(!active_) return;
376 
377  unsigned iME(binning::findPlotIndex(otype_, _id));
378  checkME_(iME);
379 
380  mes_[iME]->setBinError(_bin, _error);
381  }
382 
383  void
384  MESetEcal::setBinError(int _dcctccid, int _bin, double _error)
385  {
386  if(!active_) return;
387 
388  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
389  checkME_(iME);
390 
391  mes_[iME]->setBinError(_bin, _error);
392  }
393 
394  void
395  MESetEcal::setBinEntries(DetId 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(EcalElectronicsId const& _id, int _bin, double _entries)
408  {
409  if(!active_) return;
411 
412  unsigned iME(binning::findPlotIndex(otype_, _id));
413  checkME_(iME);
414 
415  mes_[iME]->setBinEntries(_bin, _entries);
416  }
417 
418  void
419  MESetEcal::setBinEntries(int _dcctccid, int _bin, double _entries)
420  {
421  if(!active_) return;
423 
424  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
425  checkME_(iME);
426 
427  mes_[iME]->setBinEntries(_bin, _entries);
428  }
429 
430  double
431  MESetEcal::getBinContent(DetId const& _id, int _bin) const
432  {
433  if(!active_) return 0.;
434 
435  unsigned iME(binning::findPlotIndex(otype_, _id));
436  checkME_(iME);
437 
438  return mes_[iME]->getBinContent(_bin);
439  }
440 
441  double
443  {
444  if(!active_) return 0.;
445 
446  unsigned iME(binning::findPlotIndex(otype_, _id));
447  checkME_(iME);
448 
449  return mes_[iME]->getBinContent(_bin);
450  }
451 
452  double
453  MESetEcal::getBinContent(int _dcctccid, int _bin) const
454  {
455  if(!active_) return 0.;
456 
457  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
458  checkME_(iME);
459 
460  return mes_[iME]->getBinContent(_bin);
461  }
462 
463  double
464  MESetEcal::getBinError(DetId const& _id, int _bin) const
465  {
466  if(!active_) return 0.;
467 
468  unsigned iME(binning::findPlotIndex(otype_, _id));
469  checkME_(iME);
470 
471  return mes_[iME]->getBinError(_bin);
472  }
473 
474  double
476  {
477  if(!active_) return 0.;
478 
479  unsigned iME(binning::findPlotIndex(otype_, _id));
480  checkME_(iME);
481 
482  return mes_[iME]->getBinError(_bin);
483  }
484 
485  double
486  MESetEcal::getBinError(int _dcctccid, int _bin) const
487  {
488  if(!active_) return 0.;
489 
490  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
491  checkME_(iME);
492 
493  return mes_[iME]->getBinError(_bin);
494  }
495 
496  double
497  MESetEcal::getBinEntries(DetId const& _id, int _bin) const
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
510  {
511  if(!active_) return 0.;
513 
514  unsigned iME(binning::findPlotIndex(otype_, _id));
515  checkME_(iME);
516 
517  return mes_[iME]->getBinEntries(_bin);
518  }
519 
520  double
521  MESetEcal::getBinEntries(int _dcctccid, int _bin) const
522  {
523  if(!active_) return 0.;
525 
526  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
527  checkME_(iME);
528 
529  return mes_[iME]->getBinEntries(_bin);
530  }
531 
532  int
533  MESetEcal::findBin(DetId const& _id, double _x, double _y/* = 0.*/) const
534  {
535  if(!active_) return -1;
536 
537  unsigned iME(binning::findPlotIndex(otype_, _id));
538  checkME_(iME);
539 
540  return mes_[iME]->getTH1()->FindBin(_x, _y);
541  }
542 
543  int
544  MESetEcal::findBin(EcalElectronicsId const& _id, double _x, double _y/* = 0.*/) const
545  {
546  if(!active_) return -1;
547 
548  unsigned iME(binning::findPlotIndex(otype_, _id));
549  checkME_(iME);
550 
551  return mes_[iME]->getTH1()->FindBin(_x, _y);
552  }
553 
554  int
555  MESetEcal::findBin(int _dcctccid, double _x, double _y/* = 0.*/) const
556  {
557  if(!active_) return -1;
558 
559  unsigned iME(binning::findPlotIndex(otype_, _dcctccid, btype_));
560  checkME_(iME);
561 
562  return mes_[iME]->getTH1()->FindBin(_x, _y);
563  }
564 
565  bool
567  {
568  return (xaxis_ && xaxis_->edges) || (yaxis_ && yaxis_->edges) || (zaxis_ && zaxis_->edges);
569  }
570 
571  std::vector<std::string>
573  {
574  using namespace std;
575 
576  vector<string> paths(0);
577 
578  unsigned nME(binning::getNObjects(otype_));
579 
580  for(unsigned iME(0); iME < nME; iME++) {
582 
583  string path(path_);
584  map<string, string> replacements;
585 
586  switch(obj){
587  case binning::kEB:
588  case binning::kEBMEM:
589  replacements["subdet"] = "EcalBarrel";
590  replacements["prefix"] = "EB";
591  replacements["suffix"] = "";
592  replacements["subdetshort"] = "EB";
593  replacements["subdetshortsig"] = "EB";
594  replacements["supercrystal"] = "trigger tower";
595  break;
596  case binning::kEE:
597  case binning::kEEMEM:
598  replacements["subdet"] = "EcalEndcap";
599  replacements["prefix"] = "EE";
600  replacements["subdetshort"] = "EE";
601  replacements["subdetshortsig"] = "EE";
602  replacements["supercrystal"] = "super crystal";
603  break;
604  case binning::kEEm:
605  replacements["subdet"] = "EcalEndcap";
606  replacements["prefix"] = "EE";
607  replacements["suffix"] = " EE -";
608  replacements["subdetshort"] = "EE";
609  replacements["subdetshortsig"] = "EEM";
610  replacements["supercrystal"] = "super crystal";
611  break;
612  case binning::kEEp:
613  replacements["subdet"] = "EcalEndcap";
614  replacements["prefix"] = "EE";
615  replacements["suffix"] = " EE +";
616  replacements["subdetshort"] = "EE";
617  replacements["subdetshortsig"] = "EEP";
618  replacements["supercrystal"] = "super crystal";
619  break;
620  case binning::kSM:
621  if(iME <= kEEmHigh || iME >= kEEpLow){
622  replacements["subdet"] = "EcalEndcap";
623  replacements["prefix"] = "EE";
624  replacements["supercrystal"] = "super crystal";
625  }
626  else{
627  replacements["subdet"] = "EcalBarrel";
628  replacements["prefix"] = "EB";
629  replacements["supercrystal"] = "trigger tower";
630  }
631  replacements["sm"] = binning::channelName(iME + 1);
632  break;
633  case binning::kEBSM:
634  replacements["subdet"] = "EcalBarrel";
635  replacements["prefix"] = "EB";
636  replacements["sm"] = binning::channelName(iME + kEBmLow + 1);
637  replacements["supercrystal"] = "trigger tower";
638  break;
639  case binning::kEESM:
640  replacements["subdet"] = "EcalEndcap";
641  replacements["prefix"] = "EE";
642  replacements["sm"] = binning::channelName(iME <= kEEmHigh ? iME + 1 : iME + 37);
643  replacements["supercrystal"] = "super crystal";
644  break;
645  case binning::kSMMEM:
646  {
647  unsigned iDCC(memDCCId(iME) - 1);
648  //dccId(unsigned) skips DCCs without MEM
649  if(iDCC <= kEEmHigh || iDCC >= kEEpLow){
650  replacements["subdet"] = "EcalEndcap";
651  replacements["prefix"] = "EE";
652  }
653  else{
654  replacements["subdet"] = "EcalBarrel";
655  replacements["prefix"] = "EB";
656  }
657  replacements["sm"] = binning::channelName(iDCC + 1);
658  }
659  break;
660  case binning::kEBSMMEM:
661  {
662  unsigned iDCC(memDCCId(iME + 4) - 1);
663  replacements["subdet"] = "EcalBarrel";
664  replacements["prefix"] = "EB";
665  replacements["sm"] = binning::channelName(iDCC + 1);
666  }
667  break;
668  case binning::kEESMMEM:
669  {
670  unsigned iDCC(memDCCId(iME < 4 ? iME : iME + 36) - 1);
671  replacements["subdet"] = "EcalEndcap";
672  replacements["prefix"] = "EE";
673  replacements["sm"] = binning::channelName(iDCC + 1);
674  }
675  default:
676  break;
677  }
678 
679  paths.push_back(formPath(replacements));
680  }
681 
682  return paths;
683  }
684 }
MonitorElement::Kind kind_
Definition: MESet.h:134
double getBinError(DetId const &, int) const override
Definition: MESetEcal.cc:464
double getBinContent(DetId const &, int) const override
Definition: MESetEcal.cc:431
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:302
void fill(DetId const &, double=1., double=1., double=1.) override
Definition: MESetEcal.cc:286
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
TH1 * getTH1() const
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:395
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:566
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:497
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:136
unsigned findPlotIndex(ObjectType, DetId const &)
virtual int findBin(DetId const &, double, double=0.) const
Definition: MESetEcal.cc:533
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:257
void setBinContent(DetId const &, int, double) override
Definition: MESetEcal.cc:329
binning::ObjectType otype_
Definition: MESet.h:132
binning::AxisSpecs const * xaxis_
Definition: MESetEcal.h:68
std::vector< std::string > generatePaths() const
Definition: MESetEcal.cc:572
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:362
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