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

TriggerDB loader of the LVL1 trigger menu configuration. More...

#include <MenuLoader.h>

Inheritance diagram for TrigConf::MenuLoader:
Collaboration diagram for TrigConf::MenuLoader:

Classes

struct  ThrInfo

Public Types

enum  ENV {
  ALL , CTP , CTPOnl , HLT ,
  COOLL1 , COOLHLT , L1Simu
}

Public Member Functions

 MenuLoader (StorageMgr &sm, coral::ISessionProxy &session)
 constructor
virtual ~MenuLoader () override=default
 destructor
virtual bool load (Menu &data) override
virtual void setEnv (ENV env) 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 loadMenuAttributes (TrigConf::Menu &menu)
void loadCaloInfo (TrigConf::Menu &menu)
void loadThresholds (TrigConf::Menu &menu)
void loadPIT (TrigConf::Menu &menu)
void loadItems (TrigConf::Menu &menu)
void loadMonitoring (TrigConf::Menu &menu)
void createTipFromDirectThresholds (TrigConf::Menu &menu)
TriggerItemNodeconstructTree (const std::string &def, const std::vector< ThrInfo > &)
 New versions for item definition in string.
TriggerItemNodeconstructTree (const LogicExpression &def, const std::vector< ThrInfo > &)
std::tuple< unsigned int, unsigned int > loadSchemaVersion () const
 get DB schema version and run number

Private Attributes

ENV m_env {CTP}
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 LVL1 trigger menu configuration.

Definition at line 21 of file MenuLoader.h.

Member Enumeration Documentation

◆ ENV

Constructor & Destructor Documentation

◆ MenuLoader()

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

constructor

Parameters
smreference to storage manager
sessionreference to the database session

Definition at line 29 of file MenuLoader.h.

29 :
30 IMenuLoader(), DBLoader("MenuLoader", sm, session) {}
DBLoader(StorageMgr &sm, coral::ISessionProxy &session)
constructor
Definition DBLoader.cxx:30

◆ ~MenuLoader()

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

◆ constructTree() [1/2]

TrigConf::TriggerItemNode * TrigConf::MenuLoader::constructTree ( const LogicExpression & def,
const std::vector< ThrInfo > & thr_infos )
private

Definition at line 246 of file MenuLoader.cxx.

246 {
247 TriggerItemNode* top_node=0;
248 const std::vector<std::shared_ptr<LogicExpression>> & sub_logics = def.subLogics();
249
250 switch (def.state()) {
252 top_node = new TriggerItemNode(TriggerItemNode::OBJ);
253 unsigned int pos = static_cast<unsigned int>(std::stoul(def.element()));
254 // find all related information
255 for(ThrInfo ti : thr_infos) {
256 if(ti.thrPos==pos) {
257 top_node->setPosition( pos );
258 top_node->setMultiplicity( ti.thrMult );
259 top_node->setTriggerThreshold( ti.thr );
260 break;
261 }
262 }
263 break;
264 }
267 top_node = new TriggerItemNode(TriggerItemNode::AND);
268 for(auto sl : sub_logics)
269 top_node->addChild( constructTree(*sl, thr_infos) );
270 break;
272 if(sub_logics.size()>0) {
273 top_node = new TriggerItemNode(TriggerItemNode::OR);
274 for(auto sl : sub_logics)
275 top_node->addChild( constructTree(*sl, thr_infos) );
276 }
277 break;
279 top_node = new TriggerItemNode(TriggerItemNode::NOT);
280 for(auto sl : sub_logics)
281 top_node->addChild( constructTree(*sl, thr_infos) );
282 break;
283 }
284
285 return top_node;
286}
static const char kAND
AND of sub-logics.
static const char kOPEN
empty logic but may have sub-logics.
static const char kNOT
NOT of a sub-logic. (only one sub-logic)
static const char kELEMENT
simple element.
static const char kOR
OR of sub-logics.
TriggerItemNode * constructTree(const std::string &def, const std::vector< ThrInfo > &)
New versions for item definition in string.

