13#include "CoolKernel/types.h"
22std::shared_ptr<TrigConf::L1PrescalesSet>
24 auto pss = std::make_shared<L1PrescalesSet>();
26 ATH_MSG_DEBUG(
"Setting up JsonFileLoader with file " << filename );
30 if( psLoader.
loadFile( filename, *pss) ) {
33 ATH_MSG_INFO(
"L1 prescales set successfully loaded from file " << filename );
35 ATH_MSG_WARNING(
"Failed loading L1 prescales set from file " << filename );
42std::shared_ptr<TrigConf::L1PrescalesSet>
45 ATH_MSG_WARNING(
"Currently it is not possible to load run 2 prescale sets from the database. Will not load L1 psk " << psk );
48 auto pss = std::make_shared<L1PrescalesSet>();
52 std::string crest_server(
"");
53 std::string crest_api(
"");
54 std::string dbname(
"");
64 catch(std::exception & e) {
65 ATH_MSG_WARNING(
"Failed loading L1 prescales set from db with key " << psk );
87 if(
auto joSvc = serviceLocator()->service<TrigConf::IJobOptionsSvc>(
"JobOptionsSvc" ) ) {
88 if( joSvc->l1PrescaleKey()>0 ) {
89 m_psk = joSvc->l1PrescaleKey();
109 }
else if(
m_psk != 0u ) {
118 return StatusCode::SUCCESS;
124 ATH_MSG_DEBUG(
"L1PrescaleCondAlg::execute with lb " << ctx.eventID().lumi_block());
127 if (writeCondHandle.
isValid()) {
128 return StatusCode::SUCCESS;
131 unsigned int l1Psk =
m_psk;
138 if ( pskAL ==
nullptr ) {
140 return StatusCode::FAILURE;
142 if (not readH.
range(range)) {
144 return StatusCode::FAILURE;
149 l1Psk = (*pskAL)[
"Lvl1PrescaleConfigurationKey"].data<cool::UInt32>();
150 ATH_MSG_INFO(
"Extracted the L1 PSK " << l1Psk <<
" for run " << ctx.eventID().run_number()
151 <<
" and lb " << ctx.eventID().lumi_block() );
155 EventIDBase::number_type
run = ctx.eventID().run_number();
156 EventIDBase start, stop;
157 start.set_run_number(
run);
158 start.set_lumi_block(0);
159 stop.set_run_number(
run+1);
160 stop.set_lumi_block(0);
161 range = EventIDRange(start,stop);
165 std::shared_ptr<const L1PrescalesSet> pss;
169 pss = m_pssMap.at(0);
171 }
else if ( l1Psk != 0 ) {
173 auto pssi = m_pssMap.find( l1Psk );
175 if( pssi == m_pssMap.end()) {
177 bool isRun3 = range.start().run_number()>350000;
181 if( pss ==
nullptr ) {
182 ATH_MSG_ERROR(
"Failed loading L1 prescales set from the database" );
183 return StatusCode::FAILURE;
186 const auto p = m_pssMap.insert(std::make_pair( l1Psk, pss ));
187 pss = p.first->second;
197 ATH_MSG_ERROR(
"Failed loading L1 prescales set (not reading from FILE and no psk known)" );
198 return StatusCode::FAILURE;
203 if( pss ==
nullptr ) {
204 ATH_MSG_INFO(
"Recording empty L1 prescales set with range " << range);
207 ATH_MSG_INFO(
"Recording L1 prescales set with range " << range <<
" (key = " << pss->psk() <<
")");
211 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
void createFromDB(GeoFullPhysVol *envelope, IRDBAccessSvc *rdbAccess, IGeoModelSvc *geoModel, StoredMaterialManager *materialManager)
Loader class for Trigger configuration from Json.
Loader class for Trigger configuration (L1 prescales set) from the Trigger DB.
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Base class for conditions algorithms.
An AttributeList represents a logical row of attributes in a metadata table.
bool range(EventIDRange &r)
const std::string & key() const
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
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.
SG::WriteCondHandleKey< TrigConf::L1PrescalesSet > m_l1PrescalesSetOutputKey
std::shared_ptr< L1PrescalesSet > createFromDB(unsigned int psk, bool isRun3) const
Gaudi::Property< unsigned int > m_psk
virtual StatusCode execute(const EventContext &ctx) const override
std::shared_ptr< L1PrescalesSet > createFromFile(const std::string &filename) const
Gaudi::Property< std::string > m_configSource
Gaudi::Property< std::string > m_filename
SG::ReadCondHandleKey< AthenaAttributeList > m_pskFolderInputKey
virtual StatusCode initialize() override
L1PrescaleCondAlg(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< std::string > m_dbConnection
Loader of trigger configurations from Json files.
bool loadL1Prescales(unsigned int l1psk, L1PrescalesSet &l1pss, const std::string &outFileName="") const
Load content from the Trigger DB into an L1PrescalesSet for a given L1PrescaleKey (L1PSK)
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
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...