CMS 3D CMS Logo

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

#include <HLTScalersClient.h>

Inheritance diagram for HLTScalersClient:
edm::EDAnalyzer edm::EDConsumerBase

Classes

class  CountLS_t
 
class  CountLSFifo_t
 

Public Types

typedef dqm::legacy::DQMStore DQMStore
 
typedef dqm::legacy::MonitorElement MonitorElement
 
- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 

Public Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c) override
 
void beginJob (void) override
 BeginJob. More...
 
void beginRun (const edm::Run &run, const edm::EventSetup &c) override
 BeginRun. More...
 
void endLuminosityBlock (const edm::LuminosityBlock &lumiSeg, const edm::EventSetup &c) override
 
void endRun (const edm::Run &run, const edm::EventSetup &c) override
 EndRun. More...
 
 HLTScalersClient (const edm::ParameterSet &ps)
 Constructors. More...
 
 ~HLTScalersClient () override
 Destructor. More...
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector
< ProductResolverIndexAndSkipBit >
const & 
itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

std::pair< double, double > getSlope_ (const CountLSFifo_t &points)
 

Private Attributes

std::vector< MonitorElement * > countHistories_
 
int currentLumiBlockNumber_
 
MonitorElementcurrentNormRate_
 
MonitorElementcurrentRate_
 
int currentRun_
 
DQMStoredbe_
 
bool debug_
 
bool first_
 
std::string folderName_
 
MonitorElementhltCount_
 
std::vector< MonitorElement * > hltCurrentNormRate_
 
std::vector< MonitorElement * > hltCurrentRate_
 
MonitorElementhltNormRate_
 
MonitorElementhltRate_
 
std::deque< int > ignores_
 
unsigned int kRateIntegWindow_
 
int maxFU_
 
MonitorElementmergeCount_
 
bool missingPathNames_
 
int nev_
 
int nLumi_
 
std::string processName_
 
std::vector< MonitorElement * > rateHistories_
 
std::vector< MonitorElement * > rateNormHistories_
 
CountLSFifo_t recentNormedOverallCountsPerLS_
 
std::vector< CountLSFifo_trecentNormedPathCountsPerLS_
 
CountLSFifo_t recentOverallCountsPerLS_
 
std::vector< CountLSFifo_trecentPathCountsPerLS_
 
std::ofstream textfile_
 
MonitorElementupdates_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsInputProcessBlocks ()
 
static bool wantsProcessBlocks ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Definition at line 56 of file HLTScalersClient.h.

Member Typedef Documentation

Definition at line 62 of file HLTScalersClient.h.

Definition at line 61 of file HLTScalersClient.h.

Constructor & Destructor Documentation

HLTScalersClient::HLTScalersClient ( const edm::ParameterSet ps)

Constructors.

Definition at line 61 of file HLTScalersClient.cc.

References dqm::implementation::IBooker::book1D(), gather_cfg::cout, dbe_, debug_, folderName_, hltCount_, hltNormRate_, hltRate_, LogDebug, MAX_LUMI_SEG_HLT, mergeCount_, Utilities::operator, dqm::impl::MonitorElement::setBinLabel(), dqm::implementation::DQMStore::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, textfile_, and updates_.

62  : dbe_(nullptr),
63  nLumi_(0),
64  currentRate_(nullptr),
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)),
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
std::ofstream textfile_
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * updates_
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:569
std::string folderName_
std::string processName_
MonitorElement * hltRate_
std::deque< int > ignores_
MonitorElement * mergeCount_
unsigned int kRateIntegWindow_
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_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
MonitorElement * hltCount_
CountLSFifo_t recentNormedOverallCountsPerLS_
#define MAX_LUMI_SEG_HLT
tuple cout
Definition: gather_cfg.py:144
MonitorElement * hltNormRate_
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 LogDebug(id)
HLTScalersClient::~HLTScalersClient ( )
inlineoverride

