ATLAS Offline Software
Classes | Functions
TriggerMenuRW.cxx File Reference
#include <cstdlib>
#include <vector>
#include "TrigConfIO/JsonFileLoader.h"
#include "TrigConfIO/JsonFileWriterL1.h"
#include "TrigConfIO/JsonFileWriterHLT.h"
#include "TrigConfIO/TrigDBMenuLoader.h"
#include "TrigConfIO/TrigDBJobOptionsLoader.h"
#include "TrigConfIO/TrigDBL1PrescalesSetLoader.h"
#include "TrigConfIO/TrigDBHLTPrescalesSetLoader.h"
#include "TrigConfIO/TrigDBL1BunchGroupSetLoader.h"
#include "TrigConfIO/TrigDBMonitoringLoader.h"
#include "TrigConfIO/TrigDBCTPFilesLoader.h"
#include "TrigConfData/HLTMenu.h"
#include "TrigConfData/L1Menu.h"
#include "TrigConfData/L1PrescalesSet.h"
#include "TrigConfData/HLTPrescalesSet.h"
#include "TrigConfData/L1BunchGroupSet.h"

Go to the source code of this file.

Classes

struct  Config
 

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 214 of file TriggerMenuRW.cxx.

214  {
215 
216  Config cfg;
217  cfg.parseProgramOptions(argc, argv);
218  if(cfg.help) {
219  cfg.usage();
220  return 0;
221  }
222 
223  if(cfg.error.size()!=0) {
224  for(const string & e: cfg.error)
225  cerr << e << endl;
226  cfg.usage();
227  return 1;
228  }
229 
230  if( cfg.inputFiles.size()>0 ) {
231  // load config from files
232  TrigConf::JsonFileLoader fileLoader;
233  for (const std::string & fn : cfg.inputFiles) {
234  // check if the file is L1 or HLT
235  std::string filetype = fileLoader.getFileType( fn );
236  if(filetype == "l1menu") {
238  fileLoader.loadFile( fn, l1menu);
239  cout << "Loaded L1 menu " << l1menu.name() << " with " << l1menu.size() << " items from " << fn << endl;
240  l1menu.printMenu(cfg.detail);
241  writeJsonFile(l1menu, "L1Menu", cfg);
242  } else if(filetype == "hltmenu" ) {
243  TrigConf::HLTMenu hltmenu;
244  fileLoader.loadFile( fn, hltmenu);
245  cout << "Loaded HLT menu " << hltmenu.name() << " with " << hltmenu.size() << " chains from " << fn << endl;
246  hltmenu.printMenu(cfg.detail);
247  writeJsonFile(hltmenu, "HLTMenu", cfg);
248  } else if(filetype == "l1prescale" ) {
250  fileLoader.loadFile( fn, l1pss);
251  cout << "Loaded L1 prescales set file " << fn << " with " << l1pss.size() << " prescales from " << fn << endl;
252  writeJsonFile(l1pss, "L1PrescalesSet", cfg);
253  } else if(filetype == "hltprescale" ) {
255  fileLoader.loadFile( fn, hltpss);
256  cout << "Loaded HLT prescales set file " << fn << " with " << hltpss.size() << " prescales from " << fn << endl;
257  hltpss.printPrescaleSet(cfg.detail);
258  writeJsonFile(hltpss, "HLTPrescalesSet", cfg);
259  } else if(filetype == "bunchgroupset" ) {
261  fileLoader.loadFile( fn, bgs);
262  cout << "Loaded L1 BunchGroup set file " << fn << " with " << bgs.sizeNonEmpty() << " non-empty bunchgroups from " << fn << endl;
263  bgs.printSummary(cfg.detail);
264  writeJsonFile(bgs, "BunchGroupSet", cfg);
265  } else if(filetype == "joboptions" ) {
267  fileLoader.loadFile( fn, jo);
268  cout << "Loaded job options with " << jo.getObject("properties").getKeys().size() << " properties from " << fn << endl;
269  if( cfg.detail ) {
270  TrigConf::DataStructure ds = jo.getObject("properties");
271  for( const auto& alg : ds.data()) {
272  std::cout << alg.first << std::endl;
273  for( const auto& prop : alg.second ) {
274  std::cout << " " << prop.first << " -> " << prop.second.data() << std::endl;
275  }
276  }
277  }
278  writeJsonFile(jo, "HLTJobOptions", cfg);
279  } else if(filetype == "hltmonitoringsummary" ) {
281  fileLoader.loadFile( fn, mon);
282  cout << "Loaded HLT monnitoring with " << mon.size() << " signatures from " << fn << endl;
283  mon.printMonConfig(cfg.detail);
284  writeJsonFile(mon, "HLTMonitoring", cfg);
285  } else {
286  cerr << "File " << fn << " not recognized as being an L1 or HLT menu or prescale set or bunchgroup set" << endl;
287  }
288  }
289  }
290 
291  if( cfg.smk != 0 && !cfg.doCtp ) {
292  // load config from DB
293 
294  // db menu loader
295  TrigConf::TrigDBMenuLoader dbloader(cfg.dbalias);
296 
297  // L1 menu
298  {
300  try {
301  dbloader.loadL1Menu( cfg.smk, l1menu, outputFileName("L1Menu", cfg) );
302  }
303  catch(TrigConf::IOException & ex) {
304  cout << "Could not load L1 menu. An exception occurred: " << ex.what() << endl;
305  }
306  if(l1menu) {
307  cout << "Loaded L1 menu " << l1menu.name() << " with " << l1menu.size() << " items from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
308  if( cfg.detail ) {
309  l1menu.printMenu(true);
310  }
311  }
312  cout << endl;
313  }
314 
315  // HLT menu
316  {
317  TrigConf::HLTMenu hltmenu;
318  try {
319  dbloader.loadHLTMenu( cfg.smk, hltmenu, outputFileName("HLTMenu", cfg));
320  }
321  catch(TrigConf::IOException & ex) {
322  cout << "Could not load HLT menu. An exception occurred: " << ex.what() << endl;
323  }
324  if (hltmenu) {
325  cout << "Loaded HLT menu " << hltmenu.name() << " with " << hltmenu.size() << " chains from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
326  if( cfg.detail ) {
327  hltmenu.printMenu(true);
328  }
329  }
330  cout << endl;
331  }
332 
333  // Job options
334  {
335  TrigConf::TrigDBJobOptionsLoader jodbloader(cfg.dbalias);
337  try {
338  jodbloader.loadJobOptions( cfg.smk, jo, outputFileName("HLTJobOptions", cfg) );
339  }
340  catch(TrigConf::IOException & ex) {
341  cout << "Could not load HLT job options. An exception occurred: " << ex.what() << endl;
342  }
343  if (jo) {
344  cout << "Loaded job options with " << jo.getObject("properties").getKeys().size() << " entries from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
345  if( cfg.detail ) {
346  TrigConf::DataStructure ds = jo.getObject("properties");
347  for( const auto& alg : ds.data()) {
348  std::cout << alg.first << std::endl;
349  for( const auto& prop : alg.second ) {
350  std::cout << " " << prop.first << " -> " << prop.second.data() << std::endl;
351  }
352  }
353  }
354  }
355  cout << endl;
356  }
357 
358  // HLT monitoring groups
359  {
360  TrigConf::TrigDBMonitoringLoader mgdbloader(cfg.dbalias);
362  try {
363  mgdbloader.loadHLTMonitoring( cfg.smk, hltmon, outputFileName("HLTMonitoring", cfg));
364  }
365  catch(TrigConf::IOException & ex) {
366  cout << "Could not load HLT monitoring. An exception occurred: " << ex.what() << endl;
367  }
368  if (hltmon) {
369  cout << "Loaded HLT monitoring with " << hltmon.size() << " signatures rom " << cfg.dbalias << " with SMK " << cfg.smk << endl;
370  if( cfg.detail ) {
371  hltmon.printMonConfig(true);
372  }
373  }
374  cout << endl;
375  }
376 
377  }
378 
379  if( cfg.smk != 0 && cfg.doCtp ) {
380  TrigConf::TrigDBCTPFilesLoader dbloader(cfg.dbalias);
381  TrigConf::L1CTPFiles ctpfiles;
382  dbloader.loadHardwareFiles(cfg.smk, ctpfiles, 0x0F, outputFileName("CTPFiles", cfg));
383  ctpfiles.print();
384  }
385 
386  if( cfg.l1psk != 0 ) {
387  // load L1 prescales set from DB
388  TrigConf::TrigDBL1PrescalesSetLoader dbloader(cfg.dbalias);
390  try {
391  dbloader.loadL1Prescales( cfg.l1psk, l1pss, outputFileName("L1PrescalesSet", cfg) );
392  }
393  catch(TrigConf::IOException & ex) {
394  cout << "Could not load L1 prescales. An exception occurred: " << ex.what() << endl;
395  }
396  if (l1pss) {
397  cout << "Loaded L1 prescales set " << l1pss.name() << " with " << l1pss.size() << " prescales from " << cfg.dbalias << " with L1 PSK " << cfg.l1psk << endl;
398  }
399  }
400 
401  if( cfg.hltpsk != 0 ) {
402  // load L1 prescales set from DB
403  TrigConf::TrigDBHLTPrescalesSetLoader dbloader(cfg.dbalias);
405  try {
406  dbloader.loadHLTPrescales( cfg.hltpsk, hltpss, outputFileName("HLTPrescalesSet", cfg) );
407  }
408  catch(TrigConf::IOException & ex) {
409  cout << "Could not load HLT prescales. An exception occurred: " << ex.what() << endl;
410  }
411  if (hltpss) {
412  cout << "Loaded HLT prescales set " << hltpss.name() << " with " << hltpss.size() << " prescales from " << cfg.dbalias << " with HLT PSK " << cfg.hltpsk << endl;
413  }
414  }
415 
416  if( cfg.bgsk != 0 ) {
417  // load L1 prescales set from DB
418  TrigConf::TrigDBL1BunchGroupSetLoader dbloader(cfg.dbalias);
420  try {
421  dbloader.loadBunchGroupSet( cfg.bgsk, bgs, outputFileName("BunchGroupSet", cfg) );
422  }
423  catch(TrigConf::IOException & ex) {
424  cout << "Could not load bunchgroup set. An exception occurred: " << ex.what() << endl;
425  }
426  if (bgs) {
427  cout << "Loaded L1 bunchgroup set " << bgs.name() << " with " << bgs.size() << " bunchgroups from " << cfg.dbalias << " with BGSK " << cfg.bgsk << endl;
428  if( cfg.detail ) {
429  bgs.printSummary(true);
430  }
431  }
432  }
433 
434  return 0;
435 }
TrigConf::DataStructure::getObject
DataStructure getObject(const std::string &pathToChild, bool ignoreIfMissing=false) const
Access to configuration object.
Definition: DataStructure.cxx:207
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:257
SGout2dot.alg
alg
Definition: SGout2dot.py:243
TrigConf::HLTMenu::printMenu
void printMenu(bool full=false) const
print overview of L1 Menu
Definition: HLTMenu.cxx:96
TrigConf::HLTMenu
HLT menu configuration.
Definition: HLTMenu.h:21
TrigConf::JsonFileLoader::loadFile
bool loadFile(const std::string &filename, boost::property_tree::ptree &data, const std::string &pathToChild="") const
Load content of json file into a ptree.
Definition: JsonFileLoader.cxx:45
TrigConf::HLTMonitoring::size
std::size_t size() const
Accessor to the number of HLT monitoring chains.
Definition: HLTMonitoring.cxx:82
TrigConf::L1Menu
L1 menu configuration.
Definition: L1Menu.h:28
LArCellConditions.argv
argv
Definition: LArCellConditions.py:112
TrigConf::DataStructure::getKeys
std::vector< std::string > getKeys() const
Access to the keys of an DataStructure which presents a dictionary.
Definition: DataStructure.cxx:250
TrigConf::DataStructure::name
virtual const std::string & name() const final
Definition: DataStructure.cxx:109
TrigConf::L1CTPFiles
L1 menu configuration.
Definition: L1CTPFiles.h:29
TrigConf::HLTPrescalesSet::size
std::size_t size() const
number of HLT prescales
Definition: HLTPrescalesSet.cxx:69
python.getCurrentFolderTag.fn
fn
Definition: getCurrentFolderTag.py:65
TrigConf::L1BunchGroupSet::size
std::size_t size() const
Accessor to the number of defined bunchgroups.
Definition: L1BunchGroupSet.cxx:128
TrigConf::L1BunchGroupSet::sizeNonEmpty
std::size_t sizeNonEmpty() const
Accessor to the number of non-empty bunchgroups.
Definition: L1BunchGroupSet.cxx:133
DQHistogramMergeRegExp.argc
argc
Definition: DQHistogramMergeRegExp.py:20
TrigConf::JsonFileLoader::getFileType
std::string getFileType(const std::string &filename) const
Checks the trigger level of a given json file.
Definition: JsonFileLoader.cxx:114
TrigConf::L1BunchGroupSet
L1 board configuration.
Definition: L1BunchGroupSet.h:71
TrigConf::TrigDBMonitoringLoader
Loader of trigger menu configurations from the database.
Definition: TrigDBMonitoringLoader.h:25
TrigConf::L1PrescalesSet
L1 menu configuration.
Definition: L1PrescalesSet.h:19
TrigConf::L1BunchGroupSet::printSummary
void printSummary(bool detailed=false) const
print a more or less detailed summary
Definition: L1BunchGroupSet.cxx:150
TrigConf::HLTMenu::size
std::size_t size() const
Accessor to the number of HLT chains.
Definition: HLTMenu.cxx:35
TrigConf::HLTPrescalesSet::printPrescaleSet
void printPrescaleSet(bool full) const
Definition: HLTPrescalesSet.cxx:116
TrigConf::TrigDBJobOptionsLoader
Loader of trigger configurations from Json files.
Definition: TrigDBJobOptionsLoader.h:28
TrigConf::TrigDBCTPFilesLoader
Loader of trigger configurations from Json files.
Definition: TrigDBCTPFilesLoader.h:30
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
TrigConf::DataStructure
Base class for Trigger configuration data and wrapper around underlying representation.
Definition: DataStructure.h:37
TrigConf::HLTMonitoring
HLT monitoring configuration.
Definition: HLTMonitoring.h:27
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
plotBeamSpotMon.mon
mon
Definition: plotBeamSpotMon.py:67
TrigConf::HLTMonitoring::printMonConfig
void printMonConfig(bool full=false) const
print overview of L1 Menu
Definition: HLTMonitoring.cxx:104
TrigConf::L1PrescalesSet::size
std::size_t size() const
number of L1 prescales
Definition: L1PrescalesSet.cxx:38
python.XMLReader.l1menu
l1menu
Definition: XMLReader.py:73
TrigConf::IOException::what
virtual const char * what() const noexcept
Definition: Trigger/TrigConfiguration/TrigConfIO/src/Exceptions.cxx:7
TrigConf::TrigDBHLTPrescalesSetLoader
Loader of trigger configurations from Json files.
Definition: TrigDBHLTPrescalesSetLoader.h:23
TrigConf::JsonFileLoader
Loader of trigger configurations from Json files.
Definition: JsonFileLoader.h:25
TrigConf::IOException
Definition: Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h:13
TrigConf::TrigDBMenuLoader
Loader of trigger menu configurations from the database.
Definition: TrigDBMenuLoader.h:30
TrigConf::HLTPrescalesSet
HLT menu configuration.
Definition: HLTPrescalesSet.h:19
AthenaPoolExample_Copy.outputFileName
string outputFileName
Definition: AthenaPoolExample_Copy.py:40
TrigConf::TrigDBL1PrescalesSetLoader
Loader of trigger configurations from Json files.
Definition: TrigDBL1PrescalesSetLoader.h:24
TrigConf::TrigDBL1BunchGroupSetLoader
Loader of trigger configurations from Json files.
Definition: TrigDBL1BunchGroupSetLoader.h:24
TrigConf::L1CTPFiles::print
void print() const
Definition: L1CTPFiles.cxx:25