CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Public Attributes | Private Member Functions | Private Attributes
HistogramManager Class Reference

#include <HistogramManager.h>

Public Types

typedef dqm::legacy::DQMStore DQMStore
 
typedef dqm::legacy::MonitorElement MonitorElement
 
typedef std::map
< GeometryInterface::Values,
AbstractHistogram
Table
 

Public Member Functions

void addSpec (SummationSpecification spec)
 
void book (DQMStore::IBooker &iBooker, edm::EventSetup const &iSetup)
 
void executeHarvesting (DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter)
 
void executePerEventHarvesting (edm::Event const *ev)
 
void executePerLumiHarvesting (DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, edm::LuminosityBlock const &lumiBlock, edm::EventSetup const &iSetup)
 
void fill (DetId sourceModule, const edm::Event *sourceEvent=nullptr, int col=0, int row=0)
 
void fill (double value, DetId sourceModule, const edm::Event *sourceEvent=nullptr, int col=0, int row=0)
 
void fill (double x, double y, DetId sourceModule, const edm::Event *sourceEvent=nullptr, int col=0, int row=0)
 
 HistogramManager (const edm::ParameterSet &iConfig, GeometryInterface &geo)
 

Public Attributes

bool bookUndefined
 
int dimensions
 
bool enabled
 
edm::LuminosityBlock const * lumisection = nullptr
 
std::string name
 
bool perLumiHarvesting
 
double range_x_max
 
double range_x_min
 
int range_x_nbins
 
double range_y_max
 
double range_y_min
 
int range_y_nbins
 
bool statsOverflows
 
std::string title
 
std::string top_folder_name
 
std::string xlabel
 
std::string ylabel
 

Private Member Functions

void executeExtend (SummationStep const &step, Table &t, std::string const &reduction, DQMStore::IBooker &iBooker, SummationSpecification const &s)
 
void executeGroupBy (SummationStep const &step, Table &t, DQMStore::IBooker &iBooker, SummationSpecification const &s)
 
void fillInternal (double x, double y, int n_parameters, GeometryInterface::InterestingQuantities const &iq, std::vector< SummationStep >::iterator first, std::vector< SummationStep >::iterator last, AbstractHistogram &dest)
 
void loadFromDQMStore (SummationSpecification &s, Table &t, DQMStore::IGetter &iGetter)
 
std::pair< std::string,
std::string > 
makePathName (SummationSpecification const &s, GeometryInterface::Values const &, SummationStep const *upto)
 

Private Attributes

std::vector< Tablecounters
 
std::vector< AbstractHistogram * > fastpath
 
GeometryInterfacegeometryInterface
 
const edm::ParameterSetiConfig
 
GeometryInterface::InterestingQuantities iq
 
std::vector
< GeometryInterface::Values
significantvalues
 
std::vector
< SummationSpecification
specs
 
std::vector< Tabletables
 

Detailed Description

Definition at line 31 of file HistogramManager.h.

Member Typedef Documentation

Definition at line 33 of file HistogramManager.h.

Definition at line 34 of file HistogramManager.h.

Definition at line 59 of file HistogramManager.h.

Constructor & Destructor Documentation

HistogramManager::HistogramManager ( const edm::ParameterSet iConfig,
GeometryInterface geo 
)
explicit

Definition at line 18 of file HistogramManager.cc.

References addSpec(), geometryInterface, and edm::ParameterSet::getParameter().

19  : iConfig(iconfig),
20  geometryInterface(geo),
21  enabled(iconfig.getParameter<bool>("enabled")),
22  perLumiHarvesting(iconfig.getParameter<bool>("perLumiHarvesting")),
23  bookUndefined(iconfig.getParameter<bool>("bookUndefined")),
24  top_folder_name(iconfig.getParameter<std::string>("topFolderName")),
25  name(iconfig.getParameter<std::string>("name")),
26  title(iconfig.getParameter<std::string>("title")),
27  xlabel(iconfig.getParameter<std::string>("xlabel")),
28  ylabel(iconfig.getParameter<std::string>("ylabel")),
29  dimensions(iconfig.getParameter<int>("dimensions")),
30  range_x_nbins(iconfig.getParameter<int>("range_nbins")),
31  range_x_min(iconfig.getParameter<double>("range_min")),
32  range_x_max(iconfig.getParameter<double>("range_max")),
33  range_y_nbins(iconfig.getParameter<int>("range_y_nbins")),
34  range_y_min(iconfig.getParameter<double>("range_y_min")),
35  range_y_max(iconfig.getParameter<double>("range_y_max")),
36  statsOverflows(iconfig.getParameter<bool>("statsOverflows")) {
37  auto spec_configs = iconfig.getParameter<edm::VParameterSet>("specs");
38  for (const auto& spec : spec_configs) {
39  // this would fit better in SummationSpecification(...), but it has to
40  // happen here.
41  auto conf = spec.getParameter<edm::ParameterSet>("conf");
42  if (!conf.getParameter<bool>("enabled"))
43  continue;
45  }
46 }
void addSpec(SummationSpecification spec)
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:34
std::string top_folder_name
std::string xlabel
std::string ylabel
const edm::ParameterSet & iConfig
GeometryInterface & geometryInterface

Member Function Documentation

void HistogramManager::addSpec ( SummationSpecification  spec)

Definition at line 48 of file HistogramManager.cc.

References counters, fastpath, significantvalues, specs, and tables.

Referenced by HistogramManager().

48  {
49  specs.push_back(spec);
50  tables.push_back(Table());
51  counters.push_back(Table());
53  fastpath.push_back(nullptr);
54 }
std::vector< SummationSpecification > specs
std::vector< std::pair< Column, Value > > Values
std::vector< AbstractHistogram * > fastpath
std::vector< GeometryInterface::Values > significantvalues
std::map< GeometryInterface::Values, AbstractHistogram > Table
std::vector< Table > tables
std::vector< Table > counters
void HistogramManager::book ( DQMStore::IBooker iBooker,
edm::EventSetup const &  iSetup 
)

Definition at line 277 of file HistogramManager.cc.