◆ constructTree() [2/2]

TrigConf::TriggerItemNode * TrigConf::MenuLoader::constructTree ( const std::string & def,
const std::vector< ThrInfo > & thr_infos )
private

New versions for item definition in string.

Definition at line 226 of file MenuLoader.cxx.

226 {
227 LogicExpression logic(msg());
228 unsigned int n = logic.parse(definition);
229 if ( n <= 0 ) {
230 msg() << "Error parsing item definition : " << definition << std::endl;
231 return 0;
232 }
233 unsigned int size = thr_infos.size();
234 if (size != (n = logic.totalNumberOfElements()) ) {
235 msg() << "Total number of elements are different: "
236 << " input=" << size << ", parsed=" << n << endl;
237 }
238
239 logic.normalize();
240
241 return constructTree(logic, thr_infos);
242}
MsgStreamTC & msg() const
The standard message stream.

◆ createTipFromDirectThresholds()

void TrigConf::MenuLoader::createTipFromDirectThresholds ( TrigConf::Menu & menu)
private

Definition at line 527 of file MenuLoader.cxx.

527 {
528
529 // this is only needed as long as the TIPs from the direct input are not in the database
530
531 unsigned int ntips(0);
532
533 for(TriggerThreshold * thr : menu.thresholdConfig().getThresholdVector() ) {
534 if(thr->ttype()==L1DataDef::TOPO || thr->ttype()==L1DataDef::ALFA) {
535
536 const string & conn = thr->cableConnector(); // "CON0", "CON1", "CON2"
537
538 unsigned int connector = conn[3]-'0';
539 unsigned int cableOffset = 320 + connector * 64;
540 unsigned int cableBit = (unsigned int) thr->cableStart();
541 unsigned int clock = thr->clock();
542 unsigned int tipNumber = 2*cableBit + clock + cableOffset;
543
544 TIP* tip = new TIP();
545 tip->setThresholdName(thr->name());
546 tip->setSlot(10);
547 tip->setConnector( connector );
548 tip->setTipNumber( tipNumber );
549 tip->setThresholdBit( thr->clock() );
550 tip->setCableBit( thr->cableStart() );
551 tip->setTriggerThresholdId(thr->id() );
552 tip->setThresholdActive(thr->active());
553 tip->setThresholdMapping(thr->mapping());
554 tip->setIsDirect(true);
555 menu.addTip(tip);
556
557 TRG_MSG_DEBUG("TIP from direct input thresholds " << tip->tipNumber() << " --> " << thr->name());
558
559 ntips++;
560
561 }
562 }
563
564 TRG_MSG_INFO( "Number of TIPs from direct input thresholds " << ntips );
565
566}

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

Implements TrigConf::IMenuLoader.

Definition at line 34 of file MenuLoader.cxx.

34 {
35
36 if(menu.smk()<=0) return false;
37 try {
39
41
42 loadCaloInfo(menu);
43
44 loadThresholds(menu);
45
46 loadItems(menu);
47
48 loadMonitoring(menu);
49
51 }
52 catch( const coral::Exception& e ) {
53 TRG_MSG_ERROR("Caught coral exception: " << e.what());
55 throw;
56 }
57 catch( const std::exception& e ) {
58 TRG_MSG_ERROR("Caught std exception: " << e.what());
60 throw;
61 }
62 return true;
63}
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
void startSession()
start session if not already active
Definition DBLoader.cxx:35
void loadThresholds(TrigConf::Menu &menu)
void loadMonitoring(TrigConf::Menu &menu)
void loadMenuAttributes(TrigConf::Menu &menu)
void loadItems(TrigConf::Menu &menu)
void loadCaloInfo(TrigConf::Menu &menu)

◆ loadCaloInfo()

