ATLAS Offline Software
Loading...
Searching...
No Matches
TriggerMenuRW.cxx File Reference

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 237 of file TriggerMenuRW.cxx.

237 {
238
239 Config cfg;
240 cfg.parseProgramOptions(argc, argv);
241 if(cfg.help) {
242 cfg.usage();
243 return 0;
244 }
245
246 if(cfg.error.size()!=0) {
247 for(const string & e: cfg.error)
248 cerr << e << endl;
249 cfg.usage();
250 return 1;
251 }
252
253 if( cfg.inputFiles.size()>0 ) {
254 // load config from files
255 TrigConf::JsonFileLoader fileLoader;
256 for (const std::string & fn : cfg.inputFiles) {
257 // check if the file is L1 or HLT
258 std::string filetype = fileLoader.getFileType( fn );
259 if(filetype == "l1menu") {
261 fileLoader.loadFile( fn, l1menu);
262 cout << "Loaded L1 menu " << l1menu.name() << " with " << l1menu.size() << " items from " << fn << endl;
263 l1menu.printMenu(cfg.detail);
264 writeJsonFile(l1menu, "L1Menu", cfg);
265 } else if(filetype == "hltmenu" ) {
266 TrigConf::HLTMenu hltmenu;
267 fileLoader.loadFile( fn, hltmenu);
268 cout << "Loaded HLT menu " << hltmenu.name() << " with " << hltmenu.size() << " chains from " << fn << endl;
269 hltmenu.printMenu(cfg.detail);
270 writeJsonFile(hltmenu, "HLTMenu", cfg);
271 } else if(filetype == "l1prescale" ) {
273 fileLoader.loadFile( fn, l1pss);
274 cout << "Loaded L1 prescales set file " << fn << " with " << l1pss.size() << " prescales from " << fn << endl;
275 writeJsonFile(l1pss, "L1PrescalesSet", cfg);
276 } else if(filetype == "hltprescale" ) {
278 fileLoader.loadFile( fn, hltpss);
279 cout << "Loaded HLT prescales set file " << fn << " with " << hltpss.size() << " prescales from " << fn << endl;
280 hltpss.printPrescaleSet(cfg.detail);
281 writeJsonFile(hltpss, "HLTPrescalesSet", cfg);
282 } else if(filetype == "bunchgroupset" ) {
284 fileLoader.loadFile( fn, bgs);
285 cout << "Loaded L1 BunchGroup set file " << fn << " with " << bgs.sizeNonEmpty() << " non-empty bunchgroups from " << fn << endl;
286 bgs.printSummary(cfg.detail);
287 writeJsonFile(bgs, "BunchGroupSet", cfg);
288 } else if(filetype == "joboptions" ) {
290 fileLoader.loadFile( fn, jo);
291 cout << "Loaded job options with " << jo.getObject("properties").getKeys().size() << " properties from " << fn << endl;
292 if( cfg.detail ) {
293 TrigConf::DataStructure ds = jo.getObject("properties");
294 //cppcheck-suppress throwInEntryPoint
295 for( const auto& alg : ds.data()) {
296 std::cout << alg.first << std::endl;
297 for( const auto& prop : alg.second ) {
298 std::cout << " " << prop.first << " -> " << prop.second.data() << std::endl;
299 }
300 }
301 }
302 writeJsonFile(jo, "HLTJobOptions", cfg);
303 } else if(filetype == "hltmonitoringsummary" ) {
305 fileLoader.loadFile( fn, mon);
306 cout << "Loaded HLT monnitoring with " << mon.size() << " signatures from " << fn << endl;
307 mon.printMonConfig(cfg.detail);
308 writeJsonFile(mon, "HLTMonitoring", cfg);
309 } else {
310 cerr << "File " << fn << " not recognized as being an L1 or HLT menu or prescale set or bunchgroup set" << endl;
311 }
312 }
313 }
314
315 if( cfg.smk != 0 && !cfg.doCtp ) {
316 // load config from DB
317 {
318 // db menu loader
319 TrigConf::TrigDBMenuLoader dbloader(cfg.dbalias);
320 if(!cfg.crestDb.empty()) {
321 dbloader.setCrestTrigDB(cfg.crestDb);
322 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
323 }
324
325 // L1 menu
326 {
328 try {
329 dbloader.loadL1Menu( cfg.smk, l1menu, outputFileName("L1Menu", cfg) );
330 }
331 catch(TrigConf::IOException & ex) {
332 cout << "Could not load L1 menu. An exception occurred: " << ex.what() << endl;
333 }
334 if(l1menu) {
335 cout << "Loaded L1 menu " << l1menu.name() << " with " << l1menu.size() << " items from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
336 if( cfg.detail ) {
337 l1menu.printMenu(true);
338 }
339 }
340 cout << endl;
341 }
342
343 // HLT menu
344 {
345 TrigConf::HLTMenu hltmenu;
346 try {
347 dbloader.loadHLTMenu( cfg.smk, hltmenu, outputFileName("HLTMenu", cfg));
348 }
349 catch(TrigConf::IOException & ex) {
350 cout << "Could not load HLT menu. An exception occurred: " << ex.what() << endl;
351 }
352 if (hltmenu) {
353 cout << "Loaded HLT menu " << hltmenu.name() << " with " << hltmenu.size() << " chains from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
354 if( cfg.detail ) {
355 hltmenu.printMenu(true);
356 }
357 }
358 cout << endl;
359 }
360 }
361
362 // Job options
363 {
364 TrigConf::TrigDBJobOptionsLoader dbloader(cfg.dbalias);
365 if(!cfg.crestDb.empty()) {
366 dbloader.setCrestTrigDB(cfg.crestDb);
367 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
368 }
370 try {
371 dbloader.loadJobOptions( cfg.smk, jo, outputFileName("HLTJobOptions", cfg) );
372 }
373 catch(TrigConf::IOException & ex) {
374 cout << "Could not load HLT job options. An exception occurred: " << ex.what() << endl;
375 }
376 if (jo) {
377 cout << "Loaded job options with " << jo.getObject("properties").getKeys().size() << " entries from " << cfg.dbalias << " with SMK " << cfg.smk << endl;
378 if( cfg.detail ) {
379 TrigConf::DataStructure ds = jo.getObject("properties");
380 for( const auto& alg : ds.data()) {
381 std::cout << alg.first << std::endl;
382 for( const auto& prop : alg.second ) {
383 std::cout << " " << prop.first << " -> " << prop.second.data() << std::endl;
384 }
385 }
386 }
387 }
388 cout << endl;
389 }
390
391 // HLT monitoring groups
392 {
393 TrigConf::TrigDBMonitoringLoader dbloader(cfg.dbalias);
394 if(!cfg.crestDb.empty()) {
395 dbloader.setCrestTrigDB(cfg.crestDb);
396 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
397 }
399 try {
400 dbloader.loadHLTMonitoring( cfg.smk, hltmon, outputFileName("HLTMonitoring", cfg));
401 }
402 catch(TrigConf::IOException & ex) {
403 cout << "Could not load HLT monitoring. An exception occurred: " << ex.what() << endl;
404 }
405 if (hltmon) {
406 cout << "Loaded HLT monitoring with " << hltmon.size() << " signatures rom " << cfg.dbalias << " with SMK " << cfg.smk << endl;
407 if( cfg.detail ) {
408 hltmon.printMonConfig(true);
409 }
410 }
411 cout << endl;
412 }
413
414 }
415
416 if( cfg.smk != 0 && cfg.doCtp ) {
417 TrigConf::TrigDBCTPFilesLoader dbloader(cfg.dbalias);
418 TrigConf::L1CTPFiles ctpfiles;
419 try{
420 dbloader.loadHardwareFiles(cfg.smk, ctpfiles, 0x0F, outputFileName("CTPFiles", cfg));
421 } catch (std::format_error & e){
422 cout << " format_error "<<e.what()<<" thrown in TriggerMenuRW.\n";
423 return 1;
424 }
425 ctpfiles.print();
426 }
427
428 if( cfg.l1psk != 0 ) {
429 // load L1 prescales set from DB
431 if(!cfg.crestDb.empty()) {
432 dbloader.setCrestTrigDB(cfg.crestDb);
433 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
434 }
436 try {
437 dbloader.loadL1Prescales( cfg.l1psk, l1pss, outputFileName("L1PrescalesSet", cfg) );
438 }
439 catch(TrigConf::IOException & ex) {
440 cout << "Could not load L1 prescales. An exception occurred: " << ex.what() << endl;
441 }
442 if (l1pss) {
443 cout << "Loaded L1 prescales set " << l1pss.name() << " with " << l1pss.size() << " prescales from " << cfg.dbalias << " with L1 PSK " << cfg.l1psk << endl;
444 }
445 }
446
447 if( cfg.hltpsk != 0 ) {
448 // load L1 prescales set from DB
450 if(!cfg.crestDb.empty()) {
451 dbloader.setCrestTrigDB(cfg.crestDb);
452 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
453 }
455 try {
456 dbloader.loadHLTPrescales( cfg.hltpsk, hltpss, outputFileName("HLTPrescalesSet", cfg) );
457 }
458 catch(TrigConf::IOException & ex) {
459 cout << "Could not load HLT prescales. An exception occurred: " << ex.what() << endl;
460 }
461 if (hltpss) {
462 cout << "Loaded HLT prescales set " << hltpss.name() << " with " << hltpss.size() << " prescales from " << cfg.dbalias << " with HLT PSK " << cfg.hltpsk << endl;
463 }
464 }
465
466 if( cfg.bgsk != 0 ) {
467 // load L1 prescales set from DB
469 if(!cfg.crestDb.empty()) {
470 dbloader.setCrestTrigDB(cfg.crestDb);
471 dbloader.setCrestConnection(cfg.crestServer, cfg.crestApi);
472 }
474 try {
475 dbloader.loadBunchGroupSet( cfg.bgsk, bgs, outputFileName("BunchGroupSet", cfg) );
476 }
477 catch(TrigConf::IOException & ex) {
478 cout << "Could not load bunchgroup set. An exception occurred: " << ex.what() << endl;
479 }
480 if (bgs) {
481 cout << "Loaded L1 bunchgroup set " << bgs.name() << " with " << bgs.size() << " bunchgroups from " << cfg.dbalias << " with BGSK " << cfg.bgsk << endl;
482 if( cfg.detail ) {
483 bgs.printSummary(true);
484 }
485 }
486 }
487
488 return 0;
489}
static const std::string outputFileName
Base class for Trigger configuration data and wrapper around underlying representation.
virtual const std::string & name() const final
std::vector< std::string > getKeys() const
Access to the keys of an DataStructure which presents a dictionary.
DataStructure getObject(const std::string &pathToChild, bool ignoreIfMissing=false) const
Access to configuration object.
HLT menu configuration.
Definition HLTMenu.h:21
std::size_t size() const
Accessor to the number of HLT chains.
Definition HLTMenu.cxx:35
void printMenu(bool full=false) const
print overview of L1 Menu
Definition HLTMenu.cxx:96
HLT monitoring configuration.
std::size_t size() const
Accessor to the number of HLT monitoring chains.
void printMonConfig(bool full=false) const
print overview of L1 Menu
HLT menu configuration.
std::size_t size() const
number of HLT prescales
void printPrescaleSet(bool full) const
Loader of trigger configurations from Json files.
std::string getFileType(const std::string &filename) const
Checks the trigger level of a given json file.
bool loadFile(const std::string &filename, boost::property_tree::ptree &data, const std::string &pathToChild="") const
Load content of json file into a ptree.
L1 board configuration.
std::size_t size() const
Accessor to the number of defined bunchgroups.
std::size_t sizeNonEmpty() const
Accessor to the number of non-empty bunchgroups.
void printSummary(bool detailed=false) const
print a more or less detailed summary
L1 menu configuration.
Definition L1CTPFiles.h:29
L1 menu configuration.
Definition L1Menu.h:28
L1 menu configuration.
std::size_t size() const
number of L1 prescales
Loader of trigger configurations from Json files.
Loader of trigger configurations from Json files.
Loader of trigger configurations from Json files.
Loader of trigger configurations from Json files.
Loader of trigger configurations from Json files.
Loader of trigger menu configurations from the database.
Loader of trigger menu configurations from the database.