CMS 3D CMS Logo

MESet.h
Go to the documentation of this file.
1 #ifndef MESet_H
2 #define MESet_H
3 
5 
7 
10 
12 
13 #include <string>
14 #include <vector>
15 
16 #include "boost/ptr_container/ptr_map.hpp"
17 
18 namespace ecaldqm {
19  /*
20  class MESet
21  Base class for MonitorElement wrappers
22  Interface between ME bins and DetId
23 */
24 
25  class StatusManager;
26 
27  class MESet {
28  public:
31  typedef std::map<std::string, std::string> PathReplacements;
32 
33  MESet();
35  MESet(MESet const &);
36  virtual ~MESet();
37 
38  virtual MESet &operator=(MESet const &);
39 
40  virtual MESet *clone(std::string const & = "") const;
41 
42  virtual void book(DQMStore::IBooker &) {}
43  virtual bool retrieve(DQMStore::IGetter &, std::string * = nullptr) const { return false; }
44  virtual void clear() const;
45 
46  virtual void fill(DetId const &, double = 1., double = 1., double = 1.) {}
47  virtual void fill(EcalElectronicsId const &, double = 1., double = 1., double = 1.) {}
48  virtual void fill(int, double = 1., double = 1., double = 1.) {}
49  virtual void fill(double, double = 1., double = 1.) {}
50 
51  virtual void setBinContent(DetId const &, double) {}
52  virtual void setBinContent(EcalElectronicsId const &, double) {}
53  virtual void setBinContent(int, double) {}
54  virtual void setBinContent(DetId const &, int, double) {}
55  virtual void setBinContent(EcalElectronicsId const &, int, double) {}
56  virtual void setBinContent(int, int, double) {}
57 
58  virtual void setBinError(DetId const &, double) {}
59  virtual void setBinError(EcalElectronicsId const &, double) {}
60  virtual void setBinError(int, double) {}
61  virtual void setBinError(DetId const &, int, double) {}
62  virtual void setBinError(EcalElectronicsId const &, int, double) {}
63  virtual void setBinError(int, int, double) {}
64 
65  virtual void setBinEntries(DetId const &, double) {}
66  virtual void setBinEntries(EcalElectronicsId const &, double) {}
67  virtual void setBinEntries(int, double) {}
68  virtual void setBinEntries(DetId const &, int, double) {}
69  virtual void setBinEntries(EcalElectronicsId const &, int, double) {}
70  virtual void setBinEntries(int, int, double) {}
71 
72  virtual double getBinContent(DetId const &, int = 0) const { return 0.; }
73  virtual double getBinContent(EcalElectronicsId const &, int = 0) const { return 0.; }
74  virtual double getBinContent(int, int = 0) const { return 0.; }
75 
76  virtual double getBinError(DetId const &, int = 0) const { return 0.; }
77  virtual double getBinError(EcalElectronicsId const &, int = 0) const { return 0.; }
78  virtual double getBinError(int, int = 0) const { return 0.; }
79 
80  virtual double getBinEntries(DetId const &, int = 0) const { return 0.; }
81  virtual double getBinEntries(EcalElectronicsId const &, int = 0) const { return 0.; }
82  virtual double getBinEntries(int, int = 0) const { return 0.; }
83 
84  // title, axis
85  virtual void setAxisTitle(std::string const &, int = 1);
86 
87  virtual void reset(double = 0., double = 0., double = 0.);
88  virtual void resetAll(double = 0., double = 0., double = 0.);
89 
90  virtual bool maskMatches(DetId const &, uint32_t, StatusManager const *) const;
91 
92  virtual std::string const &getPath() const { return path_; }
95  MonitorElement::Kind getKind() const { return kind_; }
96  bool isActive() const { return active_; } // booked or retrieved
97  virtual bool isVariableBinning() const { return false; }
98  virtual MonitorElement const *getME(unsigned _iME) const { return (_iME < mes_.size() ? mes_[_iME] : nullptr); }
99  virtual MonitorElement *getME(unsigned _iME) { return (_iME < mes_.size() ? mes_[_iME] : nullptr); }
100 
101  std::string formPath(PathReplacements const &) const;
102 
103  void setLumiFlag() { lumiFlag_ = true; };
104  bool getLumiFlag() const { return lumiFlag_; }
105  void setBatchMode() { batchMode_ = true; }
106  bool getBatchMode() const { return batchMode_; }
107 
108  protected:
109  virtual void fill_(unsigned, int, double);
110  virtual void fill_(unsigned, int, double, double);
111  virtual void fill_(unsigned, double, double, double);
112 
113  virtual void checkME_(unsigned _iME) const {
114  if (!getME(_iME)) {
115  std::stringstream ss;
116  ss << "ME does not exist at index " << _iME;
117  throw_(ss.str());
118  }
119  }
120 
121  void throw_(std::string const &_message) const { throw cms::Exception("EcalDQM") << path_ << ": " << _message; }
122 
123  mutable std::vector<MonitorElement *> mes_;
124 
129  bool lumiFlag_; // when true, histograms will be saved every lumi section
130  // (default false)
131  bool batchMode_; // when true, histograms are not GUI-ready (default false)
132 
133  mutable bool active_;
134 
135  public:
136  struct ConstBin {
137  protected:
138  MESet const *meSet_;
139 
140  public:
141  unsigned iME;
142  int iBin;
144 
145  ConstBin() : meSet_(nullptr), iME(-1), iBin(-1), otype(binning::nObjType) {}
146  ConstBin(MESet const &, unsigned = 0, int = 1);
147  ConstBin(ConstBin const &_orig) : meSet_(_orig.meSet_), iME(_orig.iME), iBin(_orig.iBin), otype(_orig.otype) {}
148  ConstBin &operator=(ConstBin const &);
149  bool operator==(ConstBin const &_rhs) const {
150  return meSet_ != nullptr && meSet_ == _rhs.meSet_ && iME == _rhs.iME && iBin == _rhs.iBin;
151  }
152  bool isChannel() const {
153  if (meSet_)
154  return binning::isValidIdBin(otype, meSet_->getBinType(), iME, iBin);
155  else
156  return false;
157  }
158  uint32_t getId() const {
159  if (meSet_)
160  return binning::idFromBin(otype, meSet_->getBinType(), iME, iBin);
161  else
162  return 0;
163  }
164  double getBinContent() const {
165  if (meSet_ && iME != unsigned(-1))
166  return meSet_->getME(iME)->getBinContent(iBin);
167  else
168  return 0.;
169  }
170  double getBinError() const {
171  if (meSet_ && iME != unsigned(-1))
172  return meSet_->getME(iME)->getBinError(iBin);
173  else
174  return 0.;
175  }
176  double getBinEntries() const {
177  if (meSet_ && iME != unsigned(-1))
178  return meSet_->getME(iME)->getBinEntries(iBin);
179  else
180  return 0.;
181  }
182  MonitorElement const *getME() const {
183  if (meSet_ && iME != unsigned(-1))
184  return meSet_->getME(iME);
185  else
186  return nullptr;
187  }
188  void setMESet(MESet const &_meSet) { meSet_ = &_meSet; }
189  MESet const *getMESet() const { return meSet_; }
190  };
191 
192  struct Bin : public ConstBin {
193  protected:
195 
196  public:
197  Bin() : ConstBin(), meSet_(nullptr) {}
198  Bin(MESet &_set, unsigned _iME = 0, int _iBin = 1) : ConstBin(_set, _iME, _iBin), meSet_(&_set) {}
199  Bin(Bin const &_orig) : ConstBin(_orig), meSet_(_orig.meSet_) {}
200  ConstBin &operator=(Bin const &_rhs) {
201  bool wasNull(ConstBin::meSet_ == nullptr);
202  ConstBin::operator=(_rhs);
203  if (wasNull)
204  meSet_ = _rhs.meSet_;
205  return *this;
206  }
207  void fill(double _w = 1.) {
208  if (meSet_)
209  meSet_->fill_(iME, iBin, _w);
210  }
211  void fill(double _y, double _w = 1.) {
212  if (meSet_)
213  meSet_->fill_(iME, iBin, _y, _w);
214  }
215  void setBinContent(double _content) {
216  if (meSet_ && iME != unsigned(-1))
217  meSet_->getME(iME)->setBinContent(iBin, _content);
218  }
219  void setBinError(double _error) {
220  if (meSet_ && iME != unsigned(-1))
221  meSet_->getME(iME)->setBinError(iBin, _error);
222  }
223  void setBinEntries(double _entries) {
224  if (meSet_ && iME != unsigned(-1))
225  meSet_->getME(iME)->setBinEntries(iBin, _entries);
226  }
227  MonitorElement *getME() const {
228  if (meSet_ && iME != unsigned(-1))
229  return meSet_->getME(iME);
230  else
231  return nullptr;
232  }
233  void setMESet(MESet &_meSet) {
234  ConstBin::meSet_ = &_meSet;
235  meSet_ = &_meSet;
236  }
237  MESet *getMESet() const { return meSet_; }
238  };
239 
240  /* const_iterator
241  iterates over bins
242  supports automatic transition between MEs in the same set
243  underflow -> bin == 0 overflow -> bin == -1
244  */
245  struct const_iterator {
246  const_iterator() : bin_() {}
247  const_iterator(MESet const &_meSet, unsigned _iME = 0, int _iBin = 1) : bin_(_meSet, _iME, _iBin) {}
248  const_iterator(MESet const &, DetId const &);
249  const_iterator(const_iterator const &_orig) : bin_(_orig.bin_) {}
251  bin_ = _rhs.bin_;
252  return *this;
253  }
254  bool operator==(const_iterator const &_rhs) const { return bin_ == _rhs.bin_; }
255  bool operator!=(const_iterator const &_rhs) const { return !(bin_ == _rhs.bin_); }
256  ConstBin const *operator->() const { return &bin_; }
257  const_iterator &operator++();
258  const_iterator &toNextChannel();
259  bool up();
260  bool down();
261  bool left();
262  bool right();
263 
264  protected:
266  };
267 
268  struct iterator : public const_iterator {
269  iterator() : const_iterator(), bin_() {}
270  iterator(MESet &_meSet, unsigned _iME = 0, int _iBin = 1) : const_iterator(_meSet, _iME, _iBin), bin_(_meSet) {
271  bin_.ConstBin::operator=(const_iterator::bin_);
272  }
273  iterator(MESet &_meSet, DetId const &_id) : const_iterator(_meSet, _id), bin_(_meSet) {
274  bin_.ConstBin::operator=(const_iterator::bin_);
275  }
276  iterator(iterator const &_orig) : const_iterator(_orig), bin_(_orig.bin_) {}
279  bin_.ConstBin::operator=(const_iterator::bin_);
280  return *this;
281  }
282  Bin *operator->() { return &bin_; }
283  Bin const *operator->() const { return &bin_; }
286  bin_.ConstBin::operator=(const_iterator::bin_);
287  return *this;
288  }
291  bin_.ConstBin::operator=(const_iterator::bin_);
292  return *this;
293  }
294  bool up() {
295  bool res(const_iterator::up());
296  bin_.ConstBin::operator=(const_iterator::bin_);
297  return res;
298  }
299  bool down() {
300  bool res(const_iterator::down());
301  bin_.ConstBin::operator=(const_iterator::bin_);
302  return res;
303  }
304  bool left() {
305  bool res(const_iterator::left());
306  bin_.ConstBin::operator=(const_iterator::bin_);
307  return res;
308  }
309  bool right() {
310  bool res(const_iterator::right());
311  bin_.ConstBin::operator=(const_iterator::bin_);
312  return res;
313  }
314 
315  private:
317  };
318 
319  virtual const_iterator begin() const { return const_iterator(*this); }
320 
321  virtual const_iterator end() const { return const_iterator(*this, -1, -1); }
322 
323  virtual const_iterator beginChannel() const {
324  const_iterator itr(*this, 0, 0);
325  return itr.toNextChannel();
326  }
327 
328  virtual iterator begin() { return iterator(*this); }
329 
330  virtual iterator end() { return iterator(*this, -1, -1); }
331 
332  virtual iterator beginChannel() {
333  iterator itr(*this, 0, 0);
334  itr.toNextChannel();
335  return itr;
336  }
337  };
338 
339 } // namespace ecaldqm
340 
341 namespace boost {
342  template <>
343  inline ecaldqm::MESet *new_clone<ecaldqm::MESet>(ecaldqm::MESet const &);
344  template <>
345  void delete_clone<ecaldqm::MESet>(ecaldqm::MESet const *);
346 } // namespace boost
347 
348 namespace ecaldqm {
349  typedef boost::ptr_map<std::string, MESet> MESetCollection;
350 }
351 
352 #endif
virtual std::string const & getPath() const
Definition: MESet.h:92
Definition: BitonicSort.h:7
MonitorElement::Kind kind_
Definition: MESet.h:128
iterator(MESet &_meSet, unsigned _iME=0, int _iBin=1)
Definition: MESet.h:270
const_iterator & operator=(const_iterator const &_rhs)
Definition: MESet.h:250
virtual MonitorElement const * getME(unsigned _iME) const
Definition: MESet.h:98
MonitorElement::Kind getKind() const
Definition: MESet.h:95
virtual void setBinEntries(int, int, double)
Definition: MESet.h:70
virtual void setAxisTitle(std::string const &, int=1)
Definition: MESet.cc:89
const_iterator & operator++()
Definition: MESet.cc:354
virtual void book(DQMStore::IBooker &)
Definition: MESet.h:42
virtual void setBinEntries(EcalElectronicsId const &, double)
Definition: MESet.h:66
Definition: CLHEP.h:16
virtual iterator end()
Definition: MESet.h:330
dqm::legacy::DQMStore DQMStore
Definition: MESet.h:29
iterator & operator=(const_iterator const &_rhs)
Definition: MESet.h:277
virtual void clear() const
Definition: MESet.cc:84
const_iterator(MESet const &_meSet, unsigned _iME=0, int _iBin=1)
Definition: MESet.h:247
virtual double getBinError(DetId const &, int=0) const
Definition: MESet.h:76
bool operator==(const_iterator const &_rhs) const
Definition: MESet.h:254
bool isChannel() const
Definition: MESet.h:152
virtual void checkME_(unsigned _iME) const
Definition: MESet.h:113
bool isValidIdBin(ObjectType, BinningType, unsigned, int)
Ecal readout channel identification [32:20] Unused (so far) [19:13] DCC id [12:6] tower [5:3] strip [...
void fill(double _y, double _w=1.)
Definition: MESet.h:211
dqm::legacy::MonitorElement MonitorElement
Definition: MESet.h:30
virtual void setBinEntries(int, double)
Definition: MESet.h:67
iterator(iterator const &_orig)
Definition: MESet.h:276
#define nullptr
MESet const * meSet_
Definition: MESet.h:138
double getBinEntries() const
Definition: MESet.h:176
binning::ObjectType otype
Definition: MESet.h:143
MonitorElement const * getME() const
Definition: MESet.h:182
virtual double getBinError(int binx) const
get uncertainty on content of bin (1-D) - See TH1::GetBinError for details
virtual MESet * clone(std::string const &="") const
Definition: MESet.cc:75
virtual void setBinEntries(DetId const &, double)
Definition: MESet.h:65
virtual iterator begin()
Definition: MESet.h:328
bool batchMode_
Definition: MESet.h:131
virtual iterator beginChannel()
Definition: MESet.h:332
virtual double getBinError(EcalElectronicsId const &, int=0) const
Definition: MESet.h:77
virtual void setBinContent(DetId const &, int, double)
Definition: MESet.h:54
const_iterator & toNextChannel()
Definition: MESet.h:289
virtual void setBinContent(DetId const &, double)
Definition: MESet.h:51
virtual bool maskMatches(DetId const &, uint32_t, StatusManager const *) const
Definition: MESet.cc:167
MonitorElement * getME() const
Definition: MESet.h:227
virtual double getBinEntries(int, int=0) const
Definition: MESet.h:82
Definition: Electron.h:6
virtual const_iterator begin() const
Definition: MESet.h:319
virtual ~MESet()
Definition: MESet.cc:62
virtual void fill(int, double=1., double=1., double=1.)
Definition: MESet.h:48
virtual double getBinContent(int, int=0) const
Definition: MESet.h:74
void setMESet(MESet &_meSet)
Definition: MESet.h:233
virtual void setBinError(EcalElectronicsId const &, int, double)
Definition: MESet.h:62
virtual void setBinError(DetId const &, double)
Definition: MESet.h:58
virtual void setBinContent(int, double)
Definition: MESet.h:53
virtual void setBinError(DetId const &, int, double)
Definition: MESet.h:61
virtual double getBinContent(DetId const &, int=0) const
Definition: MESet.h:72
binning::ObjectType getObjType() const
Definition: MESet.h:93
void throw_(std::string const &_message) const
Definition: MESet.h:121
virtual double getBinError(int, int=0) const
Definition: MESet.h:78
ConstBin(ConstBin const &_orig)
Definition: MESet.h:147
virtual void fill(EcalElectronicsId const &, double=1., double=1., double=1.)
Definition: MESet.h:47
Bin const * operator->() const
Definition: MESet.h:283
double getBinError() const
Definition: MESet.h:170
MESet * getMESet() const
Definition: MESet.h:237
virtual const_iterator beginChannel() const
Definition: MESet.h:323
virtual void reset(double=0., double=0., double=0.)
Definition: MESet.cc:98
Bin(Bin const &_orig)
Definition: MESet.h:199
virtual void setBinError(int, double)
Definition: MESet.h:60
iterator(MESet &_meSet, DetId const &_id)
Definition: MESet.h:273
virtual bool isVariableBinning() const
Definition: MESet.h:97
bool operator!=(const_iterator const &_rhs) const
Definition: MESet.h:255
virtual void setBinContent(EcalElectronicsId const &, int, double)
Definition: MESet.h:55
bool lumiFlag_
Definition: MESet.h:129
virtual double getBinContent(int binx) const
get content of bin (1-D)
boost::ptr_map< std::string, MESet > MESetCollection
Definition: MESet.h:349
ConstBin & operator=(ConstBin const &)
Definition: MESet.cc:323
void fill(double _w=1.)
Definition: MESet.h:207
virtual void fill_(unsigned, int, double)
Definition: MESet.cc:246
std::string formPath(PathReplacements const &) const
Definition: MESet.cc:150
const_iterator(const_iterator const &_orig)
Definition: MESet.h:249
void setBatchMode()
Definition: MESet.h:105
Definition: DetId.h:17
MESet const * getMESet() const
Definition: MESet.h:189
void setLumiFlag()
Definition: MESet.h:103
MESet * meSet_
Definition: MESet.h:194
bool getBatchMode() const
Definition: MESet.h:106
ConstBin & operator=(Bin const &_rhs)
Definition: MESet.h:200
virtual void setBinEntries(int bin, double nentries)
set # of bin entries (to be used for profiles)
bool isActive() const
Definition: MESet.h:96
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
virtual MonitorElement * getME(unsigned _iME)
Definition: MESet.h:99
bool getLumiFlag() const
Definition: MESet.h:104
virtual void fill(DetId const &, double=1., double=1., double=1.)
Definition: MESet.h:46
Bin(MESet &_set, unsigned _iME=0, int _iBin=1)
Definition: MESet.h:198
binning::BinningType getBinType() const
Definition: MESet.h:94
virtual void resetAll(double=0., double=0., double=0.)
Definition: MESet.cc:105
double getBinContent() const
Definition: MESet.h:164
virtual double getBinEntries(int bin) const
get # of bin entries (for profiles)
virtual bool retrieve(DQMStore::IGetter &, std::string *=0) const
Definition: MESet.h:43
bool active_
Definition: MESet.h:133
virtual double getBinContent(EcalElectronicsId const &, int=0) const
Definition: MESet.h:73
virtual void setBinContent(int, int, double)
Definition: MESet.h:56
virtual void setBinEntries(EcalElectronicsId const &, int, double)
Definition: MESet.h:69
virtual void setBinError(EcalElectronicsId const &, double)
Definition: MESet.h:59
virtual double getBinEntries(DetId const &, int=0) const
Definition: MESet.h:80
virtual double getBinEntries(EcalElectronicsId const &, int=0) const
Definition: MESet.h:81
ConstBin const * operator->() const
Definition: MESet.h:256
virtual void setBinError(int, int, double)
Definition: MESet.h:63
uint32_t getId() const
Definition: MESet.h:158
void setMESet(MESet const &_meSet)
Definition: MESet.h:188
binning::ObjectType otype_
Definition: MESet.h:126
void setBinContent(double _content)
Definition: MESet.h:215
virtual const_iterator end() const
Definition: MESet.h:321
const_iterator & toNextChannel()
Definition: MESet.cc:404
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
void setBinEntries(double _entries)
Definition: MESet.h:223
virtual MESet & operator=(MESet const &)
Definition: MESet.cc:64
binning::BinningType btype_
Definition: MESet.h:127
void setBinError(double _error)
Definition: MESet.h:219
std::map< std::string, std::string > PathReplacements
Definition: MESet.h:31
bool operator==(ConstBin const &_rhs) const
Definition: MESet.h:149
std::string path_
Definition: MESet.h:125
virtual void setBinContent(EcalElectronicsId const &, double)
Definition: MESet.h:52
const_iterator & operator++()
Definition: MESet.h:284
virtual void setBinEntries(DetId const &, int, double)
Definition: MESet.h:68
std::vector< MonitorElement * > mes_
Definition: MESet.h:123
virtual void fill(double, double=1., double=1.)
Definition: MESet.h:49
uint32_t idFromBin(ObjectType, BinningType, unsigned, int)