ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
TrigConf::TrigDBL1BunchGroupSetLoader Class Reference

Loader of trigger configurations from Json files. More...

#include <TrigDBL1BunchGroupSetLoader.h>

Inheritance diagram for TrigConf::TrigDBL1BunchGroupSetLoader:
Collaboration diagram for TrigConf::TrigDBL1BunchGroupSetLoader:

Public Member Functions

 TrigDBL1BunchGroupSetLoader (const std::string &connection)
 Constructor. More...
 
virtual ~TrigDBL1BunchGroupSetLoader () override
 Destructor - cannot be defined here because QueryDefinition is an incomplete type. More...
 
bool loadBunchGroupSet (unsigned int bgsk, L1BunchGroupSet &bgs, const std::string &outFileName="") const
 Load content from the Trigger DB into an L1PrescalesSet for a given L1PrescaleKey (L1PSK) More...
 
size_t schemaVersion (coral::ISessionProxy *session) const
 access to TriggerDB schema version More...
 
bool writeRawFile (const coral::Blob &data, const std::string &outFileName) const
 write data blob into file This can be used to write the DB content to file without going through a ptree More...
 
void setLevel (MSGTC::Level lvl)
 
MSGTC::Level outputLevel () const
 
bool msgLvl (const MSGTC::Level lvl) const
 Test the output level. More...
 
MsgStreamTCmsg () const
 The standard message stream. More...
 
MsgStreamTCmsg (const MSGTC::Level lvl) const
 The standard message stream. More...
 

Protected Member Functions

std::unique_ptr< coral::ISessionProxy > createDBSession () const
 create (if needed) DB session and return the session proxy More...
 
QueryDefinition getQueryDefinition (size_t schemaVersion, const std::map< size_t, QueryDefinition > &queries) const
 return query for given schemaVersion from possible queries More...
 

Private Attributes

std::map< size_t, QueryDefinitionm_queries
 
std::string m_connection {"TRIGGERDB"}
 
int m_retrialPeriod {0}
 
int m_retrialTimeout {0}
 
int m_connectionTimeout {0}
 
boost::thread_specific_ptr< MsgStreamTCm_msg_tls
 MsgStreamTC instance (a std::cout like with print-out levels) More...
 
std::string m_name
 

Detailed Description

Loader of trigger configurations from Json files.

Definition at line 24 of file TrigDBL1BunchGroupSetLoader.h.

Constructor & Destructor Documentation

◆ TrigDBL1BunchGroupSetLoader()

TrigConf::TrigDBL1BunchGroupSetLoader::TrigDBL1BunchGroupSetLoader ( const std::string &  connection)

Constructor.

Definition at line 6 of file TrigDBL1BunchGroupSetLoader.cxx.

6  :
7  TrigDBLoader("TrigDBL1BunchGroupSetLoader", connection)
8 {
9  { // query for all schema versions
10  auto & q = m_queries[1];
11  // tables
12  q.addToTableList ( "L1_BUNCH_GROUP_SET" );
13  // bind vars
14  q.extendBinding<int>("key");
15  // conditions
16  q.extendCondition("L1BGS_ID = :key");
17  // attributes
18  q.extendOutput<coral::Blob>( "L1BGS_DATA" );
19  // the field with the data
20  q.setDataName("L1BGS_DATA");
21  }
22 }

◆ ~TrigDBL1BunchGroupSetLoader()

TrigConf::TrigDBL1BunchGroupSetLoader::~TrigDBL1BunchGroupSetLoader ( )
overridevirtualdefault

Destructor - cannot be defined here because QueryDefinition is an incomplete type.

Member Function Documentation

◆ createDBSession()

std::unique_ptr< coral::ISessionProxy > TrigConf::TrigDBLoader::createDBSession ( ) const
protectedinherited

create (if needed) DB session and return the session proxy

Definition at line 94 of file TrigDBLoader.cxx.

94  {
95 
96  coral::ConnectionService connSvc;
97  coral::IConnectionServiceConfiguration& csc = connSvc.configuration();
98  csc.setConnectionRetrialPeriod( m_retrialPeriod );
99  csc.setConnectionRetrialTimeOut( m_retrialTimeout );
100  csc.setConnectionTimeOut( m_connectionTimeout );
101 
102  /* TODO
103  if(csc.replicaSortingAlgorithm() == nullptr) { // likely to be standalone, create our own
104  TRG_MSG_INFO("Create own ReplicaSortingAlgorithm");
105  m_replicaSorter = new TrigConf::ReplicaSorter();
106  csc.setReplicaSortingAlgorithm(*m_replicaSorter);
107  }
108  */
109 
110  TRG_MSG_INFO("Connecting to " << m_connection);
111 
112  auto proxy = std::unique_ptr<coral::ISessionProxy>( connSvc.connect(m_connection, coral::AccessMode::ReadOnly) );
113 
114  TRG_MSG_INFO("Opened session " << m_connection << " with retrialPeriod/retrialTimeout/connectionTimeout: "
115  << m_retrialPeriod << "/" << m_retrialTimeout << "/" << m_connectionTimeout);
116 
117  return proxy;
118 }