Destructor.

Definition at line 119 of file HLTScalersClient.h.

References debug_, and textfile_.

119  {
120  if (debug_) {
121  textfile_.close();
122  }
123  };
std::ofstream textfile_

Member Function Documentation

void HLTScalersClient::analyze ( const edm::Event e,
const edm::EventSetup c 
)
overridevirtual

Implements edm::EDAnalyzer.

Definition at line 518 of file HLTScalersClient.cc.

518  {
519  // nothing to do here
520 }
void HLTScalersClient::beginJob ( void  )
overridevirtual

BeginJob.

Reimplemented from edm::EDAnalyzer.

Definition at line 106 of file HLTScalersClient.cc.

References dbe_, first_, folderName_, LogDebug, missingPathNames_, and dqm::implementation::DQMStore::setCurrentFolder().

106  {
107  LogDebug("HLTScalersClient") << "beingJob";
108  if (dbe_) {
110  }
111  first_ = true;
112  missingPathNames_ = true;
113 }
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:569
std::string folderName_
#define LogDebug(id)
void HLTScalersClient::beginRun ( const edm::Run run,
const edm::EventSetup c 
)
overridevirtual

BeginRun.

beginRun

Reimplemented from edm::EDAnalyzer.

Definition at line 116 of file HLTScalersClient.cc.

References first_, edm::RunBase::id(), LogDebug, and missingPathNames_.

116  {
117  missingPathNames_ = true;
118  first_ = true;
119  LogDebug("HLTScalersClient") << "beginRun, run " << run.id();
120 
121 } // beginRun
RunID const & id() const
Definition: RunBase.h:39
#define LogDebug(id)
void HLTScalersClient::endLuminosityBlock ( const edm::LuminosityBlock lumiSeg,
const edm::EventSetup c 
)
overridevirtual

End LumiBlock DQM Client Diagnostic should be performed here

Reimplemented from edm::EDAnalyzer.

Definition at line 131 of file HLTScalersClient.cc.

References newFWLiteAna::bin, dqm::implementation::IBooker::book1D(), countHistories_, gather_cfg::cout, currentNormRate_, currentRate_, dbe_, debug_, relativeConstraints::empty, dqm::impl::MonitorElement::Fill(), first_, SiStripCommissioningSource_FromRAW_cfg::fnames, folderName_, dqm::implementation::IGetter::get(), dqm::impl::MonitorElement::getBinContent(), HLTScalersClient::CountLSFifo_t::getCount(), dqm::impl::MonitorElement::getIntValue(), dqm::impl::MonitorElement::getNbinsX(), getSlope_(), dqm::legacy::MonitorElement::getTH1(), hltCount_, hltCurrentNormRate_, hltCurrentRate_, hltNormRate_, hltRate_, mps_fire::i, edm::LuminosityBlockBase::id(), edm::isNotFinite(), isotrackApplyRegressor::k, kPerHisto, kRateIntegWindow_, label, geometryCSVtoXML::line, LogDebug, edm::LuminosityBlockID::luminosityBlock(), MAX_LUMI_SEG_HLT, MAX_PATHS, maxFU_, MatrixUtil::merge(), mergeCount_, missingPathNames_, mps_check::msg, mergeVDriftHistosByStation::name, names, nLumi_, unpackData-CaloStage2::pname, rateHistories_, rateNormHistories_, recentNormedOverallCountsPerLS_, recentNormedPathCountsPerLS_, recentOverallCountsPerLS_, recentPathCountsPerLS_, SECS_PER_LUMI_SECTION, dqm::impl::MonitorElement::setBinContent(), dqm::impl::MonitorElement::setBinError(), dqm::impl::MonitorElement::setBinLabel(), dqm::implementation::DQMStore::setCurrentFolder(), slope, mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, textfile_, HLTScalersClient::CountLSFifo_t::update(), and updates_.