References GeometryInterface::allModules(), cms::cuda::assert(), GeometryInterface::binWidth(), dqm::implementation::IBooker::book1D(), dqm::implementation::IBooker::book2D(), dqm::implementation::IBooker::bookProfile(), dqm::implementation::IBooker::bookProfile2D(), bookUndefined, c, reco::ceil(), cuy::col, counters, dimensions, alignCSCRings::e, enabled, SummationStep::EXTEND_X, SummationStep::EXTEND_Y, GeometryInterface::extract(), GeometryInterface::extractColumns(), geometryInterface, dqm::legacy::MonitorElement::getTH1(), SummationStep::GROUPBY, h, timingPdfMaker::histo, mps_fire::i, if(), iq, GeometryInterface::load(), GeometryInterface::loaded(), makePathName(), SiStripPI::max, GeometryInterface::maxValue(), AbstractHistogram::me, min(), GeometryInterface::minValue(), name, convertSQLiteXML::ok, GeometryInterface::pretty(), SummationStep::PROFILE, sistrip::SpyUtilities::range(), range_x_max, range_x_min, range_x_nbins, range_y_max, range_y_min, range_y_nbins, alignCSCRings::s, SET_AXIS, dqm::implementation::NavigatorBase::setCurrentFolder(), dqm::impl::MonitorElement::setStatOverflows(), significantvalues, specs, SummationStep::STAGE2, statsOverflows, AlCaHLTBitMon_QueryRunRegistry::string, submitPVValidationJobs::t, tables, AbstractHistogram::th1, title, GeometryInterface::UNDEFINED, SummationStep::USE_X, SummationStep::USE_Y, SummationStep::USE_Z, hgcalPerformanceValidation::val, x, xlabel, y, ylabel, and z.

