CMS 3D CMS Logo

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

#include <HLTOfflineReproducibility/src/HLTOfflineReproducibility.cc>

Inheritance diagram for HLTOfflineReproducibility:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

 HLTOfflineReproducibility (const edm::ParameterSet &)
 
 ~HLTOfflineReproducibility ()
 
- Public Member Functions inherited from edm::EDAnalyzer
 EDAnalyzer ()
 
std::string workerType () const
 
virtual ~EDAnalyzer ()
 
- Public Member Functions inherited from edm::EDConsumerBase
 EDConsumerBase ()
 
ProductHolderIndex indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndex > &) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 

Private Member Functions

virtual void analyze (const edm::Event &, const edm::EventSetup &)
 
virtual void beginJob ()
 
virtual void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void beginRun (edm::Run const &, edm::EventSetup const &)
 
bool check (std::string process, std::string pCheck)
 
virtual void endJob ()
 
virtual void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &)
 
virtual void endRun (edm::Run const &, edm::EventSetup const &)
 

Private Attributes

vector< vector< string > > datasetContent_
 
vector< string > datasetNames_
 
bool dqm_
 
DQMStoredqms_
 
HLTConfigProvider hltConfig_
 
bool isRealData_
 
int LumiSecNumber_
 
vector< vector< string > > moduleLabel_
 
vector< vector< string > > moduleLabelNEW_
 
vector< vector< string > > moduleLabelORIG_
 
unsigned int nDatasets_
 
int Nfiles_
 
vector< unsigned int > nModules_
 
double Normalization_
 
unsigned int nPaths_
 
vector< unsigned int > nPaths_PD_
 
unsigned int nPathsNEW_
 
unsigned int nPathsORIG_
 
TH1F * path_NEWnotORIG_hist
 
vector< TH1F * > path_NEWnotORIG_hist_PD
 
TH1F * path_ORIG_hist
 
vector< TH1F * > path_ORIG_hist_PD
 
TH1F * path_ORIGnotNEW_hist
 
vector< TH1F * > path_ORIGnotNEW_hist_PD
 
TH2F * pathmodule_NEWnotORIG_hist
 
vector< TH2F * > pathmodule_NEWnotORIG_hist_PD
 
TH2F * pathmodule_ORIGnotNEW_hist
 
vector< TH2F * > pathmodule_ORIGnotNEW_hist_PD
 
string processNameNEW_
 
string processNameORIG_
 
vector< int > trigger_NEW_
 
vector< int > trigger_ORIG_
 
edm::InputTag triggerLabelNEW_
 
edm::InputTag triggerLabelORIG_
 
vector< string > triggerNames_
 
vector< vector< vector< bool > > > triggerNames_matched_
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
typedef WorkerT< EDAnalyzerWorkerType
 
- Protected Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
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 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)
 

Detailed Description

Description: compares two instances of the HLT trigger results, often online (ORIG) and rerunning the HLT offline (NEW)

Implementation: set dqm to true to use the DQM version of the module

Definition at line 64 of file HLTOfflineReproducibility.cc.

Constructor & Destructor Documentation

HLTOfflineReproducibility::HLTOfflineReproducibility ( const edm::ParameterSet iConfig)
explicit

Definition at line 136 of file HLTOfflineReproducibility.cc.

References dqm_, dqms_, and cppFunctionSkipper::operator.