131  {
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 ;
181  rateHistories_.push_back(dbe_->book1D(name, name, MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5));
182  snprintf(name, 256, "norm_rate_p%03d", i);
183  dbe_->setCurrentFolder(rates_subfolder);
184  rateNormHistories_.push_back(dbe_->book1D(name, name, MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5));
185  dbe_->setCurrentFolder(counts_subfolder);
186  snprintf(name, 256, "counts_p%03d", i);
187  countHistories_.push_back(dbe_->book1D(name, name, MAX_LUMI_SEG_HLT, -0.5, MAX_LUMI_SEG_HLT - 0.5));
188  // prefill the data structures
189  recentPathCountsPerLS_.push_back(CountLSFifo_t(kRateIntegWindow_));
190  recentNormedPathCountsPerLS_.push_back(CountLSFifo_t(2));
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 
240  currentRate_->setBinLabel(i + 1, name);
241  currentNormRate_->setBinLabel(i + 1, name);
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);
274  currentNormRate_->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) {
341  hltRate_->setBinContent(nL, slope);
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);
374  currentRate_->setBinContent(i, 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) {
397  hltRate_->setBinContent(nL, slope);
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  }
428  recentNormedOverallCountsPerLS_.update(CountLS_t(nL, cnt / num_fu));
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)
435  hltNormRate_->setBinContent(nL, slope);
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  }
464  recentNormedOverallCountsPerLS_.update(CountLS_t(nL, cnt / sf));
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) {
473  hltNormRate_->setBinContent(nL, slope);
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 }
LuminosityBlockID id() const
std::ofstream textfile_
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:569
virtual int64_t getIntValue() const
std::vector< CountLSFifo_t > recentNormedPathCountsPerLS_
const std::string names[nVars_]
std::vector< MonitorElement * > hltCurrentNormRate_
void Fill(long long x)
char const * label
virtual int getNbinsX() const
get # of bins in X-axis
std::string folderName_
#define SECS_PER_LUMI_SECTION
MonitorElement * hltRate_
T sqrt(T t)
Definition: SSEVec.h:19
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:673
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)
virtual double getBinContent(int binx) const
get content of bin (1-D)
CountLSFifo_t recentOverallCountsPerLS_
MonitorElement * currentRate_
std::vector< MonitorElement * > rateNormHistories_
std::vector< MonitorElement * > hltCurrentRate_
void update(const CountLS_t &T)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
std::vector< CountLSFifo_t > recentPathCountsPerLS_
std::vector< MonitorElement * > rateHistories_
LuminosityBlockNumber_t luminosityBlock() const
tuple msg
Definition: mps_check.py:285
MonitorElement * hltCount_
std::pair< double, double > getSlope_(const CountLSFifo_t &points)
CountLSFifo_t recentNormedOverallCountsPerLS_
#define MAX_LUMI_SEG_HLT
const int kPerHisto
tuple cout
Definition: gather_cfg.py:144
virtual void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
MonitorElement * hltNormRate_
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
virtual TH1 * getTH1() const
#define LogDebug(id)
void HLTScalersClient::endRun ( const edm::Run run,
const edm::EventSetup c 
)
overridevirtual

EndRun.

Reimplemented from edm::EDAnalyzer.

Definition at line 124 of file HLTScalersClient.cc.

References first_, and missingPathNames_.

124  {
125  missingPathNames_ = true;
126  first_ = true;
127 }
std::pair< double, double > HLTScalersClient::getSlope_ ( const CountLSFifo_t points)
private

Definition at line 525 of file HLTScalersClient.cc.

References gather_cfg::cout, debug_, mps_fire::i, dqmiodumpmetadata::n, funct::pow(), SECS_PER_LUMI_SECTION, slope, mathSSE::sqrt(), HLTScalersClient::CountLSFifo_t::targetSize(), x, xy(), and y.

Referenced by endLuminosityBlock().