277  {
278  if (!geometryInterface.loaded()) {
279  geometryInterface.load(iSetup);
280  }
281  if (!enabled)
282  return;
283 
284  struct MEInfo {
285  int dimensions = 1;
286  double range_x_min = 1e12;
287  double range_x_max = -1e12;
288  double range_y_min = 1e12;
289  double range_y_max = -1e12;
290  double range_z_min = 1e12; // z range carried around but unused
291  double range_z_max = -1e12;
292  int range_x_nbins = 0;
293  int range_y_nbins = 0;
294  int range_z_nbins = 0;
295  GeometryInterface::Value binwidth_x = 0; // override nbins for geom-things
296  GeometryInterface::Value binwidth_y = 0;
297  std::string title, xlabel, ylabel, zlabel;
298  bool do_profile = false;
299  bool statsOverflows = true;
300  ;
301  };
302  std::map<GeometryInterface::Values, MEInfo> toBeBooked;
303 
304  for (unsigned int i = 0; i < specs.size(); i++) {
305  auto& s = specs[i];
306  auto& t = tables[i];
307  auto& c = counters[i];
308  toBeBooked.clear();
309  bool bookCounters = false;
310 
311  auto firststep = s.steps.begin();
312  int n_parameters = this->dimensions;
313 
314  if (firststep->type != SummationStep::GROUPBY) {
315  ++firststep;
316  n_parameters = 1;
317  bookCounters = true;
318  }
319 
320  auto laststep = std::find_if(
321  s.steps.begin(), s.steps.end(), [](SummationStep const& step) { return step.stage == SummationStep::STAGE2; });
322 
324 
325  for (auto iq : geometryInterface.allModules()) {
326  if (bookCounters) {
327  // add an entry for the counting step if present
328  geometryInterface.extractColumns(s.steps[0].columns, iq, significantvalues);
329  c[significantvalues].iq_sample = iq;
330  }
331 
332  geometryInterface.extractColumns(firststep->columns, iq, significantvalues);
333  if (!bookUndefined) {
334  // skip if any column is UNDEFINED
335  bool ok = true;
336  for (auto e : significantvalues)
337  if (e.second == GeometryInterface::UNDEFINED)
338  ok = false;
339  if (!ok)
340  continue;
341  }
342 
343  auto histo = toBeBooked.find(significantvalues);
344  if (histo == toBeBooked.end()) {
345  // create new histo
346  MEInfo& mei = toBeBooked[significantvalues];
347  mei.title = this->title;
348  mei.statsOverflows = this->statsOverflows;
349  if (bookCounters)
350  mei.title =
351  "Number of " + mei.title + " per Event and " + geometryInterface.pretty(*(s.steps[0].columns.end() - 1));
352  std::string xlabel = bookCounters ? "#" + this->xlabel : this->xlabel;
353 
354  // refer to fillInternal() for the actual execution
355  // compute labels, title, type, user-set ranges here
356  int tot_parameters = n_parameters;
357 
358 #define SET_AXIS(to, from) \
359  mei.to##label = from##label; \
360  mei.range_##to##_min = ((it->nbins == -1) ? this->range_##from##_min : it->xmin); \
361  mei.range_##to##_max = ((it->nbins == -1) ? this->range_##from##_max : it->xmax); \
362  mei.range_##to##_nbins = ((it->nbins == -1) ? this->range_##from##_nbins : it->nbins)
363 
364  for (auto it = firststep + 1; it != laststep; ++it) {
365  switch (it->type) {
367  if (it->arg[0] == '1' && n_parameters >= 1) {
368  SET_AXIS(x, x);
369  } // TODO: make use of current nbins, xmin, xmax if set
370  if (it->arg[0] == '2' && n_parameters >= 2) {
371  SET_AXIS(x, y);
372  }
373  break;
375  if (it->arg[0] == '1' && n_parameters >= 1) {
376  SET_AXIS(y, x);
377  }
378  if (it->arg[0] == '2' && n_parameters >= 2) {
379  SET_AXIS(y, y);
380  }
381  break;
383  if (it->arg[0] == '1' && n_parameters >= 1) {
384  SET_AXIS(z, x);
385  }
386  if (it->arg[0] == '2' && n_parameters >= 2) {
387  SET_AXIS(z, y);
388  }
389  break;
391  assert(mei.range_x_nbins == 0);
392  auto col = it->columns[0];
393  mei.xlabel = geometryInterface.pretty(col);
394  mei.title = mei.title + " by " + mei.xlabel;
396  mei.range_x_min = geometryInterface.minValue(col);
398  mei.range_x_max = geometryInterface.maxValue(col);
399  mei.binwidth_x = geometryInterface.binWidth(col);
400  tot_parameters++;
401  } break;
403  auto col = it->columns[0];
404  mei.ylabel = geometryInterface.pretty(col);
405  mei.title = mei.title + " by " + mei.ylabel;
407  mei.range_y_min = geometryInterface.minValue(col);
409  mei.range_y_max = geometryInterface.maxValue(col);
410  mei.binwidth_y = geometryInterface.binWidth(col);
411  tot_parameters++;
412  } break;
414  mei.do_profile = true;
415  break;
416  default:
417  assert(!"illegal step in STAGE1! (booking)");
418  }
419  }
420  mei.dimensions = tot_parameters;
421  if (mei.do_profile)
422  mei.title = "Profile of " + mei.title;
423  if (!mei.zlabel.empty())
424  mei.title = mei.title + " (Z: " + mei.zlabel + ")";
425  }
426  // only update range
427  MEInfo& mei = toBeBooked[significantvalues];
428  double val;
429 
430  for (auto it = firststep + 1; it != laststep; ++it) {
431  switch (it->type) {
433  val = geometryInterface.extract(it->columns[0], iq).second;
434  if (val == GeometryInterface::UNDEFINED)
435  break;
436  mei.range_x_min = std::min(mei.range_x_min, val);
437  mei.range_x_max = std::max(mei.range_x_max, val);
438  break;
440  val = geometryInterface.extract(it->columns[0], iq).second;
441  if (val == GeometryInterface::UNDEFINED)
442  break;
443  mei.range_y_min = std::min(mei.range_y_min, val);
444  mei.range_y_max = std::max(mei.range_y_max, val);
445  break;
446  default: // ignore the rest, code above will catch bugs
447  break;
448  }
449  }
450  }
451 
452  // Now do the actual booking.
453  for (auto& e : toBeBooked) {
454  AbstractHistogram& h = t[e.first];
455  MEInfo& mei = e.second;
456  auto name = makePathName(s, e.first, &(*laststep));
457  iBooker.setCurrentFolder(name.first);
458 
459  // determine nbins for geometry derived quantities
460  // due to how we counted above, we need to include lower and upper bound
461  // For Coord-values, which are not precisely aligned with the bins, we force
462  // alignment.
463  if (mei.binwidth_x != 0) {
464  double range = (mei.range_x_max - mei.range_x_min) / mei.binwidth_x;
465  if ((range - int(range)) == 0.0) {
466  mei.range_x_min -= mei.binwidth_x / 2;
467  mei.range_x_max += mei.binwidth_x / 2;
468  } else {
469  mei.range_x_min = std::floor(mei.range_x_min / mei.binwidth_x) * mei.binwidth_x;
470  mei.range_x_max = std::ceil(mei.range_x_max / mei.binwidth_x) * mei.binwidth_x;
471  }
472  mei.range_x_nbins = int((mei.range_x_max - mei.range_x_min) / mei.binwidth_x);
473  }
474  if (mei.binwidth_y != 0) {
475  double range = (mei.range_y_max - mei.range_y_min) / mei.binwidth_y;
476  if ((range - int(range)) == 0.0) {
477  mei.range_y_min -= mei.binwidth_y / 2;
478  mei.range_y_max += mei.binwidth_y / 2;
479  } else {
480  mei.range_y_min = std::floor(mei.range_y_min / mei.binwidth_y) * mei.binwidth_y;
481  mei.range_y_max = std::ceil(mei.range_y_max / mei.binwidth_y) * mei.binwidth_y;
482  }
483  mei.range_y_nbins = int((mei.range_y_max - mei.range_y_min) / mei.binwidth_y);
484  }
485 
486  if (mei.dimensions == 1) {
487  h.me = iBooker.book1D(
488  name.second, (mei.title + ";" + mei.xlabel).c_str(), mei.range_x_nbins, mei.range_x_min, mei.range_x_max);
489  } else if (mei.dimensions == 2 && !mei.do_profile) {
490  h.me = iBooker.book2D(name.second,
491  (mei.title + ";" + mei.xlabel + ";" + mei.ylabel).c_str(),
492  mei.range_x_nbins,
493  mei.range_x_min,
494  mei.range_x_max,
495  mei.range_y_nbins,
496  mei.range_y_min,
497  mei.range_y_max);
498  } else if (mei.dimensions == 2 && mei.do_profile) {
499  h.me = iBooker.bookProfile(name.second,
500  (mei.title + ";" + mei.xlabel + ";" + mei.ylabel).c_str(),
501  mei.range_x_nbins,
502  mei.range_x_min,
503  mei.range_x_max,
504  0.0,
505  0.0,
506  "");
507  } else if (mei.dimensions == 3 && mei.do_profile) {
508  h.me = iBooker.bookProfile2D(name.second,
509  (mei.title + ";" + mei.xlabel + ";" + mei.ylabel).c_str(),
510  mei.range_x_nbins,
511  mei.range_x_min,
512  mei.range_x_max,
513  mei.range_y_nbins,
514  mei.range_y_min,
515  mei.range_y_max,
516  0.0,
517  0.0); // Z range is ignored if min==max
518  } else {
519  edm::LogError("HistogramManager") << "Illegal Histogram!\n"
520  << "name " << name.second << "\n"
521  << "dim " << mei.dimensions << " profile " << mei.do_profile << "\n";
522  assert(!"Illegal Histogram kind.");
523  }
524  h.th1 = h.me->getTH1();
525  h.me->setStatOverflows(mei.statsOverflows);
526  }
527  }
528 }
constexpr int32_t ceil(float num)
const edm::EventSetup & c
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:399
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
std::string pretty(Column col)
std::vector< SummationSpecification > specs
std::pair< std::string, std::string > makePathName(SummationSpecification const &s, GeometryInterface::Values const &, SummationStep const *upto)
Log< level::Error, false > LogError
assert(be >=bs)
const uint16_t range(const Frame &aFrame)
std::string xlabel
void load(edm::EventSetup const &iSetup)
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
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:322
if(conf_.getParameter< bool >("UseStripCablingDB"))
T min(T a, T b)
Definition: MathUtil.h:58
static const Value UNDEFINED
std::string ylabel
std::vector< std::pair< Column, Value > > Values
std::vector< GeometryInterface::Values > significantvalues
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:177
virtual DQM_DEPRECATED void setStatOverflows(bool value)
std::vector< Table > tables
std::pair< Column, Value > extract(Column const &col, InterestingQuantities const &iq)
std::vector< Table > counters
dqm::legacy::MonitorElement * me
std::vector< InterestingQuantities > const & allModules()
step
Definition: StallMonitor.cc:94
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
int col
Definition: cuy.py:1009
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
GeometryInterface::InterestingQuantities iq
virtual TH1 * getTH1() const
#define SET_AXIS(to, from)
GeometryInterface & geometryInterface
void HistogramManager::executeExtend ( SummationStep const &  step,
Table t,
std::string const &  reduction,
DQMStore::IBooker iBooker,
SummationSpecification const &  s 
)
private

Definition at line 613 of file HistogramManager.cc.

