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

TriggerDB loader of the HLT menu. More...

#include <HLTFrameLoader.h>

Inheritance diagram for TrigConf::HLTFrameLoader:
Collaboration diagram for TrigConf::HLTFrameLoader:

Public Member Functions

 HLTFrameLoader (StorageMgr &sm, coral::ISessionProxy &session)
 constructor
virtual ~HLTFrameLoader () override=default
 destructor
virtual bool load (HLTFrame &data) override
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

void loadSMT (HLTFrame &frame)
std::set< unsigned int > GetConnectedPSKs (unsigned int smk)
std::tuple< unsigned int, unsigned int > loadSchemaVersion () const
 get DB schema version and run number

Private Attributes

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 menu.

Definition at line 16 of file HLTFrameLoader.h.

Constructor & Destructor Documentation

◆ HLTFrameLoader()

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

constructor

Parameters
smreference to storage manager
sessionreference to the database session

Definition at line 25 of file HLTFrameLoader.h.

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

◆ ~HLTFrameLoader()

virtual TrigConf::HLTFrameLoader::~HLTFrameLoader ( )
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

◆ GetConnectedPSKs()

set< unsigned int > TrigConf::HLTFrameLoader::GetConnectedPSKs ( unsigned int smk)
private

Definition at line 167 of file HLTFrameLoader.cxx.

167 {
168 set<unsigned int> connected_psks;
169
170 startSession();
171 unique_ptr< coral::IQuery > q( m_session.nominalSchema().newQuery() );
172
173 q->addToTableList( "SUPER_MASTER_TABLE", "SMT" );
174 q->addToTableList( "HLT_MASTER_TABLE", "HMT" );
175 q->addToTableList( "HLT_TRIGGER_MENU", "HTM" );
176 q->addToTableList( "HLT_TM_TO_PS", "HM2PS" );
177
178 coral::AttributeList bindings;
179 bindings.extend<int>("smid");
180 bindings[0].data<int>() = smk;
181
182 string theCondition("");
183 theCondition += string( " SMT.SMT_ID = :smid");
184 theCondition += string( " AND SMT.SMT_HLT_MASTER_TABLE_ID = HMT.HMT_ID" );
185 theCondition += string( " AND HMT.HMT_TRIGGER_MENU_ID = HTM.HTM_ID" );
186 theCondition += string( " AND HTM.HTM_ID = HM2PS.HTM2PS_TRIGGER_MENU_ID" );
187
188
189 q->setCondition( theCondition, bindings );
190
191 //Don't really want anything back, just want to see there is one entry
192 coral::AttributeList attList;
193 attList.extend<int>( "HM2PS.HTM2PS_PRESCALE_SET_ID" );
194 fillQuery(q.get(),attList);
195
196 coral::ICursor& cursor = q->execute();
197
198 while (cursor.next()) {
199 const coral::AttributeList& row = cursor.currentRow();
200 int psk = row["HM2PS.HTM2PS_PRESCALE_SET_ID"].data<int>();
201 connected_psks.insert(psk);
202 }
203
205
206 stringstream ss;
207 for(int psk : connected_psks)
208 ss << psk << ", ";
209
210 TRG_MSG_INFO( "To SMK " << smk << " connected HLT prescale keys are " << ss.str() );
211
212 return connected_psks;
213}
static Double_t ss
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
void startSession()
start session if not already active
Definition DBLoader.cxx:35
row
Appending html table to final .html summary file.
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition DBHelper.cxx:13

◆ 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::HLTFrameLoader::load ( HLTFrame & data)
overridevirtual

Implements TrigConf::IHLTFrameLoader.

Definition at line 30 of file HLTFrameLoader.cxx.