◆ getQueryDefinition()

TrigConf::QueryDefinition TrigConf::TrigDBLoader::getQueryDefinition ( size_t  schemaVersion,
const std::map< size_t, QueryDefinition > &  queries 
) const
protectedinherited

return query for given schemaVersion from possible queries

Definition at line 122 of file TrigDBLoader.cxx.

124 {
125  // find the largest version key in the map of defined queries that is <= the schemaVersion
126  size_t maxDefVersion = 0;
127  for(auto & entry : queries) {
128  size_t vkey = entry.first;
129  if(vkey>maxDefVersion and vkey<=schemaVersion) {
130  maxDefVersion = vkey;
131  }
132  }
133  // if nothing found, throw an error
134  if( maxDefVersion==0 ) {
135  TRG_MSG_ERROR("No query for schema version " << schemaVersion << " defined" );
136  throw TrigConf::NoQueryException( "No query available for schema version" + std::to_string(schemaVersion) );
137  }
138  return queries.at(maxDefVersion);
139 }

◆ loadBunchGroupSet()

bool TrigConf::TrigDBL1BunchGroupSetLoader::loadBunchGroupSet ( unsigned int  bgsk,
TrigConf::L1BunchGroupSet bgs,
const std::string &  outFileName = "" 
) const

Load content from the Trigger DB into an L1PrescalesSet for a given L1PrescaleKey (L1PSK)

Parameters
l1psk[in] the L1PSK that should be loaded
l1pss[out] the loaded L1PrescalesSet
outFileName[in] if set, an outputfile with the raw data blob is written

Definition at line 28 of file TrigDBL1BunchGroupSetLoader.cxx.

31 {
33  {
34  auto session = createDBSession();
35  session->transaction().start( /*bool readonly=*/ true);
36  const size_t sv = schemaVersion(session.get());
37  QueryDefinition qdef = getQueryDefinition(sv, m_queries);
38  try {
39  qdef.setBoundValue<int>("key", bgsk);
40  auto q = qdef.createQuery( session.get() );
41  auto & cursor = q->execute();
42  if ( ! cursor.next() ) {
43  TRG_MSG_ERROR("Tried reading L1 bunchgroup set, but L1 bunchgroup key " << bgsk << " is not available" );
44  throw TrigConf::NoBGSKException("TrigDBL1BunchGroupSetLoader: L1 bunchgroup key " + std::to_string(bgsk) + " not available");
45  }
46  const coral::AttributeList& row = cursor.currentRow();
47  const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>();
48  writeRawFile( dataBlob, outFileName );
49  blobToPtree( dataBlob, pt );
50  }
51  catch(coral::QueryException & ex) {
52  TRG_MSG_ERROR("When reading L1 bunchgroup set for L1 bunchgroup key " << bgsk << " a coral::QueryException was caught ( " << ex.what() <<" )" );
53  throw TrigConf::QueryException("TrigDBL1BunchGroupSetLoader: " + std::string(ex.what()));
54  }
55  }
56  try {
57  bgs.setData(std::move(pt));
58  bgs.setBGSK(bgsk);
59  }
60  catch(std::exception & ex) {
61  bgs.clear();
62  TRG_MSG_ERROR("When reading L1 bunchgroup set for L1 BGSK " << bgsk << " a parsing error occured ( " << ex.what() <<" )" );
63  throw TrigConf::ParsingException("TrigDBL1BunchGroupSetLoader: parsing error " + std::string(ex.what()));
64  }
65 
66  return true;
67 }

◆ msg() [1/2]

MsgStreamTC & TrigConf::TrigConfMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 81 of file TrigConfMessaging.h.

82  {
83  MsgStreamTC* ms = m_msg_tls.get();
84  if (!ms) {
85  ms = new MsgStreamTC(m_name);
86  m_msg_tls.reset(ms);
87  }
88  return *ms;
89  }

◆ msg() [2/2]