References cms::cuda::assert(), dqm::implementation::IBooker::book1D(), SummationStep::columns, AbstractHistogram::count, alignCSCRings::e, GeometryInterface::extractColumns(), first, geometryInterface, dqm::legacy::MonitorElement::getTH1(), mps_fire::i, AbstractHistogram::iq_sample, makePathName(), AbstractHistogram::me, dqmiodumpmetadata::n, name, hlt_dqm_clientPB-live_cfg::nbins, submitPVResolutionJobs::out, GeometryInterface::pretty(), edm::separator(), dqm::implementation::NavigatorBase::setCurrentFolder(), dqm::impl::MonitorElement::setStatOverflows(), significantvalues, AlCaHLTBitMon_QueryRunRegistry::string, AbstractHistogram::th1, and title.

Referenced by executeHarvesting().

617  {
618  // For the moment only X.
619  // first pass determines the range.
620  std::map<GeometryInterface::Values, int> nbins;
621  // separators collects meta info for the render plugin about the boundaries.
622  // for each EXTEND, this is added to the axis label. In total this is not
623  // fully correct since we have to assume the the substructure of each sub-
624  // histogram is the same, which is e.g. not true for layers. It still works
625  // since layers only contain leaves (ladders).
626  std::map<GeometryInterface::Values, std::string> separators;
627 
629 
630  for (auto& e : t) {
631  geometryInterface.extractColumns(step.columns, e.second.iq_sample, significantvalues);
632  int& n = nbins[significantvalues];
633  assert(e.second.th1 || !"invalid histogram");
634  // if we reduce, every histogram only needs one bin
635  int bins = !reduce_type.empty() ? 1 : e.second.th1->GetXaxis()->GetNbins();
636  if (bins > 1)
637  separators[significantvalues] += std::to_string(n) + ",";
638  n += bins;
639  }
640  for (auto& e : separators)
641  e.second = "(" + e.second + ")/";
642 
643  Table out;
644  for (auto& e : t) {
645  geometryInterface.extractColumns(step.columns, e.second.iq_sample, significantvalues);
646  TH1* th1 = e.second.th1;
647  assert(th1);
648 
649  AbstractHistogram& new_histo = out[significantvalues];
650  if (!new_histo.me) {
651  // we put the name of the actual, last column of a input histo there.
652  std::string colname = geometryInterface.pretty((e.first.end() - 1)->first);
653 
654  auto separator = separators[significantvalues];
655 
656  auto name = makePathName(s, significantvalues, &step);
657  auto title =
658  std::string("") + th1->GetTitle() + " per " + colname + ";" + colname + separator +
659  (!reduce_type.empty() ? th1->GetYaxis()->GetTitle() : th1->GetXaxis()->GetTitle()) + ";" +
660  (!reduce_type.empty() ? reduce_type + " of " + th1->GetXaxis()->GetTitle() : th1->GetYaxis()->GetTitle());
661  iBooker.setCurrentFolder(name.first);
662 
663  if (th1->GetDimension() == 1) {
664  new_histo.me =
665  iBooker.book1D(name.second, title, nbins[significantvalues], 0.5, nbins[significantvalues] + 0.5);
666  } else {
667  assert(!"2D extend not implemented in harvesting.");
668  }
669  new_histo.th1 = new_histo.me->getTH1();
670  new_histo.iq_sample = e.second.iq_sample;
671  new_histo.count = 1; // used as a fill pointer. Assumes histograms are
672  // ordered correctly (map should provide that)
673  }
674 
675  // now add data.
676  if (new_histo.th1->GetDimension() == 1) {
677  if (reduce_type.empty()) { // no reduction, concatenate
678  for (int i = 1; i <= th1->GetXaxis()->GetNbins(); i++) {
679  new_histo.th1->SetBinContent(new_histo.count, th1->GetBinContent(i));
680  new_histo.th1->SetBinError(new_histo.count, th1->GetBinError(i));
681  new_histo.count += 1;
682  }
683  } else if (reduce_type == "MEAN") {
684  new_histo.th1->SetBinContent(new_histo.count, th1->GetMean());
685  new_histo.th1->SetBinError(new_histo.count, th1->GetMeanError());
686  new_histo.count += 1;
687  } else {
688  assert(!"Reduction type not supported");
689  }
690  new_histo.me->setStatOverflows(e.second.me->getStatOverflows());
691  } else {
692  assert(!"2D extend not implemented in harvesting.");
693  }
694  }
695  t.swap(out);
696 }
GeometryInterface::InterestingQuantities iq_sample
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
std::string pretty(Column col)
std::pair< std::string, std::string > makePathName(SummationSpecification const &s, GeometryInterface::Values const &, SummationStep const *upto)
assert(be >=bs)
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
std::vector< std::pair< Column, Value > > Values
std::vector< GeometryInterface::Values > significantvalues
virtual DQM_DEPRECATED void setStatOverflows(bool value)
dqm::legacy::MonitorElement * me
static std::string const separator(":")
step
Definition: StallMonitor.cc:94
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
virtual TH1 * getTH1() const
GeometryInterface & geometryInterface
void HistogramManager::executeGroupBy ( SummationStep const &  step,
Table t,
DQMStore::IBooker iBooker,
SummationSpecification const &  s 
)
private

Definition at line 579 of file HistogramManager.cc.

References cms::cuda::assert(), dqm::implementation::IBooker::book1D(), dqm::implementation::IBooker::book2D(), dqm::implementation::IBooker::bookProfile(), dqm::implementation::IBooker::bookProfile2D(), SummationStep::columns, alignCSCRings::e, GeometryInterface::extractColumns(), geometryInterface, dqm::legacy::MonitorElement::getTH1(), AbstractHistogram::iq_sample, makePathName(), AbstractHistogram::me, name, submitPVResolutionJobs::out, dqm::implementation::NavigatorBase::setCurrentFolder(), dqm::impl::MonitorElement::setStatOverflows(), significantvalues, and AbstractHistogram::th1.

Referenced by executeHarvesting().