136  :
137  dqm_ (iConfig.getUntrackedParameter<bool>("dqm")),
138  triggerLabelORIG_ (iConfig.getUntrackedParameter<edm::InputTag>("triggerTagORIG")),
139  triggerLabelNEW_ (iConfig.getUntrackedParameter<edm::InputTag>("triggerTagNEW")),
140  nPaths_ (0),
141  nDatasets_ (0),
142  triggerNames_ (),
143  moduleLabel_ (),
144  nModules_ (),
145  nPaths_PD_ (),
146  datasetNames_ (),
147  datasetContent_ (),
149  processNameORIG_ (iConfig.getParameter<std::string>("processNameORIG")),
150  processNameNEW_ (iConfig.getParameter<std::string>("processNameNEW")),
151  Nfiles_ (iConfig.getUntrackedParameter<int>("Nfiles",0)),
152  Normalization_ (iConfig.getUntrackedParameter<double>("Norm",40.)),
153  isRealData_ (iConfig.getUntrackedParameter<bool>("isRealData",true)),
154  LumiSecNumber_ (iConfig.getUntrackedParameter<int>("LumiSecNumber",1)),
155  path_ORIG_hist (0),
165 {
166  //now do what ever initialization is needed
167  //define parameters
169 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
vector< vector< string > > moduleLabel_
vector< vector< string > > datasetContent_
vector< vector< vector< bool > > > triggerNames_matched_
HLTOfflineReproducibility::~HLTOfflineReproducibility ( )

Definition at line 172 of file HLTOfflineReproducibility.cc.

173 {
174 
175  // do anything here that needs to be done at desctruction time
176  // (e.g. close files, deallocate resources etc.)
177 
178 }

Member Function Documentation

void HLTOfflineReproducibility::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
privatevirtual

Implements edm::EDAnalyzer.

Definition at line 187 of file HLTOfflineReproducibility.cc.

References a, b, dqm_, dqms_, edm::Event::getByLabel(), hltConfig_, i, j, LogDebug, HLTConfigProvider::moduleIndex(), moduleLabel_, moduleLabelNEW_, moduleLabelORIG_, HLTConfigProvider::moduleType(), nDatasets_, nModules_, nPaths_, nPaths_PD_, nPathsNEW_, nPathsORIG_, path_NEWnotORIG_hist, path_NEWnotORIG_hist_PD, path_ORIG_hist, path_ORIG_hist_PD, path_ORIGnotNEW_hist, path_ORIGnotNEW_hist_PD, pathmodule_NEWnotORIG_hist, pathmodule_NEWnotORIG_hist_PD, pathmodule_ORIGnotNEW_hist, pathmodule_ORIGnotNEW_hist_PD, trigger_NEW_, trigger_ORIG_, triggerLabelNEW_, triggerLabelORIG_, triggerNames_, triggerNames_matched_, and x.

188 {
189  // if DQM was requested, check that the DQMService is available
190  if (dqm_ and not dqms_) return;
191 
192  using namespace edm;
193 
194  //Initialize Trigger
195  TriggerResults trORIG_;
196  Handle<TriggerResults> h_trigResORIG_;
197  iEvent.getByLabel(triggerLabelORIG_, h_trigResORIG_);
198  trORIG_ = *h_trigResORIG_;
199 
200  TriggerResults trNEW_;
201  Handle<TriggerResults> h_trigResNEW_;
202  iEvent.getByLabel(triggerLabelNEW_, h_trigResNEW_);
203  trNEW_ = *h_trigResNEW_;
204 
205  vector<string> triggerListORIG_;
207  bool foundNamesORIG_ = tnsORIG_->getTrigPaths(trORIG_,triggerListORIG_);
208  if (!foundNamesORIG_) LogError("DataNotFound")<<"Could not get ORIG trigger names!";
209  if (trORIG_.size()!=triggerListORIG_.size()) LogError("DataNotFound")<<"Length of names and paths not the same: " << triggerListORIG_.size() << "," << trORIG_.size() << endl;
210 
211  vector<string> triggerListNEW_;
213  bool foundNamesNEW_ = tnsNEW_->getTrigPaths(trNEW_,triggerListNEW_);
214  if (!foundNamesNEW_) LogError("DataNotFound")<<"Could not get trigger names!";
215  if (trNEW_.size()!=triggerListNEW_.size()) LogError("DataNotFound")<<"Length of names and paths not the same: " << triggerListNEW_.size() << "," << trNEW_.size() << endl;
216 
217 
218  vector<bool> ORIG_accept_, NEW_accept_, fails_prescaler_;
219  vector<int> module_indexORIG_, module_indexNEW_;
220  vector<string> module_index_labelORIG_, module_index_labelNEW_;
221 
222  for (unsigned int x=0; x<nPaths_; x++) {
223  ORIG_accept_.push_back(false);
224  NEW_accept_.push_back(false);
225  module_indexORIG_.push_back(-1);
226  module_indexNEW_.push_back(-1);
227  module_index_labelORIG_.push_back(" ");
228  module_index_labelNEW_.push_back(" ");
229  fails_prescaler_.push_back(false);
230  }
231 
232  //loop over ORIG trigger paths
233  for (unsigned int i=0; i<nPathsORIG_; i++) {
234  for (unsigned int x=0; x<nPaths_; x++) {
235  //match to list of paths that are in common to both ORIG and NEW
236  if (triggerListORIG_.at(i)==triggerNames_.at(x)) {
237  LogDebug("event")<<"triggerListORIG and triggerNames matched for 'global' path "<<x<<", "<<triggerNames_.at(x);
238 
239  //if ORIG accepted
240  if (trORIG_.at(i).wasrun()==1 && trORIG_.at(i).accept()==1 && trORIG_.at(i).error()==0) {
241  LogDebug("event")<<"ORIG accepted";
242  ORIG_accept_.at(x) = true;
243  trigger_ORIG_.at(x)++;
244  path_ORIG_hist->Fill(x);
245  for (unsigned int a=0; a<nDatasets_; a++) {
246  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
247  if (triggerNames_matched_.at(x).at(a).at(b)){
248  path_ORIG_hist_PD.at(a)->Fill(b);
249  }
250  }
251  }
252  }
253 
254  //if ORIG failed
255  if (trORIG_.at(i).accept() == 0){
256  LogDebug("event")<<"ORIG failed";
257  module_index_labelORIG_.at(x) = moduleLabelORIG_.at(i)[trORIG_.at(i).index()];
258  module_indexORIG_.at(x) = hltConfig_.moduleIndex(triggerNames_.at(x),module_index_labelORIG_.at(x));
259  }
260 
261  //for each path, loop over modules and find if a path fails on a prescaler
262  for (unsigned int j=0; j<nModules_.at(x); ++j) {
263  //const string& moduleLabel_(moduleLabel.at(j));
264  const string& moduleType = hltConfig_.moduleType(moduleLabel_.at(x).at(j));
265  if ( (trORIG_.at(i).accept()==0 && j==trORIG_.at(i).index()) && (moduleType=="HLTPrescaler" || moduleType=="TriggerResultsFilter") ) fails_prescaler_.at(x) = true;
266  }
267 
268  }
269  }
270  }
271 
272  //loop over NEW trigger paths
273  for (unsigned int i=0; i<nPathsNEW_; i++) {
274  for (unsigned int x=0; x<nPaths_; x++) {
275  if (triggerListNEW_.at(i)==triggerNames_.at(x)) {
276 
277  //if NEW accepted
278  if (trNEW_.at(i).wasrun()==1 && trNEW_.at(i).accept()==1 && trNEW_.at(i).error()==0) {
279  NEW_accept_.at(x) = true;
280  trigger_NEW_.at(x)++;
281  }
282 
283  //if NEW failed
284  if (trNEW_.at(i).accept() == 0) {
285  module_index_labelNEW_.at(x) = moduleLabelNEW_.at(i)[trNEW_.at(i).index()];
286  module_indexNEW_.at(x) = hltConfig_.moduleIndex(triggerNames_.at(x),module_index_labelNEW_.at(x));
287  }
288 
289  //for each path, loop over modules and find if a path fails on a prescaler
290  for (unsigned int j=0; j<nModules_.at(x); ++j) {
291  //const string& moduleLabel_(moduleLabel.at(j));
292  const string& moduleType = hltConfig_.moduleType(moduleLabel_.at(x).at(j));
293  if ( (trNEW_.at(i).accept()==0 && j==trNEW_.at(i).index()) && (moduleType=="HLTPrescaler" || moduleType=="TriggerResultsFilter") ) fails_prescaler_.at(x) = true;
294  }
295 
296  }
297  }
298  }
299 
300 
301  //check agreement between ORIG and NEW
302  //loop over trigger paths (ORIG and NEW)
303  for (unsigned int x=0; x<nPaths_; x++) {
304  if (!fails_prescaler_.at(x)){ //ignore paths that fail on a prescale
305  if(ORIG_accept_.at(x) && !NEW_accept_.at(x)){ //ORIG fires but NEW doesn't
306  path_ORIGnotNEW_hist->Fill(x);
307  pathmodule_ORIGnotNEW_hist->Fill(x,module_indexNEW_.at(x)); //module and path for where it fails NEW
308  LogInfo("EventNotReproduced")<<"Fires in ORIG but not NEW!!"<<" Path is: "<<triggerNames_.at(x)<<", last run module is: "<<module_index_labelNEW_.at(x);
309  for (unsigned int a=0; a<nDatasets_; a++) {
310  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
311  if (triggerNames_matched_.at(x).at(a).at(b)){
312  path_ORIGnotNEW_hist_PD.at(a)->Fill(b);
313  pathmodule_ORIGnotNEW_hist_PD.at(a)->Fill(b,module_indexNEW_.at(x)); //module and path for where it fails NEW
314  }
315  }
316  }
317  }
318  if(!ORIG_accept_.at(x) && NEW_accept_.at(x)){//NEW fires but ORIG doesn't
319  path_NEWnotORIG_hist->Fill(x);
320  pathmodule_NEWnotORIG_hist->Fill(x,module_indexORIG_.at(x)); //module and path for where it fails ORIG
321  LogInfo("EventNotReproduced")<<"Fires in NEW but not ORIG!!"<<" Path is: "<<triggerNames_.at(x)<<", last run module is: "<<module_index_labelORIG_.at(x)<<endl;
322  for (unsigned int a=0; a<nDatasets_; a++) {
323  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
324  if (triggerNames_matched_.at(x).at(a).at(b)){
325  path_NEWnotORIG_hist_PD.at(a)->Fill(b);
326  pathmodule_NEWnotORIG_hist_PD.at(a)->Fill(b,module_indexORIG_.at(x)); //module and path for where it fails ORIG
327  }
328  }
329  }
330  }
331  }
332  }//end of loop over trigger paths
333 
334 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
const std::string moduleType(const std::string &module) const
C++ class name of module.
unsigned int moduleIndex(unsigned int trigger, const std::string &module) const
slot position of module on trigger path (0 to size-1)
int j
Definition: DBlmapReader.cc:9
vector< vector< string > > moduleLabel_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
vector< vector< vector< bool > > > triggerNames_matched_
vector< vector< string > > moduleLabelORIG_
Definition: DDAxes.h:10
vector< vector< string > > moduleLabelNEW_
void HLTOfflineReproducibility::beginJob ( void  )
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 339 of file HLTOfflineReproducibility.cc.

