CMS 3D CMS Logo

MESetNonObject.cc
Go to the documentation of this file.
2 
3 namespace ecaldqm {
5  binning::ObjectType _otype,
8  binning::AxisSpecs const *_xaxis /* = 0*/,
9  binning::AxisSpecs const *_yaxis /* = 0*/,
10  binning::AxisSpecs const *_zaxis /* = 0*/)
11  : MESet(_fullPath, _otype, _btype, _kind),
12  xaxis_(_xaxis ? new binning::AxisSpecs(*_xaxis) : nullptr),
13  yaxis_(_yaxis ? new binning::AxisSpecs(*_yaxis) : nullptr),
14  zaxis_(_zaxis ? new binning::AxisSpecs(*_zaxis) : nullptr) {}
15 
17  : MESet(_orig),
18  xaxis_(_orig.xaxis_ ? new binning::AxisSpecs(*_orig.xaxis_) : nullptr),
19  yaxis_(_orig.yaxis_ ? new binning::AxisSpecs(*_orig.yaxis_) : nullptr),
20  zaxis_(_orig.zaxis_ ? new binning::AxisSpecs(*_orig.zaxis_) : nullptr) {}
21 
23  delete xaxis_;
24  delete yaxis_;
25  delete zaxis_;
26  }
27 
29  delete xaxis_;
30  delete yaxis_;
31  delete zaxis_;
32  xaxis_ = nullptr;
33  yaxis_ = nullptr;
34  zaxis_ = nullptr;
35 
36  MESetNonObject const *pRhs(dynamic_cast<MESetNonObject const *>(&_rhs));
37  if (pRhs) {
38  if (pRhs->xaxis_)
39  xaxis_ = new binning::AxisSpecs(*pRhs->xaxis_);
40  if (pRhs->yaxis_)
41  yaxis_ = new binning::AxisSpecs(*pRhs->yaxis_);
42  if (pRhs->zaxis_)
43  zaxis_ = new binning::AxisSpecs(*pRhs->zaxis_);
44  }
45  return MESet::operator=(_rhs);
46  }
47 
48  MESet *MESetNonObject::clone(std::string const &_path /* = ""*/) const {
50  if (!_path.empty())
51  path_ = _path;
52  MESet *copy(new MESetNonObject(*this));
53  path_ = path;
54  return copy;
55  }
56 
57  void MESetNonObject::book(DQMStore::IBooker &_ibooker, EcalElectronicsMapping const *electronicsMap) {
58  using namespace std;
59 
60  clear();
61 
62  if (path_.find('%') != string::npos)
63  throw_("book() called with incompletely formed path");
64 
65  size_t slashPos(path_.find_last_of('/'));
66  string name(path_.substr(slashPos + 1));
67  _ibooker.setCurrentFolder(path_.substr(0, slashPos));
68  auto oldscope = MonitorElementData::Scope::RUN;
69  if (lumiFlag_)
70  oldscope = _ibooker.setScope(MonitorElementData::Scope::LUMI);
71 
72  MonitorElement *me(nullptr);
73 
74  switch (kind_) {
76  me = _ibooker.bookFloat(name);
77  break;
78 
80  if (!xaxis_)
81  throw_("No xaxis found for MESetNonObject");
82 
83  if (xaxis_->edges.empty())
84  me = _ibooker.book1D(name, name, xaxis_->nbins, xaxis_->low, xaxis_->high);
85  else
86  me = _ibooker.book1D(name, name, xaxis_->nbins, &(xaxis_->edges[0]));
87  } break;
88 
90  if (!xaxis_)
91  throw_("No xaxis found for MESetNonObject");
92 
93  double ylow, yhigh;
94  if (!yaxis_) {
97  } else {
98  ylow = yaxis_->low;
99  yhigh = yaxis_->high;
100  }
101  if (xaxis_->edges.empty()) {
102  me = _ibooker.bookProfile(name, name, xaxis_->nbins, xaxis_->low, xaxis_->high, ylow, yhigh, "");
103  } else {
104  // DQMStore bookProfile interface uses double* for bin edges
105  double *edges(new double[xaxis_->nbins + 1]);
106  std::copy(xaxis_->edges.begin(), xaxis_->edges.end(), edges);
107  me = _ibooker.bookProfile(name, name, xaxis_->nbins, edges, ylow, yhigh, "");
108  delete[] edges;
109  }
110  } break;
111 
113  if (!xaxis_ || !yaxis_)
114  throw_("No x/yaxis found for MESetNonObject");
115 
116  if (xaxis_->edges.empty() && yaxis_->edges.empty()) // unlike MESetEcal, if either of X or Y is not set as
117  // variable, binning will be fixed
118  me = _ibooker.book2D(
120  else
121  me = _ibooker.book2D(name, name, xaxis_->nbins, &(xaxis_->edges[0]), yaxis_->nbins, &(yaxis_->edges[0]));
122  } break;
123 
125  if (!xaxis_ || !yaxis_)
126  throw_("No x/yaxis found for MESetNonObject");
127  if (!(xaxis_->edges.empty() && yaxis_->edges.empty()))
128  throw_("Variable bin size for 2D profile not implemented");
129 
130  double high(0.), low(0.);
131  if (zaxis_) {
132  low = zaxis_->low;
133  high = zaxis_->high;
134  } else {
137  }
138 
139  me = _ibooker.bookProfile2D(name,
140  name,
141  xaxis_->nbins,
142  xaxis_->low,
143  xaxis_->high,
144  yaxis_->nbins,
145  yaxis_->low,
146  yaxis_->high,
147  low,
148  high,
149  "");
150  } break;
151 
152  default:
153  throw_("Unsupported MonitorElement kind");
154  }
155 
156  if (xaxis_) {
157  me->setAxisTitle(xaxis_->title, 1);
158  if (!xaxis_->labels.empty()) {
159  for (int iBin(1); iBin <= xaxis_->nbins; ++iBin)
160  me->setBinLabel(iBin, xaxis_->labels[iBin - 1], 1);
161  }
162  }
163  if (yaxis_) {
164  me->setAxisTitle(yaxis_->title, 2);
165  if (!yaxis_->labels.empty()) {
166  for (int iBin(1); iBin <= yaxis_->nbins; ++iBin)
167  me->setBinLabel(iBin, yaxis_->labels[iBin - 1], 2);
168  }
169  }
170  if (zaxis_) {
171  me->setAxisTitle(zaxis_->title, 3);
172  if (!zaxis_->labels.empty()) {
173  for (int iBin(1); iBin <= zaxis_->nbins; ++iBin)
174  me->setBinLabel(iBin, zaxis_->labels[iBin - 1], 3);
175  }
176  }
177 
178  if (lumiFlag_)
179  _ibooker.setScope(oldscope);
180 
181  mes_.push_back(me);
182 
183  active_ = true;
184  }
185 
187  DQMStore::IGetter &_igetter,
188  std::string *_failedPath /* = 0*/) const {
189  mes_.clear();
190 
191  MonitorElement *me(_igetter.get(path_));
192  if (!me) {
193  if (_failedPath)
194  *_failedPath = path_;
195  return false;
196  }
197 
198  mes_.push_back(me);
199 
200  active_ = true;
201  return true;
202  }
203 
204  void MESetNonObject::fill(EcalDQMSetupObjects const edso, double _x, double _wy /* = 1.*/, double _w /* = 1.*/) {
205  if (!active_)
206  return;
207 
208  if (mes_.empty() || !mes_[0])
209  return;
210 
211  switch (kind_) {
213  mes_[0]->Fill(_x);
214  break;
217  mes_[0]->Fill(_x, _wy);
218  break;
221  mes_[0]->Fill(_x, _wy, _w);
222  break;
223  default:
224  break;
225  }
226  }
227 
228  void MESetNonObject::setBinContent(EcalDQMSetupObjects const edso, int _bin, double _content) {
229  if (!active_)
230  return;
232  return;
233 
234  if (mes_.empty() || !mes_[0])
235  return;
236 
237  mes_[0]->setBinContent(_bin, _content);
238  }
239 
240  void MESetNonObject::setBinError(EcalDQMSetupObjects const edso, int _bin, double _error) {
241  if (!active_)
242  return;
244  return;
245 
246  if (mes_.empty() || !mes_[0])
247  return;
248 
249  mes_[0]->setBinError(_bin, _error);
250  }
251 
252  void MESetNonObject::setBinEntries(EcalDQMSetupObjects const edso, int _bin, double _entries) {
253  if (!active_)
254  return;
256  return;
257 
258  if (mes_.empty() || !mes_[0])
259  return;
260 
261  mes_[0]->setBinEntries(_bin, _entries);
262  }
263 
264  double MESetNonObject::getBinContent(EcalDQMSetupObjects const edso, int _bin, int) const {
265  if (!active_)
266  return 0.;
268  return 0.;
269 
270  if (mes_.empty() || !mes_[0])
271  return 0.;
272 
273  return mes_[0]->getBinContent(_bin);
274  }
275 
278  return mes_[0]->getFloatValue();
279  else
280  return 0.;
281  }
282 
283  double MESetNonObject::getBinError(EcalDQMSetupObjects const edso, int _bin, int) const {
284  if (!active_)
285  return 0.;
287  return 0.;
288 
289  if (mes_.empty() || !mes_[0])
290  return 0.;
291 
292  return mes_[0]->getBinError(_bin);
293  }
294 
295  double MESetNonObject::getBinEntries(EcalDQMSetupObjects const edso, int _bin, int) const {
296  if (!active_)
297  return 0.;
299  return 0.;
300 
301  if (mes_.empty() || !mes_[0])
302  return 0.;
303 
304  return mes_[0]->getBinEntries(_bin);
305  }
306 
307  int MESetNonObject::findBin(EcalDQMSetupObjects const edso, double _x, double _y /* = 0.*/) const {
308  if (!active_)
309  return 0;
310 
311  if (mes_.empty() || !mes_[0])
312  return 0;
313 
315  return mes_[0]->getTH1()->FindBin(_x);
317  return mes_[0]->getTH1()->FindBin(_x, _y);
318  else
319  return 0;
320  }
321 
323  return (xaxis_ && (!xaxis_->edges.empty())) || (yaxis_ && (!yaxis_->edges.empty())) ||
324  (zaxis_ && (!zaxis_->edges.empty()));
325  }
326 } // namespace ecaldqm
binning::AxisSpecs const * zaxis_
MonitorElement::Kind kind_
Definition: MESet.h:156
MESet & operator=(MESet const &) override
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
int findBin(EcalDQMSetupObjects const, double, double=0.) const
MonitorElement * bookProfile2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, double lowZ, double highZ, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:485
double getBinContent(EcalDQMSetupObjects const, int, int=0) const override
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
void fill(EcalDQMSetupObjects const, double, double=1., double=1.) override
binning::AxisSpecs const * xaxis_
void setBinEntries(EcalDQMSetupObjects const, int, double) override
virtual MonitorElementData::Scope setScope(MonitorElementData::Scope newscope)
Definition: DQMStore.cc:50
void throw_(std::string const &_message) const
Definition: MESet.h:149
binning::AxisSpecs const * yaxis_
std::vector< float > edges
double getFloatValue() const
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:408
double getBinError(EcalDQMSetupObjects const, int, int=0) const override
double getBinEntries(EcalDQMSetupObjects const, int, int=0) const override
void book(DQMStore::IBooker &, EcalElectronicsMapping const *) override
bool lumiFlag_
Definition: MESet.h:157
MESetNonObject(std::string const &, binning::ObjectType, binning::BinningType, MonitorElement::Kind, binning::AxisSpecs const *=nullptr, binning::AxisSpecs const *=nullptr, binning::AxisSpecs const *=nullptr)
void setBinError(EcalDQMSetupObjects const, int, double) override
bool retrieve(EcalElectronicsMapping const *, DQMStore::IGetter &, std::string *=nullptr) const override
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:221
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:712
bool active_
Definition: MESet.h:161
void setBinContent(EcalDQMSetupObjects const, int, double) override
virtual MESet & operator=(MESet const &)
Definition: MESet.cc:64
MESet * clone(std::string const &="") const override
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
std::string path_
Definition: MESet.h:153
virtual void clear() const
Definition: MESet.cc:84
bool isVariableBinning() const override
std::vector< std::string > labels
std::vector< MonitorElement * > mes_
Definition: MESet.h:151