582  {
583  // Simple regrouping, sum histos if they end up in the same place.
584  Table out;
586  for (auto& e : t) {
587  TH1* th1 = e.second.th1;
588  geometryInterface.extractColumns(step.columns, e.second.iq_sample, significantvalues);
589  AbstractHistogram& new_histo = out[significantvalues];
590  if (!new_histo.me) {
591  auto name = makePathName(s, significantvalues, &step);
592  iBooker.setCurrentFolder(name.first);
593  if (dynamic_cast<TH1F*>(th1))
594  new_histo.me = iBooker.book1D(name.second, (TH1F*)th1);
595  else if (dynamic_cast<TH2F*>(th1))
596  new_histo.me = iBooker.book2D(name.second, (TH2F*)th1);
597  else if (dynamic_cast<TProfile*>(th1))
598  new_histo.me = iBooker.bookProfile(name.second, (TProfile*)th1);
599  else if (dynamic_cast<TProfile2D*>(th1))
600  new_histo.me = iBooker.bookProfile2D(name.second, (TProfile2D*)th1);
601  else
602  assert(!"No idea how to book this.");
603  new_histo.th1 = new_histo.me->getTH1();
604  new_histo.iq_sample = e.second.iq_sample;
605  } else {
606  new_histo.th1->Add(th1);
607  }
608  new_histo.me->setStatOverflows(e.second.me->getStatOverflows());
609  }
610  t.swap(out);
611 }
GeometryInterface::InterestingQuantities iq_sample
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:399
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
std::pair< std::string, std::string > makePathName(SummationSpecification const &s, GeometryInterface::Values const &, SummationStep const *upto)
assert(be >=bs)
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
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:322
std::vector< std::pair< Column, Value > > Values
std::vector< GeometryInterface::Values > significantvalues
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:177
virtual DQM_DEPRECATED void setStatOverflows(bool value)
dqm::legacy::MonitorElement * me
step
Definition: StallMonitor.cc:94
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
virtual TH1 * getTH1() const
GeometryInterface & geometryInterface
void HistogramManager::executeHarvesting ( DQMStore::IBooker iBooker,
DQMStore::IGetter iGetter 
)

Definition at line 698 of file HistogramManager.cc.

References SummationStep::arg, cms::cuda::assert(), enabled, executeExtend(), executeGroupBy(), SummationStep::EXTEND_X, SummationStep::EXTEND_Y, geometryInterface, SummationStep::GROUPBY, mps_fire::i, loadFromDQMStore(), log, name, SummationStep::REDUCE, alignCSCRings::s, SummationStep::SAVE, specs, SummationStep::stage, SummationStep::STAGE2, AlCaHLTBitMon_QueryRunRegistry::string, submitPVValidationJobs::t, tables, and SummationStep::type.

Referenced by executePerLumiHarvesting().

698  {
699  if (!enabled)
700  return;
701  // Debug output
702  for (auto& s : specs) {
703  edm::LogInfo log("HistogramManager");
704  log << "Specs for " << name << " ";
705  s.dump(log, geometryInterface);
706  }
707 
708  for (unsigned int i = 0; i < specs.size(); i++) {
709  auto& s = specs[i];
710  auto& t = tables[i];
711  loadFromDQMStore(s, t, iGetter);
712 
713  std::string reduce_type = "";
714 
715  // now execute step2.
716  for (SummationStep const& step : s.steps) {
717  if (step.stage == SummationStep::STAGE2) {
718  switch (step.type) {
719  case SummationStep::SAVE:
720  // no explicit implementation atm.
721  break;
723  executeGroupBy(step, t, iBooker, s);
724  break;
726  // reduction is done in the following EXTEND
727  reduce_type = step.arg;
728  break;
730  executeExtend(step, t, reduce_type, iBooker, s);
731  reduce_type = "";
732  break;
734  assert(!"EXTEND_Y currently not supported in harvesting.");
735  break;
736  default:
737  assert(!"Operation not supported in harvesting.");
738  }
739  }
740  }
741  }
742 }
static std::vector< std::string > checklist log
void executeGroupBy(SummationStep const &step, Table &t, DQMStore::IBooker &iBooker, SummationSpecification const &s)
std::vector< SummationSpecification > specs
assert(be >=bs)
void executeExtend(SummationStep const &step, Table &t, std::string const &reduction, DQMStore::IBooker &iBooker, SummationSpecification const &s)
void loadFromDQMStore(SummationSpecification &s, Table &t, DQMStore::IGetter &iGetter)
std::vector< Table > tables
step
Definition: StallMonitor.cc:94
GeometryInterface & geometryInterface
void HistogramManager::executePerEventHarvesting ( edm::Event const *  ev)

Definition at line 190 of file HistogramManager.cc.

References cms::cuda::assert(), bookUndefined, c, SummationStep::COUNT, counters, alignCSCRings::e, enabled, GeometryInterface::extractColumns(), fillInternal(), geometryInterface, SummationStep::GROUPBY, timingPdfMaker::histo, mps_fire::i, iq, alignCSCRings::s, significantvalues, GeometryInterface::InterestingQuantities::sourceEvent, GeometryInterface::InterestingQuantities::sourceModule, specs, submitPVValidationJobs::t, and tables.

190  {
191  if (!enabled)
192  return;
193  for (unsigned int i = 0; i < specs.size(); i++) {
194  auto& s = specs[i];
195  auto& t = tables[i];
196  auto& c = counters[i];
197  if (s.steps[0].type != SummationStep::COUNT)
198  continue; // no counting, done
199  assert((s.steps.size() >= 2 && s.steps[1].type == SummationStep::GROUPBY) ||
200  !"Incomplete spec (but this cannot be caught in Python)");
201  for (auto& e : c) {
202  // the iq on the counter can only be a _sample_, since many modules
203  // could be grouped on one counter. Even worse, the sourceEvent ptr
204  // could be dangling if the counter was not touched in this event, so
205  // we replace it. row/col are most likely useless as well.
206  auto iq = e.second.iq_sample;
207  iq.sourceEvent = sourceEvent;
208 
209  significantvalues[i].clear();
211  auto histo = t.find(significantvalues[i]);
212  if (histo == t.end()) {
213  if (!bookUndefined)
214  continue;
215  edm::LogError("HistogramManager") << "Histogram Missing!\n"
216  << "name " << t.begin()->second.th1->GetName() << "\n"
217  << "ctr "
218  << " detid " << iq.sourceModule << "\n";
219  assert(!"Histogram not booked! (per-event) Probably inconsistent geometry description.");
220  }
221  fillInternal(e.second.count, 0, 1, iq, s.steps.begin() + 2, s.steps.end(), histo->second);
222  e.second.count = 0;
223  }
224  }
225 }
const edm::EventSetup & c
std::vector< SummationSpecification > specs
Log< level::Error, false > LogError
assert(be >=bs)
void fillInternal(double x, double y, int n_parameters, GeometryInterface::InterestingQuantities const &iq, std::vector< SummationStep >::iterator first, std::vector< SummationStep >::iterator last, AbstractHistogram &dest)
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
std::vector< GeometryInterface::Values > significantvalues
std::vector< Table > tables
std::vector< Table > counters
GeometryInterface::InterestingQuantities iq
GeometryInterface & geometryInterface
void HistogramManager::executePerLumiHarvesting ( DQMStore::IBooker iBooker,
DQMStore::IGetter iGetter,
edm::LuminosityBlock const &  lumiBlock,
edm::EventSetup const &  iSetup 
)