340 {
341 }
void HLTOfflineReproducibility::beginLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 657 of file HLTOfflineReproducibility.cc.

658 {
659 }
void HLTOfflineReproducibility::beginRun ( edm::Run const &  iRun,
edm::EventSetup const &  iSetup 
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 351 of file HLTOfflineReproducibility.cc.

References a, b, DQMStore::book1D(), DQMStore::book2D(), HLTConfigProvider::datasetContent(), datasetContent_, HLTConfigProvider::datasetNames(), datasetNames_, dqm_, dqms_, getTH1F(), getTH2F(), hltConfig_, i, HLTConfigProvider::init(), init, j, LogDebug, TFileDirectory::make(), TFileDirectory::mkdir(), HLTConfigProvider::moduleLabel(), moduleLabel_, moduleLabelNEW_, moduleLabelORIG_, HLTConfigProvider::moduleLabels(), HLTConfigProvider::moduleType(), nDatasets_, nModules_, nPaths_, nPaths_PD_, nPathsNEW_, nPathsORIG_, path_NEWnotORIG_hist, path_NEWnotORIG_hist_PD, path_ORIG_hist, path_ORIG_hist_PD, path_ORIGnotNEW_hist, path_ORIGnotNEW_hist_PD, pathmodule_NEWnotORIG_hist, pathmodule_NEWnotORIG_hist_PD, pathmodule_ORIGnotNEW_hist, pathmodule_ORIGnotNEW_hist_PD, processNameNEW_, processNameORIG_, DQMStore::setCurrentFolder(), HLTConfigProvider::size(), trigger_NEW_, trigger_ORIG_, HLTConfigProvider::triggerNames(), triggerNames_, triggerNames_matched_, and x.

352 {
354  void init(const edm::TriggerResults &, const edm::TriggerNames & HLTNames);
355 
356  bool changed(true);
357  nPathsORIG_=0, nPathsNEW_=0;
358  vector<string> triggerNamesORIG_, triggerNamesNEW_;
359  vector<string> temp_;
360  unsigned int max_nModules_=0;
361  vector<unsigned int> max_nModules_PD_, nModules_diff_;
362  bool TriggerModuleNamesOK_ = true;
363 
364  //---------------------------------------hltConfig for ORIG-------------------------------
365  if (hltConfig_.init(iRun,iSetup,processNameORIG_,changed)) {
366  // if init returns TRUE, initialisation has succeeded!
367  if (changed) {
368  edm::LogInfo("HLTConfigProvider")<<"hlt_Config_.init returns true for ORIG"<<endl;
369  // The HLT config has actually changed wrt the previous Run, hence rebook your
370  // histograms or do anything else dependent on the revised HLT config
371  // check if trigger name in (new) config
372  triggerNamesORIG_ = hltConfig_.triggerNames();
373 
374  //loop over trigger paths
376  for (unsigned int i=0; i<nPathsORIG_; i++) {
377  temp_.clear();
378  //const vector<string> & moduleLabelsORIG(hltConfig_.moduleLabels(i));
379  for (unsigned int j=0; j<hltConfig_.moduleLabels(i).size(); j++) {
380  temp_.push_back(hltConfig_.moduleLabel(i,j));
381  }
382  moduleLabelORIG_.push_back(temp_);
383  }
384 
385  }
386  }
387  else {
388  // if init returns FALSE, initialisation has NOT succeeded, which indicates a problem
389  // with the file and/or code and needs to be investigated!
390  edm::LogError("HLTConfigProvider")<<" HLT config extraction failure with process name " << processNameORIG_;
391  // In this case, all access methods will return empty values!
392  }
393 
394  //-------------------hltConfig for NEW----------------------------------------
395  if (hltConfig_.init(iRun,iSetup,processNameNEW_,changed)) {
396  // if init returns TRUE, initialisation has succeeded!
397  if (changed) {
398  edm::LogInfo("HLTConfigProvider")<<"hlt_Config_.init returns true for NEW"<<endl;
399  // The HLT config has actually changed wrt the previous Run, hence rebook your
400  // histograms or do anything else dependent on the revised HLT config
401  // check if trigger name in (new) config
402  triggerNamesNEW_ = hltConfig_.triggerNames();
403 
404  //loop over trigger paths
406  for (unsigned int i=0; i<nPathsNEW_; i++) {
407  temp_.clear();
408  for (unsigned int j=0; j<hltConfig_.moduleLabels(i).size(); j++){
409  temp_.push_back(hltConfig_.moduleLabel(i,j));
410  }
411  moduleLabelNEW_.push_back(temp_);
412  }
413 
414  }
415  }
416  else {
417  // if init returns FALSE, initialisation has NOT succeeded, which indicates a problem
418  // with the file and/or code and needs to be investigated!
419  edm::LogError("HLTConfigProvider")<<" HLT config extraction failure with process name " << processNameNEW_;
420  // In this case, all access methods will return empty values!
421  }
422 
423  //------------------compare ORIG and NEW hltConfig------------------------
424  if (nPathsORIG_==0 || nPathsNEW_==0){
425  edm::LogError("TooLittleData")<<"There are 0 paths ORIG or NEW!! There are "<<nPathsORIG_<<" paths ORIG and "<<nPathsNEW_<<" paths NEW!!!";
426  TriggerModuleNamesOK_ = false;
427  }
428  else{
429  //define nPaths_ as number of paths shared between ORIG and NEW
430  if (nPathsORIG_<=nPathsNEW_) nPaths_=nPathsORIG_;
431  else nPaths_=nPathsNEW_;
432 
433  for (unsigned int i=0; i<nPathsORIG_; i++) {
434  for (unsigned int j=0; j<nPathsNEW_; j++) {
435  if (triggerNamesORIG_.at(i)==triggerNamesNEW_.at(j)){
436  triggerNames_.push_back(triggerNamesORIG_.at(i));
437  if (i!=j) edm::LogInfo("PathInfo")<<"Path "<<triggerNamesORIG_.at(i)<<" corresponds to path number "<<i<<" for ORIG and path number "<<j<<" for NEW";
438 
439  //define nModules_ as number of modules shared between ORIG and NEW
440  if (moduleLabelORIG_.at(i).size()<=moduleLabelNEW_.at(j).size()){
441  nModules_.push_back(moduleLabelORIG_.at(i).size());
442  LogDebug("")<<"moduleLabelORIG<=moduleLabelNEW, so moduleLabelORIG_.at(i).size() is: "<<moduleLabelORIG_.at(i).size()<<" for ORIG path "<<i;
443  }
444  else {
445  nModules_.push_back(moduleLabelNEW_.at(j).size());
446  LogDebug("")<<"moduleLabelORIG>moduleLabelNEW, so moduleLabelNEW_.at(j).size() is: "<<moduleLabelNEW_.at(j).size()<<" for NEW path "<<j;
447  }
448  int x;
449  if (i<=j) x=i;
450  else x=j;
451  LogDebug("")<<"nModules for 'global' path "<<x<<" is: "<<nModules_.at(x);
452 
453  if (nModules_.at(x)>max_nModules_) max_nModules_=nModules_.at(x);
454 
455  if (moduleLabelORIG_.at(i).size()>moduleLabelNEW_.at(j).size()) nModules_diff_.push_back(moduleLabelORIG_.at(i).size()-moduleLabelNEW_.at(j).size());
456  else nModules_diff_.push_back(moduleLabelNEW_.at(j).size()-moduleLabelORIG_.at(i).size());
457  LogDebug("")<<"nModules_diff is: "<<nModules_diff_.at(x)<<" for 'global' path "<<x;
458 
459  temp_.clear();
460  for (unsigned int a=0; a<moduleLabelORIG_.at(i).size(); a++) {
461  for (unsigned int b=0; b<moduleLabelNEW_.at(j).size(); b++) {
462  //match ORIG and NEW module labels
463  //since a module can be run twice per path, but not usually right after one another,
464  //require that a and b be fairly close to each other, +/- the difference in the number of modules run NEW vs ORIG,
465  //to avoid double-counting modules that are repeated later in the path
466  //also, since we need to work with unsigned ints, a or b could also be 0, ignoring the requirement described above
467  if ( (moduleLabelORIG_.at(i).at(a)==moduleLabelNEW_.at(j).at(b)) && ( (b<=a+nModules_diff_.at(x) && b>=a-nModules_diff_.at(x)) || (a==0 || b==0) ) ){
468  temp_.push_back(moduleLabelORIG_.at(i).at(a));
469  if (a!=b){
470  edm::LogInfo("PathInfo")<<"For path "<<triggerNamesORIG_.at(i)<<" in ORIG and "<<triggerNamesNEW_.at(j)<<" in NEW:"<<" module "<<moduleLabelORIG_.at(i).at(a)<<" corresponds to module number "<<a<<" for ORIG and module number "<<b<<" for NEW";
471  }
472  }
473  }
474  }
475  moduleLabel_.push_back(temp_);
476  }
477  }
478  }
479  }
480 
481 
482  //----------------------------------------------------------------------------------------------------------
483 
484  //if everything is good:
485  //save path and module names to be used in event loop, print out the module names and types for each path
486  //get paths in each dataset
487  if (TriggerModuleNamesOK_){
488 
489  //------------all paths--------------
490  edm::LogInfo("PathInfo")<<"There are "<<nPaths_<<" paths in total";
491  edm::LogInfo("PathInfo")<<"Maximum number of modules over all paths is: "<<max_nModules_;
492 
493  for (unsigned int x=0; x<nPaths_; x++) {
494  trigger_ORIG_.push_back(0);
495  trigger_NEW_.push_back(0);
496  edm::LogInfo("PathInfo")<<"For "<<triggerNames_.at(x)<<" (trigger number "<<x<<"), there are "<<nModules_.at(x)<<" modules:";
497  for (unsigned int j=0; j<nModules_.at(x); j++) {
498  const string& moduleType_ = hltConfig_.moduleType(moduleLabel_.at(x).at(j));
499  edm::LogInfo("PathInfo")<<" module "<<j<<" is "<<moduleLabel_.at(x).at(j)<<" and is of type "<<moduleType_;
500  }
501  }
502 
503 
504  //---------paths per dataset-------------------------------------------
505  //get datasets, initialize max_nModules_PD_
507  nDatasets_ = datasetNames_.size();
508  for (unsigned int a=0; a<nDatasets_; a++) {
509  max_nModules_PD_.push_back(0);
510  }
511 
512  //loop over datasets, paths in each dataset
513  for (unsigned int a=0; a<nDatasets_; a++) {
514  temp_.clear();
515  vector<string> datasetcontent_ = hltConfig_.datasetContent(a);
516  nPaths_PD_.push_back(datasetcontent_.size());
517  edm::LogInfo("DatasetInfo")<<"For dataset "<<datasetNames_.at(a)<<" (dataset number "<<a<<"), there are "<<nPaths_PD_.at(a)<<" paths:";
518  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
519  edm::LogInfo("DatasetInfo")<<" path "<<b<<" is "<<datasetcontent_.at(b);
520  temp_.push_back(datasetcontent_.at(b));
521  }
522  datasetContent_.push_back(temp_);
523  }
524 
525  //match trigger names in full list to trigger names per dataset; find max number of modules over all triggers in each dataset
526  //find matches
527  vector <vector<bool> > temp1_;
528  vector<bool> temp2_;
529  for (unsigned int x=0; x<nPaths_; x++) {
530  temp1_.clear();
531  for (unsigned int a=0; a<nDatasets_; a++) {
532  temp2_.clear();
533  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
534  if (triggerNames_.at(x)==datasetContent_.at(a).at(b)){
535  temp2_.push_back(true);
536  LogDebug("")<<"Matched trigger name is: "<<datasetContent_.at(a).at(b)<<" for dataset "<<a<<" and dataset path "<<b;
537  }
538  else temp2_.push_back(false);
539  }
540  temp1_.push_back(temp2_);
541  }
542  triggerNames_matched_.push_back(temp1_);
543  }
544 
545  //if matched and # of modules is bigger than all previous ones, take that number as new maximum
546  for (unsigned int x=0; x<nPaths_; x++) {
547  for (unsigned int a=0; a<nDatasets_; a++) {
548  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
549  if (triggerNames_matched_.at(x).at(a).at(b) && nModules_.at(x)>max_nModules_PD_.at(a)) max_nModules_PD_.at(a)=nModules_.at(x);
550  }
551  }
552  }
553 
554  //for (unsigned int a=0; a<nDatasets_; a++) {
555  //LogDebug("")<<"For dataset "<<datasetNames_.at(a)<<", the max number of modules is: "<<max_nModules_PD_.at(a);
556  //}
557 
558  }//end if all triggers and modules match from ORIG to NEW
559 
560 
561  //----------------------------------------------------------------------------------------------------------
562 
563  //define histograms
564 
565  //all paths
566  if(dqm_){
567  if (not dqms_) return;
568  dqms_->setCurrentFolder("DQMExample/DQMSource_HLTOfflineReproducibility");
569 
570  path_ORIG_hist = dqms_->book1D("path_ORIG_hist","Total Times Path Fires in ORIG",nPaths_,0,nPaths_)->getTH1F();
571  path_ORIGnotNEW_hist = dqms_->book1D("path_ORIGnotNEW_hist","Path fires in ORIG but not in NEW",nPaths_,0,nPaths_)->getTH1F();
572  path_NEWnotORIG_hist = dqms_->book1D("path_NEWnotORIG_hist","Path fires in NEW but not in ORIG",nPaths_,0,nPaths_)->getTH1F();
573  pathmodule_ORIGnotNEW_hist = dqms_->book2D("pathmodule_ORIGnotNEW_hist","Last run module index vs Path for NEW, when ORIG fired but NEW didn't",nPaths_,0,nPaths_,max_nModules_,0,max_nModules_)->getTH2F();
574  pathmodule_NEWnotORIG_hist = dqms_->book2D("pathmodule_NEWnotORIG_hist","Last run module index vs Path for ORIG, when NEW fired but ORIG didn't",nPaths_,0,nPaths_,max_nModules_,0,max_nModules_)->getTH2F();
575  }
576  else{
577  path_ORIG_hist = fs->make<TH1F>("path_ORIG_hist", "Total Times ORIG Path Fires in ORIG", nPaths_, 0, nPaths_);
578  path_ORIGnotNEW_hist = fs->make<TH1F>("path_ORIGnotNEW_hist", "Path fires in ORIG but not in NEW", nPaths_, 0, nPaths_);
579  path_NEWnotORIG_hist = fs->make<TH1F>("path_NEWnotORIG_hist", "Path fires in NEW but not in ORIG", nPaths_, 0, nPaths_);
580  pathmodule_ORIGnotNEW_hist = fs->make<TH2F>("pathmodule_ORIGnotNEW_hist", "Last run module index vs Path for NEW, when ORIG fired but NEW didn't", nPaths_, 0, nPaths_, max_nModules_, 0, max_nModules_);
581  pathmodule_NEWnotORIG_hist = fs->make<TH2F>("pathmodule_NEWnotORIG_hist", "Last run module index vs Path for ORIG, when NEW fired but ORIG didn't", nPaths_, 0, nPaths_, max_nModules_, 0, max_nModules_);
582  }
583 
584  //paths per dataset
585  char folder_name[500];
586  char path_ORIG_name[100], path_ORIGnotNEW_name[100], path_NEWnotORIG_name[100], pathmodule_ORIGnotNEW_name[100], pathmodule_NEWnotORIG_name[100];
587  for (unsigned int a = 0; a < nDatasets_; ++a) {
588  snprintf(path_ORIG_name, 100, "path_ORIG_hist_%s", datasetNames_.at(a).c_str());
589  snprintf(path_ORIGnotNEW_name, 100, "path_ORIGnotNEW_hist_%s", datasetNames_.at(a).c_str());
590  snprintf(path_NEWnotORIG_name, 100, "path_NEWnotORIG_hist_%s", datasetNames_.at(a).c_str());
591  snprintf(pathmodule_ORIGnotNEW_name, 100, "pathmodule_ORIGnotNEW_hist_%s", datasetNames_.at(a).c_str());
592  snprintf(pathmodule_NEWnotORIG_name, 100, "pathmodule_NEWnotORIG_hist_%s", datasetNames_.at(a).c_str());
593 
594  TString path_ORIG_title = "Total Times Path Fires ORIG (" + datasetNames_.at(a) + " dataset)";
595  TString path_ORIGnotNEW_title = "Path fires in ORIG but not in NEW (" + datasetNames_.at(a) + " dataset)";
596  TString path_NEWnotORIG_title = "Path fires in NEW but not in ORIG (" + datasetNames_.at(a) + " dataset)";
597  TString pathmodule_ORIGnotNEW_title = "Last run module index vs Path for NEW, when ORIG fired but NEW didn't (" + datasetNames_.at(a) + " dataset)";
598  TString pathmodule_NEWnotORIG_title = "Last run module index vs Path for ORIG, when NEW fired but ORIG didn't (" + datasetNames_.at(a) + " dataset)";
599 
600  if(dqm_){
601  sprintf(folder_name,"DQMExample/DQMSource_HLTOfflineReproducibility/%s",datasetNames_.at(a).c_str());
602  dqms_->setCurrentFolder(folder_name);
603 
604  path_ORIG_hist_PD.push_back(dqms_->book1D(path_ORIG_name,path_ORIG_title,nPaths_PD_.at(a),0,nPaths_PD_.at(a))->getTH1F());
605  path_ORIGnotNEW_hist_PD.push_back(dqms_->book1D(path_ORIGnotNEW_name,path_ORIGnotNEW_title,nPaths_PD_.at(a),0,nPaths_PD_.at(a))->getTH1F());
606  path_NEWnotORIG_hist_PD.push_back(dqms_->book1D(path_NEWnotORIG_name,path_NEWnotORIG_title,nPaths_PD_.at(a),0,nPaths_PD_.at(a))->getTH1F());
607  pathmodule_ORIGnotNEW_hist_PD.push_back(dqms_->book2D(pathmodule_ORIGnotNEW_name,pathmodule_ORIGnotNEW_title,nPaths_PD_.at(a),0,nPaths_PD_.at(a),max_nModules_PD_.at(a),0,max_nModules_PD_.at(a))->getTH2F());
608  pathmodule_NEWnotORIG_hist_PD.push_back(dqms_->book2D(pathmodule_NEWnotORIG_name,pathmodule_NEWnotORIG_title,nPaths_PD_.at(a),0,nPaths_PD_.at(a),max_nModules_PD_.at(a),0,max_nModules_PD_.at(a))->getTH2F());
609  }
610  else{
611  sprintf(folder_name,"%s",datasetNames_.at(a).c_str());
612  TFileDirectory subDir = fs->mkdir(folder_name);
613 
614  path_ORIG_hist_PD.push_back(subDir.make<TH1F>(path_ORIG_name, path_ORIG_title, nPaths_PD_.at(a), 0, nPaths_PD_.at(a)));
615  path_ORIGnotNEW_hist_PD.push_back(subDir.make<TH1F>(path_ORIGnotNEW_name, path_ORIGnotNEW_title, nPaths_PD_.at(a), 0, nPaths_PD_.at(a)));
616  path_NEWnotORIG_hist_PD.push_back(subDir.make<TH1F>(path_NEWnotORIG_name, path_NEWnotORIG_title, nPaths_PD_.at(a), 0, nPaths_PD_.at(a)));
617  pathmodule_ORIGnotNEW_hist_PD.push_back(subDir.make<TH2F>(pathmodule_ORIGnotNEW_name, pathmodule_ORIGnotNEW_title, nPaths_PD_.at(a), 0, nPaths_PD_.at(a), max_nModules_PD_.at(a), 0, max_nModules_PD_.at(a)));
618  pathmodule_NEWnotORIG_hist_PD.push_back(subDir.make<TH2F>(pathmodule_NEWnotORIG_name, pathmodule_NEWnotORIG_title, nPaths_PD_.at(a), 0, nPaths_PD_.at(a), max_nModules_PD_.at(a), 0, max_nModules_PD_.at(a)));
619  }
620 
621  }
622 
623 }
#define LogDebug(id)
unsigned int size() const
number of trigger paths in trigger table
int i
Definition: DBlmapReader.cc:9
const std::string moduleType(const std::string &module) const
C++ class name of module.
const std::vector< std::string > & triggerNames() const
names of trigger paths
int init
Definition: HydjetWrapper.h:63
const std::string & moduleLabel(unsigned int trigger, unsigned int module) const
int j
Definition: DBlmapReader.cc:9
TH1F * getTH1F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
vector< vector< string > > moduleLabel_
vector< vector< string > > datasetContent_
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
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
vector< vector< vector< bool > > > triggerNames_matched_
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
T * make() const
make new ROOT object
vector< vector< string > > moduleLabelORIG_
Definition: DDAxes.h:10
const std::vector< std::string > & datasetNames() const
vector< vector< string > > moduleLabelNEW_
bool HLTOfflineReproducibility::check ( std::string  process,
std::string  pCheck 
)
private
void HLTOfflineReproducibility::endJob ( void  )
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 345 of file HLTOfflineReproducibility.cc.

