test
CMS 3D CMS Logo

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

Public Member Functions

void compare () const
 
 HltDiff ()
 
void usage (std::ostream &out) const
 

Public Attributes

bool csv_out
 
bool debug
 
bool file_check
 
bool ignore_prescales
 
bool json_out
 
unsigned int max_events
 
std::vector< std::string > new_files
 
std::string new_process
 
std::vector< std::string > old_files
 
std::string old_process
 
std::string output_file
 
bool quiet
 
bool root_out
 
unsigned int verbose
 

Detailed Description

Definition at line 1225 of file hltDiff.cc.

Constructor & Destructor Documentation

HltDiff::HltDiff ( )
inline

Definition at line 1244 of file hltDiff.cc.

1244  :
1245  old_files(0),
1246  old_process(""),
1247  new_files(0),
1248  new_process(""),
1249  max_events(1e9),
1250  ignore_prescales(true),
1251  csv_out(false),
1252  json_out(false),
1253  root_out(false),
1254  output_file(""),
1255  file_check(false),
1256  debug(false),
1257  quiet(false),
1258  verbose(0) {}
bool debug
Definition: hltDiff.cc:1240
bool root_out
Definition: hltDiff.cc:1237
bool file_check
Definition: hltDiff.cc:1239
unsigned int verbose
Definition: hltDiff.cc:1242
bool quiet
Definition: hltDiff.cc:1241
std::vector< std::string > old_files
Definition: hltDiff.cc:1229
std::string output_file
Definition: hltDiff.cc:1238
std::vector< std::string > new_files
Definition: hltDiff.cc:1231
bool csv_out
Definition: hltDiff.cc:1235
bool ignore_prescales
Definition: hltDiff.cc:1234
bool json_out
Definition: hltDiff.cc:1236
unsigned int max_events
Definition: hltDiff.cc:1233
std::string new_process
Definition: hltDiff.cc:1232
std::string old_process
Definition: hltDiff.cc:1230

Member Function Documentation

void HltDiff::compare ( ) const
inline

Definition at line 1260 of file hltDiff.cc.

References edm::HLTGlobalStatus::accept(), ecal_dqm_sourceclient-live_cfg::cerr, check_files(), universalConfigTemplate::collection, trigger::TriggerEvent::collectionTags(), JsonOutputProducer::configuration, counter, gather_cfg::cout, debug, event(), event_state(), JsonOutputProducer::JsonConfiguration::events, JsonOutputProducer::eventState(), JsonOutputProducer::JsonConfigurationBlock::extractFileBase(), JsonOutputProducer::JsonConfigurationBlock::files, spr::find(), HLTCommonConfig::First, fwlite::Handle< T >::getByLabel(), getHLTConfigData(), HLTCommonConfig::HLTCommonConfig(), i, edm::HLTGlobalStatus::index(), Invalid, fwlite::Handle< T >::isValid(), L1Trigger_dataformats::json, bookConverter::max, min(), HLTConfigInterface::moduleLabel(), HLTConfigInterface::moduleType(), JsonOutputProducer::JsonConfiguration::n, JsonOutputProducer::JsonTriggerEventState::n, nEvents, JsonOutputProducer::JsonConfiguration::o, JsonOutputProducer::JsonTriggerEventState::o, or, electronStore::output_file, AlCaHLTBitMon_ParallelJobs::p, Pass, path_state(), Prescaled, prescaled_state(), JsonOutputProducer::JsonConfiguration::prescales, print_detailed_path_state(), print_trigger_candidates(), print_trigger_collection(), JsonOutputProducer::JsonConfigurationBlock::process, HLTConfigInterface::processName(), fwlite::Handle< T >::product(), JsonOutputProducer::pushEvent(), Ready, DTTTrigCorrFirst::run, HLTCommonConfig::Second, HLTConfigInterface::size(), JsonOutputProducer::JsonConfigurationBlock::skipped_triggers, edm::HLTGlobalStatus::state(), JsonOutputProducer::JsonVars::state, AlCaHLTBitMon_QueryRunRegistry::string, strip_process_name(), edmLumisInFiles::summary, JsonOutputProducer::JsonVars::trigger, JsonOutputProducer::JsonVars::trigger_passed_count, HLTConfigInterface::triggerIndex(), HLTConfigInterface::triggerName(), JsonOutputProducer::vars, JsonOutputProducer::write(), and SummaryOutputProducer::write().