Definition at line 530 of file HistogramManager.cc.

References enabled, executeHarvesting(), geometryInterface, GeometryInterface::load(), GeometryInterface::loaded(), lumisection, and perLumiHarvesting.

533  {
534  if (!enabled)
535  return;
536  // this should also give us the GeometryInterface for offline, though it is a
537  // bit dirty and might explode.
538  if (!geometryInterface.loaded()) {
539  geometryInterface.load(iSetup);
540  }
541  if (perLumiHarvesting) {
542  this->lumisection = &lumiBlock; // "custom" steps can use this
543  executeHarvesting(iBooker, iGetter);
544  this->lumisection = nullptr;
545  }
546 }
void executeHarvesting(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter)
void load(edm::EventSetup const &iSetup)
edm::LuminosityBlock const * lumisection
GeometryInterface & geometryInterface
void HistogramManager::fill ( DetId  sourceModule,
const edm::Event sourceEvent = nullptr,
int  col = 0,
int  row = 0 
)

Definition at line 117 of file HistogramManager.cc.

References cms::cuda::assert(), and dimensions.

Referenced by fill().

117  {
118  assert(this->dimensions == 0);
119  fill(0.0, 0.0, sourceModule, sourceEvent, col, row);
120 }
void fill(DetId sourceModule, const edm::Event *sourceEvent=nullptr, int col=0, int row=0)
assert(be >=bs)
int col
Definition: cuy.py:1009
void HistogramManager::fill ( double  value,
DetId  sourceModule,
const edm::Event sourceEvent = nullptr,
int  col = 0,
int  row = 0 
)

Definition at line 113 of file HistogramManager.cc.

References cms::cuda::assert(), dimensions, and fill().

113  {
114  assert(this->dimensions == 1);
115  fill(x, 0.0, sourceModule, sourceEvent, col, row);
116 }
void fill(DetId sourceModule, const edm::Event *sourceEvent=nullptr, int col=0, int row=0)
assert(be >=bs)
int col
Definition: cuy.py:1009
void HistogramManager::fill ( double  x,
double  y,
DetId  sourceModule,
const edm::Event sourceEvent = nullptr,
int  col = 0,
int  row = 0 
)

Definition at line 65 of file HistogramManager.cc.

References cms::cuda::assert(), bookUndefined, SummationStep::COUNT, counters, dimensions, enabled, GeometryInterface::extractColumns(), fastpath, fillInternal(), geometryInterface, timingPdfMaker::histo, mps_fire::i, iq, alignCSCRings::s, significantvalues, GeometryInterface::InterestingQuantities::sourceModule, specs, submitPVValidationJobs::t, and tables.

65  {
66  if (!enabled)
67  return;
68 
69  // We only need to check the module here, since the fastpath is only used to
70  // determine which plot is filled (not which bin inside) and fillInternal
71  // re-extracts whatever it needs for the axis.
72  // Since do not support booking based on ROC or time, the plot can only depend
73  // on the module.
74  // The sourceEvent check is not really effective (pointer is always the same)
75  // but needed for initialisation.
76  // NOTE that this might change if we want to support per-ROC booking
77  // NOTE that we could even cache the bin to fill if iq and spec are identical,
78  // also across HistogramManagers.
79  bool cached = false;
80  if (sourceModule == this->iq.sourceModule && sourceEvent == this->iq.sourceEvent) {
81  cached = true;
82  }
83  iq = GeometryInterface::InterestingQuantities{sourceEvent, sourceModule, int16_t(col), int16_t(row)};
84  for (unsigned int i = 0; i < specs.size(); i++) {
85  auto& s = specs[i];
86  auto& t = s.steps[0].type == SummationStep::COUNT ? counters[i] : tables[i];
87  if (!cached) { // recompute ME to fill (aka fastpath)
88  significantvalues[i].clear();
90  auto histo = t.find(significantvalues[i]);
91  if (histo == t.end()) {
92  if (bookUndefined) {
93  edm::LogError("HistogramManager") << "Missing Histogram!\n"
94  << "name " << tables[i].begin()->second.th1->GetName() << "\n";
95  assert(!"Histogram not booked! Probably inconsistent geometry description.");
96  }
97  fastpath[i] = nullptr;
98  } else {
99  fastpath[i] = &(histo->second);
100  }
101  }
102  // A fastpath of nullptr means there is no ME for this iq, which can be
103  // a valid cached result.
104  if (fastpath[i]) {
105  if (s.steps[0].type == SummationStep::COUNT) {
106  fastpath[i]->count++;
107  } else {
108  fillInternal(x, y, this->dimensions, iq, s.steps.begin() + 1, s.steps.end(), *(fastpath[i]));
109  }
110  }
111  }
112 }
std::vector< SummationSpecification > specs
Log< level::Error, false > LogError
assert(be >=bs)
void fillInternal(double x, double y, int n_parameters, GeometryInterface::InterestingQuantities const &iq, std::vector< SummationStep >::iterator first, std::vector< SummationStep >::iterator last, AbstractHistogram &dest)
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
std::vector< AbstractHistogram * > fastpath
std::vector< GeometryInterface::Values > significantvalues
std::vector< Table > tables
std::vector< Table > counters
int col
Definition: cuy.py:1009
GeometryInterface::InterestingQuantities iq
GeometryInterface & geometryInterface
void HistogramManager::fillInternal ( double  x,
double  y,
int  n_parameters,
GeometryInterface::InterestingQuantities const &  iq,
std::vector< SummationStep >::iterator  first,
std::vector< SummationStep >::iterator  last,
AbstractHistogram dest 
)
private

Definition at line 122 of file HistogramManager.cc.

References cms::cuda::assert(), SummationStep::EXTEND_X, SummationStep::EXTEND_Y, GeometryInterface::extract(), dqm::impl::MonitorElement::Fill(), geometryInterface, dqmdumpme::last, AbstractHistogram::me, SummationStep::PROFILE, SummationStep::STAGE1, AbstractHistogram::th1, SummationStep::USE_X, SummationStep::USE_Y, SummationStep::USE_Z, x, and y.

Referenced by executePerEventHarvesting(), and fill().