525  {
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;
567  slope /= SECS_PER_LUMI_SECTION;
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 }
static const double slope[3]
#define SECS_PER_LUMI_SECTION
T sqrt(T t)
Definition: SSEVec.h:19
Basic2DVector< T > xy() const
tuple cout
Definition: gather_cfg.py:144
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29

Member Data Documentation

std::vector<MonitorElement *> HLTScalersClient::countHistories_
private

Definition at line 151 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

int HLTScalersClient::currentLumiBlockNumber_
private

Definition at line 149 of file HLTScalersClient.h.

MonitorElement* HLTScalersClient::currentNormRate_
private

Definition at line 162 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

MonitorElement* HLTScalersClient::currentRate_
private

Definition at line 148 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

int HLTScalersClient::currentRun_
private

Definition at line 146 of file HLTScalersClient.h.

DQMStore* HLTScalersClient::dbe_
private

Definition at line 142 of file HLTScalersClient.h.

Referenced by beginJob(), endLuminosityBlock(), and HLTScalersClient().

bool HLTScalersClient::debug_
private
bool HLTScalersClient::first_
private

Definition at line 166 of file HLTScalersClient.h.

Referenced by beginJob(), beginRun(), endLuminosityBlock(), and endRun().

std::string HLTScalersClient::folderName_
private

Definition at line 167 of file HLTScalersClient.h.

Referenced by beginJob(), endLuminosityBlock(), and HLTScalersClient().

MonitorElement* HLTScalersClient::hltCount_
private

Definition at line 155 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), and HLTScalersClient().

std::vector<MonitorElement *> HLTScalersClient::hltCurrentNormRate_
private

Definition at line 164 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::vector<MonitorElement *> HLTScalersClient::hltCurrentRate_
private

Definition at line 153 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

MonitorElement* HLTScalersClient::hltNormRate_
private

Definition at line 161 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), and HLTScalersClient().

MonitorElement* HLTScalersClient::hltRate_
private

Definition at line 154 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), and HLTScalersClient().

std::deque<int> HLTScalersClient::ignores_
private

Definition at line 171 of file HLTScalersClient.h.

unsigned int HLTScalersClient::kRateIntegWindow_
private

Definition at line 168 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

int HLTScalersClient::maxFU_
private

Definition at line 176 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

MonitorElement* HLTScalersClient::mergeCount_
private

Definition at line 158 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), and HLTScalersClient().

bool HLTScalersClient::missingPathNames_
private

Definition at line 166 of file HLTScalersClient.h.

Referenced by beginJob(), beginRun(), endLuminosityBlock(), and endRun().

int HLTScalersClient::nev_
private

Definition at line 144 of file HLTScalersClient.h.

int HLTScalersClient::nLumi_
private

Definition at line 145 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::string HLTScalersClient::processName_
private

Definition at line 169 of file HLTScalersClient.h.

std::vector<MonitorElement *> HLTScalersClient::rateHistories_
private

Definition at line 150 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::vector<MonitorElement *> HLTScalersClient::rateNormHistories_
private

Definition at line 163 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

CountLSFifo_t HLTScalersClient::recentNormedOverallCountsPerLS_
private

Definition at line 181 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::vector<CountLSFifo_t> HLTScalersClient::recentNormedPathCountsPerLS_
private

Definition at line 180 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

CountLSFifo_t HLTScalersClient::recentOverallCountsPerLS_
private

Definition at line 178 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::vector<CountLSFifo_t> HLTScalersClient::recentPathCountsPerLS_
private

Definition at line 177 of file HLTScalersClient.h.

Referenced by endLuminosityBlock().

std::ofstream HLTScalersClient::textfile_
private

Definition at line 58 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), HLTScalersClient(), and ~HLTScalersClient().

MonitorElement* HLTScalersClient::updates_
private

Definition at line 157 of file HLTScalersClient.h.

Referenced by endLuminosityBlock(), and HLTScalersClient().