MsgStreamTC & TrigConf::TrigConfMessaging::msg ( const MSGTC::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 91 of file TrigConfMessaging.h.

92  {
93  return msg() << lvl;
94  }

◆ msgLvl()

bool TrigConf::TrigConfMessaging::msgLvl ( const MSGTC::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicting if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 70 of file TrigConfMessaging.h.

71  {
72  if (msg().level() <= lvl) {
73  msg() << lvl;
74  return true;
75  }
76  else {
77  return false;
78  }
79  }

◆ outputLevel()

MSGTC::Level TrigConf::TrigDBLoader::outputLevel ( ) const
inlineinherited

Definition at line 54 of file TrigDBLoader.h.

54 { return msg().level(); }

◆ schemaVersion()

size_t TrigConf::TrigDBLoader::schemaVersion ( coral::ISessionProxy *  session) const
inherited

access to TriggerDB schema version

Returns
version of the DB schema (0 - no version, >0 - schema version)

Definition at line 38 of file TrigDBLoader.cxx.

38  {
39 
40  static const std::string versionTagPrefix("Trigger-Run3-Schema-v");
41 
42  // if database has no schema version, then we return 0
43  if(! session->nominalSchema().existsTable("TRIGGER_SCHEMA") ) {
44  throw std::runtime_error( "Trigger schema has no schema version table" );
45  }
46 
48  // tables
49  qdef.addToTableList ( "TRIGGER_SCHEMA" );
50  // attributes
51  qdef.extendOutput<std::string>( "TS_TAG" );
52 
53  auto query = qdef.createQuery( session );
54  auto & cursor = query->execute();
55  if ( ! cursor.next() ) {
56  throw std::runtime_error( "Trigger schema has schema version table but it is empty" );
57  }
58 
59  const coral::AttributeList& row = cursor.currentRow();
60  std::string versionTag = row["TS_TAG"].data<std::string>();
61  if( ! startswith(versionTag, versionTagPrefix)) {
62  throw std::runtime_error( "Tag format error: Trigger schema version tag " + versionTag + "does not start with " + versionTagPrefix);
63  }
64 
65  std::string vstr = versionTag.substr(versionTagPrefix.size()); // the part of the string containing the version
66  size_t schemaVersion{0};
67  try {
68  schemaVersion = std::stoi(vstr);
69  }
70  catch (const std::invalid_argument& ia) {
71  TRG_MSG_ERROR("Invalid argument when interpreting the version part " << vstr << " of schema tag " << versionTag << ". " << ia.what());
72  throw;
73  }
74 
75  TRG_MSG_INFO("TriggerDB schema version: " << schemaVersion);
76  return schemaVersion;
77 }

◆ setLevel()

void TrigConf::TrigDBLoader::setLevel ( MSGTC::Level  lvl)
inlineinherited

Definition at line 52 of file TrigDBLoader.h.

52 { msg().setLevel(lvl); }

◆ writeRawFile()

bool TrigConf::TrigDBLoader::writeRawFile ( const coral::Blob &  data,
const std::string &  outFileName 
) const
inherited

write data blob into file This can be used to write the DB content to file without going through a ptree

Definition at line 80 of file TrigDBLoader.cxx.

81 {
82  if( outFileName.empty() ) {
83  return true;
84  }
85  std::ofstream outFile;
86  outFile.open( outFileName, std::ofstream::binary );
87  outFile.write( static_cast<const char*> ( data.startingAddress()), data.size() );
88  outFile.close();
89  TRG_MSG_INFO("Wrote file " << outFileName);
90  return true;
91 }

Member Data Documentation

◆ m_connection

std::string TrigConf::TrigDBLoader::m_connection {"TRIGGERDB"}
privateinherited

Definition at line 68 of file TrigDBLoader.h.

◆ m_connectionTimeout

int TrigConf::TrigDBLoader::m_connectionTimeout {0}
privateinherited

Definition at line 71 of file TrigDBLoader.h.

◆ m_msg_tls

boost::thread_specific_ptr<MsgStreamTC> TrigConf::TrigConfMessaging::m_msg_tls
mutableprivateinherited

MsgStreamTC instance (a std::cout like with print-out levels)

Definition at line 66 of file TrigConfMessaging.h.

◆ m_name

std::string TrigConf::TrigConfMessaging::m_name
privateinherited

Definition at line 67 of file TrigConfMessaging.h.

◆ m_queries

std::map<size_t, QueryDefinition> TrigConf::TrigDBL1BunchGroupSetLoader::m_queries
private

Definition at line 44 of file TrigDBL1BunchGroupSetLoader.h.

◆ m_retrialPeriod

int TrigConf::TrigDBLoader::m_retrialPeriod {0}
privateinherited

Definition at line 69 of file TrigDBLoader.h.

◆ m_retrialTimeout

int TrigConf::TrigDBLoader::m_retrialTimeout {0}
privateinherited

Definition at line 70 of file TrigDBLoader.h.


The documentation for this class was generated from the following files:
TRG_MSG_ERROR
#define TRG_MSG_ERROR(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:29
query_example.row
row
Definition: query_example.py:24
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
TrigConf::L1BunchGroupSet::setBGSK
void setBGSK(unsigned int bgsk)
Definition: L1BunchGroupSet.h:96
StateLessPT_NewConfig.proxy
proxy
Definition: StateLessPT_NewConfig.py:392
TrigConf::TrigConfMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStreamTC > m_msg_tls
MsgStreamTC instance (a std::cout like with print-out levels)
Definition: TrigConfMessaging.h:66
TrigConf::TrigDBLoader::schemaVersion
size_t schemaVersion(coral::ISessionProxy *session) const
access to TriggerDB schema version
Definition: TrigDBLoader.cxx:38
TrigConf::TrigDBLoader::m_connection
std::string m_connection
Definition: TrigDBLoader.h:68
test_pyathena.pt
pt
Definition: test_pyathena.py:11
python.subdetectors.tile.Blob
Blob
Definition: tile.py:17
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
TrigConf::NoBGSKException
Definition: Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h:46
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
TrigConf::QueryDefinition
Definition: TrigDBHelper.h:28
TrigConf::DataStructure::setData
void setData(const ptree &data)
Setting the configuration data.
Definition: DataStructure.cxx:39
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
TrigConf::QueryDefinition::extendOutput
void extendOutput(const std::string &fieldName)
Definition: TrigDBHelper.h:65
query
Definition: query.py:1
DumpGeoConfig.outFileName
string outFileName
Definition: DumpGeoConfig.py:252
TrigConf::TrigConfMessaging::m_name
std::string m_name
Definition: TrigConfMessaging.h:67
TrigConf::TrigConfMessaging::msg
MsgStreamTC & msg() const
The standard message stream.
Definition: TrigConfMessaging.h:81
calibdata.exception
exception
Definition: calibdata.py:496
TrigConf::MsgStreamTC::level
MSGTC::Level level()
Return message level of stream.
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:53
TrigConf::TrigDBL1BunchGroupSetLoader::m_queries
std::map< size_t, QueryDefinition > m_queries
Definition: TrigDBL1BunchGroupSetLoader.h:44
TrigConf::QueryDefinition::createQuery
std::unique_ptr< coral::IQuery > createQuery(coral::ISessionProxy *session)
Definition: TrigDBHelper.cxx:10
TrigConf::NoQueryException
Definition: Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h:26
TRG_MSG_INFO
#define TRG_MSG_INFO(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:27
DQPostProcessTest.outFile
outFile
Comment Out Those You do not wish to run.
Definition: DQPostProcessTest.py:37
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
TrigConf::TrigDBLoader::m_retrialTimeout
int m_retrialTimeout
Definition: TrigDBLoader.h:70
TrigConf::TrigDBLoader::m_connectionTimeout
int m_connectionTimeout
Definition: TrigDBLoader.h:71
TrigConf::ParsingException
Definition: Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h:51
ptree
boost::property_tree::ptree ptree
Definition: JsonFileLoader.cxx:16
TrigConf::QueryException
Definition: Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h:21
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
TrigConf::TrigDBLoader::m_retrialPeriod
int m_retrialPeriod
Definition: TrigDBLoader.h:69
TrigConf::L1BunchGroupSet::clear
virtual void clear() override
Clearing the configuration data.
Definition: L1BunchGroupSet.cxx:110
query_example.cursor
cursor
Definition: query_example.py:21
TrigConf::blobToPtree
void blobToPtree(const coral::Blob &blob, boost::property_tree::ptree &pt)
Definition: TrigDBHelper.cxx:58
LArCellConditions.sv
bool sv
Definition: LArCellConditions.py:45
TrigConf::TrigDBLoader::writeRawFile
bool writeRawFile(const coral::Blob &data, const std::string &outFileName) const
write data blob into file This can be used to write the DB content to file without going through a pt...
Definition: TrigDBLoader.cxx:80
extractSporadic.q
list q
Definition: extractSporadic.py:98
TrigConf::MsgStreamTC::setLevel
void setLevel(MSGTC::Level lvl)
Set message level of stream.
Definition: Trigger/TrigConfiguration/TrigConfBase/Root/MsgStream.cxx:52
TrigConf::TrigDBLoader::createDBSession
std::unique_ptr< coral::ISessionProxy > createDBSession() const
create (if needed) DB session and return the session proxy
Definition: TrigDBLoader.cxx:94
TrigConf::QueryDefinition::addToTableList
void addToTableList(const std::string &table, const std::string &table_short="")
Definition: TrigDBHelper.cxx:42
TrigConf::TrigDBLoader::getQueryDefinition
QueryDefinition getQueryDefinition(size_t schemaVersion, const std::map< size_t, QueryDefinition > &queries) const
return query for given schemaVersion from possible queries
Definition: TrigDBLoader.cxx:122
TrigConf::TrigDBLoader::TrigDBLoader
TrigDBLoader(const std::string &loaderName, const std::string &connection)
Constructor.
Definition: TrigDBLoader.cxx:21