CMS 3D CMS Logo

HLTScalersClient.cc
Go to the documentation of this file.
1 //
2 // Revision 1.19 2010/07/20 02:58:27 wmtan
3 // Add missing #include files
4 //
5 // Revision 1.18 2010/04/02 20:48:12 wittich
6 // updates to scale entries by received number of FU's
7 //
8 // Revision 1.17 2010/03/17 20:56:19 wittich
9 // Check for good updates based on mergeCount values
10 // add code for rates normalized per FU
11 //
12 // Revision 1.16 2010/03/16 22:19:19 wittich
13 // updates for per-LS normalization for variable
14 // number of FU's sending information back to the clients.
15 //
16 // Revision 1.15 2010/02/11 23:55:18 wittich
17 // - adapt to shorter Lumi Section length
18 // - fix bug in how history of counts was filled
19 //
20 // Revision 1.14 2010/02/02 11:44:20 wittich
21 // more diagnostics for online scalers
22 //
23 // Revision 1.13 2009/12/15 20:41:16 wittich
24 // better hlt scalers client
25 //
26 // Revision 1.12 2009/11/22 13:33:05 puigh
27 // clean beginJob
28 //
29 // Revision 1.11 2009/11/07 03:35:05 lorenzo
30 // fixed binning
31 //
32 // Revision 1.10 2009/11/04 06:00:05 lorenzo
33 // changed folders
34 //
35 
37 
38 #include <cassert>
39 #include <numeric>
40 
42 
50 
52 
53 using edm::LogInfo;
54 using edm::LogWarning;
55 
56 // I am not sure this is right at more than 10%
57 #define SECS_PER_LUMI_SECTION 23.31
58 const int kPerHisto = 20;
59 
62  : dbe_(nullptr),
63  nLumi_(0),
64  currentRate_(nullptr),
65  currentLumiBlockNumber_(0),
66  first_(true),
67  missingPathNames_(true),
68  folderName_(ps.getUntrackedParameter<std::string>("dqmFolder", "HLT/HLScalers_EvF")),
69  kRateIntegWindow_(ps.getUntrackedParameter<unsigned int>("rateIntegWindow", 3)),
70  processName_(ps.getParameter<std::string>("processName")),
71  ignores_(),
72  debug_(ps.getUntrackedParameter<bool>("debugDump", false)),
73  maxFU_(ps.getUntrackedParameter<unsigned int>("maxFU", false)),
74  recentOverallCountsPerLS_(kRateIntegWindow_),
75  recentNormedOverallCountsPerLS_(2) {
76  LogDebug("HLTScalersClient") << "constructor";
77  if (debug_) {
78  textfile_.open("debug.txt");
79  if (!textfile_) {
80  std::cout << "constructor: can't open text file" << std::endl;
81  }
82  }
83  // get back-end interface
86 
87  std::string rawdir(folderName_ + "/raw");
88  dbe_->setCurrentFolder(rawdir);
89  hltRate_ = dbe_->book1D("hltRate", "Overall HLT Accept rate vs LS", MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5);
92  "hltRateNorm", "Overall HLT Accept rate vs LS, scaled", MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5);
93  hltCount_ = dbe_->book1D("hltCount", "Overall HLT Counts vs LS", MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5);
94  // hltCountN_= dbe_->book1D("hltCountN", "Overall HLT Counts per LS vs LS",
95  // MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT-0.5);
96  mergeCount_ =
97  dbe_->book1D("mergeCount", "Number of merge counts vs LS", MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5);
98 
99  updates_ = dbe_->book1D("updates", "Status of Updates", 2, 0, 2);
100  updates_->setBinLabel(1, "Good Updates");
101  updates_->setBinLabel(2, "Incomplete Updates");
102 
103 } // end constructor
104 
107  LogDebug("HLTScalersClient") << "beingJob";
108  if (dbe_) {
110  }
111  first_ = true;
112  missingPathNames_ = true;
113 }
114 
117  missingPathNames_ = true;
118  first_ = true;
119  LogDebug("HLTScalersClient") << "beginRun, run " << run.id();
120 
121 } // beginRun
122 
125  missingPathNames_ = true;
126  first_ = true;
127 }
128 
132  nLumi_ = lumiSeg.id().luminosityBlock();
133 
134  // get raw data
135  std::string scalHisto = folderName_ + "/raw/hltScalers";
136  MonitorElement *scalers = dbe_->get(scalHisto);
137  if (scalers == nullptr) {
138  LogDebug("HLTScalersClient") << "cannot get hlt scalers histogram, "
139  << "bailing out.";
140  if (debug_)
141  std::cout << "No scalers ? Looking for " << scalHisto << std::endl;
142  return;
143  }
144 
145  int npaths = scalers->getNbinsX();
146  if (npaths > MAX_PATHS)
147  npaths = MAX_PATHS; // HARD CODE FOR NOW
148  LogDebug("HLTScalersClient") << "I see " << npaths << " paths. ";
149 
150  // set the bin labels on the first go-through
151  // I need to do this here because we don't have the paths yet
152  // on begin-run. I should do this in a less ugly way (see FV?)
153  if (first_) {
154  std::string rawdir(folderName_ + "/raw");
155 
156  LogDebug("HLTScalersClient") << "Setting up paths on first endLumiBlock " << npaths;
157  dbe_->setCurrentFolder(rawdir);
158  currentRate_ = dbe_->book1D("cur_rate", "current lumi section rate per path", npaths, -0.5, npaths - 0.5);
160  dbe_->book1D("cur_rate_norm", "current norm. lumi section rate per path", npaths, -0.5, npaths - 0.5);
161  recentPathCountsPerLS_.reserve(npaths);
162  recentNormedPathCountsPerLS_.reserve(npaths);
163  char rates_subfolder[256];
164  snprintf(rates_subfolder, 256, "%s/RateHistory", folderName_.c_str());
165  char counts_subfolder[256];
166  snprintf(counts_subfolder, 256, "%s/CountHistory", folderName_.c_str());
167 
168  hltCurrentRate_.reserve(npaths);
169  rateHistories_.reserve(npaths);
170  countHistories_.reserve(npaths);
171  hltCurrentNormRate_.reserve(npaths);
172  rateNormHistories_.reserve(npaths);
173 
174  dbe_->setCurrentFolder(folderName_); // these belong in top-level
175  for (int i = 0; i < npaths; ++i) {
176  dbe_->setCurrentFolder(std::string(rates_subfolder) + "/raw");
177 
178  char name[256];
179  snprintf(name, 256, "raw_rate_p%03d", i);
180  // LogDebug("HLTScalersClient") << "name " << i << " is " << name ;
182  snprintf(name, 256, "norm_rate_p%03d", i);
183  dbe_->setCurrentFolder(rates_subfolder);
185  dbe_->setCurrentFolder(counts_subfolder);
186  snprintf(name, 256, "counts_p%03d", i);
188  // prefill the data structures
191  }
193 
194  // split hlt scalers up into groups of 20
195  const int maxlen = 64;
196  char metitle[maxlen]; // histo name
197  char mename[maxlen]; // ME name
198  int numHistos = int(npaths / kPerHisto); // this hasta be w/o remainders
199 
200  int remainder = npaths % kPerHisto;
201  if (remainder)
202  numHistos += 1;
203 
204  for (int k = 0; k < numHistos; k++) {
205  int npath_low = kPerHisto * k;
206  int npath_high = kPerHisto * (k + 1) - 1;
207  snprintf(mename, maxlen, "hltScalers_%0d", k);
208  snprintf(metitle, maxlen, "HLT scalers - Paths %d to %d", npath_low, npath_high);
209  dbe_->setCurrentFolder(rawdir);
210  hltCurrentRate_.push_back(dbe_->book1D(mename, metitle, kPerHisto, -0.5 + npath_low, npath_high + 0.5));
211  dbe_->setCurrentFolder(folderName_); // these belong in top-level
212  snprintf(mename, maxlen, "hltScalersNorm_%0d", k);
213  snprintf(metitle, maxlen, "HLT Rate (scaled) - Paths %d to %d", npath_low, npath_high);
214  hltCurrentNormRate_.push_back(dbe_->book1D(mename, metitle, kPerHisto, -0.5 + npath_low, npath_high + 0.5));
215  }
216 
217  first_ = false;
218  }
219 
220  if (missingPathNames_) {
221  // first try the scalers histogram and see if the bin names are set
222  for (int i = 0; i < npaths; ++i) {
223  // needs to be i+1 since root bins start at 1
224  const char *name = scalers->getTH1()->GetXaxis()->GetBinLabel(i + 1);
225  if (name && (strlen(name) > 0)) {
226  if (debug_) {
227  std::cout << "path " << i << " name is " << name << std::endl;
228  }
229  int whichHisto = i / kPerHisto;
230  int whichBin = i % kPerHisto + 1;
231  char pname[256];
232  hltCurrentRate_[whichHisto]->setBinLabel(whichBin, name);
233  hltCurrentNormRate_[whichHisto]->setBinLabel(whichBin, name);
234  snprintf(pname, 256, "Rate - path %s (Path # %03d)", name, i);
235  rateHistories_[i]->setTitle(pname);
236  rateNormHistories_[i]->setTitle(pname);
237  snprintf(pname, 256, "Counts - path %s (Path # %03d)", name, i);
238  countHistories_[i]->setTitle(pname);
239 
242 
243  missingPathNames_ = false;
244  }
245  }
246  }
247  // MEGA-HACK
248  if (missingPathNames_) {
249  // if that didn't work we load 'em from a text file. damn straight.
250  int ipath = 1;
251  std::ifstream names("names.dat");
252  if (!names) {
253  if (debug_) {
254  std::ostringstream msg;
255  msg << "open of "
256  << "names.dat";
257  perror(msg.str().c_str());
258  }
259  } else { // open succeeded
260  missingPathNames_ = false;
262  while (!names.eof()) {
263  getline(names, line);
264  std::istringstream fnames(line);
266  int bin;
267  if (fnames.str().find('#') == 0) // skip comment lines
268  continue;
269  if (fnames >> bin >> label) {
270  if (debug_) {
271  std::cout << bin << "--" << label << "(" << ipath << ")" << std::endl;
272  }
273  currentRate_->setBinLabel(ipath, label);
275  countHistories_[ipath - 1]->setTitle(label);
276  rateHistories_[ipath - 1]->setTitle(label);
277  rateNormHistories_[ipath - 1]->setTitle(label);
278  int whichHisto = (ipath - 1) / kPerHisto;
279  int whichBin = (ipath - 1) % kPerHisto + 1;
280  hltCurrentRate_[whichHisto]->setBinLabel(whichBin, label);
281  hltCurrentNormRate_[whichHisto]->setBinLabel(whichBin, label);
282  ++ipath;
283  if (ipath > npaths)
284  break;
285  } //
286  } // loop lines
287  } // open ok
288  }
289 
290  // END SETUP
291 
292  std::string nLumiHisto(folderName_ + "/nLumiBlock");
293  MonitorElement *nLumi = dbe_->get(nLumiHisto);
294  if (nLumi == nullptr) {
295  nLumiHisto = folderName_ + "/raw/nLumiBlock";
296  nLumi = dbe_->get(nLumiHisto);
297  }
298  int testval = (nLumi != nullptr ? nLumi->getIntValue() : -1);
299  LogDebug("HLTScalersClient") << "Lumi Block from DQM: " << testval << ", local is " << nLumi_;
300  int nL = (nLumi != nullptr ? nLumi->getIntValue() : nLumi_);
301  if (nL > MAX_LUMI_SEG_HLT) {
302  LogDebug("HLTScalersClient") << "Too many Lumi segments, " << nL << " is greater than MAX_LUMI_SEG_HLT,"
303  << " wrapping to " << (nL % MAX_LUMI_SEG_HLT);
304  // nL = MAX_LUMI_SEG_HLT;
305  nL = nL % MAX_LUMI_SEG_HLT;
306  }
307 
308  // merging counts
309  double num_fu = -1.0;
310  std::string mergeName(folderName_ + "/raw/hltMerge");
311  MonitorElement *merge = dbe_->get(mergeName);
312  if (merge != nullptr) {
313  num_fu = merge->getBinContent(1);
314  if (debug_) {
315  std::cout << "Number of received entries: " << num_fu << std::endl;
316  }
317  mergeCount_->Fill(nL, num_fu);
318  }
319  // end
320 
321  // evaluate the data
322  // loop over current counts
323 
324  // this gets filled for all times. Mainly for debugging.
325  for (int i = 1; i <= npaths; ++i) { // bins start at 1
326  double current_count = scalers->getBinContent(i);
327  // nb that this will now _overwrite_ some settings
328  countHistories_[i - 1]->setBinContent(nL, current_count); // good or bad
329  }
330 
331  std::string overallScalerName(folderName_ + "/raw/hltOverallScaler");
332  MonitorElement *hltScaler = dbe_->get(overallScalerName);
333  if (hltScaler != nullptr) {
334  double current_count = hltScaler->getBinContent(1);
335  hltCount_->setBinContent(nL, current_count);
336  recentOverallCountsPerLS_.update(CountLS_t(nL, current_count));
337  std::pair<double, double> sl = getSlope_(recentOverallCountsPerLS_);
338  double slope = sl.first;
339  double slope_err = sl.second;
340  if (slope > 0) {
342  if (!edm::isNotFinite(slope_err) && (slope_err >= 0))
343  hltRate_->setBinError(nL, slope_err);
344  }
345  } // found histo
346 
347  if (num_fu >= 0.95 * maxFU_) {
348  if (num_fu > maxFU_) {
349  maxFU_ = num_fu;
350  if (debug_)
351  std::cout << "maxFU is now " << maxFU_ << std::endl;
352  }
353  // good data
354  for (int i = 1; i <= npaths; ++i) { // bins start at 1
355  double current_count = scalers->getBinContent(i);
356  // DEBUG
357  if (!recentPathCountsPerLS_[i - 1].empty() && debug_)
358  std::cout << i << "\t-> good one: new => cnt, ls = " << current_count << ", " << nL
359  << ", old = " << recentPathCountsPerLS_[i - 1].back().second << "\t"
360  << recentPathCountsPerLS_[i - 1].back().first << std::endl;
361  // END DEBUG
362  recentPathCountsPerLS_[i - 1].update(CountLS_t(nL, current_count));
363 
364  // NB: we do not fill a new entry in the rate histo if we can't
365  // calculate it
366  std::pair<double, double> sl = getSlope_(recentPathCountsPerLS_[i - 1]);
367  double slope = sl.first;
368  double slope_err = sl.second;
369  // rateHistories_[i-1]->Fill(nL,slope);
370  if (slope > 0) {
371  rateHistories_[i - 1]->setBinContent(nL, slope);
372  // set the current rate(s)
373  hltCurrentRate_[(i - 1) / kPerHisto]->setBinContent(i % kPerHisto, slope);
375  if (!edm::isNotFinite(slope_err) && (slope_err >= 0)) {
376  currentRate_->setBinError(i, slope_err);
377  hltCurrentRate_[(i - 1) / kPerHisto]->setBinError(i % kPerHisto, slope_err);
378  rateHistories_[i - 1]->setBinError(nL, slope_err);
379  }
380  }
383 
384  } // loop over paths
385 
386  // ---------------------------- overall rate, absolute counts
387  std::string overallScalerName(folderName_ + "/raw/hltOverallScaler");
388  MonitorElement *hltScaler = dbe_->get(overallScalerName);
389  if (hltScaler != nullptr) {
390  double current_count = hltScaler->getBinContent(1);
391  hltCount_->setBinContent(nL, current_count);
392  recentOverallCountsPerLS_.update(CountLS_t(nL, current_count));
393  std::pair<double, double> sl = getSlope_(recentOverallCountsPerLS_);
394  double slope = sl.first;
395  double slope_err = sl.second;
396  if (slope >= 0) {
398  if (!edm::isNotFinite(slope_err) && (slope_err >= 0))
399  hltRate_->setBinError(nL, slope_err);
400  }
401  } // found histo
402  updates_->Fill(0); // good
403  } // check on number of FU's - good data
404  else {
405  updates_->Fill(1); // missing updates
406  }
407 
408  // PW DEBUG
409  if (debug_) {
410  textfile_ << nL << "\t" << npaths << "\t";
411  for (int i = 0; i < npaths; ++i) {
412  textfile_ << scalers->getBinContent(i) << " ";
413  }
414  textfile_ << std::endl;
415  }
416  // end DEBUG
417 
418 #ifdef LATER
419  // ------ overall rate normalized - all data
420  overallScalerName = std::string(folderName_ + "/raw/hltOverallScalerN");
421  hltScaler = dbe_->get(overallScalerName);
422  if (hltScaler != 0) {
423  double cnt = hltScaler->getBinContent(1);
424  // hltCountN_->setBinContent(nL,cnt);
425  if (debug_) {
426  std::cout << "Overall Norm: new => cnt, ls = " << cnt << ", " << nL << ", num_fu = " << num_fu << std::endl;
427  }
429  cnt = recentNormedOverallCountsPerLS_.getCount(nL); // for dupes/partials
430  double slope = cnt / num_fu / SECS_PER_LUMI_SECTION;
431  if (debug_) {
432  std::cout << "Normalized slope = " << slope << std::endl;
433  }
434  if (slope > 0)
436  }
437  //
438  std::string scalHistoNorm = folderName_ + "/raw/hltScalersN";
439  MonitorElement *scalersN = dbe_->get(scalHistoNorm);
440  if (scalersN) {
441  for (int i = 0; i < npaths; ++i) {
442  double cnt = scalersN->getBinContent(i);
443  double slope = cnt / num_fu / SECS_PER_LUMI_SECTION;
444  if (slope > 0) {
445  rateNormHistories_[i - 1]->setBinContent(nL, slope);
446  // set the current rate(s)
447  hltCurrentNormRate_[(i - 1) / kPerHisto]->setBinContent(i % kPerHisto, slope);
449  }
450  }
451  }
452 #else // NOT LATER
453  // ------ overall rate normalized - all data
454  overallScalerName = std::string(folderName_ + "/raw/hltOverallScaler");
455  hltScaler = dbe_->get(overallScalerName);
456  if (hltScaler != nullptr) {
457  double cnt = hltScaler->getBinContent(1);
458  // hltCountN_->setBinContent(nL,cnt);
459  float sf = num_fu / maxFU_;
460  if (debug_) {
461  std::cout << "Overall Norm: new => cnt, ls = " << cnt << ", " << nL << ", num_fu = " << num_fu << ", sf = " << sf
462  << std::endl;
463  }
465  cnt = recentNormedOverallCountsPerLS_.getCount(nL); // for dupes/partials
466  std::pair<double, double> sl = getSlope_(recentNormedOverallCountsPerLS_);
467  double slope = sl.first;
468  double slope_err = sl.second;
469  if (debug_) {
470  std::cout << "Normalized slope = " << slope << std::endl;
471  }
472  if (slope > 0) {
474  if (cnt > 0)
475  slope_err = slope * sqrt(2. / num_fu + 2. / cnt);
476  if (!edm::isNotFinite(slope_err) && (slope_err >= 0))
477  hltNormRate_->setBinError(nL, slope_err);
478  }
479  }
480  //
481  std::string scalHistoNorm = folderName_ + "/raw/hltScalers";
482  MonitorElement *scalersN = dbe_->get(scalHistoNorm);
483  if (scalersN) {
484  double sf = num_fu / maxFU_;
485  for (int i = 1; i <= npaths; ++i) {
486  double cnt = scalersN->getBinContent(i);
487  recentNormedPathCountsPerLS_[i - 1].update(CountLS_t(nL, cnt / sf));
488  std::pair<double, double> sl = getSlope_(recentNormedPathCountsPerLS_[i - 1]);
489  double slope = sl.first;
490  double slope_err = sl.second;
491  if (slope >= 0) {
492  rateNormHistories_[i - 1]->setBinContent(nL, slope);
493  // set the current rate(s)
494  hltCurrentNormRate_[(i - 1) / kPerHisto]->setBinContent(i % kPerHisto, slope);
496  if (slope_err <= 0 && cnt > 0) {
497  // ignores error on prev point, so scale by sqrt(2)
498  slope_err = slope * sqrt(2. / num_fu + 2. / cnt);
499  if (debug_) {
500  std::cout << "Slope err " << i << " = " << slope_err << std::endl;
501  }
502  }
503  if (!edm::isNotFinite(slope_err) && (slope_err >= 0)) {
504  rateNormHistories_[i - 1]->setBinError(nL, slope_err);
505  // set the current rate(s)
506  hltCurrentNormRate_[(i - 1) / kPerHisto]->setBinError(i % kPerHisto, slope_err);
507  currentNormRate_->setBinError(i, slope_err);
508  }
509  }
510  }
511  }
512 
513 #endif // LATER
514  //
515 }
516 
517 // unused
519  // nothing to do here
520 }
521 
522 // this is probably overkill. Do a least-squares fit to get slope
523 // note that the data is in units of counts, ls number
524 // but we return a value in Hz...
526  double slope, sigma_m;
527  if (points.size() < points.targetSize()) {
528  return std::pair<double, double>(-1, -1);
529  }
530  // just do a delta if we just want two bins
531  else if (points.size() == 2) {
532  // just do diff and be done with it
533  double delta_ls = points.front().first - points.back().first;
534  double delta_cnt = points.front().second - points.back().second;
535  slope = delta_cnt / delta_ls;
536  sigma_m = -1;
537  } else { // do a fit
538  double xy = 0;
539  double x = 0;
540  double xsq = 0;
541  double y = 0;
542  double n = double(points.size());
543  for (auto i(points.begin()); i != points.end(); ++i) {
544  if (debug_)
545  std::cout << "x = " << i->first << ", y = " << i->second << std::endl;
546  xy += i->first * i->second;
547  x += i->first;
548  xsq += i->first * i->first;
549  y += i->second;
550  }
551  slope = (n * xy - x * y) / (n * xsq - x * x);
552 
553  // now get the uncertainty on the slope. Need intercept for this.
554  double intercept = (xsq * y - xy * x) / (n * xsq - x * x);
555  double sigma_ysq = 0;
556  for (auto i(points.begin()); i != points.end(); ++i) {
557  sigma_ysq += pow((i->second - slope * i->first - intercept), 2.);
558  }
559  // if ( debug_ )
560  // std::cout << "chi^2 = " << sigma_ysq << std::endl;
561  sigma_ysq *= 1. / (n - 2.);
562 
563  sigma_m = sqrt(n * sigma_ysq / (n * xsq - x * x));
564  }
565 
566  // std::cout << "Slope is " << slope << std::endl;
568  if (sigma_m > 0)
569  sigma_m /= SECS_PER_LUMI_SECTION;
570  // if ( debug_ ) {
571  // std::cout << "Slope = " << slope << " +- " << sigma_m
572  // << std::endl;
573  // std::cout << "intercept is " << intercept
574  // << std::endl;
575  // }
576 
577  return std::pair<double, double>(slope, sigma_m);
578 }
std::ofstream textfile_
Definition: merge.py:1
void endLuminosityBlock(const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c) override
LuminosityBlockNumber_t luminosityBlock() const
MonitorElement * updates_
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
static const double slope[3]
MonitorElement * currentNormRate_
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:646
dqm::legacy::DQMStore * dbe_
std::vector< CountLSFifo_t > recentNormedPathCountsPerLS_
const std::string names[nVars_]
std::vector< MonitorElement * > hltCurrentNormRate_
void Fill(long long x)
char const * label
std::string folderName_
void beginJob(void) override
BeginJob.
#define SECS_PER_LUMI_SECTION
void beginRun(const edm::Run &run, const edm::EventSetup &c) override
BeginRun.
MonitorElement * hltRate_
T sqrt(T t)
Definition: SSEVec.h:19
void endRun(const edm::Run &run, const edm::EventSetup &c) override
EndRun.
MonitorElement * mergeCount_
unsigned int kRateIntegWindow_
std::vector< MonitorElement * > countHistories_
virtual 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)
CountLSFifo_t recentOverallCountsPerLS_
MonitorElement * currentRate_
std::vector< MonitorElement * > rateNormHistories_
Log< level::Info, false > LogInfo
void analyze(const edm::Event &e, const edm::EventSetup &c) override
std::vector< MonitorElement * > hltCurrentRate_
void update(const CountLS_t &T)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
LuminosityBlockID id() const
std::vector< CountLSFifo_t > recentPathCountsPerLS_
std::vector< MonitorElement * > rateHistories_
tuple msg
Definition: mps_check.py:285
MonitorElement * hltCount_
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:673
HLTScalersClient(const edm::ParameterSet &ps)
Constructors.
std::pair< double, double > getSlope_(const CountLSFifo_t &points)
CountLSFifo_t recentNormedOverallCountsPerLS_
#define MAX_LUMI_SEG_HLT
const int kPerHisto
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
MonitorElement * hltNormRate_
Log< level::Warning, false > LogWarning
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
#define MAX_PATHS
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
Definition: Run.h:45
#define LogDebug(id)
virtual double getBinContent(int binx) const
get content of bin (1-D)
virtual int64_t getIntValue() const