CMS 3D CMS Logo

GeneralHLTOffline.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: GeneralHLTOffline
4 // Class: GeneralHLTOffline
5 //
12 //
13 // Original Author: Jason Michael Slaunwhite,512 1-008,`+41227670494,
14 // Created: Fri Aug 5 10:34:47 CEST 2011
15 //
16 //
17 
18 // system include files
19 #include <memory>
20 
21 // user include files
24 
30 
38 
40 
41 #include "TMath.h"
42 #include "TStyle.h"
43 
44 //
45 // class declaration
46 //
47 
49 public:
50  explicit GeneralHLTOffline(const edm::ParameterSet &);
51  ~GeneralHLTOffline() override;
52 
53 private:
54  // virtual void beginJob() override;
55  void analyze(const edm::Event &, const edm::EventSetup &) override;
56  void bookHistograms(DQMStore::IBooker &, edm::Run const &iRun, edm::EventSetup const &iSetup) override;
57  void dqmBeginRun(edm::Run const &iRun, edm::EventSetup const &iSetup) override;
58  virtual void setupHltMatrix(DQMStore::IBooker &iBooker, const std::string &, int);
59  virtual void fillHltMatrix(const std::string &,
60  const std::string &,
61  bool,
62  bool,
65 
66  // ----------member data ---------------------------
67 
68  bool debugPrint;
72 
76  std::vector<std::vector<std::string> > PDsVectorPathsVector;
77  std::vector<std::string> AddedDatasets;
78  std::vector<std::string> DataSetNames;
79  std::map<std::string, std::vector<std::string> > PathModules;
83 
85  std::map<std::string, MonitorElement *> cppath_mini_;
86  std::map<std::string, MonitorElement *> cpfilt_mini_;
87  std::map<std::string, TH1F *> hist_cpfilt_mini_;
88 };
89 
90 //
91 // constructors and destructor
92 //
95  debugPrint = false;
96  outputPrint = false;
97 
98  plotDirectoryName = ps.getUntrackedParameter<std::string>("dirname", "HLT/General");
99 
100  hltTag = ps.getParameter<std::string>("HltProcessName");
101 
102  triggerSummaryTokenRAW = consumes<trigger::TriggerEventWithRefs>(
103  edm::InputTag(std::string("hltTriggerSummaryRAW"), std::string(""), hltTag));
105  consumes<trigger::TriggerEvent>(edm::InputTag(std::string("hltTriggerSummaryAOD"), std::string(""), hltTag));
107  consumes<edm::TriggerResults>(edm::InputTag(std::string("TriggerResults"), std::string(""), hltTag));
108 
109  if (debugPrint) {
110  std::cout << "Inside Constructor" << std::endl;
111  std::cout << "Got plot dirname = " << plotDirectoryName << std::endl;
112  }
113 }
114 
116 
117 // ------------ method called for each event ------------
119  if (debugPrint)
120  std::cout << "Inside analyze - run, block, event " << iEvent.id().run() << " , " << iEvent.id().luminosityBlock()
121  << " , " << iEvent.id() << " , " << std::endl;
122 
123  // Access Trigger Results
125  iEvent.getByToken(triggerResultsToken, triggerResults);
126 
127  if (!triggerResults.isValid()) {
128  if (debugPrint)
129  std::cout << "Trigger results not valid" << std::endl;
130  return;
131  }
132 
133  if (debugPrint)
134  std::cout << "Found triggerResults" << std::endl;
135 
137  iEvent.getByToken(triggerSummaryTokenRAW, rawTriggerEvent);
138 
139  edm::Handle<trigger::TriggerEvent> aodTriggerEvent;
140  iEvent.getByToken(triggerSummaryTokenAOD, aodTriggerEvent);
141 
142  bool hasRawTriggerEvent = true;
143  if (!rawTriggerEvent.isValid()) {
144  hasRawTriggerEvent = false;
145  if (debugPrint)
146  std::cout << "No RAW trigger summary found! Returning...";
147 
148  if (!aodTriggerEvent.isValid()) {
149  if (debugPrint)
150  std::cout << "No AOD trigger summary found! Returning...";
151  return;
152  }
153  }
154 
155  if (streamA_found_) {
156  const std::vector<std::string> &datasetNames = DataSetNames;
157  // Loop over PDs
158  for (unsigned int iPD = 0; iPD < datasetNames.size(); iPD++) {
159  // Loop over Paths in each PD
160  for (unsigned int iPath = 0; iPath < PDsVectorPathsVector[iPD].size(); iPath++) {
162  unsigned int index = hlt_config_.triggerIndex(pathName);
163  if (debugPrint) {
164  std::cout << "Looking at path " << pathName << std::endl;
165  std::cout << "Index = " << index << " triggerResults->size() = " << triggerResults->size() << std::endl;
166  }
167 
168  // fill the histos with empty weights......
169  const std::string &label = datasetNames[iPD];
170  std::string fullPathToCPP = "HLT/GeneralHLTOffline/" + label + "/cppath_" + label + hlt_menu_;
171  MonitorElement *ME_mini_cppath = nullptr;
172  TH1F *hist_mini_cppath = nullptr;
173  if (cppath_mini_.find(fullPathToCPP) != cppath_mini_.end()) {
174  ME_mini_cppath = cppath_mini_[fullPathToCPP];
175  hist_mini_cppath = ME_mini_cppath->getTH1F();
176  }
177 
178  if (hist_mini_cppath) {
179  TAxis *axis = hist_mini_cppath->GetXaxis();
180  if (axis) {
181  std::string pathNameNoVer = hlt_config_.removeVersion(PDsVectorPathsVector[iPD][iPath]);
182  int bin_num = axis->FindBin(pathNameNoVer.c_str());
183  int bn = bin_num - 1;
184  hist_mini_cppath->Fill(bn, 0);
185  hist_mini_cppath->SetEntries(hist_mini_cppath->Integral());
186  }
187  }
188 
189  if (index < triggerResults->size()) {
190  bool accept = triggerResults->accept(index);
191  if (accept)
192  cppath_->Fill(index, 1);
193 
194  fillHltMatrix(datasetNames[iPD], pathName, accept, hasRawTriggerEvent, rawTriggerEvent, aodTriggerEvent);
195  } // end if (index < triggerResults->size())
196  } // end Loop over Paths in each PD
197  } // end Loop over PDs
198  }
199 }
200 
201 // ------------ method called when starting to processes a run ------------
202 void GeneralHLTOffline::dqmBeginRun(edm::Run const &iRun, edm::EventSetup const &iSetup) {
203  if (debugPrint)
204  std::cout << "Inside beginRun" << std::endl;
205 
206  // Reset "condition" variables that could have memory of previous
207  // runs.
208 
209  PDsVectorPathsVector.clear();
210  AddedDatasets.clear();
211  DataSetNames.clear();
212  PathModules.clear();
213 
214  bool changed = true;
215  if (!hlt_config_.init(iRun, iSetup, hltTag, changed)) {
216  if (debugPrint) {
217  std::cout << "Warning, didn't find process HLT" << std::endl;
218  return;
219  }
220  } else {
221  if (debugPrint)
222  std::cout << " HLTConfig processName " << hlt_config_.processName() << " tableName " << hlt_config_.tableName()
223  << " size " << hlt_config_.size() << std::endl;
224  }
226  for (unsigned int n = 0, e = hlt_menu_.length(); n != e; ++n)
227  if (hlt_menu_[n] == '/' || hlt_menu_[n] == '.')
228  hlt_menu_[n] = '_';
229 
230  const std::vector<std::string> &nameStreams = hlt_config_.streamNames();
231  auto si = nameStreams.begin();
232  auto se = nameStreams.end();
233  std::vector<std::string> datasetNames;
234 
235  for (; si != se; ++si) {
236  if (debugPrint)
237  std::cout << "This is stream " << *si << std::endl;
238 
239  if (((*si).find("Physics") != std::string::npos) || ((*si).find("Scouting") != std::string::npos) ||
240  ((*si).find("Parking") != std::string::npos) || (*si) == "A") {
241  streamA_found_ = true;
242 
243  std::vector<std::string> datasetperStream = hlt_config_.streamContent(*si);
244 
245  for (auto const &di : datasetperStream) {
246  datasetNames.push_back(di);
247  }
248  }
249  }
250 
251  if (debugPrint)
252  std::cout << "Number of total datasets " << datasetNames.size() << std::endl;
253 
254  if (streamA_found_) {
256 
257  if (debugPrint)
258  std::cout << "Number of datasets to be monitored " << datasetNames.size() << std::endl;
259 
260  for (auto const &datasetName : datasetNames) {
261  const std::vector<std::string> &datasetPaths = hlt_config_.datasetContent(datasetName);
262  if (debugPrint) {
263  std::cout << "This is dataset " << datasetName << "datasetPaths.size() = " << datasetPaths.size() << std::endl;
264  for (auto const &datasetPath : datasetPaths) {
265  std::cout << "Paths in begin job " << datasetPath << std::endl;
266  }
267  }
268 
269  // Check if dataset has been added - if not add it
270  // need to loop through AddedDatasets and compare
271  bool foundDataset = false;
272  int datasetNum = -1;
273  for (unsigned int d = 0; d < AddedDatasets.size(); d++) {
274  if (AddedDatasets[d] == datasetName) {
275  foundDataset = true;
276  datasetNum = d;
277  if (debugPrint)
278  std::cout << "Dataset " << datasetName << " found in AddedDatasets at position " << d << std::endl;
279  break;
280  }
281  }
282 
283  if (!foundDataset) {
284  if (debugPrint)
285  std::cout << " Fill trigger paths for dataset " << datasetName << std::endl;
286  PDsVectorPathsVector.push_back(datasetPaths);
287  // store dataset pathname
288  AddedDatasets.push_back(datasetName);
289  } else {
290  // This trigger path has already been added - this implies that
291  // this is a new run What we want to do is check if there is a
292  // new trigger that was not in the original dataset For a given
293  // dataset, loop over the stored list of triggers, and compare
294  // to the current list of triggers If any of the triggers are
295  // missing, add them to the end of the appropriate dataset
296  if (debugPrint)
297  std::cout << " Additional runs : Check for additional"
298  << "trigger paths per dataset " << std::endl;
299  // Loop over correct path of PDsVectorPathsVector
300  bool found = false;
301 
302  // Loop over triggers in the path
303  for (unsigned int iTrig = 0; iTrig < datasetPaths.size(); iTrig++) {
304  if (debugPrint)
305  std::cout << "Looping over trigger list in dataset " << iTrig << " " << datasetPaths[iTrig] << std::endl;
306  found = false;
307  // Loop over triggers already on the list
308  for (unsigned int od = 0; od < PDsVectorPathsVector[datasetNum].size(); od++) {
309  if (debugPrint)
310  std::cout << "Looping over existing trigger list " << od << " " << PDsVectorPathsVector[datasetNum][od]
311  << std::endl;
312  // Compare, see if match is found
313  if (hlt_config_.removeVersion(datasetPaths[iTrig]) ==
315  found = true;
316  if (debugPrint)
317  std::cout << " FOUND " << datasetPaths[iTrig] << std::endl;
318  break;
319  }
320  }
321  // If match is not found, add trigger to correct path of PDsVectorPathsVector
322  if (!found)
323  PDsVectorPathsVector[datasetNum].push_back(datasetPaths[iTrig]);
324  if (debugPrint)
325  std::cout << datasetPaths[iTrig] << " NOT FOUND - so we added it to the correct dataset " << datasetName
326  << std::endl;
327  }
328  }
329  // Let's check this whole big structure
330  if (debugPrint) {
331  for (unsigned int is = 0; is < PDsVectorPathsVector.size(); is++) {
332  std::cout << " PDsVectorPathsVector[" << is << "] is " << PDsVectorPathsVector[is].size() << std::endl;
333  for (unsigned int ip = 0; ip < PDsVectorPathsVector[is].size(); ip++) {
334  std::cout << " trigger " << ip << " path " << PDsVectorPathsVector[is][ip] << std::endl;
335  }
336  }
337  }
338 
339  if (debugPrint)
340  std::cout << "Found PD: " << datasetName << std::endl;
341  } // end of loop over dataset names
342 
343  std::vector<std::string> triggerNames = hlt_config_.triggerNames();
344 
345  for (auto pathName : triggerNames) {
346  const std::vector<std::string> &moduleLabels = hlt_config_.moduleLabels(pathName);
347  auto NumModules = int(moduleLabels.size());
348 
349  if (!(pathName.find("HLT_") != std::string::npos))
350  continue;
351  if ((pathName.find("HLT_Physics") != std::string::npos) || (pathName.find("HLT_Random") != std::string::npos))
352  continue;
353 
354  std::string prefix("hltPre");
355 
356  std::vector<std::string> good_module_names;
357  good_module_names.clear();
358  for (int iMod = 0; iMod < NumModules; iMod++) {
359  std::string moduleType = hlt_config_.moduleType(moduleLabels[iMod]);
360  std::string moduleEDMType = hlt_config_.moduleEDMType(moduleLabels[iMod]);
361  if (!(moduleEDMType == "EDFilter"))
362  continue;
363  if (moduleType.find("Selector") != std::string::npos)
364  continue;
365  if (moduleType == "HLTTriggerTypeFilter" || moduleType == "HLTBool" ||
366  moduleType == "PrimaryVertexObjectFilter" || moduleType == "JetVertexChecker" ||
367  moduleType == "HLTRHemisphere" || moduleType == "DetectorStateFilter")
368  continue;
369 
370  if (moduleLabels[iMod].compare(0, prefix.length(), prefix) == 0)
371  continue;
372  good_module_names.push_back(moduleLabels[iMod]);
373  }
374  PathModules[pathName] = good_module_names;
375  } // loop over paths
376 
377  } // if stream A or Physics streams found
378 }
379 
380 // ------------ method called to book histograms before starting event loop ------------
382  edm::Run const &iRun,
383  edm::EventSetup const &iSetup) {
385 
387 
388  iBooker.setCurrentFolder("HLT/GeneralHLTOffline/");
389  iBooker.bookString("hltMenuName", hlt_menu_.c_str());
390  cppath_ = iBooker.book1D("cppath" + hlt_menu_, "Counts/Path", hlt_config_.size(), 0, hlt_config_.size());
391 
392  if (streamA_found_) {
393  for (unsigned int iPD = 0; iPD < DataSetNames.size(); iPD++)
394  setupHltMatrix(iBooker, DataSetNames[iPD], iPD);
395 
396  } // if stream A or Physics streams are found
397 } // end of bookHistograms
398 
400  std::string h_name;
401  std::string h_title;
403  std::string PD_Folder;
404  std::string Path_Folder;
405 
406  PD_Folder = "HLT/GeneralHLTOffline/" + label;
407 
408  iBooker.setCurrentFolder(PD_Folder);
409 
410  // make it the top level directory, that is on the same dir level as
411  // paths
412  std::string folderz;
413  folderz = "HLT/GeneralHLTOffline/" + label;
414  iBooker.setCurrentFolder(folderz);
415 
416  std::string dnamez = "cppath_" + label + "_" + hlt_menu_;
417  int sizez = PDsVectorPathsVector[iPD].size();
418  TH1F *hist_mini_cppath = nullptr;
419  cppath_mini_[dnamez] = iBooker.book1D(dnamez.c_str(), dnamez.c_str(), sizez, 0, sizez);
420  if (cppath_mini_[dnamez])
421  hist_mini_cppath = cppath_mini_[dnamez]->getTH1F();
422 
423  unsigned int jPath;
424  for (unsigned int iPath = 0; iPath < PDsVectorPathsVector[iPD].size(); iPath++) {
425  pathName = hlt_config_.removeVersion(PDsVectorPathsVector[iPD][iPath]);
426  jPath = iPath + 1;
427 
428  if (hist_mini_cppath) {
429  TAxis *axis = hist_mini_cppath->GetXaxis();
430  if (axis)
431  axis->SetBinLabel(jPath, pathName.c_str());
432  }
433 
434  std::string pathNameVer = PDsVectorPathsVector[iPD][iPath];
435 
436  std::vector<std::string> moduleLabels = PathModules[pathNameVer];
437  auto NumModules = int(moduleLabels.size());
438 
439  if (NumModules == 0)
440  continue;
441 
442  std::string pathName_dataset = "cpfilt_" + label + "_" + pathName;
443 
444  cpfilt_mini_[pathName_dataset] =
445  iBooker.book1D(pathName_dataset.c_str(), pathName.c_str(), NumModules, 0, NumModules);
446 
447  if (cpfilt_mini_[pathName_dataset])
448  hist_cpfilt_mini_[pathName_dataset] = cpfilt_mini_[pathName_dataset]->getTH1F();
449 
450  for (int iMod = 0; iMod < NumModules; iMod++) {
451  if (cpfilt_mini_[pathName_dataset] && hist_cpfilt_mini_[pathName_dataset]) {
452  TAxis *axis = hist_cpfilt_mini_[pathName_dataset]->GetXaxis();
453  if (axis)
454  axis->SetBinLabel(iMod + 1, moduleLabels[iMod].c_str());
455  }
456  }
457 
458  if (debugPrint)
459  std::cout << "book1D for " << pathName << std::endl;
460  }
461 
462  if (debugPrint)
463  std::cout << "Success setupHltMatrix( " << label << " , " << iPD << " )" << std::endl;
464 } // End setupHltMatrix
465 
467  const std::string &path,
468  bool accept,
469  bool hasRawTriggerEvent,
471  edm::Handle<trigger::TriggerEvent> triggerEventAOD) {
472  if (debugPrint)
473  std::cout << "Inside fillHltMatrix( " << label << " , " << path << " ) " << std::endl;
474 
475  std::string fullPathToCPP;
476 
477  fullPathToCPP = "HLT/GeneralHLTOffline/" + label + "/cppath_" + label + "_" + hlt_menu_;
478 
479  std::string dnamez = "cppath_" + label + "_" + hlt_menu_;
480 
481  TH1F *hist_mini_cppath = nullptr;
482  MonitorElement *ME_mini_cppath = nullptr;
483  if (cppath_mini_.find(dnamez) != cppath_mini_.end()) {
484  ME_mini_cppath = cppath_mini_[dnamez];
485  hist_mini_cppath = ME_mini_cppath->getTH1F();
486  }
487 
488  std::string pathNameNoVer = hlt_config_.removeVersion(path);
489 
490  if ((path.find("HLT_") != std::string::npos) && !(path.find("HLT_Physics") != std::string::npos) &&
491  !(path.find("HLT_Random") != std::string::npos)) {
492  unsigned int triggerEventSize = 0;
493  if (hasRawTriggerEvent && triggerEventRAW.isValid())
494  triggerEventSize = triggerEventRAW->size();
495  else if (triggerEventAOD.isValid())
496  triggerEventSize = triggerEventAOD->sizeFilters();
497 
498  std::string pathName_dataset = "cpfilt_" + label + "_" + pathNameNoVer;
499 
500  TH1F *hist_cpfilt_mini = nullptr;
501  MonitorElement *ME_cpfilt_mini = nullptr;
502  if (cpfilt_mini_.find(pathName_dataset) != cpfilt_mini_.end()) {
503  ME_cpfilt_mini = cpfilt_mini_[pathName_dataset];
504  hist_cpfilt_mini = ME_cpfilt_mini->getTH1F();
505  }
506 
507  std::vector<std::string> moduleLabels = PathModules[path];
508  auto NumModules = int(moduleLabels.size());
509 
510  for (int iMod = 0; iMod < NumModules; iMod++) {
511  edm::InputTag moduleWhoseResultsWeWant(moduleLabels[iMod], "", hltTag);
512 
513  unsigned int idx_module_trg = 0;
514  if (hasRawTriggerEvent && triggerEventRAW.isValid())
515  idx_module_trg = triggerEventRAW->filterIndex(moduleWhoseResultsWeWant);
516  else if (triggerEventAOD.isValid())
517  idx_module_trg = triggerEventAOD->filterIndex(moduleWhoseResultsWeWant);
518 
519  if (!(idx_module_trg < triggerEventSize))
520  continue;
521  if (hist_cpfilt_mini) {
522  TAxis *axis = hist_cpfilt_mini->GetXaxis();
523  int bin_num = axis->FindBin(moduleLabels[iMod].c_str());
524  int bn = bin_num - 1;
525 
526  if (bin_num != 1 && hasRawTriggerEvent) {
527  bool passPreviousFilters = true;
528  for (int ibin = bin_num - 1; ibin > 0; ibin--) {
529  std::string previousFilter(axis->GetBinLabel(ibin));
530  edm::InputTag previousModuleWhoseResultsWeWant(previousFilter, "", hltTag);
531  unsigned int idx_previous_module_trg = 0;
532  if (hasRawTriggerEvent && triggerEventRAW.isValid())
533  idx_previous_module_trg = triggerEventRAW->filterIndex(previousModuleWhoseResultsWeWant);
534  else if (triggerEventAOD.isValid())
535  idx_previous_module_trg = triggerEventAOD->filterIndex(previousModuleWhoseResultsWeWant);
536 
537  if (!(idx_previous_module_trg < triggerEventSize)) {
538  passPreviousFilters = false;
539  break;
540  }
541  }
542  // Only fill if previous filters have been passed
543  if (passPreviousFilters)
544  hist_cpfilt_mini->Fill(bn, 1);
545  } else
546  hist_cpfilt_mini->Fill(bn, 1);
547  }
548  }
549  } else {
550  if (debugPrint)
551  std::cout << "No AOD trigger summary found! Returning..." << std::endl;
552  }
553 
554  if (accept && hist_mini_cppath) {
555  TAxis *axis = hist_mini_cppath->GetXaxis();
556  int bin_num = axis->FindBin(pathNameNoVer.c_str());
557  int bn = bin_num - 1;
558  hist_mini_cppath->Fill(bn, 1);
559  }
560 
561  if (debugPrint)
562  std::cout << "hist->Fill" << std::endl;
563 } // End fillHltMatrix
564 
RunNumber_t run() const
Definition: EventID.h:38
unsigned int size() const
number of trigger paths in trigger table
size
Write out results.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool compare(const P &i, const P &j)
edm::EDGetTokenT< trigger::TriggerEventWithRefs > triggerSummaryTokenRAW
void analyze(const edm::Event &, const edm::EventSetup &) override
const std::string moduleType(const std::string &module) const
C++ class name of module.
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:146
MonitorElement * cppath_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
virtual TH1F * getTH1F() const
bool accept() const
Has at least one path accepted the event?
const std::vector< std::string > & triggerNames() const
names of trigger paths
#define nullptr
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
Definition: TriggerEvent.h:132
edm::EDGetTokenT< trigger::TriggerEvent > triggerSummaryTokenAOD
const std::string moduleEDMType(const std::string &module) const
C++ base class name of module.
const std::string & tableName() const
HLT ConfDB table name.
std::map< std::string, std::vector< std::string > > PathModules
std::string plotDirectoryName
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:39
static const std::string removeVersion(const std::string &trigger)
virtual void setupHltMatrix(DQMStore::IBooker &iBooker, const std::string &, int)
unsigned int triggerIndex(const std::string &triggerName) const
slot position of trigger path in trigger table (0 to size-1)
void Fill(long long x)
char const * label
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const std::vector< std::string > & streamNames() const
unsigned int size() const
Get number of paths stored.
const std::vector< std::string > & streamContent(unsigned int stream) const
names of datasets in stream with index i
~GeneralHLTOffline() override
std::map< std::string, TH1F * > hist_cpfilt_mini_
static std::string const triggerResults
Definition: EdmProvDump.cc:45
bool isValid() const
Definition: HandleBase.h:70
d
Definition: ztail.py:151
std::map< std::string, MonitorElement * > cpfilt_mini_
virtual void fillHltMatrix(const std::string &, const std::string &, bool, bool, edm::Handle< trigger::TriggerEventWithRefs >, edm::Handle< trigger::TriggerEvent >)
const std::string & processName() const
process name
size_type filterIndex(const edm::InputTag &filterTag) const
index from tag
const std::vector< std::string > & moduleLabels(unsigned int trigger) const
label(s) of module(s) on a trigger path
const std::vector< std::string > & datasetContent(unsigned int dataset) const
names of trigger paths in dataset with index i
void dqmBeginRun(edm::Run const &iRun, edm::EventSetup const &iSetup) override
std::map< std::string, MonitorElement * > cppath_mini_
std::vector< std::string > AddedDatasets
void bookHistograms(DQMStore::IBooker &, edm::Run const &iRun, edm::EventSetup const &iSetup) override
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
HLTConfigProvider hlt_config_
size_type size() const
number of filters
edm::EventID id() const
Definition: EventBase.h:59
std::vector< std::vector< std::string > > PDsVectorPathsVector
GeneralHLTOffline(const edm::ParameterSet &)
std::vector< std::string > DataSetNames
MonitorElement * bookString(TString const &name, TString const &value)
Definition: DQMStore.cc:235
edm::EDGetTokenT< edm::TriggerResults > triggerResultsToken
string datasetName
Definition: dataset.py:930
Definition: Run.h:45