ATLAS Offline Software
Loading...
Searching...
No Matches
HLTConfigSvc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "HLTConfigSvc.h"
6#include "TrigConfMD5.h"
7#include "TrigConfSvcHelper.h"
8
9#include "GaudiKernel/ServiceHandle.h"
11
17
18#include <memory>
19
20TrigConf::HLTConfigSvc::HLTConfigSvc(const std::string& name, ISvcLocator* pSvcLocator) :
21 AthService(name, pSvcLocator)
22{}
23
25{
26 std::unique_ptr<TrigConf::HLTMenu> hltmenu = std::make_unique<TrigConf::HLTMenu>();
27 std::unique_ptr<TrigConf::HLTMonitoring> monitoring;
28
29 if (m_inputType == "DB") {
30 // db menu loader
32 std::string crest_server("");
33 std::string crest_api("");
34 std::string dbname("");
35 if(isCrestConnection(m_dbConnection, crest_server, crest_api, dbname)) {
36 dbloader.setCrestTrigDB(dbname);
37 dbloader.setCrestConnection(crest_server, crest_api);
38 }
40 ATH_CHECK( dbloader.loadHLTMenu(m_smk, *hltmenu) );
41 }
42 else if (m_inputType == "FILE") {
43 // load the json file into TrigConf::HLTMenu
44 TrigConf::JsonFileLoader fileLoader;
46
47 ATH_CHECK( fileLoader.loadFile(m_hltFileName, *hltmenu) );
48
49 uint32_t smk = m_smk.value();
50 if (!m_l1FileName.empty() && smk == 0u) {
51 auto l1menu = std::make_unique<TrigConf::L1Menu>();
52 const bool status = fileLoader.loadFile(m_l1FileName, *l1menu);
53 if (status) {
54 smk = TrigConf::truncatedHash(*l1menu, *hltmenu);
55 } else {
56 ATH_MSG_DEBUG("No L1 menu created, cannot compute a MC-SMK in this job");
57 }
58 }
59 ATH_MSG_INFO("Setting file-loaded HLT Menu SMK to:" << smk);
60 hltmenu->setSMK(smk); // allow assigning a specified or hashed SMK when running from FILE
61
62 if (!m_monitoringFileName.empty()) {
63 monitoring.reset( new TrigConf::HLTMonitoring() );
64 const bool success = fileLoader.loadFile(m_monitoringFileName, *monitoring);
65 if (not success) {
67 ATH_MSG_INFO("Unable to read " << m_monitoringFileName
68 << ", but the monitoring collection is flagged as optional. Continuing.");
69 monitoring.reset(); // This smartpointer goes back from having Some to having None.
70 } else {
71 ATH_MSG_ERROR("Unable to read " << m_monitoringFileName
72 << ", the monitoring collection flagged as non-optional in this job.");
73 return StatusCode::FAILURE;
74 }
75 } else { // success
76 monitoring->setSMK(smk);
77 }
78 }
79 }
80 else {
81 ATH_MSG_ERROR("Unknown input type '" << m_inputType
82 << "'. Allowed values: " << m_inputType.documentation());
83 return StatusCode::FAILURE;
84 }
85
86 ServiceHandle<StoreGateSvc> detStore("StoreGateSvc/DetectorStore", name());
87 ATH_CHECK( detStore.retrieve() );
88 if (detStore->record(std::move(hltmenu), "HLTTriggerMenu").isSuccess()) {
89 ATH_MSG_INFO("Recorded HLT menu as 'HLTTriggerMenu' in detector store");
90 }
91 if (monitoring and detStore->record(std::move(monitoring), "HLTMonitoringMenu").isSuccess()) {
92 ATH_MSG_INFO("Recorded HLT monitoring menu as 'HLTMonitoringMenu' in detector store");
93 }
94
95 return StatusCode::SUCCESS;
96}
97
99{
100 // Handle to JobOptionsSvc to retrieve configuration keys
101 if (auto joSvc = serviceLocator()->service<TrigConf::IJobOptionsSvc>("JobOptionsSvc")) {
102 if (joSvc->superMasterKey() > 0) {
103 m_inputType = "DB";
104 m_smk = joSvc->superMasterKey();
105 m_dbConnection = joSvc->server();
106 }
107 }
108 else {
109 ATH_MSG_DEBUG("Did not locate TrigConf::JobOptionsSvc, not running athenaHLT");
110 }
111
112 ATH_MSG_INFO("Loading HLT trigger menu from:");
114 if (m_inputType == "FILE") {
117 }
118 else if (m_inputType == "DB") {
121 }
123
124 return StatusCode::SUCCESS;
125}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
Loader class for Trigger configuration from Json.
HLTConfigSvc(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< std::string > m_dbConnection
Gaudi::Property< std::string > m_l1FileName
Gaudi::Property< unsigned int > m_smk
Gaudi::Property< std::string > m_inputType
Gaudi::Property< bool > m_monitoringOptional
Gaudi::Property< std::string > m_hltFileName
Gaudi::Property< std::string > m_monitoringFileName
virtual StatusCode initialize() override
StatusCode writeConfigToDetectorStore()
HLT monitoring configuration.
Loader of trigger configurations from Json files.
void setLevel(MSGTC::Level lvl)
bool loadFile(const std::string &filename, boost::property_tree::ptree &data, const std::string &pathToChild="") const
Load content of json file into a ptree.
void setLevel(MSGTC::Level lvl)
void setCrestTrigDB(const std::string &crestTrigDB)
set trigger db for the crest connection
void setCrestConnection(const std::string &server, const std::string &version="")
declare CREST as the source of the configuration An empty crest server makes it use Oracle
Loader of trigger menu configurations from the database.
bool loadHLTMenu(unsigned int smk, boost::property_tree::ptree &hltmenu, const std::string &outFileName="") const
Load HLT menu content from the Trigger DB into two ptrees for a given SuperMasterKey (SMK)
uint32_t truncatedHash(const DataStructure &dataStructure)
Function to compute a truncated MD5 hash for a JSON file.
bool isCrestConnection(const std::string &db_connection_string, std::string &crest_server, std::string &crest_api, std::string &dbname)
Function to interpret the trigger connection string for CREST connections Format of the connections s...