ATLAS Offline Software
Loading...
Searching...
No Matches
TrigConf::HLTSequenceLoader Class Reference

TriggerDB loader of the HLT signatures. More...

#include <HLTSequenceLoader.h>

Inheritance diagram for TrigConf::HLTSequenceLoader:
Collaboration diagram for TrigConf::HLTSequenceLoader:

Public Member Functions

 HLTSequenceLoader (StorageMgr &sm, coral::ISessionProxy &session)
 constructor
virtual ~HLTSequenceLoader () override=default
 destructor
void loadSequences (HLTSequenceList &seqlist)
virtual bool load (HLTFrame &frame)
virtual void setLevel (MSGTC::Level lvl) override
 access to output stream
virtual MSGTC::Level outputLevel () const override
void startSession ()
 start session if not already active
void commitSession ()
 commit session if not already done
bool loadL1MasterKey (int SuperMasterKey, int &Lvl1MasterKey)
 get l1 master from super master
bool loadL1MenuKey (int SuperMasterKey, int &Lvl1MenuKey)
 get l1 menu id from super master
unsigned int triggerDBSchemaVersion ()
virtual int verbose () const override
virtual void setVerbose (int v) override
bool isRun1 ()
bool isRun2 ()
bool msgLvl (const MSGTC::Level lvl) const
 Test the output level.
MsgStreamTCmsg () const
 The standard message stream.
MsgStreamTCmsg (const MSGTC::Level lvl) const
 The standard message stream.
const std::string & getName () const
 name accessor

Protected Attributes

StorageMgrm_storageMgr
 reference to the storage manager
coral::ISessionProxy & m_session
 CORAL interface to database session.
bool m_sessionOwner {false}
 remember if the loader started the session in the first place

Private Member Functions

std::tuple< unsigned int, unsigned int > loadSchemaVersion () const
 get DB schema version and run number

Private Attributes

unsigned int m_smk {0}
unsigned int m_schemaversion {0}
int m_verbose {1}
boost::thread_specific_ptr< MsgStreamTCm_msg_tls
 MsgStreamTC instance (a std::cout like with print-out levels)
std::string m_name

Detailed Description

TriggerDB loader of the HLT signatures.

Definition at line 17 of file HLTSequenceLoader.h.

Constructor & Destructor Documentation

◆ HLTSequenceLoader()

TrigConf::HLTSequenceLoader::HLTSequenceLoader ( StorageMgr & sm,
coral::ISessionProxy & session )
inline

constructor

Parameters
smreference to storage manager
sessionreference to the database session

Definition at line 25 of file HLTSequenceLoader.h.

25 :
26 DBLoader("HLTSequenceLoader", sm, session) {}
DBLoader(StorageMgr &sm, coral::ISessionProxy &session)
constructor
Definition DBLoader.cxx:30

◆ ~HLTSequenceLoader()

virtual TrigConf::HLTSequenceLoader::~HLTSequenceLoader ( )
overridevirtualdefault

destructor

Member Function Documentation

◆ commitSession()

void TrigConf::DBLoader::commitSession ( )
inherited

commit session if not already done

Definition at line 45 of file DBLoader.cxx.

46{
47 if ( m_session.transaction().isActive() && m_sessionOwner) {
48 m_session.transaction().commit();
49 }
50}
bool m_sessionOwner
remember if the loader started the session in the first place
Definition DBLoader.h:69
coral::ISessionProxy & m_session
CORAL interface to database session.
Definition DBLoader.h:68

◆ getName()

const std::string & TrigConf::TrigConfMessaging::getName ( ) const
inlineinherited

name accessor

Returns
the name

Definition at line 101 of file TrigConfMessaging.h.

101 {
102 return m_name;
103 }

◆ isRun1()

bool TrigConf::DBLoader::isRun1 ( )
inlineinherited

Definition at line 60 of file DBLoader.h.

60{ return ! isRun2(); }

◆ isRun2()

bool DBLoader::isRun2 ( )
inherited

Definition at line 54 of file DBLoader.cxx.

54 {
55 const static unsigned int run = std::get<1>(loadSchemaVersion());
56 return run == 2;
57}
std::tuple< unsigned int, unsigned int > loadSchemaVersion() const
get DB schema version and run number
Definition DBLoader.cxx:81

◆ load()

bool TrigConf::HLTSequenceLoader::load ( HLTFrame & frame)
virtual

Definition at line 19 of file HLTSequenceLoader.cxx.