Referenced by main().

1260  {
1261  std::shared_ptr<fwlite::ChainEvent> old_events;
1262  std::shared_ptr<fwlite::ChainEvent> new_events;
1263 
1265  old_events = std::make_shared<fwlite::ChainEvent>(old_files);
1266  else
1267  return;
1268 
1269  if (new_files.size() == 1 and new_files[0] == "-")
1270  new_events = old_events;
1271  else if (not file_check or check_files(new_files))
1272  new_events = std::make_shared<fwlite::ChainEvent>(new_files);
1273  else
1274  return;
1275 
1276  // creating the structure holding data for JSON and ROOT output
1278 
1279  json.configuration.prescales = ignore_prescales;
1280  // setting the old configuration
1281  json.configuration.o.process = old_process;
1282  json.configuration.o.files = old_files;
1283  json.configuration.o.extractFileBase();
1284  // setting the new configuration
1285  json.configuration.n.process = new_process;
1286  json.configuration.n.files = new_files;
1287  json.configuration.n.extractFileBase();
1288 
1289  // initialising configurations to be compared
1290  std::unique_ptr<HLTConfigDataEx> old_config_data;
1291  std::unique_ptr<HLTConfigDataEx> new_config_data;
1292  std::unique_ptr<HLTCommonConfig> common_config;
1293  HLTConfigInterface const * old_config = nullptr;
1294  HLTConfigInterface const * new_config = nullptr;
1295 
1296  unsigned int counter = 0;
1297  unsigned int skipped = 0;
1298  unsigned int affected = 0;
1299  bool new_run = true;
1300  std::vector<TriggerDiff> differences;
1301 
1302  // loop over the reference events
1303  const unsigned int nEvents = std::min((int)old_events->size(), (int)max_events);
1304  const unsigned int counter_denominator = std::max(1, int(nEvents/10));
1305  for (old_events->toBegin(); not old_events->atEnd(); ++(*old_events)) {
1306  // printing progress on every 10%
1307  if (counter%(counter_denominator) == 0) {
1308  std::cout << "Processed events: " << counter << " out of " << nEvents
1309  << " (" << 10*counter/(counter_denominator) << "%)" << std::endl;
1310  }
1311 
1312  // seek the same event in the "new" files
1313  edm::EventID const& id = old_events->id();
1314  if (new_events != old_events and not new_events->to(id)) {
1315  if (debug)
1316  std::cerr << "run " << id.run() << ", lumi " << id.luminosityBlock() << ", event " << id.event() << ": not found in the 'new' files, skipping." << std::endl;
1317  ++skipped;
1318  continue;
1319  }
1320 
1321  // read the TriggerResults and TriggerEvent
1323  edm::TriggerResults const * old_results = nullptr;
1324  old_results_h.getByLabel<fwlite::Event>(* old_events->event(), "TriggerResults", "", old_process.c_str());
1325  if (old_results_h.isValid())
1326  old_results = old_results_h.product();
1327  else {
1328  if (debug)
1329  std::cerr << "run " << id.run() << ", lumi " << id.luminosityBlock() << ", event " << id.event() << ": 'old' TriggerResults not found, skipping." << std::endl;
1330  continue;
1331  }
1332 
1334  trigger::TriggerEvent const * old_summary = nullptr;
1335  old_summary_h.getByLabel<fwlite::Event>(* old_events->event(), "hltTriggerSummaryAOD", "", old_process.c_str());
1336  if (old_summary_h.isValid())
1337  old_summary = old_summary_h.product();
1338 
1340  edm::TriggerResults const * new_results = nullptr;
1341  new_results_h.getByLabel<fwlite::Event>(* new_events->event(), "TriggerResults", "", new_process.c_str());
1342  if (new_results_h.isValid())
1343  new_results = new_results_h.product();
1344  else {
1345  if (debug)
1346  std::cerr << "run " << id.run() << ", lumi " << id.luminosityBlock() << ", event " << id.event() << ": 'new' TriggerResults not found, skipping." << std::endl;
1347  continue;
1348  }
1349 
1351  trigger::TriggerEvent const * new_summary = nullptr;
1352  new_summary_h.getByLabel<fwlite::Event>(* new_events->event(), "hltTriggerSummaryAOD", "", new_process.c_str());
1353  if (new_summary_h.isValid())
1354  new_summary = new_summary_h.product();
1355 
1356  // initialise the trigger configuration
1357  if (new_run) {
1358  new_run = false;
1359  old_events->fillParameterSetRegistry();
1360  new_events->fillParameterSetRegistry();
1361 
1362  old_config_data = getHLTConfigData(* old_events->event(), old_process);
1363  new_config_data = getHLTConfigData(* new_events->event(), new_process);
1364  if (new_config_data->triggerNames() == old_config_data->triggerNames()) {
1365  old_config = old_config_data.get();
1366  new_config = new_config_data.get();
1367  } else {
1368  common_config = std::unique_ptr<HLTCommonConfig>(new HLTCommonConfig(*old_config_data, *new_config_data));
1369  old_config = & common_config->getView(HLTCommonConfig::Index::First);
1370  new_config = & common_config->getView(HLTCommonConfig::Index::Second);
1371  std::cout << "Warning: old and new TriggerResults come from different HLT menus. Only the common " << old_config->size() << " triggers are compared.\n" << std::endl;
1372  }
1373 
1374  differences.clear();
1375  differences.resize(old_config->size());
1376 
1377  // adding the list of selected triggers to JSON output
1378  std::vector<std::string> states_str;
1379  for (int i = State::Ready; i != State::Invalid; i++)
1380  states_str.push_back(std::string(path_state(static_cast<State>(i))));
1381  json.vars.state = states_str;
1382  for (size_t triggerId = 0; triggerId < old_config->size(); ++triggerId) {
1383  json.vars.trigger.push_back(old_config->triggerName(triggerId));
1384  json.vars.trigger_passed_count.push_back(std::pair<int, int>(0,0));
1385  }
1386  // getting names of triggers existing only in the old configuration
1387  for (std::vector<std::string>::const_iterator it = old_config_data->triggerNames().begin(); it != old_config_data->triggerNames().end(); ++it) {
1388  if (std::find(json.vars.trigger.begin(), json.vars.trigger.end(), *it) != json.vars.trigger.end()) continue;
1389  json.configuration.o.skipped_triggers.push_back(*it);
1390  }
1391  // getting names of triggers existing only in the new configuration
1392  for (std::vector<std::string>::const_iterator it = new_config_data->triggerNames().begin(); it != new_config_data->triggerNames().end(); ++it) {
1393  if (std::find(json.vars.trigger.begin(), json.vars.trigger.end(), *it) != json.vars.trigger.end()) continue;
1394  json.configuration.n.skipped_triggers.push_back(*it);
1395  }
1396  }
1397 
1398  // compare the TriggerResults
1399  bool needs_header = true;
1400  bool event_affected = false;
1401  for (unsigned int p = 0; p < old_config->size(); ++p) {
1402  // FIXME explicitly converting the indices is a hack, it should be properly encapsulated instead
1403  unsigned int old_index = old_config->triggerIndex(p);
1404  unsigned int new_index = new_config->triggerIndex(p);
1405  State old_state = prescaled_state(old_results->state(old_index), p, old_results->index(old_index), * old_config);
1406  State new_state = prescaled_state(new_results->state(new_index), p, new_results->index(new_index), * new_config);
1407 
1408  if (old_state == Pass) {
1409  ++differences.at(p).count;
1410  }
1411  if (old_state == Pass)
1412  ++json.vars.trigger_passed_count.at(p).first;
1413  if (new_state == Pass)
1414  ++json.vars.trigger_passed_count.at(p).second;
1415 
1416  bool trigger_affected = false;
1417  if (not ignore_prescales or (old_state != Prescaled and new_state != Prescaled)) {
1418  if (old_state == Pass and new_state != Pass) {
1419  ++differences.at(p).lost;
1420  trigger_affected = true;
1421  } else if (old_state != Pass and new_state == Pass) {
1422  ++differences.at(p).gained;
1423  trigger_affected = true;
1424  } else if (old_results->index(old_index) != new_results->index(new_index)) {
1425  ++differences.at(p).internal;
1426  trigger_affected = true;
1427  }
1428  }
1429 
1430  if (not trigger_affected) continue;
1431 
1432  event_affected = true;
1433  const unsigned int old_moduleIndex = old_results->index(old_index);
1434  const unsigned int new_moduleIndex = new_results->index(new_index);
1435  // storing the event to JSON, without any trigger results for the moment
1436  JsonOutputProducer::JsonEvent& event = json.pushEvent(id.run(), id.luminosityBlock(), id.event());
1437  JsonOutputProducer::JsonTriggerEventState& state = event.pushTrigger(p);
1438  state.o = json.eventState(old_state, old_moduleIndex, old_config->moduleLabel(p, old_moduleIndex), old_config->moduleType(p, old_moduleIndex));
1439  state.n = json.eventState(new_state, new_moduleIndex, new_config->moduleLabel(p, new_moduleIndex), new_config->moduleType(p, new_moduleIndex));
1440 
1441  if (verbose > 0) {
1442  if (needs_header) {
1443  needs_header = false;
1444  std::cout << "run " << id.run() << ", lumi " << id.luminosityBlock() << ", event " << id.event() << ": "
1445  << "old result is '" << event_state(old_results->accept()) << "', "
1446  << "new result is '" << event_state(new_results->accept()) << "'"
1447  << std::endl;
1448  }
1449  // print the Trigger path and filter responsible for the discrepancy
1450  std::cout << " Path " << old_config->triggerName(p) << ":\n"
1451  << " old state is ";
1452  print_detailed_path_state(std::cout, old_state, p, old_moduleIndex, * old_config);
1453  std::cout << ",\n"
1454  << " new state is ";
1455  print_detailed_path_state(std::cout, new_state, p, new_moduleIndex, * new_config);
1456  std::cout << std::endl;
1457  }
1458  if (verbose > 1 and old_summary and new_summary) {
1459  // print TriggerObjects for the filter responsible for the discrepancy
1460  unsigned int module = std::min(old_moduleIndex, new_moduleIndex);
1461  std::cout << " Filter " << old_config->moduleLabel(p, module) << ":\n";
1462  std::cout << " old trigger candidates:\n";
1463  print_trigger_candidates(std::cout, * old_summary, edm::InputTag(old_config->moduleLabel(p, module), "", old_config->processName()));
1464  std::cout << " new trigger candidates:\n";
1465  print_trigger_candidates(std::cout, * new_summary, edm::InputTag(new_config->moduleLabel(p, module), "", new_config->processName()));
1466  }
1467  if (verbose > 0)
1468  std::cout << std::endl;
1469  }
1470  if (event_affected)
1471  ++affected;
1472 
1473  // compare the TriggerEvent
1474  if (event_affected and verbose > 2 and old_summary and new_summary) {
1475  std::map<std::string, std::pair<std::string, std::string>> collections;
1476  for (auto const & old_collection: old_summary->collectionTags())
1477  collections[strip_process_name(old_collection)].first = old_collection;
1478  for (auto const & new_collection: new_summary->collectionTags())
1479  collections[strip_process_name(new_collection)].second = new_collection;
1480 
1481  for (auto const & collection: collections) {
1482  std::cout << " Collection " << collection.first << ":\n";
1483  std::cout << " old trigger candidates:\n";
1484  print_trigger_collection(std::cout, * old_summary, collection.second.first);
1485  std::cout << " new trigger candidates:\n";
1486  print_trigger_collection(std::cout, * new_summary, collection.second.second);
1487  std::cout << std::endl;
1488  }
1489  }
1490 
1491  ++counter;
1492  if (nEvents and counter >= nEvents)
1493  break;
1494  }
1495 
1496  json.configuration.events = counter;
1497 
1498  if (not counter) {
1499  std::cout << "There are no common events between the old and new files";
1500  if (skipped)
1501  std::cout << ", " << skipped << " events were skipped";
1502  std::cout << "." << std::endl;
1503  } else {
1504  std::cout << "Found " << counter << " matching events, out of which " << affected << " have different HLT results";
1505  if (skipped)
1506  std::cout << ", " << skipped << " events were skipped";
1507  std::cout << "\n" << std::endl;
1508  }
1509  // Printing the summary of affected triggers with affected-event counts
1510  if (!quiet) {
1511  bool summaryHeaderPrinted = false;
1512  for (size_t p = 0; p < old_config->size(); ++p) {
1513  if (differences.at(p).total() < 1) continue;
1514  if (!summaryHeaderPrinted)
1515  std::cout << std::setw(12) << "Events" << std::setw(12) << "Accepted" << std::setw(12) << "Gained" << std::setw(12) << "Lost" << std::setw(12) << "Other" << " " << "Trigger" << std::endl;
1516  std::cout << std::setw(12) << counter << differences.at(p) << " " << old_config->triggerName(p) << std::endl;
1517  summaryHeaderPrinted = true;
1518  }
1519  }
1520 
1521  // writing all the required output
1522  json.write(); // to JSON file for interactive visualisation
1524  summary.write(); // to ROOT file for fast validation with static plots
1525  }
virtual std::string const & moduleLabel(unsigned int trigger, unsigned int module) const =0
int i
Definition: DBlmapReader.cc:9
bool check_files(std::vector< std::string > const &files)
Definition: hltDiff.cc:1215
const std::vector< std::string > & collectionTags() const
Definition: TriggerEvent.h:96
The single EDProduct to be saved for each event (AOD case)
Definition: TriggerEvent.h:25
bool debug
Definition: hltDiff.cc:1240
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
bool root_out
Definition: hltDiff.cc:1237
Definition: hltDiff.cc:289
void print_trigger_candidates(std::ostream &out, trigger::TriggerEvent const &summary, edm::InputTag const &filter)
Definition: hltDiff.cc:345
bool isValid() const
Definition: Handle.h:61
bool file_check
Definition: hltDiff.cc:1239
bool accept() const
Has at least one path accepted the event?
void print_detailed_path_state(std::ostream &out, State state, int path, int module, HLTConfigInterface const &config)
Definition: hltDiff.cc:334
const char * event_state(bool state)
Definition: hltDiff.cc:135
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
bool quiet
Definition: hltDiff.cc:1241
void getByLabel(const P &iP, const char *iModuleLabel, const char *iProductInstanceLabel=0, const char *iProcessLabel=0)
Definition: Handle.h:91
std::vector< std::string > old_files
Definition: hltDiff.cc:1229
State prescaled_state(int state, int path, int module, HLTConfigInterface const &config)
Definition: hltDiff.cc:306
std::string output_file
Definition: hltDiff.cc:1238
std::unique_ptr< HLTConfigDataEx > getHLTConfigData(fwlite::EventBase const &event, std::string process)
Definition: hltDiff.cc:411
unsigned int index(const unsigned int i) const
Get index (slot position) of module giving the decision of the ith path.
std::vector< std::string > new_files
Definition: hltDiff.cc:1231
bool csv_out
Definition: hltDiff.cc:1235
virtual std::string const & moduleType(unsigned int trigger, unsigned int module) const =0
bool ignore_prescales
Definition: hltDiff.cc:1234
bool json_out
Definition: hltDiff.cc:1236
std::string strip_process_name(std::string const &s)
Definition: hltDiff.cc:319
T min(T a, T b)
Definition: MathUtil.h:58
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
virtual unsigned int triggerIndex(unsigned int trigger) const =0
void print_trigger_collection(std::ostream &out, trigger::TriggerEvent const &summary, std::string const &tag)
Definition: hltDiff.cc:375
virtual std::string const & processName() const =0
const char * path_state(State state)
Definition: hltDiff.cc:296
unsigned int max_events
Definition: hltDiff.cc:1233
static std::atomic< unsigned int > counter
State
Definition: hltDiff.cc:287
tuple cout
Definition: gather_cfg.py:145
T const * product() const
Definition: Handle.h:66
UInt_t nEvents
Definition: hcalCalib.cc:42
Definition: vlib.h:208
std::string new_process
Definition: hltDiff.cc:1232
hlt::HLTState state(const unsigned int i) const
Get status of ith path.
std::string old_process
Definition: hltDiff.cc:1230
void HltDiff::usage ( std::ostream &  out) const
inline