void TrigConf::MenuLoader::loadCaloInfo ( TrigConf::Menu & menu)
private

Definition at line 571 of file MenuLoader.cxx.

571 {
572 // load the CaloInfo
573 TrigConf::CaloInfo ci;
574 ci.setSMK(menu.smk());
575 m_storageMgr.caloInfoLoader().setLevel(outputLevel());
576 m_storageMgr.caloInfoLoader().load(ci);
577 menu.setCaloInfo(ci);
578}
StorageMgr & m_storageMgr
reference to the storage manager
Definition DBLoader.h:67
virtual MSGTC::Level outputLevel() const override
Definition DBLoader.h:40

◆ loadItems()

void TrigConf::MenuLoader::loadItems ( TrigConf::Menu & menu)
private

Definition at line 67 of file MenuLoader.cxx.

67 {
68 TRG_MSG_INFO("Loading CTP Items");
69
70 // to later load internal triggers
71 TriggerThresholdLoader& ttldr = dynamic_cast<TriggerThresholdLoader&>( (dynamic_cast<StorageMgr&>(m_storageMgr))
72 .triggerThresholdLoader() );
73 ttldr.setMenuId(menu.id());
74 ttldr.setLoadCableInfo(false);
75
76 // at this point the internal triggers are not found via the
77 // TM->TT link, hence load them when needed, and cache them
78 std::map<int,TriggerThreshold*> thresholdNotFoundCache;
79
80 unique_ptr< coral::IQuery > query( m_session.nominalSchema().newQuery() );
81 query->addToTableList ( "L1_TM_TO_TI", "TM2TI" );
82 query->addToTableList ( "L1_TRIGGER_ITEM", "TI" );
83 query->addToTableList ( "L1_TI_TO_TT", "TI2TT" );
84
85 // bind list
86 coral::AttributeList bindList;
87 bindList.extend<int>("menuId");
88 bindList[0].data<int>() = menu.id();
89
90 std::string theCondition = "";
91 theCondition += std::string( " TM2TI.L1TM2TI_TRIGGER_MENU_ID = :menuId" );
92 theCondition += std::string( " AND TM2TI.L1TM2TI_TRIGGER_ITEM_ID = TI.L1TI_ID" );
93 theCondition += std::string( " AND TI2TT.L1TI2TT_TRIGGER_ITEM_ID = TI.L1TI_ID" );
94
95 query->setCondition( theCondition, bindList );
96
97 // output data and types
98 coral::AttributeList attList;
99 attList.extend<int> ( "TI.L1TI_ID" );
100 attList.extend<std::string>( "TI.L1TI_NAME" );
101 attList.extend<int> ( "TI.L1TI_VERSION" );
102 if(isRun2()) {
103 attList.extend<int> ( "TI.L1TI_PARTITION" );
104 attList.extend<string> ( "TI.L1TI_MONITOR" );
105 }
106 attList.extend<int> ( "TI.L1TI_CTP_ID" );
107 attList.extend<std::string>( "TI.L1TI_PRIORITY" );
108 attList.extend<std::string>( "TI.L1TI_DEFINITION" );
109 attList.extend<int> ( "TI.L1TI_TRIGGER_TYPE" );
110 attList.extend<int> ( "TI2TT.L1TI2TT_TRIGGER_THRESHOLD_ID" );
111 attList.extend<int> ( "TI2TT.L1TI2TT_POSITION" );
112 attList.extend<int> ( "TI2TT.L1TI2TT_MULTIPLICITY" );
113 fillQuery(query.get(), attList);
114
115 // the ordering
116 std::string theOrder = "";
117 // to get the correct number of items
118 theOrder += " TI.L1TI_CTP_ID ASC";
119 // to get the correct TI definition
120 theOrder += ", TI2TT.L1TI2TT_POSITION ASC";
121 query->addToOrderList( theOrder );
122
123 //query->setRowCacheSize(1000);
124 query->setRowCacheSize(500);
125
126 query->setDistinct();
127
128 coral::ICursor& cursor = query->execute();
129
130 // lists to store <ctpId, vector> for later use
131 vector<int> ctpIDs;
132 map<int,vector<ThrInfo> > item_thrInfo;
133
134 // create the items
135 while (cursor.next()) {
136
137 const coral::AttributeList& row = cursor.currentRow();
138 int ctpid = row["TI.L1TI_CTP_ID"].data<int>();
139 TriggerItem* item = menu.item(ctpid);
140 if(! item) {
141 item = new TriggerItem();
142 item->setCtpId (ctpid);
143 item->setId (row["TI.L1TI_ID"].data<int>());
144 item->setName (row["TI.L1TI_NAME"].data<string>());
145 item->setVersion (row["TI.L1TI_VERSION"].data<int>());
146 if(isRun2()) {
147 item->setPartition (row["TI.L1TI_PARTITION"].data<int>());
148 string mon = row["TI.L1TI_MONITOR"].data<string>();
149 unsigned short monMask = 0;
150
151 const short TBP = 0x1;
152 const short TAP = 0x2;
153 const short TAV = 0x4;
154
155 vector<string> monLfHf;
156 boost::split(monLfHf, mon, boost::is_any_of(":|"));
157 //copy(monLfHf.begin(),monLfHf.end(), ostream_iterator<string>(cout,"\n") );
158
159 if(monLfHf.size()==4 && monLfHf[0]=="LF" && monLfHf[2]=="HF" && monLfHf[1].size()==3 && monLfHf[3].size()==3) {
160 // LF
161 if( monLfHf[1][2]=='1' ) monMask |= TBP;
162 if( monLfHf[1][1]=='1' ) monMask |= TAP;
163 if( monLfHf[1][0]=='1' ) monMask |= TAV;
164 // HF
165 if( monLfHf[3][2]=='1' ) monMask |= TBP << 3;
166 if( monLfHf[3][1]=='1' ) monMask |= TAP << 3;
167 if( monLfHf[3][0]=='1' ) monMask |= TAV << 3;
168 } else {
169 // this is for the temporary solution
170 if(mon.find("TBP") != string::npos) monMask |= TBP;
171 if(mon.find("TAP") != string::npos) monMask |= TAP;
172 if(mon.find("TAV") != string::npos) monMask |= TAV;
173 }
174 item->setMonitor( monMask );
175 }
176
177 string priority = row["TI.L1TI_PRIORITY"].data<string>();
178 if(priority=="0" || priority=="HIGH") {
179 item->setComplexDeadtime(0);
180 } else if(priority=="1" || priority=="LOW") {
181 item->setComplexDeadtime(1);
182 }
183 item->setDefinition (row["TI.L1TI_DEFINITION"].data<string>());
184 item->setTriggerType(row["TI.L1TI_TRIGGER_TYPE"].data<int>());
185 menu.addTriggerItem(item);
186 if(verbose()>1)
187 msg() << "MenuLoader: Created Item " << item->name() << " with CTPID " << item->ctpId() << endl;
188 item_thrInfo[ctpid] = vector<ThrInfo>();
189 ctpIDs.push_back(ctpid);
190 }
191
192 ThrInfo thr_info;
193 thr_info.thrId = row["TI2TT.L1TI2TT_TRIGGER_THRESHOLD_ID"].data<int>();
194 thr_info.thrPos = row["TI2TT.L1TI2TT_POSITION"].data<int>();
195 thr_info.thrMult = row["TI2TT.L1TI2TT_MULTIPLICITY"].data<int>();
196 thr_info.thr = menu.thresholdConfig().findTriggerThreshold(thr_info.thrId);
197 if(thr_info.thr==0) {
198 // load threshold (internal thresholds)
199 thr_info.thr = new TriggerThreshold();
200 thr_info.thr->setId(thr_info.thrId);
201 if ( ! ttldr.load( *thr_info.thr ) ) {
202 msg() << "MenuLoader: Error loading TriggerThreshold " << thr_info.thrId << endl;
203 throw runtime_error( "MenuLoader::loadItems: error loading TriggerThreshold " );
204 }
205 menu.thresholdConfig().addTriggerThreshold(thr_info.thr);
206 }
207 item_thrInfo[ctpid].push_back(thr_info);
208 }
209
210 // build the item node tree
211 for(int ctpid : ctpIDs) {
212 TriggerItem* titem = menu.findTriggerItem( ctpid );
213 if(verbose()>2) {
214 msg() << "MenuLoader: Number of thresholds for item " << titem->name()
215 << ": " << item_thrInfo[ctpid].size() << " - definition: " << titem->definition() << endl;
216 }
217 // construct the tree of TriggerItemNodes according to
218 // definition and set the thresholds and multiplicities in each
219 // leaf node
220 titem->setTopNode( constructTree(titem->definition(), item_thrInfo[ctpid]) );
221 }
222}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
virtual int verbose() const override
Definition DBLoader.h:57
row
Appending html table to final .html summary file.
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition DBHelper.cxx:13
query
Definition index.py:72

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