19 {
20 m_smk=frame.smk();
21
23
24 TRG_MSG_INFO("Loading HLT sequences");
25
26 HLTSequenceList& sequences = frame.theHLTSequenceList();
27
28 try {
29 startSession ();
30 loadSequences( sequences );
32 }
33 catch (const std::exception& e) {
34 TRG_MSG_ERROR("exception caught and rethrown : " << e.what());
35 throw;
36 }
37 return true;
38}
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
unsigned int triggerDBSchemaVersion()
Definition DBLoader.cxx:76
void startSession()
start session if not already active
Definition DBLoader.cxx:35
void loadSequences(HLTSequenceList &seqlist)

◆ loadL1MasterKey()

bool TrigConf::DBLoader::loadL1MasterKey ( int SuperMasterKey,
int & Lvl1MasterKey )
inherited

get l1 master from super master

Definition at line 128 of file DBLoader.cxx.

128 {
129 try {
130 startSession();
131
132 unique_ptr< coral::IQuery > q( m_session.nominalSchema().tableHandle( "SUPER_MASTER_TABLE").newQuery() );
133 q->setRowCacheSize( 5 );
134
135 //Bind list
136 coral::AttributeList bindings;
137 bindings.extend<int>("smtid");
138 bindings[0].data<int>() = smk;
139 q->setCondition( "SMT_ID = :smtid", bindings );
140
141 //Output data and types
142 coral::AttributeList attList;
143 attList.extend<int>( "SMT_L1_MASTER_TABLE_ID" );
144 fillQuery(q.get(), attList);
145
146 coral::ICursor& cursor = q->execute();
147 if ( ! cursor.next() ) {
148 msg() << "DBLoader: No such SuperMaster key exists " << smk << endl;
149 throw runtime_error( "DBLoader: SuperMasterKey not available" );
150 }
151
152 const coral::AttributeList& row = cursor.currentRow();
153 Lvl1MasterKey = row["SMT_L1_MASTER_TABLE_ID"].data<int>();
154 }
155 catch( const std::exception& e ) {
157 msg() << "DBLoader: C++ exception: " << e.what() << std::endl;
158 throw;
159 }
161 return true;
162}
MsgStreamTC & msg() const
The standard message stream.
row
Appending html table to final .html summary file.
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition DBHelper.cxx:13

◆ loadL1MenuKey()

bool TrigConf::DBLoader::loadL1MenuKey ( int SuperMasterKey,
int & Lvl1MenuKey )
inherited

get l1 menu id from super master

Definition at line 167 of file DBLoader.cxx.

167 {
168 try {
169
170 int l1Master = 0;
171 loadL1MasterKey(SuperMasterKey, l1Master);
172
173 startSession();
174
175 unique_ptr< coral::IQuery > q( m_session.nominalSchema().tableHandle( "L1_MASTER_TABLE").newQuery() );
176 q->setRowCacheSize( 5 );
177
178 //Bind list
179 coral::AttributeList bindings;
180 bindings.extend<int>("l1mtid");
181 bindings[0].data<int>() = l1Master;
182 q->setCondition( "L1MT_ID = :l1mtid" , bindings );
183
184 //Output data and types
185 coral::AttributeList attList;
186 attList.extend<int>( "L1MT_TRIGGER_MENU_ID" );
187 q->defineOutput(attList);
188 q->addToOutputList( "L1MT_TRIGGER_MENU_ID" );
189
190 coral::ICursor& cursor = q->execute();
191 if ( ! cursor.next() ) {
192 msg() << "DBLoader >> No such L1 Master key exists " << l1Master << std::endl;
193 throw std::runtime_error( "DBLoader >> L1MasterKey not available" );
195 }
196
197 const coral::AttributeList& row = cursor.currentRow();
198 Lvl1MenuKey = row["L1MT_TRIGGER_MENU_ID"].data<int>();
199
201
202 }
203 catch( const std::exception& e ) {
204 msg() << "DBLoader >> Standard C++ exception: " << e.what() << std::endl;
205 m_session.transaction().rollback();
206 throw;
207 }
208 return true;
209}
bool loadL1MasterKey(int SuperMasterKey, int &Lvl1MasterKey)
get l1 master from super master
Definition DBLoader.cxx:128

◆ loadSchemaVersion()

std::tuple< unsigned int, unsigned int > DBLoader::loadSchemaVersion ( ) const
privateinherited

get DB schema version and run number

Definition at line 81 of file DBLoader.cxx.