128  {
129  double fx = 0, fy = 0, fz = 0;
130  int tot_parameters = n_parameters;
131  for (auto it = first; it != last; ++it) {
132  if (it->stage != SummationStep::STAGE1)
133  break;
134  // The specification builder precomputes where x and y go, this loop will
135  // always do 3 iterations to set x, y, z. The builder does not know how
136  // many parameters we have, so we have to check that and count the total.
137  switch (it->type) {
139  if (it->arg[0] == '1' && n_parameters >= 1)
140  fx = x;
141  if (it->arg[0] == '2' && n_parameters >= 2)
142  fx = y;
143  break;
145  if (it->arg[0] == '1' && n_parameters >= 1)
146  fy = x;
147  if (it->arg[0] == '2' && n_parameters >= 2)
148  fy = y;
149  break;
151  if (it->arg[0] == '1' && n_parameters >= 1)
152  fz = x;
153  if (it->arg[0] == '2' && n_parameters >= 2)
154  fz = y;
155  break;
157  fx = geometryInterface.extract(it->columns[0], iq).second;
158  tot_parameters++;
159  break;
161  fy = geometryInterface.extract(it->columns[0], iq).second;
162  tot_parameters++;
163  break;
165  break; // profile does not make a difference here, only in booking
166  default:
167  assert(!"illegal step in STAGE1!");
168  }
169  }
170 
171  switch (tot_parameters) {
172  case 1:
173  dest.me->Fill(fx);
174  break;
175  case 2:
176  dest.me->Fill(fx, fy);
177  break;
178  case 3:
179  dest.me->Fill(fx, fy, fz);
180  break;
181  default:
182  edm::LogError("HistogramManager") << "got " << tot_parameters << " dimensions\n"
183  << "name " << dest.th1->GetName() << "\n";
184  assert(!"More than 3 dimensions should never occur.");
185  }
186 }
Log< level::Error, false > LogError
assert(be >=bs)
void Fill(long long x)
std::pair< Column, Value > extract(Column const &col, InterestingQuantities const &iq)
dqm::legacy::MonitorElement * me
tuple last
Definition: dqmdumpme.py:56
GeometryInterface::InterestingQuantities iq
GeometryInterface & geometryInterface
void HistogramManager::loadFromDQMStore ( SummationSpecification s,
Table t,
DQMStore::IGetter iGetter 
)
private

Definition at line 548 of file HistogramManager.cc.

References GeometryInterface::allModules(), bookUndefined, GeometryInterface::extractColumns(), geometryInterface, dqm::implementation::IGetter::get(), dqm::legacy::MonitorElement::getTH1(), SummationStep::GROUPBY, timingPdfMaker::histo, iq, AbstractHistogram::iq_sample, makePathName(), AbstractHistogram::me, hlt_dqm_clientPB-live_cfg::me, name, fed_dqm_sourceclient-live_cfg::path, significantvalues, SummationStep::STAGE2, SummationSpecification::steps, AlCaHLTBitMon_QueryRunRegistry::string, and AbstractHistogram::th1.

Referenced by executeHarvesting().

548  {
549  t.clear();
551  auto firststep = s.steps.begin();
552  if (firststep->type != SummationStep::GROUPBY)
553  ++firststep;
554  auto laststep = std::find_if(
555  s.steps.begin(), s.steps.end(), [](SummationStep const& step) { return step.stage == SummationStep::STAGE2; });
556 
557  for (auto iq : geometryInterface.allModules()) {
558  geometryInterface.extractColumns(firststep->columns, iq, significantvalues);
559 
560  auto histo = t.find(significantvalues);
561  if (histo == t.end()) {
562  auto name = makePathName(s, significantvalues, &(*laststep));
563  std::string path = name.first + name.second;
564  MonitorElement* me = iGetter.get(path);
565  if (!me) {
566  if (bookUndefined)
567  edm::LogError("HistogramManager") << "ME " << path << " not found\n";
568  // else this will happen quite often
569  } else {
571  histo.me = me;
572  histo.th1 = histo.me->getTH1();
573  histo.iq_sample = iq;
574  }
575  }
576  }
577 }
GeometryInterface::InterestingQuantities iq_sample
std::pair< std::string, std::string > makePathName(SummationSpecification const &s, GeometryInterface::Values const &, SummationStep const *upto)
Log< level::Error, false > LogError
std::vector< SummationStep > steps
void extractColumns(std::vector< Column > const &names, InterestingQuantities const &iq, Values &out)
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:673
std::vector< std::pair< Column, Value > > Values
std::vector< GeometryInterface::Values > significantvalues
dqm::legacy::MonitorElement * me
std::vector< InterestingQuantities > const & allModules()
step
Definition: StallMonitor.cc:94
GeometryInterface::InterestingQuantities iq
virtual TH1 * getTH1() const
GeometryInterface & geometryInterface
std::pair< std::string, std::string > HistogramManager::makePathName ( SummationSpecification const &  s,
GeometryInterface::Values const &  significantvalues,
SummationStep const *  upto 
)
private

Definition at line 227 of file HistogramManager.cc.

References SummationStep::arg, SummationStep::columns, SummationStep::COUNT, DeadROC_duringRun::dir, alignCSCRings::e, SummationStep::EXTEND_X, SummationStep::EXTEND_Y, GeometryInterface::formatValue(), geometryInterface, name, GeometryInterface::pretty(), DivergingColor::red, SummationStep::REDUCE, SummationStep::stage, SummationStep::STAGE1, SummationSpecification::steps, AlCaHLTBitMon_QueryRunRegistry::string, createPayload::suffix, to_lower(), top_folder_name, and SummationStep::type.

Referenced by book(), executeExtend(), executeGroupBy(), and loadFromDQMStore().

229  {
230  std::ostringstream dir("");
231  std::string suffix = "";
232 
233  // we omit the last value here, to get all disks next to each other etc.
234  if (!significantvalues.empty()) {
235  for (auto it = significantvalues.begin(); it != (significantvalues.end() - 1); ++it) {
236  auto name = geometryInterface.formatValue(it->first, it->second);
237  if (name.empty())
238  continue;
239  dir << name << "/";
240  }
241  auto e = significantvalues[significantvalues.size() - 1];
242  suffix = "_" + geometryInterface.formatValue(e.first, e.second);
243  }
244 
245  // PERF: this is actually independent of significantvalues and iq
246  std::string name = this->name;
247  for (SummationStep const& step : s.steps) {
248  if (&step == upto)
249  break;
250  switch (step.type) {
252  name = "num_" + name;
253  break;
256  if (step.stage != SummationStep::STAGE1)
257  break;
258  GeometryInterface::Column col0 = step.columns[0];
259  std::string colname = geometryInterface.pretty(col0);
260  name = name + "_per_" + colname;
261  break;
262  }
263  case SummationStep::REDUCE: {
264  auto red = step.arg;
266  name = red + "_" + name;
267  break;
268  }
269  default:
270  // Maybe PROFILE is worth showing.
271  break; // not visible in name
272  }
273  }
274  return std::make_pair(top_folder_name + "/" + dir.str(), name + suffix);
275 }
std::vector< GeometryInterface::Column > columns
std::string pretty(Column col)
std::string formatValue(Column, Value)
std::string to_lower(const std::string &s)
std::string top_folder_name
std::vector< GeometryInterface::Values > significantvalues
step
Definition: StallMonitor.cc:94
GeometryInterface & geometryInterface