346 {
347 }
void HLTOfflineReproducibility::endLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 663 of file HLTOfflineReproducibility.cc.

664 {
665 }
void HLTOfflineReproducibility::endRun ( edm::Run const &  ,
edm::EventSetup const &   
)
privatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 627 of file HLTOfflineReproducibility.cc.

References a, b, datasetContent_, dqm_, dqms_, nDatasets_, nPaths_, nPaths_PD_, path_NEWnotORIG_hist, path_NEWnotORIG_hist_PD, path_ORIG_hist, path_ORIG_hist_PD, path_ORIGnotNEW_hist, path_ORIGnotNEW_hist_PD, pathmodule_NEWnotORIG_hist, pathmodule_NEWnotORIG_hist_PD, pathmodule_ORIGnotNEW_hist, pathmodule_ORIGnotNEW_hist_PD, trigger_NEW_, trigger_ORIG_, triggerNames_, and x.

628 {
629  // if DQM was requested, check that the DQMService is available
630  if (dqm_ and not dqms_) return;
631 
632  //all paths
633  for (unsigned int x=0; x<nPaths_; x++) {
634  edm::LogInfo("OrigNewFired")<<triggerNames_.at(x)<<" ORIG accepts: "<<trigger_ORIG_.at(x)<<", NEW accepts: "<<trigger_NEW_.at(x);
635  path_ORIG_hist->GetXaxis()->SetBinLabel(x+1,triggerNames_.at(x).c_str());
636  path_ORIGnotNEW_hist->GetXaxis()->SetBinLabel(x+1,triggerNames_.at(x).c_str());
637  path_NEWnotORIG_hist->GetXaxis()->SetBinLabel(x+1,triggerNames_.at(x).c_str());
638  pathmodule_ORIGnotNEW_hist->GetXaxis()->SetBinLabel(x+1,triggerNames_.at(x).c_str());
639  pathmodule_NEWnotORIG_hist->GetXaxis()->SetBinLabel(x+1,triggerNames_.at(x).c_str());
640  }
641 
642  //paths per dataset
643  for (unsigned int a=0; a<nDatasets_; a++) {
644  for (unsigned int b=0; b<nPaths_PD_.at(a); b++) {
645  path_ORIG_hist_PD.at(a)->GetXaxis()->SetBinLabel(b+1,datasetContent_.at(a).at(b).c_str());
646  path_ORIGnotNEW_hist_PD.at(a)->GetXaxis()->SetBinLabel(b+1,datasetContent_.at(a).at(b).c_str());
647  path_NEWnotORIG_hist_PD.at(a)->GetXaxis()->SetBinLabel(b+1,datasetContent_.at(a).at(b).c_str());
648  pathmodule_ORIGnotNEW_hist_PD.at(a)->GetXaxis()->SetBinLabel(b+1,datasetContent_.at(a).at(b).c_str());
649  pathmodule_NEWnotORIG_hist_PD.at(a)->GetXaxis()->SetBinLabel(b+1,datasetContent_.at(a).at(b).c_str());
650  }
651  }
652 
653 }
vector< vector< string > > datasetContent_
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
Definition: DDAxes.h:10
void HLTOfflineReproducibility::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 669 of file HLTOfflineReproducibility.cc.