82{
83 const static auto versions = [&]() -> std::tuple<unsigned int,unsigned int> {
84 bool mySession = false;
85 if ( ! m_session.transaction().isActive() ) {
86 m_session.transaction().start(true);
87 mySession = true;
88 }
89
90 std::unique_ptr< coral::IQuery > q( m_session.nominalSchema().tableHandle( "TRIGGER_SCHEMA").newQuery() );
91 q->setRowCacheSize( 1 );
92
93 //Output data and types
94 coral::AttributeList attList;
95 attList.extend<int>( "TS_ID" );
96 q->defineOutput(attList);
97 q->addToOutputList( "TS_ID" );
98
99 q->addToOrderList("TS_ID desc");
100 coral::ICursor& cursor = q->execute();
101
102 if ( ! cursor.next() ) {
103 TRG_MSG_ERROR("Table TRIGGER_SCHEMA is not filled");
104 if ( mySession ) m_session.transaction().commit();
105 throw std::runtime_error( "DBLoader::loadSchemaVersion() >> Table TRIGGER_SCHEMA is not filled" );
106 }
107
108 const coral::AttributeList& row = cursor.currentRow();
109 const unsigned int triggerDBSchemaVersion = row["TS_ID"].data<int>();
110
111 TRG_MSG_INFO("TriggerDB schema version: " << triggerDBSchemaVersion);
112
113 const unsigned int run = m_session.nominalSchema().existsTable( "ACTIVE_MASTERS" ) ? 2 : 1;
114
115 TRG_MSG_INFO("Database has Run " << run << " schema");
116 TRG_MSG_INFO("Total number of tables : " << m_session.nominalSchema().listTables().size());
117
118 //commitSession();
119 if ( mySession ) m_session.transaction().commit();
120
121 return {triggerDBSchemaVersion, run};
122 }();
123
124 return versions;
125}

◆ loadSequences()

void TrigConf::HLTSequenceLoader::loadSequences ( HLTSequenceList & seqlist)

Definition at line 42 of file HLTSequenceLoader.cxx.