◆ 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

◆ loadMenuAttributes()

void TrigConf::MenuLoader::loadMenuAttributes ( TrigConf::Menu & menu)
private

Definition at line 584 of file MenuLoader.cxx.

584 {
585
586 TRG_MSG_DEBUG("Loading menu data for SMK " << menu.smk());
587
588 unique_ptr< coral::IQuery > q( m_session.nominalSchema().newQuery() );
589 q->addToTableList ( "SUPER_MASTER_TABLE", "SM" );
590 q->addToTableList ( "L1_MASTER_TABLE", "MT" );
591 q->addToTableList ( "L1_TRIGGER_MENU", "TM" );
592
593 //Bind list
594 coral::AttributeList bindings;
595 bindings.extend<int>("smk");
596 bindings[0].data<int>() = menu.smk();
597
598 string condition("");
599 condition += "SM.SMT_ID = :smk";
600 condition += " AND SM.SMT_L1_MASTER_TABLE_ID = MT.L1MT_ID";
601 condition += " AND MT.L1MT_TRIGGER_MENU_ID = TM.L1TM_ID";
602 q->setCondition( condition , bindings );
603
604 //Define the data types
605 coral::AttributeList attList;
606 attList.extend<int>("TM.L1TM_ID");
607 attList.extend<string>("TM.L1TM_NAME");
608 attList.extend<int>("TM.L1TM_VERSION");
609 attList.extend<int>("MT.L1MT_ID" );
610 fillQuery(q.get(), attList);
611
612 coral::ICursor& cursor = q->execute();
613 if ( ! cursor.next() ) {
614 TRG_MSG_ERROR("No trigger menu in SMK " << menu.smk());
615 throw runtime_error( "MenuLoader: ERROR trigger menu not available" );
616 }
617
618 // fill the object with data
619 const coral::AttributeList& row = cursor.currentRow();
620 menu.setId ( row["TM.L1TM_ID"].data<int>() );
621 menu.setName ( row["TM.L1TM_NAME"].data<string>() );
622 menu.setVersion( row["TM.L1TM_VERSION"].data<int>() );
623 menu.thresholdConfig().setLvl1MasterTableId( row["MT.L1MT_ID"].data<int>() );
624}