References edm::ConfigurationDescriptions::addDefault(), and edm::ParameterSetDescription::setUnknown().

669  {
670  //The following says we do not know what parameters are allowed so do no validation
671  // Please change this to state exactly what you do use, even if it is no parameters
673  desc.setUnknown();
674  descriptions.addDefault(desc);
675 }
void addDefault(ParameterSetDescription const &psetDescription)

Member Data Documentation

vector<vector<string> > HLTOfflineReproducibility::datasetContent_
private

Definition at line 97 of file HLTOfflineReproducibility.cc.

Referenced by beginRun(), and endRun().

vector<string> HLTOfflineReproducibility::datasetNames_
private

Definition at line 96 of file HLTOfflineReproducibility.cc.

Referenced by beginRun().

bool HLTOfflineReproducibility::dqm_
private

Definition at line 85 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), endRun(), and HLTOfflineReproducibility().

DQMStore* HLTOfflineReproducibility::dqms_
private

Definition at line 86 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), endRun(), and HLTOfflineReproducibility().

HLTConfigProvider HLTOfflineReproducibility::hltConfig_
private

Definition at line 102 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

bool HLTOfflineReproducibility::isRealData_
private

Definition at line 106 of file HLTOfflineReproducibility.cc.

int HLTOfflineReproducibility::LumiSecNumber_
private