Member Data Documentation

bool HistogramManager::bookUndefined

Definition at line 92 of file HistogramManager.h.

Referenced by book(), executePerEventHarvesting(), fill(), and loadFromDQMStore().

std::vector<Table> HistogramManager::counters
private
int HistogramManager::dimensions

Definition at line 99 of file HistogramManager.h.

Referenced by book(), and fill().

bool HistogramManager::enabled
std::vector<AbstractHistogram*> HistogramManager::fastpath
private

Definition at line 121 of file HistogramManager.h.

Referenced by addSpec(), and fill().

GeometryInterface& HistogramManager::geometryInterface
private
const edm::ParameterSet& HistogramManager::iConfig
private

Definition at line 62 of file HistogramManager.h.

GeometryInterface::InterestingQuantities HistogramManager::iq
private

Definition at line 117 of file HistogramManager.h.

Referenced by book(), executePerEventHarvesting(), fill(), and loadFromDQMStore().

edm::LuminosityBlock const* HistogramManager::lumisection = nullptr

Definition at line 109 of file HistogramManager.h.

Referenced by executePerLumiHarvesting().

std::string HistogramManager::name

Definition at line 95 of file HistogramManager.h.

Referenced by ElectronMVAID.ElectronMVAID::__call__(), FWLite.ElectronMVAID::__call__(), dirstructure.Directory::__create_pie_image(), DisplayManager.DisplayManager::__del__(), dqm_interfaces.DirID::__eq__(), dirstructure.Directory::__get_full_path(), dirstructure.Comparison::__get_img_name(), dataset.Dataset::__getDataType(), dataset.Dataset::__getFileInfoList(), dirstructure.Comparison::__make_image(), core.autovars.NTupleVariable::__repr__(), core.autovars.NTupleObjectType::__repr__(), core.autovars.NTupleObject::__repr__(), core.autovars.NTupleCollection::__repr__(), dirstructure.Directory::__repr__(), dqm_interfaces.DirID::__repr__(), dirstructure.Comparison::__repr__(), config.Service::__setattr__(), config.CFG::__str__(), counter.Counter::__str__(), average.Average::__str__(), FWLite.WorkingPoints::_reformat_cut_definitions(), core.autovars.NTupleObjectType::addSubObjects(), core.autovars.NTupleObjectType::addVariables(), core.autovars.NTupleObjectType::allVars(), book(), dirstructure.Directory::calcStats(), geometryComparison.GeometryComparison::createScript(), validation.Sample::digest(), python.rootplot.utilities.Hist::divide(), python.rootplot.utilities.Hist::divide_wilson(), DisplayManager.DisplayManager::Draw(), TreeCrawler.Package::dump(), executeExtend(), executeGroupBy(), executeHarvesting(), core.autovars.NTupleVariable::fillBranch(), core.autovars.NTupleObject::fillBranches(), core.autovars.NTupleCollection::fillBranchesScalar(), core.autovars.NTupleCollection::fillBranchesVector(), core.autovars.NTupleCollection::get_cpp_declaration(), core.autovars.NTupleCollection::get_cpp_wrapper_class(), core.autovars.NTupleCollection::get_py_wrapper_class(), utils.StatisticalTest::get_status(), production_tasks.Task::getname(), dataset.CMSDataset::getPrimaryDatasetEntries(), dataset.PrivateDataset::getPrimaryDatasetEntries(), primaryVertexResolution.PrimaryVertexResolution::getRepMap(), primaryVertexValidation.PrimaryVertexValidation::getRepMap(), zMuMuValidation.ZMuMuValidation::getRepMap(), VIDSelectorBase.VIDSelectorBase::initialize(), loadFromDQMStore(), personalPlayback.Applet::log(), core.autovars.NTupleVariable::makeBranch(), core.autovars.NTupleObject::makeBranches(), core.autovars.NTupleCollection::makeBranchesScalar(), core.autovars.NTupleCollection::makeBranchesVector(), makePathName(), dirstructure.Directory::print_report(), dataset.BaseDataset::printInfo(), dataset.Dataset::printInfo(), production_tasks.MonitorJobs::run(), python.rootplot.utilities.Hist::TGraph(), python.rootplot.utilities.Hist::TH1F(), counter.Counter::write(), and average.Average::write().

bool HistogramManager::perLumiHarvesting

Definition at line 91 of file HistogramManager.h.

Referenced by executePerLumiHarvesting().

double HistogramManager::range_x_max

Definition at line 102 of file HistogramManager.h.

Referenced by book().

double HistogramManager::range_x_min

Definition at line 101 of file HistogramManager.h.

Referenced by book().

int HistogramManager::range_x_nbins

Definition at line 100 of file HistogramManager.h.

Referenced by book().

double HistogramManager::range_y_max

Definition at line 105 of file HistogramManager.h.

Referenced by book().

double HistogramManager::range_y_min

Definition at line 104 of file HistogramManager.h.

Referenced by book().

int HistogramManager::range_y_nbins

Definition at line 103 of file HistogramManager.h.

Referenced by book().

std::vector<GeometryInterface::Values> HistogramManager::significantvalues
private
std::vector<SummationSpecification> HistogramManager::specs
private

Definition at line 65 of file HistogramManager.h.

Referenced by addSpec(), book(), executeHarvesting(), executePerEventHarvesting(), and fill().

bool HistogramManager::statsOverflows

Definition at line 106 of file HistogramManager.h.

Referenced by book().

std::vector<Table> HistogramManager::tables
private

Definition at line 66 of file HistogramManager.h.

Referenced by addSpec(), book(), executeHarvesting(), executePerEventHarvesting(), and fill().

std::string HistogramManager::title
std::string HistogramManager::top_folder_name

Definition at line 93 of file HistogramManager.h.

Referenced by makePathName().

std::string HistogramManager::xlabel
std::string HistogramManager::ylabel