◆ loadMonitoring()

void TrigConf::MenuLoader::loadMonitoring ( TrigConf::Menu & menu)
private

Definition at line 293 of file MenuLoader.cxx.

293 {
294 if( ! (m_env == MenuLoader::ALL ||
297 m_env == MenuLoader::COOLL1) ) return;
298
299 TRG_MSG_DEBUG("Load monitoring counter mapping ");
300
301 unique_ptr< coral::IQuery > q(m_session.nominalSchema().newQuery());
302 q->addToTableList ( "L1_TM_TO_TT_MON", "TM2TTM" );
303 q->addToTableList ( "L1_TRIGGER_THRESHOLD", "TT" );
304 q->addToTableList ( "L1_TM_TO_TT", "TM2TT" );
305
306 //Bind list
307 coral::AttributeList bindings;
308 bindings.extend<int>("menuId");
309 bindings[0].data<int>() = menu.id();
310
311 string cond = "";
312 cond += " TM2TTM.L1TM2TTM_TRIGGER_MENU_ID = :menuId";
313 cond += " AND TM2TT.L1TM2TT_TRIGGER_MENU_ID = :menuId";
314 cond += " AND TM2TTM.L1TM2TTM_TRIGGER_THRESHOLD_ID = TM2TT.L1TM2TT_TRIGGER_THRESHOLD_ID";
315 cond += " AND TM2TT.L1TM2TT_TRIGGER_THRESHOLD_ID = TT.L1TT_ID";
316
317 q->setCondition( cond, bindings );
318
319 // Output data and types
320 coral::AttributeList output;
321 output.extend<std::string>( "TM2TTM.L1TM2TTM_NAME" );
322 output.extend<int> ( "TM2TTM.L1TM2TTM_TRIGGER_THRESHOLD_ID" );
323 output.extend<int> ( "TM2TTM.L1TM2TTM_INTERNAL_COUNTER" );
324 output.extend<int> ( "TM2TTM.L1TM2TTM_MULTIPLICITY" );
325 output.extend<long> ( "TM2TTM.L1TM2TTM_BUNCH_GROUP_ID" );
326 output.extend<std::string>( "TM2TTM.L1TM2TTM_COUNTER_TYPE" );
327 output.extend<std::string>( "TT.L1TT_NAME" );
328 output.extend<int> ( "TT.L1TT_ACTIVE" );
329 output.extend<std::string>( "TM2TT.L1TM2TT_CABLE_CTPIN" );
330 output.extend<std::string>( "TM2TT.L1TM2TT_CABLE_CONNECTOR" );
331 output.extend<int> ( "TM2TT.L1TM2TT_CABLE_START" );
332 output.extend<int> ( "TM2TT.L1TM2TT_CABLE_END" );
333 fillQuery(q.get(), output);
334
335 q->setRowCacheSize(500);
336
337 coral::ICursor& cursor = q->execute();
338 ThresholdMonitor* tm = 0;
339
340 while (cursor.next()) {
341 const coral::AttributeList& row = cursor.currentRow();
342 tm = new ThresholdMonitor();
343
344 tm->setName ( row["TM2TTM.L1TM2TTM_NAME"].data<string>());
345 tm->setThresholdId ( row["TM2TTM.L1TM2TTM_TRIGGER_THRESHOLD_ID"].data<int>());
346 tm->setInternalCounter( row["TM2TTM.L1TM2TTM_INTERNAL_COUNTER"].data<int>());
347 tm->setMultiplicity ( row["TM2TTM.L1TM2TTM_MULTIPLICITY"].data<int>());
348 tm->setBunchGroupId ( row["TM2TTM.L1TM2TTM_BUNCH_GROUP_ID"].data<long>());
349 tm->setCounterType ( row["TM2TTM.L1TM2TTM_COUNTER_TYPE"].data<string>());
350 tm->setThresholdName ( row["TT.L1TT_NAME"].data<string>());
351 tm->setThresholdActive( row["TT.L1TT_ACTIVE"].data<int>());
352
353 string slotString = row["TM2TT.L1TM2TT_CABLE_CTPIN"].data<std::string>();
354 uint16_t slot = slotString[4]-'0'; // "SLOT7" -> 7
355 if(slot<7 || slot>9) {
356 TRG_MSG_ERROR("Unknown CTPIN string '" << slotString << "'");
357 throw runtime_error( "MenuLoader (ThresholdMonitor): Error loading Monitoring counters " );
358 }
359 tm->setCtpinSlot(slot);
360
361 string conString = row["TM2TT.L1TM2TT_CABLE_CONNECTOR"].data<std::string>();
362 uint16_t con = conString[3]-'0'; // "CON2" -> 2
363 if(con>3) {
364 TRG_MSG_ERROR("Unknown CTPIN connector string '" << conString << "'");
365 throw runtime_error( "MenuLoader (ThresholdMonitor): Error loading Monitoring counters " );
366 }
367 tm->setCtpinConnector(con);
368 tm->setThresholdStartBit(row["TM2TT.L1TM2TT_CABLE_START"].data<int>());
369 tm->setThresholdEndBit (row["TM2TT.L1TM2TT_CABLE_END"].data<int>());
370 menu.addThresholdMonitor(tm);
371 }
372
373}
output
Definition merge.py:16
setWord1 uint16_t