Definition at line 107 of file HLTOfflineReproducibility.cc.

vector< vector<string> > HLTOfflineReproducibility::moduleLabel_
private
vector< vector<string> > HLTOfflineReproducibility::moduleLabelNEW_
private

Definition at line 94 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

vector< vector<string> > HLTOfflineReproducibility::moduleLabelORIG_
private

Definition at line 94 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

unsigned int HLTOfflineReproducibility::nDatasets_
private

Definition at line 92 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

int HLTOfflineReproducibility::Nfiles_
private

Definition at line 104 of file HLTOfflineReproducibility.cc.

vector<unsigned int> HLTOfflineReproducibility::nModules_
private

Definition at line 95 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

double HLTOfflineReproducibility::Normalization_
private

Definition at line 105 of file HLTOfflineReproducibility.cc.

unsigned int HLTOfflineReproducibility::nPaths_
private

Definition at line 92 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<unsigned int> HLTOfflineReproducibility::nPaths_PD_
private

Definition at line 95 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

unsigned int HLTOfflineReproducibility::nPathsNEW_
private

Definition at line 92 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

unsigned int HLTOfflineReproducibility::nPathsORIG_
private

Definition at line 92 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().

TH1F* HLTOfflineReproducibility::path_NEWnotORIG_hist
private