Definition at line 1527 of file hltDiff.cc.

Referenced by main().

1527  {
1528  out << "\
1529 usage: hltDiff -o|--old-files FILE1.ROOT [FILE2.ROOT ...] [-O|--old-process LABEL[:INSTANCE[:PROCESS]]]\n\
1530  -n|--new-files FILE1.ROOT [FILE2.ROOT ...] [-N|--new-process LABEL[:INSTANCE[:PROCESS]]]\n\
1531  [-m|--max-events MAXEVENTS] [-p|--prescales] [-c|--csv-output] [-j|--json-output]\n\
1532  [-r|--root-output] [-f|--file-check] [-d|--debug] [-q|--quiet] [-v|--verbose]\n\
1533  [-h|--help] [-F|--output-file] FILE_NAME\n\
1534 \n\
1535  -o|--old-files FILE1.ROOT [FILE2.ROOT ...]\n\
1536  input file(s) with the old (reference) trigger results\n\
1537 \n\
1538  -O|--old-process PROCESS\n\
1539  process name of the collection with the old (reference) trigger results\n\
1540  default: take the 'TriggerResults' from the last process\n\
1541 \n\
1542  -n|--new-files FILE1.ROOT [FILE2.ROOT ...]\n\
1543  input file(s) with the new trigger results to be compared with the reference\n\
1544  to read these from a different collection in the same files as\n\
1545  the reference, use '-n -' and specify the collection with -N (see below)\n\
1546 \n\
1547  -N|--new-process PROCESS\n\
1548  process name of the collection with the new (reference) trigger results\n\
1549  default: take the 'TriggerResults' from the last process\n\
1550 \n\
1551  -m|--max-events MAXEVENTS\n\
1552  compare only the first MAXEVENTS events\n\
1553  default: compare all the events in the original (reference) files\n\
1554 \n\
1555  -p|--prescales\n\
1556  do not ignore differences caused by HLTPrescaler modules\n\
1557 \n\
1558  -c|--csv-output\n\
1559  produce comparison results in a CSV format\n\
1560 \n\
1561  -j|--json-output\n\
1562  produce comparison results in a JSON format\n\
1563 \n\
1564  -r|--root-output\n\
1565  produce comparison results as histograms in a ROOT file\n\
1566 \n\
1567  -F|--output-file FILE_NAME\n\
1568  combine all RUNs to files with the specified custom name: FILE_NAME.json, FILE_NAME.root\n\
1569  default: a separate output file will be produced for each RUN with names suitable for the DQM GUI\n\
1570 \n\
1571  -f|--file-check\n\
1572  check existence of every old and new file before running the comparison\n\
1573  safer if files are run for the first time, but can cause a substantial delay\n\
1574 \n\
1575  -d|--debug\n\
1576  display messages about missing events and collectiions\n\
1577 \n\
1578  -q|--quiet\n\
1579  don't display summary printout with the list of affected trigger paths\n\
1580 \n\
1581  -v|--verbose LEVEL\n\
1582  set verbosity level:\n\
1583  1: event-by-event comparison results\n\
1584  2: + print the trigger candidates of the affected filters\n\
1585  3: + print all the trigger candidates for the affected events\n\
1586  default: 1\n\
1587 \n\
1588  -h|--help\n\
1589  print this help message, and exit" << std::endl;
1590  }