◆ loadPIT()

void TrigConf::MenuLoader::loadPIT ( TrigConf::Menu & menu)
private

Definition at line 410 of file MenuLoader.cxx.

410 {
411 if( ! (m_env == MenuLoader::ALL ||
413 m_env == MenuLoader::COOLL1) ) return;
414
415 set<int> tipNumbersUsed;
416
417
418 unique_ptr< coral::IQuery > q( m_session.nominalSchema().newQuery() );
419 q->addToTableList ( "L1_TM_TO_TT", "TM2TT" );
420 q->addToTableList ( "L1_PITS", "PITS" );
421
422 //Bind list
423 coral::AttributeList bindings;
424 bindings.extend<int>("menuId");
425 bindings[0].data<int>() = menu.id();
426
427 std::string cond("TM2TT.L1TM2TT_TRIGGER_MENU_ID = :menuId");
428 cond += " AND PITS.L1PIT_TM_TO_TT_ID = TM2TT.L1TM2TT_ID";
429 q->setCondition( cond, bindings );
430
431 // should not be necessary, however currently the TriggerTool uploads identical copies in some cases
432 q->setDistinct();
433
434 // Output data and types
435 coral::AttributeList attList;
436 attList.extend<int>( "TM2TT.L1TM2TT_TRIGGER_THRESHOLD_ID" );
437 attList.extend<int>( "TM2TT.L1TM2TT_ID" );
438 attList.extend<int>( "PITS.L1PIT_PIT_NUMBER" );
439 attList.extend<int>( "PITS.L1PIT_THRESHOLD_BIT" );
440 fillQuery(q.get(), attList);
441
442 uint npits(0), ntips(0);
443
444 coral::ICursor& cursor = q->execute();
445 while (cursor.next()) {
446 const coral::AttributeList& row = cursor.currentRow();
447
448 int ttid = row["TM2TT.L1TM2TT_TRIGGER_THRESHOLD_ID"].data<int>();
449 int tmtott = row["TM2TT.L1TM2TT_ID"].data<int>();
450 int tipnum = row["PITS.L1PIT_PIT_NUMBER"].data<int>();
451 int bitnum = row["PITS.L1PIT_THRESHOLD_BIT"].data<int>();
452
453 TriggerThreshold* tt = menu.thresholdConfig().findTriggerThreshold(ttid);
454
455
456 string slotString = tt->cableCtpin();
457 uint16_t slot = 0;
458 if( boost::iequals( slotString, "CTPCORE" ) ) {
459 slot = 10;
460 } else {
461 slot = slotString[4]-'0'; // "SLOT7" -> (uint)7
462 }
463 if(slot<7 || slot>10) {
464 TRG_MSG_ERROR("Unknown CTPIN SLOT '" << slotString << "'");
465 throw runtime_error( "MenuLoader: Error loading PITs " );
466 }
467
468 string conString = tt->cableConnector();
469 uint16_t con = conString[3]-'0'; // "CON2" -> (uint)2
470 uint16_t conMax = slot==10 ? 2 : 3;
471 if( con > conMax ) {
472 TRG_MSG_ERROR("Unknown CTPIN CONNECTOR '" << conString << "'");
473 throw runtime_error( "MenuLoader: Error loading PITs " );
474 }
475
476 if(slot!=10) {
477 PIT* pit = new PIT();
478 pit->setThresholdName(tt->name());
479 pit->setCtpinSlot(slot);
480 pit->setCtpinConnector( con );
481 pit->setPitNumber(tipnum);
482 pit->setThresholdBit(bitnum);
483 pit->setCableBit( tt->cableStart() + bitnum );
484 pit->setTmToTtId(tmtott);
485 pit->setTriggerThresholdId(ttid);
486 pit->setThresholdActive(tt->active());
487 pit->setThresholdMapping(tt->mapping());
488 menu.addPit(pit);
489 npits++;
490 }
491
492 // this is for early menus
493 if(tipNumbersUsed.count(tipnum) > 0) {
494 tipnum = tipnum + 160;
495 } else {
496 tipNumbersUsed.insert(tipnum);
497 }
498
499 TIP* tip = new TIP();
500 tip->setThresholdName(tt->name());
501 tip->setSlot(slot);
502 tip->setConnector( con );
503 tip->setTipNumber(tipnum);
504 tip->setClock( tipnum % 2 );
505 tip->setThresholdBit(bitnum);
506 tip->setCableBit( tt->cableStart() + bitnum );
507 tip->setTmToTtId(tmtott);
508 tip->setTriggerThresholdId(ttid);
509 tip->setThresholdActive(tt->active());
510 tip->setThresholdMapping(tt->mapping());
511 if(slot==10) tip->setIsDirect(true);
512 else tip->setIsDirect(false);
513 menu.addTip(tip);
514 ntips++;
515
516 TRG_MSG_DEBUG("TIP " << tip->tipNumber() << " --> " << tt->name());
517 }
518
519 TRG_MSG_INFO("Loaded " << npits << " PITs and " << ntips << " TIPs");
520 TRG_MSG_INFO("Menu has " << menu.pitVector().size() << " PITs and " << menu.tipVector().size() << " TIPs");
521
522
523}
unsigned int uint