42 {
43
44 TRG_MSG_INFO("Start loading sequences with SMK " << m_smk);
45
46 coral::ITable & teTable = m_session.nominalSchema().tableHandle( "HLT_TRIGGER_ELEMENT");
47
48 const coral::ITableDescription & desc = teTable.description();
49
50 bool hasTopoStartsFrom = false;
51 try {
52 desc.columnDescription("HTE_TOPO_START_FROM");
53 hasTopoStartsFrom = true;
54 }
55 catch(coral::InvalidColumnNameException & ex) { }
56
57 // for(int i=0; i<desc.numberOfColumns(); ++i) {
58 // const coral::IColumn & col = desc.columnDescription(i);
59 // cout << " " << col.name() << endl;
60 // }
61 TRG_MSG_INFO("Found HTE_TOPO_START_FROM : " << (hasTopoStartsFrom ? "true" : "false") );
62
63 unique_ptr< coral::IQuery > q( m_session.nominalSchema().newQuery() );
64
65 q->addToTableList ( "SUPER_MASTER_TABLE" , "SM");
66 q->addToTableList ( "HLT_MASTER_TABLE" , "HM");
67 q->addToTableList ( "HLT_TM_TO_TC" , "M2C");
68 q->addToTableList ( "HLT_TC_TO_TS" , "TC2TS");
69 q->addToTableList ( "HLT_TS_TO_TE" , "S2TE");
70 q->addToTableList ( "HLT_TRIGGER_ELEMENT" , "TE");
71 q->addToTableList ( "HLT_TE_TO_CP" , "TE2CP");
72 q->addToTableList ( "HLT_TE_TO_TE" , "TE2TE");
73 q->addToTableList ( "HLT_COMPONENT" , "CP");
74
75 //Bind list
76 coral::AttributeList bindings;
77 bindings.extend<int>("smid");
78 bindings[0].data<int>() = (int)m_smk;
79
80 string theCondition = "";
81 theCondition += " SM.SMT_ID = :smid";
82 theCondition += " AND HM.HMT_ID = SM.SMT_HLT_MASTER_TABLE_ID";
83 theCondition += " AND HM.HMT_TRIGGER_MENU_ID = M2C.HTM2TC_TRIGGER_MENU_ID";
84 theCondition += " AND M2C.HTM2TC_TRIGGER_CHAIN_ID = TC2TS.HTC2TS_TRIGGER_CHAIN_ID";
85 theCondition += " AND TC2TS.HTC2TS_TRIGGER_SIGNATURE_ID = S2TE.HTS2TE_TRIGGER_SIGNATURE_ID";
86 theCondition += " AND TE.HTE_ID = S2TE.HTS2TE_TRIGGER_ELEMENT_ID";
87 theCondition += " AND TE.HTE_ID = TE2CP.HTE2CP_TRIGGER_ELEMENT_ID";
88 theCondition += " AND TE.HTE_ID = TE2TE.HTE2TE_TE_ID";
89 theCondition += " AND CP.HCP_ID = TE2CP.HTE2CP_COMPONENT_ID";
90
91 q->setCondition( theCondition, bindings );
92
93 //Output data and types
94 coral::AttributeList attList;
95 attList.extend<int> ( "TE.HTE_ID" );
96 attList.extend<string>( "TE.HTE_NAME" );
97 if(hasTopoStartsFrom)
98 attList.extend<string>( "TE.HTE_TOPO_START_FROM" );
99 attList.extend<string>( "CP.HCP_NAME" );
100 attList.extend<string>( "CP.HCP_ALIAS" );
101 attList.extend<int> ( "TE2CP.HTE2CP_ALGORITHM_COUNTER" );
102 attList.extend<string>( "TE2TE.HTE2TE_TE_INP_ID" );
103 attList.extend<string>( "TE2TE.HTE2TE_TE_INP_TYPE" );
104 attList.extend<int> ( "TE2TE.HTE2TE_TE_COUNTER" );
105 fillQuery(q.get(),attList);
106
107 // the ordering
108 q->addToOrderList( "TE.HTE_ID ASC, TE2CP.HTE2CP_ALGORITHM_COUNTER DESC, TE2TE.HTE2TE_TE_COUNTER DESC" );
109
110 // process the query
111 q->setDistinct();
112 coral::ICursor& cursor = q->execute();
113
114// TRG_MSG_DEBUG("Query SELECT "
115// << "TE.HTE_ID, TE.HTE_NAME, CP.HCP_NAME, CP.HCP_ALIAS, TE2CP.HTE2CP_ALGORITHM_COUNTER, TE2TE.HTE2TE_TE_INP_ID, TE2TE.HTE2TE_TE_INP_TYPE, TE2TE.HTE2TE_TE_COUNTER"
116// << " FROM "
117// << "SUPER_MASTER_TABLE SM, HLT_MASTER_TABLE HM, HLT_TM_TO_TC M2C, HLT_TC_TO_TS TC2TS,HLT_TS_TO_TE S2TE, HLT_TRIGGER_ELEMENT TE, HLT_TE_TO_CP TE2CP, HLT_TE_TO_TE TE2TE, HLT_COMPONENT CP"
118// << " WHERE "
119// << theCondition << ";");
120
121 while ( cursor.next() ) {
122 const coral::AttributeList& row = cursor.currentRow();
123 string te_name = rmtilde(row["TE.HTE_NAME"].data<string>());
124 HLTSequence* seq = seqlist.getSequence(te_name);
125 if(seq==0) {
126 seq = new HLTSequence( vector<HLTTriggerElement*>(), new HLTTriggerElement(te_name), vector<string>() );
127 seqlist.addHLTSequence(seq);
128 if(hasTopoStartsFrom) {
129 string topo_start_from = rmtilde(row["TE.HTE_TOPO_START_FROM"].data<string>());
130 if( !topo_start_from.empty())
131 seq->set_topoStartTE(new HLTTriggerElement(topo_start_from));
132 }
133 }
134
135
136 string alg_name = row["CP.HCP_NAME"].data<string>() + "/" + row["CP.HCP_ALIAS"].data<string>();
137 unsigned int alg_pos = row["TE2CP.HTE2CP_ALGORITHM_COUNTER"].data<int>();
138
139 vector<string>& alg_list = seq->algorithms();
140 if( alg_list.size() < alg_pos+1 )
141 alg_list.resize( alg_pos+1, "" );
142
143 if(auto &algitem = alg_list[alg_pos]; algitem.empty()) {
144 algitem = std::move(alg_name);
145 } else {
146 if(algitem != alg_name) {
147 cerr << "Two different algs in the same position " << alg_pos << endl;
148 }
149 }
150
151 string input_te = rmtilde(row["TE2TE.HTE2TE_TE_INP_ID"].data<string>());
152 if(!input_te.empty()) {
153 unsigned int input_te_pos = row["TE2TE.HTE2TE_TE_COUNTER"].data<int>();
154
155 vector<HLTTriggerElement*>& inp_list = seq->inputTEs();
156 if( inp_list.size() < input_te_pos+1 )
157 inp_list.resize( input_te_pos+1, (HLTTriggerElement*)0 );
158
159 if(auto &item = inp_list[input_te_pos]; item == 0) {
160 item = new HLTTriggerElement(input_te);
161 } else {
162 if(item->name() != input_te ) {
163 cerr << "Two different input TE's at the same position " << input_te_pos << endl;
164 }
165 }
166 }
167 }
168 cursor.close();
169
170 TRG_MSG_INFO("Loading " << seqlist.size() << " sequences");
171}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
std::string rmtilde(const std::string &input)
Definition DBHelper.h:24
str alg_name
Definition run_gep.py:327
seq
filter configuration ## -> we use the special sequence 'AthMasterSeq' which is run before any other a...