Member Data Documentation

bool HltDiff::csv_out

Definition at line 1235 of file hltDiff.cc.

Referenced by main().

bool HltDiff::debug

Definition at line 1240 of file hltDiff.cc.

Referenced by rrapi.RRApi::dprint(), rrapi.RRApi::get(), and main().

bool HltDiff::file_check

Definition at line 1239 of file hltDiff.cc.

Referenced by main().

bool HltDiff::ignore_prescales

Definition at line 1234 of file hltDiff.cc.

Referenced by main().

bool HltDiff::json_out

Definition at line 1236 of file hltDiff.cc.

Referenced by main().

unsigned int HltDiff::max_events

Definition at line 1233 of file hltDiff.cc.

Referenced by main().

std::vector<std::string> HltDiff::new_files

Definition at line 1231 of file hltDiff.cc.

Referenced by main().

std::string HltDiff::new_process

Definition at line 1232 of file hltDiff.cc.

Referenced by main().

std::vector<std::string> HltDiff::old_files

Definition at line 1229 of file hltDiff.cc.

Referenced by main().

std::string HltDiff::old_process

Definition at line 1230 of file hltDiff.cc.

Referenced by main().

std::string HltDiff::output_file

Definition at line 1238 of file hltDiff.cc.

Referenced by main().

bool HltDiff::quiet

Definition at line 1241 of file hltDiff.cc.

Referenced by main().

bool HltDiff::root_out

Definition at line 1237 of file hltDiff.cc.

Referenced by main().

unsigned int HltDiff::verbose