Definition at line 113 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<TH1F*> HLTOfflineReproducibility::path_NEWnotORIG_hist_PD
private

Definition at line 119 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

TH1F* HLTOfflineReproducibility::path_ORIG_hist
private

Definition at line 111 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<TH1F*> HLTOfflineReproducibility::path_ORIG_hist_PD
private

Definition at line 117 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

TH1F* HLTOfflineReproducibility::path_ORIGnotNEW_hist
private

Definition at line 112 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<TH1F*> HLTOfflineReproducibility::path_ORIGnotNEW_hist_PD
private

Definition at line 118 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

TH2F* HLTOfflineReproducibility::pathmodule_NEWnotORIG_hist
private

Definition at line 115 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<TH2F*> HLTOfflineReproducibility::pathmodule_NEWnotORIG_hist_PD
private

Definition at line 121 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

TH2F* HLTOfflineReproducibility::pathmodule_ORIGnotNEW_hist
private

Definition at line 114 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<TH2F*> HLTOfflineReproducibility::pathmodule_ORIGnotNEW_hist_PD
private

Definition at line 120 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

string HLTOfflineReproducibility::processNameNEW_
private

Definition at line 101 of file HLTOfflineReproducibility.cc.

Referenced by beginRun().

string HLTOfflineReproducibility::processNameORIG_
private

Definition at line 100 of file HLTOfflineReproducibility.cc.

Referenced by beginRun().

vector<int> HLTOfflineReproducibility::trigger_NEW_
private

Definition at line 109 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector<int> HLTOfflineReproducibility::trigger_ORIG_
private

Definition at line 108 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

edm::InputTag HLTOfflineReproducibility::triggerLabelNEW_
private

Definition at line 89 of file HLTOfflineReproducibility.cc.

Referenced by analyze().

edm::InputTag HLTOfflineReproducibility::triggerLabelORIG_
private

Definition at line 88 of file HLTOfflineReproducibility.cc.

Referenced by analyze().

vector<string> HLTOfflineReproducibility::triggerNames_
private

Definition at line 93 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), beginRun(), and endRun().

vector< vector< vector<bool> > > HLTOfflineReproducibility::triggerNames_matched_
private

Definition at line 98 of file HLTOfflineReproducibility.cc.

Referenced by analyze(), and beginRun().