◆ 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 86 of file TrigConfMessaging.h.

87 {
88 MsgStreamTC* ms = m_msg_tls.get();
89 if (!ms) {
90 ms = new MsgStreamTC(m_name);
91 m_msg_tls.reset(ms);
92 }
93 return *ms;
94 }
boost::thread_specific_ptr< MsgStreamTC > m_msg_tls
MsgStreamTC instance (a std::cout like with print-out levels)

◆ 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 96 of file TrigConfMessaging.h.

97 {
98 return msg() << lvl;
99 }

◆ 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 75 of file TrigConfMessaging.h.

76 {
77 if (msg().level() <= lvl) {
78 msg() << lvl;
79 return true;
80 }
81 else {
82 return false;
83 }
84 }

◆ outputLevel()

virtual MSGTC::Level TrigConf::DBLoader::outputLevel ( ) const
inlineoverridevirtualinherited

Implements TrigConf::ILoader.

Definition at line 40 of file DBLoader.h.

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

◆ setLevel()

void DBLoader::setLevel ( MSGTC::Level lvl)
overridevirtualinherited

◆ setVerbose()

virtual void TrigConf::DBLoader::setVerbose ( int v)
inlineoverridevirtualinherited

Implements TrigConf::ILoader.

Definition at line 58 of file DBLoader.h.

◆ startSession()

void TrigConf::DBLoader::startSession ( )
inherited

start session if not already active

Definition at line 35 of file DBLoader.cxx.

36{
37 if ( ! m_session.transaction().isActive() ) {
38 //std::cout << "DBLoader: startSession(readonly=true)" << std::endl;
39 bool readOnly = true;
40 m_session.transaction().start(readOnly);
41 m_sessionOwner = true;
42 }
43}

◆ triggerDBSchemaVersion()

unsigned int DBLoader::triggerDBSchemaVersion ( )
inherited

Definition at line 76 of file DBLoader.cxx.

76 {
77 return std::get<0>(loadSchemaVersion());
78}

◆ verbose()

virtual int TrigConf::DBLoader::verbose ( ) const
inlineoverridevirtualinherited

Implements TrigConf::ILoader.

Definition at line 57 of file DBLoader.h.

57{ return m_verbose; }

Member Data Documentation

◆ 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 71 of file TrigConfMessaging.h.

◆ m_name

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

Definition at line 72 of file TrigConfMessaging.h.

◆ m_schemaversion

unsigned int TrigConf::HLTSequenceLoader::m_schemaversion {0}
private

Definition at line 37 of file HLTSequenceLoader.h.

37{0};

◆ m_session

coral::ISessionProxy& TrigConf::DBLoader::m_session
protectedinherited

CORAL interface to database session.

Definition at line 68 of file DBLoader.h.

◆ m_sessionOwner

bool TrigConf::DBLoader::m_sessionOwner {false}
protectedinherited

remember if the loader started the session in the first place

Definition at line 69 of file DBLoader.h.

69{false};

◆ m_smk

unsigned int TrigConf::HLTSequenceLoader::m_smk {0}
private

Definition at line 36 of file HLTSequenceLoader.h.

36{0};

◆ m_storageMgr

StorageMgr& TrigConf::DBLoader::m_storageMgr
protectedinherited

reference to the storage manager

Definition at line 67 of file DBLoader.h.

◆ m_verbose

int TrigConf::DBLoader::m_verbose {1}
privateinherited

Definition at line 64 of file DBLoader.h.

64{1};

The documentation for this class was generated from the following files: