CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTMonBitSummary.cc
Go to the documentation of this file.
1 //HLTMonBitSummary.cc
2 //combination of HLTMon.cc and UserCode/AEverett/BitPlotting
3 
4 // user include files
6 
9 
13 
15 
20 
21 //#include "DQM/HLTEvF/interface/HLTriggerSelector.h"
22 
25 #include "TH1F.h"
26 #include "TProfile.h"
27 #include "TH2F.h"
28 
29 #include "TPRegexp.h"
30 #include "TString.h"
31 
34 
35 // needed for trigger bits from EventSetup as in ALCARECO paths
38 
39 
41  inputTag_ (iConfig.getParameter<edm::InputTag> ("TriggerResultsTag")),
42  HLTPathNamesConfigPreVal_(iConfig.getParameter<std::vector<std::string > >("HLTPaths")),
43  total_(0),
44  nValidTriggers_(0),
45  nValidConfigTriggers_(0),
46  ndenomAccept_(0)
47 {
48  denominatorWild_ = iConfig.getUntrackedParameter<std::string>("denominatorWild","");
49  denominator_ = iConfig.getUntrackedParameter<std::string>("denominator");
50  directory_ = iConfig.getUntrackedParameter<std::string>("directory","HLT/Generic/Summary");
51  histLabel_ = iConfig.getUntrackedParameter<std::string>("histLabel","Generic");
52  // out_ = iConfig.getUntrackedParameter<std::string>("out","");
53  dummyFilters_.clear();
54  filterTypes_ = iConfig.getUntrackedParameter<std::vector<std::string > >("filterTypes",dummyFilters_);
55  esPathsKey_ = iConfig.getUntrackedParameter<std::string>("eventSetupPathsKey","");
56 
57  configFlag_ = false;
58  filterFlag_ = false;
59  hltchange_ = false;
60 
61  dbe_ = NULL;
63  dbe_->setVerbose(0);
64 
65  //set Token(-s)
66  inputToken_ = consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag> ("TriggerResultsTag"));
67 }
68 
69 
71 
72 //
73 // member functions
74 //
75 
77 
78  //initialize the hlt configuration from the process name if not blank
79  std::string processName = inputTag_.process();
80  if (processName != ""){
81 
82  //Grab paths from EventSetup via AlCaRecoTriggerBitsRcd if configured - copied from HLTHighLevel
83  if (esPathsKey_.size()) {
84  // Get map of strings to concatenated list of names of HLT paths from EventSetup:
86  iSetup.get<AlCaRecoTriggerBitsRcd>().get(triggerBits);
87  typedef std::map<std::string, std::string> TriggerMap;
88  const TriggerMap &triggerMap = triggerBits->m_alcarecoToTrig;
89 
90  TriggerMap::const_iterator listIter = triggerMap.find(esPathsKey_);
91 
92  if (listIter == triggerMap.end()) {
93  throw cms::Exception("Configuration")
94  //<< " HLTHighLevel [instance: " << *moduleLabel() << " - path: " << *pathName()
95  //<< "]: "
96  <<" No triggerList with key " << esPathsKey_ << " in AlCaRecoTriggerBitsRcd";
97  }
98 
99  // We must avoid a std::map<std::stringvector<std::string> > in DB for performance reason,
100  // so the paths are mapped into one string that we have to decompose:
101  HLTPathNamesKey_ = triggerBits->decompose(listIter->second);
102  }
103 
104  bool initOK = false;
105  initOK = hltConfig_.init(r, iSetup, processName, hltchange_);
106  //Otherwise read paths from configuration
107  HLTPathNamesConfig_.clear();
108  if(HLTPathNamesConfigPreVal_.size()){
109  //run trigger config selection
110  if (initOK) {
112  }
113  else{
114  edm::LogError("HLTMonBitSummary") << "HLTConfigProvider initialization with process name "
115  << processName << " failed." << std::endl;
116  }
117  }
118 
119  //check if the two vectors have any common elements
120  std::vector<int> removePaths;
121  for(size_t i=0; i<HLTPathNamesKey_.size(); ++i){
122  for(size_t j=0; j<HLTPathNamesConfig_.size(); ++j){
123  if(HLTPathNamesConfig_[j] == HLTPathNamesKey_[i]) removePaths.push_back(i);
124  }
125  }
126  reverse(removePaths.begin(),removePaths.end());
127  if(removePaths.size()){
128  for(unsigned int k=0; k<removePaths.size(); ++k)
129  HLTPathNamesKey_.erase(HLTPathNamesKey_.begin()+removePaths[k]);
130  }
131 
132 
133  //combine two vectors
134  HLTPathsByName_.clear();
135  HLTPathsByName_.reserve(HLTPathNamesConfig_.size() + HLTPathNamesKey_.size());
138 
139  count_.resize(HLTPathsByName_.size());
140  HLTPathsByIndex_.resize(HLTPathsByName_.size());
141 
142 
143  if( (nValidTriggers_ != HLTPathsByName_.size() || hltchange_) && total_!=0 ){
144  edm::LogWarning("HLTMonBitSummary") << "A change in the HLT configuration has been found."
145  << std::endl
146  << "BitSummary histograms do not support changing configurations."
147  << std::endl
148  << "Processing of events halted.";
149  configFlag_ = true;
150  }
151 
152  if(!configFlag_){
153 
156 
157  //get all the filters -
158  //only if filterTypes_ is nonempty and only on HLTPathNamesConfig_ paths
159  if(initOK){
160  if(!filterTypes_.empty()){
161  triggerFilters_.clear();
162  triggerFilterIndices_.clear();
163  for( size_t i = 0; i < nValidConfigTriggers_; i++) {
164  // create a row [triggername,filter1name, filter2name, etc.]
165  triggerFilters_.push_back(std::vector <std::string>());
166  // create a row [0, filter1index, filter2index, etc.]
167  triggerFilterIndices_.push_back(std::vector <uint>());
168 
169  std::vector<std::string> moduleNames = hltConfig_.moduleLabels( HLTPathNamesConfig_[i] );
170 
171  triggerFilters_[i].push_back(HLTPathNamesConfig_[i]);//first entry is trigger name
172  triggerFilterIndices_[i].push_back(0);
173 
174  int numModule = 0, numFilters = 0;
175  std::string moduleName, moduleType;
176  unsigned int moduleIndex;
177 
178  //print module name
179  std::vector<std::string>::const_iterator iDumpModName;
180  for (iDumpModName = moduleNames.begin();iDumpModName != moduleNames.end();iDumpModName++) {
181  moduleName = *iDumpModName;
182  moduleType = hltConfig_.moduleType(moduleName);
183  moduleIndex = hltConfig_.moduleIndex(HLTPathNamesConfig_[i], moduleName);
184  LogDebug ("HLTMonBitSummary") << "Module" << numModule
185  << " is called " << moduleName
186  << " , type = " << moduleType
187  << " , index = " << moduleIndex
188  << std::endl;
189  numModule++;
190  for(size_t k = 0; k < filterTypes_.size(); k++) {
191  if(moduleType == filterTypes_[k]) {
192  numFilters++;
193  triggerFilters_[i].push_back(moduleName);
194  triggerFilterIndices_[i].push_back(moduleIndex);
195  }
196  }
197  }//end for modulesName
198  }//end for nValidConfigTriggers_
199  }
200  }
201  else{
202  edm::LogError("HLTMonBitSummary") << "HLTConfigProvider initialization has failed."
203  << " Could not get filter names." << std::endl;
204  filterFlag_ = true;
205  }
206 
207  //check denominator
208  HLTPathDenomName_.clear();
209  HLTPathDenomNamePreVal_.clear();
210  if( denominatorWild_.size() != 0 ) HLTPathDenomNamePreVal_.push_back(denominatorWild_);
211  if(initOK){
213  }
214  //HLTriggerSelector denomSelect(r, iSetup, inputTag_,HLTPathDenomName_);
215  //HLTPathDenomName_.swap(denomSelect.theSelectTriggers);
216  //for (unsigned int i = 0; i < HLTPathDenomName_.size(); i++)
217  // std::cout << "testing denom: " << HLTPathDenomName_[i] << std::endl;
219  }
220  }//end if process
221 
222 
223  if(dbe_ && !configFlag_){
224 
225  int nbin = nValidConfigTriggers_;
226 
228 
229  //int nbin_sub = 5;
230  int nbin_sub = 8;
231 
232  // Count histos for efficiency plots
233  if(!filterTypes_.empty() && !filterFlag_){
234  dbe_->setCurrentFolder(directory_ + "Trigger_Filters/");
235  //hCountSummary = dbe_->book1D("hCountSummary", "Count Summary", nbin+1, -0.5, 0.5+(double)nbin);
236 
237  hSubFilterCount.clear();
238  hSubFilterEff.clear();
239 
240  for( int trig = 0; trig < nbin; trig++ ) {
241  // count plots for subfilter
242  //hSubFilterCount[trig] = dbe_->book1D("Filters_" + triggerFilters_[trig][0],
243  hSubFilterCount.push_back(dbe_->book1D("Filters_" + triggerFilters_[trig][0],
244  "Filters_" + triggerFilters_[trig][0],
245  nbin_sub+1, -0.5, 0.5+(double)nbin_sub));
246 
247  for(int filt = 0; filt < (int)triggerFilters_[trig].size()-1; filt++){
248  hSubFilterCount[trig]->setBinLabel(filt+1, triggerFilters_[trig][filt+1]);
249  }
250  }
251 
252  dbe_->setCurrentFolder(directory_ + "Trigger_Efficiencies/");
253  for( int trig = 0; trig < nbin; trig++ ) {
254  //hSubFilterEff[trig] = dbe_->book1D("Efficiency_" + triggerFilters_[trig][0],
255  hSubFilterEff.push_back(dbe_->book1D("Efficiency_" + triggerFilters_[trig][0],
256  "Efficiency_" + triggerFilters_[trig][0],
257  nbin_sub+1, -0.5, 0.5+(double)nbin_sub));
258 
259  for(int filt = 0; filt < (int)triggerFilters_[trig].size()-1; filt++){
260  hSubFilterEff[trig]->setBinLabel(filt+1,triggerFilters_[trig][filt+1]);
261  }
262  }
263  }
264 
265  //--------------B i t P l o t t i n g s e c t i o n ---------------//
266  //---------------------------------------------------------------------//
267 
268  std::stringstream rNs;
269  rNs<<r.run();
270  std::string rN = rNs.str();
271  LogDebug("HLTMonBitSummary")<<"this is the beginning of a NEW run: "<< r.run();
272 
273  //h1_->Reset();
274  // h2_->Reset();
275  //pf_->Reset();
276  //if (ratio_) ratio_->Reset();
277 
278  for (uint i=0; i < nValidTriggers_ && i < 400 ; ++i){
279  h1_->getTH1F()->GetXaxis()->SetBinLabel(i+1,HLTPathsByName_[i].c_str());
280  h2_->getTH2F()->GetXaxis()->SetBinLabel(i+1,HLTPathsByName_[i].c_str());
281  h2_->getTH2F()->GetYaxis()->SetBinLabel(i+1,HLTPathsByName_[i].c_str());
282  pf_->getTH1F()->GetXaxis()->SetBinLabel(i+1,HLTPathsByName_[i].c_str());
283  if (ratio_)
284  ratio_->getTH1F()->GetXaxis()->SetBinLabel(i+1,(HLTPathsByName_[i]+" & "+denominator_).c_str());
285  }
286 
287  //------------------------End Of BitPlotting section -------------------------//
288  }
289 
290 }
291 
292 
293 // ------------ method called to for each event ------------
294 void
296 {
297  if(configFlag_) return;
298 
299  total_++;
300  const std::string invalid("@@invalid@@");
301 
302  // get hold of TriggerResults Object
304  iEvent.getByToken(inputToken_, trh);
305 
306  if (trh.failedToGet()) {
307  edm::LogError("HLTMonBitSummary")<<" could not get: "<<inputTag_;
308  return;
309  }
310 
311  // get hold of trigger names - based on TriggerResults object!
312  const edm::TriggerNames & triggerNames = iEvent.triggerNames(*trh);
313 
314  unsigned int lastModule = 0;
315 
316  //std::cout << " Was at least one path run? " << trh->wasrun() << std::endl;;
317  //std::cout << " Has at least one path accepted the event? " << trh->accept() << std::endl;
318  //std::cout << " Has any path encountered an error? " << trh->error() << std::endl;
319  //std::cout << " Number of paths stored = " << trh->size() << std::endl;
320 
321  for (unsigned int trig=0; trig < nValidTriggers_; trig++) {
322  //convert *all* trigger names (from config and key) to trigger index properly
323  HLTPathsByIndex_[trig]=triggerNames.triggerIndex(HLTPathsByName_[trig]);
324  }
325 
326  //get filter information for config triggers only
327  for (unsigned int trig=0; trig < nValidConfigTriggers_; trig++) {
328  //std::cout << "Trigger Name = " << HLTPathNamesConfig_[trig] << ", HLTPathsByIndex_ = " << HLTPathsByIndex_[trig] << std::endl;
329  //std::cout << "Trigger Name = " << HLTPathNamesConfig_[trig] << ", trh->index = " << lastModule << " " << trh->accept(HLTPathsByIndex_[trig]) << std::endl;
330 
331  //check if trigger exists in TriggerResults
332  if(!filterTypes_.empty() && !filterFlag_ && HLTPathsByIndex_[trig] < trh->size()) {
333  lastModule = trh->index(HLTPathsByIndex_[trig]);
334 
335  //go through the list of filters
336  for(unsigned int filt = 0; filt < triggerFilters_[trig].size()-1; filt++){
337  // cout << "triggerFilters_["<<trig<<"]["<<filt+1<<"] = " << triggerFilters_[trig][filt+1]
338  // << " , triggerFilterIndices = " << triggerFilterIndices_[trig][filt+1]
339  // << " , lastModule = " << lastModule << std::endl;
340 
341  int binNumber = hSubFilterCount[trig]->getTH1F()->GetXaxis()->FindBin(triggerFilters_[trig][filt+1].c_str());
342 
343  //check if filter passed
344  if(trh->accept(HLTPathsByIndex_[trig])){
345  hSubFilterCount[trig]->Fill(binNumber-1);//binNumber1 = 0 = first filter
346  }
347  //otherwise the module that issued the decision is the first fail
348  //so that all the ones before it passed
349  else if(triggerFilterIndices_[trig][filt+1] < lastModule){
350  hSubFilterCount[trig]->Fill(binNumber-1);
351  }
352 
353  //hSubFilterCount[trig]->Fill(-1);
354 
355  float eff = (float)hSubFilterCount[trig]->getBinContent(binNumber) / (float)total_ ;
356  float efferr = sqrt(eff*(1-eff)/ (float)total_);
357  hSubFilterEff[trig]->setBinContent(binNumber,eff);
358  hSubFilterEff[trig]->setBinError(binNumber,efferr);
359 
360  }//filt
361  }
362  }
363 
364  //and check validity name (should not be necessary)
365  std::vector<bool> validity(nValidTriggers_);
366  for (unsigned int i=0; i!=nValidTriggers_; i++) {
367  validity[i]=( (HLTPathsByIndex_[i]<trh->size()) && (HLTPathsByName_[i]!=invalid) );
368  }
369 
370 
371  //---------------------B i t P l o t t i n g S e c t i o n --------------------//
372  //---------------------------------------------------------------------------------//
373 
374  //convert also for the denominator and check validity
375  uint denominatorIndex = 0;
376  bool denominatorValidity= false;
377  if (denominator_!="") {
378  denominatorIndex=triggerNames.triggerIndex(denominator_);
379  denominatorValidity= (denominatorIndex <trh->size());
380  }
381 
382  std::stringstream report;
383  std::string sep=" ";
384  bool atLeastOne=false;
385 
386  //check whether the denominator fired
387  bool denomAccept=false;
388  if (ratio_ && denominatorValidity) {
389  denomAccept=trh->accept(denominatorIndex);
390  if(denomAccept) ndenomAccept_++;
391  }
392 
393  for (unsigned int i=0; i!=nValidTriggers_; i++) {
394  if (!validity[i]) continue;
395  bool iAccept=trh->accept(HLTPathsByIndex_[i]);
396  if (iAccept) {
397  report<<sep<<HLTPathsByName_[i];
398  count_[i]++;
399  sep=", ";
400  atLeastOne=true;
401  //trigger has fired. make an entry in both 1D and profile plots
402  h1_->Fill(i);
403  //make the entry in the 2D plot : UPPER diagonal terms = AND of the two triggers
404  for (unsigned int j=i; j!=nValidTriggers_; j++) {
405  if (!validity[j]) continue;
406  if (trh->accept(HLTPathsByIndex_[j]))
407  h2_->Fill(i,j);
408  }//loop on second trigger for AND terms
409  }//trigger[i]=true
410 
411  float pf_eff = (float)h1_->getBinContent(i+1) / (float)total_ ;
412  float pf_efferr = sqrt(pf_eff*(1-pf_eff) / (float)total_);
413  pf_->setBinContent(i+1,pf_eff);
414  pf_->setBinError(i+1,pf_efferr);
415 
416  //make proper entries in the ratio plot
417  if (ratio_ && denomAccept){
418  float ratio_eff = (float)h1_->getBinContent(i+1) / (float)ndenomAccept_ ;
419  float ratio_efferr = sqrt(ratio_eff*(1-ratio_eff) / (float)ndenomAccept_);
420  ratio_->setBinContent(i+1,ratio_eff);
421  ratio_->setBinError(i+1,ratio_efferr);
422  }
423 
424 
425  //make proper entry inthe 2D plot: LOWER diagonal terms = OR of the two triggers
426  for (unsigned int j=0; j!=i; j++) {
427  if (!validity[j]) continue;
428  bool jAccept=trh->accept(HLTPathsByIndex_[j]);
429  if (iAccept || jAccept)
430  h2_->Fill(i,j);
431  }//loop on second trigger for OR terms
432 
433  }//loop on first trigger
434 
435  if (atLeastOne){
436  LogDebug("BitPlotting|BitReport")<<report.str();
437  }
438 
439  // edm::LogError("BitPlotting")<<"# entries:"<<h1_->getTH1F()->GetEntries();
440 
441  //-----------------E n d o f B i t P l o t t i n g S e c t i o n-----------------//
442 
443 }
445 
446  if(dbe_){
447  if (directory_ != "" && directory_.substr(directory_.length()-1,1) != "/" ) directory_ = directory_+"/" ;
448 
449  float min = -0.5;
450  float max = 400-0.5;
451  //uint nBin = HLTPathsByName_.size();
452  uint nBin = 400;
453 
455 
456  h1_ = dbe_->book1D("PassingBits_Summary_"+histLabel_,"PassingBits_Summary_"+histLabel_, nBin, min, max);
457  h2_ = dbe_->book2D("PassingBits_Correlation_"+histLabel_,"PassingBits_Correlation_"+histLabel_,nBin,min,max, nBin,min,max);
458  pf_ = dbe_->book1D("Efficiency_Summary_"+histLabel_,"Efficiency_Summary_"+histLabel_, nBin, min, max);
459  if (denominator_!="")
460  //ratio_ = dbe_->book1D(std::string("Ratio_"+denominator_),std::string("Ratio_"+denominator_),nBin,min,max);
461  ratio_ = dbe_->book1D("HLTRate_"+histLabel_,"HLTRate_"+histLabel_,nBin,min,max);
462  else
463  ratio_=0;
464 
465  }
466 
467 }
468 
469 // ------------ method called once each job just after ending the event loop ------------
471 
472  std::stringstream report;
473  report <<" out of: "<<total_<<" events.\n";
474  if(!count_.empty()){
475  for (uint i=0; i!=HLTPathsByName_.size();i++){
476  report<<HLTPathsByName_[i]<<" passed: "<<count_[i]<<" times.\n";
477  count_[i]=0;
478  }
479  }
480 
481  edm::LogInfo("HLTMonBitSummary|BitSummary")<<report.str();
482  LogDebug("HLTMonBitSummary|BitSummary")<<report.str();
483  total_=0;
484  // if( out_.size() != 0 ) edm::Service<DQMStore>()->save(out_);
485 
486 }
487 
488 
489 void HLTMonBitSummary::configSelector(const std::vector<std::string>& selectTriggers, std::vector<std::string > & theSelectTriggers){
490  //get the configuration
491  std::vector<std::string> validTriggerNames = hltConfig_.triggerNames();
492 
493  bool goodToGo = false;
494  //remove all path names that are not valid
495  while(!goodToGo && selectTriggers.size()!=0){
496  goodToGo=true;
497  for ( auto j=selectTriggers.begin();j!=selectTriggers.end();++j){
498  //bool goodOne = false;
499  //check if trigger name is valid
500  //use of wildcard
501  TPRegexp wildCard(*j);
502  //std::cout << "wildCard.GetPattern() = " << wildCard.GetPattern() << std::endl;
503  for (unsigned int i = 0; i != validTriggerNames.size(); ++i){
504  if (TString(validTriggerNames[i]).Contains(wildCard)){
505  //goodOne = true;
506  if (find(theSelectTriggers.begin(),
507  theSelectTriggers.end(),
508  validTriggerNames[i])==theSelectTriggers.end()){
509  //std::cout << "wildcard trigger = " << validTriggerNames[i] << std::endl;
510  theSelectTriggers.push_back( validTriggerNames[i] ); //add it after duplicate check.
511  }
512  }
513  }
514  }
515  }//while
516 }
#define LogDebug(id)
std::vector< MonitorElement * > hSubFilterCount
virtual void beginRun(const edm::Run &r, const edm::EventSetup &)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< std::string > HLTPathNamesConfig_
virtual void beginJob()
HLTConfigProvider hltConfig_
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
Definition: Event.cc:204
std::vector< MonitorElement * > hSubFilterEff
void setBinContent(int binx, double content)
set content of bin (1-D)
const std::string moduleType(const std::string &module) const
C++ class name of module.
std::string directory_
RunNumber_t run() const
Definition: RunBase.h:42
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:942
std::vector< std::string > HLTPathNamesKey_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:434
std::vector< std::string > dummyFilters_
std::string esPathsKey_
const std::vector< std::string > & triggerNames() const
names of trigger paths
#define NULL
Definition: scimark2.h:8
std::string denominator_
edm::EDGetTokenT< edm::TriggerResults > inputToken_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
edm::InputTag inputTag_
virtual void analyze(const edm::Event &, const edm::EventSetup &)
void Fill(long long x)
unsigned int ndenomAccept_
tuple report
Definition: zeeHLT_cff.py:9
std::string histLabel_
int iEvent
Definition: GenABIO.cc:230
std::string moduleName(Provenance const &provenance)
Definition: Provenance.cc:27
unsigned int moduleIndex(unsigned int trigger, const std::string &module) const
slot position of module on trigger path (0 to size-1)
unsigned int triggerIndex(std::string const &name) const
Definition: TriggerNames.cc:32
const T & max(const T &a, const T &b)
std::vector< unsigned int > HLTPathsByIndex_
T sqrt(T t)
Definition: SSEVec.h:48
int j
Definition: DBlmapReader.cc:9
void setBinError(int binx, double error)
set uncertainty on content of bin (1-D)
void setVerbose(unsigned level)
Definition: DQMStore.cc:619
std::vector< std::string > HLTPathDenomName_
std::vector< std::vector< uint > > triggerFilterIndices_
virtual void configSelector(const std::vector< std::string > &selectTriggers, std::vector< std::string > &theSelectTriggers)
int k[5][pyjets_maxn]
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
virtual void endJob()
bool failedToGet() const
Definition: HandleBase.h:80
std::vector< unsigned int > count_
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
const T & get() const
Definition: EventSetup.h:55
TH1F * getTH1F(void) const
std::vector< std::string > HLTPathNamesConfigPreVal_
MonitorElement * ratio_
std::string const & process() const
Definition: InputTag.h:46
double getBinContent(int binx) const
get content of bin (1-D)
std::vector< std::string > filterTypes_
MonitorElement * h2_
HLTMonBitSummary(const edm::ParameterSet &)
std::vector< std::string > HLTPathDenomNamePreVal_
unsigned int nValidTriggers_
std::vector< std::string > HLTPathsByName_
TH2F * getTH2F(void) const
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1070
MonitorElement * pf_
unsigned int total_
tuple size
Write out results.
MonitorElement * h1_
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:655
std::string denominatorWild_
Definition: Run.h:41
unsigned int nValidConfigTriggers_
std::vector< std::vector< std::string > > triggerFilters_