◆ 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

◆ loadThresholds()

void TrigConf::MenuLoader::loadThresholds ( TrigConf::Menu & menu)
private

Definition at line 386 of file MenuLoader.cxx.

386 {
387 TRG_MSG_INFO("Loading L1 trigger thresholds");
388
389 ThresholdConfigLoader* thrldr = new ThresholdConfigLoader(m_storageMgr, m_session);
390 thrldr->setLevel(outputLevel());
391 if ( !thrldr->load( menu.thresholdConfig() ) ) {
392 TRG_MSG_ERROR("Error loading ThresholdConfig " << menu.thresholdConfig().id());
393 throw runtime_error( "MenuLoader: Error loading ThresholdConfig " );
394 }
395
396 loadPIT(menu);
397
398 if( menu.pitVector().size() == menu.tipVector().size() ) {
399 // this is the case when we
400 // a) have either no direct inputs in the menu (unlikely, but then the next call doesn't matter), or
401 // b) the direct inputs were not filled in the TIP map: this is not the case since TriggerTool-04-01-06
403 }
404
405}
void createTipFromDirectThresholds(TrigConf::Menu &menu)
void loadPIT(TrigConf::Menu &menu)

◆ 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(); }

◆ setEnv()

virtual void TrigConf::MenuLoader::setEnv ( ENV env)
inlineoverridevirtual

Implements TrigConf::IMenuLoader.

Definition at line 37 of file MenuLoader.h.

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

ENV TrigConf::MenuLoader::m_env {CTP}
private

Definition at line 39 of file MenuLoader.h.

39{CTP};

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