30 {
31
32 unsigned int smk = frame.smk();
33 if(smk==0) return false;
34
35 TRG_MSG_INFO("Loading HLT menu for SMK " << smk);
36
37 typedef pair<unsigned int, unsigned int> lbnpsk_t;
38 vector<lbnpsk_t> reqested_prescale_keys = frame.getPrescaleSetCollection().prescale_keys();
39
40 // always start a clean HLTFrame
41 frame.clear();
42
43 // set the keys
44 frame.setSMK(smk);
45
46 try {
47 set<unsigned int> connected_psk = GetConnectedPSKs(smk);
48
49 loadSMT(frame);
50
51 HLTSequenceLoader seqldr(m_storageMgr, m_session);
52 seqldr.setLevel(outputLevel());
53 seqldr.load(frame);
54
55 HLTChainLoader chldr(m_storageMgr, m_session);
56 chldr.setLevel(outputLevel());
57 chldr.load(frame);
58
59 // prescale set collection
60 bool all_connected(true);
61 TRG_MSG_INFO("Requested to load prescale sets: ");
62 for( lbnpsk_t lbnpsk: reqested_prescale_keys) {
63 unsigned int psk = lbnpsk.second;
64 bool is_connected = psk!=0 && connected_psk.find(psk)!=connected_psk.end();
65 TRG_MSG_INFO("LB " << setw(3) << right << lbnpsk.first << " : " << lbnpsk.second);
66 if(!is_connected) {
67 TRG_MSG_ERROR("prescale key " << lbnpsk.second << " is not connected to SMK");
68 all_connected = false;
69 }
70 }
71
72 if(all_connected) {
73 frame.thePrescaleSetCollection().set_prescale_keys_to_load( reqested_prescale_keys );
74
75 HLTPrescaleSetCollectionLoader pssldr(m_storageMgr, m_session);
76 pssldr.setLevel(outputLevel());
77 //pssldr.setLevel(MSGTC::DEBUG);
78 pssldr.load(frame.thePrescaleSetCollection());
79
80
81
82 // by default assign the single prescale set
83 if(frame.getPrescaleSetCollection().size()==1) {
84 HLTPrescaleSet* singlePrescaleSet(frame.getPrescaleSetCollection().sets().begin()->pss);
85 // for backward compatibility we first copy the unconditional chain rerun prescale to the prescale set
86 for(HLTChain* ch: frame.theHLTChainList()) {
87 pair<bool, float> rrps = ch->rerun_prescale("");
88 if(rrps.first) {
89 singlePrescaleSet->thePrescale(ch->chain_counter(), ch->level_enum()).setRerunPrescale("",rrps.second);
90 }
91 }
92 frame.theHLTChainList().applyPrescaleSet(singlePrescaleSet);
93 }
94
95 } else {
96 TRG_MSG_ERROR("Not all requested HLT prescale keys are connected to the SMK");
97 stringstream s;
98 for(int psk: connected_psk) {
99 s << psk << ", ";
100 }
101 TRG_MSG_INFO("these HLT PSK are connected to SMK " << smk << ": " << s.str());
102 throw runtime_error("HLTFrameLoader: not all requested HLT prescale keys are connected to the SMK");
103 }
104
105 //merge chainlist
106 if( frame.mergedHLT() ) {
107 bool needMerging(false);
108 for( const TrigConf::HLTChain* chain : frame.getHLTChainList() ) {
109 if(chain->level_enum() != TrigConf::HLT)
110 needMerging = true;
111 }
112
113 if(needMerging) {
114 TRG_MSG_DEBUG("Call merging of " << frame.getHLTChainList().size() << " L2 and EF chains");
116 }
117 }
118
119 //frame.print();
120 }
121 catch (const std::exception& e) {
122 TRG_MSG_ERROR("exception " << e.what());
123 throw;
124 }
125
126
127
128 return true;
129}
StorageMgr & m_storageMgr
reference to the storage manager
Definition DBLoader.h:67
virtual MSGTC::Level outputLevel() const override
Definition DBLoader.h:40
std::set< unsigned int > GetConnectedPSKs(unsigned int smk)
void loadSMT(HLTFrame &frame)
static void mergeHLTChainList2(TrigConf::HLTFrame &frame)

◆ 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.

◆ 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}
unsigned int triggerDBSchemaVersion()
Definition DBLoader.cxx:76

◆ loadSMT()

void TrigConf::HLTFrameLoader::loadSMT ( HLTFrame & frame)
private

Definition at line 134 of file HLTFrameLoader.cxx.

134 {
135 startSession();
136 unique_ptr< coral::IQuery > q( m_session.nominalSchema().tableHandle( "SUPER_MASTER_TABLE").newQuery() );
137
138 std::string cond = "SMT_ID = :smId";
139 coral::AttributeList bindings;
140 bindings.extend<int>("smId");
141 bindings[0].data<int>() = frame.smk();
142 q->setCondition( cond, bindings );
143
144 coral::AttributeList attList;
145 attList.extend<std::string>( "SMT_NAME" );
146 attList.extend<int> ( "SMT_VERSION" );
147 attList.extend<std::string>( "SMT_COMMENT" );
148 fillQuery(q.get(), attList);
149
150
151 coral::ICursor& cursor = q->execute();
152 while (cursor.next()) {
153 const coral::AttributeList& row = cursor.currentRow();
154 string name = row["SMT_NAME" ].data<std::string>();
155 int version = row["SMT_VERSION"].data<int>();
156 string comment = row["SMT_COMMENT"].data<std::string>();
157
158 frame.setName( name );
159 frame.setComment( comment );
160 frame.setVersion( version );
161 }
163}

◆ 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_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_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: