ATLAS Offline Software
Loading...
Searching...
No Matches
CTPConfigLoader.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "./CTPConfigLoader.h"
6#include "./MenuLoader.h"
9#include "./RandomLoader.h"
11#include "./DeadTimeLoader.h"
12#include "./CTPFilesLoader.h"
13#include "./PrioritySetLoader.h"
14#include "./DBHelper.h"
15
17
18//#include <sstream>
19#include <iostream>
20#include <stdexcept>
21#include <typeinfo>
22
23using namespace std;
24
26 TRG_MSG_INFO("Loading data for L1 master key " << ctpcTarget.lvl1MasterTableId()
27 << " L1 PSS key " << ctpcTarget.prescaleSetId()
28 << " L1 BGS key " << ctpcTarget.bunchGroupSetId() );
29
30 try {
31
32 unsigned int schema = triggerDBSchemaVersion();
33 TRG_MSG_INFO("TriggerDB schema: " << schema);
34
36
37 long prescalesetid = ctpcTarget.prescaleSetId();
38 int menuid = 0;
39 long bunchgroupsetid = 0;
40 long prescaledclockid = 0;
41 long randomid = 0;
42 long deadtimeid = 0;
43
44 {
45 unique_ptr<coral::IQuery> q( m_session.nominalSchema().tableHandle( "L1_MASTER_TABLE").newQuery() );
46 q->setRowCacheSize( 5 );
47
48 //Bind list
49 coral::AttributeList bindList;
50 bindList.extend<int>("mtId");
51 bindList[0].data<int>() = ctpcTarget.lvl1MasterTableId();
52 std::string cond = "L1MT_ID = :mtId";
53 q->setCondition( cond, bindList );
54
55 //Output data and types
56 coral::AttributeList attList;
57 attList.extend<int>( "L1MT_TRIGGER_MENU_ID" );
58 attList.extend<long>( "L1MT_PRESCALED_CLOCK_ID" );
59 attList.extend<long>( "L1MT_RANDOM_ID" );
60 if(isRun2()) {
61 attList.extend<long>( "L1MT_CTPVERSION" );
62 attList.extend<long>( "L1MT_L1VERSION" );
63 }
64 if( isRun1() ) attList.extend<long>( "L1MT_DEAD_TIME_ID" );
65
66 fillQuery(q.get(),attList);
67
68 coral::ICursor& cursor0 = q->execute();
69
70 if ( ! cursor0.next() ) {
71 TRG_MSG_ERROR("No such Master_Table exists " << ctpcTarget.lvl1MasterTableId() );
72 throw std::runtime_error( "CTPConfigLoader: CTPConfig not available" );
73 }
74
75 const coral::AttributeList& row0 = cursor0.currentRow();
76
77 menuid = row0["L1MT_TRIGGER_MENU_ID"].data<int>();
78 bunchgroupsetid = ctpcTarget.bunchGroupSetId();
79 prescaledclockid = row0["L1MT_PRESCALED_CLOCK_ID"].data<long>();
80 randomid = row0["L1MT_RANDOM_ID"].data<long>();
81 if( isRun1() ) deadtimeid = row0["L1MT_DEAD_TIME_ID"].data<long>();
82
83 unsigned int ctpVersion;
84 unsigned int l1Version;
85 if(isRun1()) {
86 ctpVersion = 3;
87 l1Version = 0;
88 } else {
89 ctpVersion = row0["L1MT_CTPVERSION"].data<long>();
90 l1Version = row0["L1MT_L1VERSION"].data<long>();
91 }
92 ctpcTarget.setCTPVersion(ctpVersion);
93 ctpcTarget.setL1Version(l1Version);
94
95 TRG_MSG_INFO("CTP version " << ctpcTarget.ctpVersion());
96 TRG_MSG_INFO("L1 version " << ctpcTarget.l1Version());
97
99 //L1DataDef::printMaxThresholds();
100
101
102 }
103
104 if( ctpcTarget.loadCtpFiles() ) {
105
106 TRG_MSG_INFO("Loading CTPFiles");
107
108 // get the lutCam id
109 unique_ptr<coral::IQuery> q( m_session.nominalSchema().tableHandle( "L1_TRIGGER_MENU").newQuery() );
110 q->setRowCacheSize( 1 );
111
112 //Bind list
113 coral::AttributeList bindList;
114 bindList.extend<int>("menuId");
115 std::string cond = "L1TM_ID = :menuId";
116 bindList[0].data<int>() = menuid;
117 q->setCondition( cond, bindList );
118
119 //Output data and types
120 coral::AttributeList attList1;
121 attList1.extend<long>( "L1TM_CTP_FILES_ID" );
122 attList1.extend<long>( "L1TM_CTP_SMX_ID" );
123 fillQuery(q.get(),attList1);
124
125 coral::ICursor& cursor = q->execute();
126
127 if ( ! cursor.next() ) {
128 TRG_MSG_ERROR("No trigger menu exists with ID " << menuid);
130 throw std::runtime_error( "CTPConfigLoader >> CTPConfig not available" );
131 }
132
133 const coral::AttributeList& row = cursor.currentRow();
134 long filesid = row["L1TM_CTP_FILES_ID"].data<long>();
135 long smxid = row["L1TM_CTP_SMX_ID"].data<long>();
136
137 if(filesid > 0 && smxid > 0) {
138
139 auto files = std::make_unique<CTPFiles>();
140 files->setId( filesid );
141 files->setSmxId( smxid );
142 files->setLoadCtpcoreFiles( ctpcTarget.loadCtpcoreFiles() );
143 files->setLoadCtpinFiles( ctpcTarget.loadCtpinFiles() );
144 files->setLoadCtpmonFiles( ctpcTarget.loadCtpmonFiles() );
145 try {
146 CTPFilesLoader& ctpfilesldr =
147 dynamic_cast<CTPFilesLoader&>(m_storageMgr.ctpFilesLoader());
148 ctpfilesldr.setLevel(outputLevel());
149 if ( !ctpfilesldr.load( *files ) ) {
150 TRG_MSG_ERROR("Error loading CTP files id " << files->id() << " and smx id " << smxid );
152 throw std::runtime_error( "CTPConfigLoader: Error loading CTP files" );
153 }
154 ctpcTarget.setCTPFiles( std::move(files) );
155 }
156 catch (std::bad_cast& ex) {
157 TRG_MSG_ERROR("Caught exception in CTPConfigLoader : " << ex.what());
159 throw std::runtime_error( "CTPConfigLoader: Error casting CTPFilesLoader" );
160 }
161 } else {
162 TRG_MSG_ERROR("Error loading CTP files, no files pointed to by the menu. CTP files id = " << filesid << ", SMX files id = " << smxid);
163 }
164
165 CTPFiles * files = ctpcTarget.ctpfiles();
166 if( files != nullptr ) {
167 TRG_MSG_INFO("Loaded CTPfiles. CAM size=" << files->ctpcoreCAM().size() << ", LUT size=" << files->ctpcoreCAM().size());
168 }
169
170 //load the priorityset
171 if(isRun1()) {
172 try {
173 PrioritySetLoader& prsldr = dynamic_cast<PrioritySetLoader&>(m_storageMgr.prioritySetLoader());
174 PrioritySet prs;
175 prs.setLvl1MasterTableId(ctpcTarget.lvl1MasterTableId());
176 if ( !prsldr.load( prs ) ) {
177 TRG_MSG_ERROR("Can't load PrioritySet " << prs.lvl1MasterTableId());
179 throw std::runtime_error( "CTPConfigLoader: Error loading PrioritySet" );
180 }
181 ctpcTarget.setPrioritySet(prs);
182 } catch (std::bad_cast& ex) {
183 TRG_MSG_ERROR("Caught exception in CTPConfigLoader : " << ex.what() );
185 throw std::runtime_error( "CTPConfigLoader: Error casting PrioritySetLoader" );
186 }
187 }
188 } else {
189 TRG_MSG_INFO("No loading of CTPFiles");
190 }
191
192
193
194 // now load the data
195 {
196 MenuLoader& mldr = dynamic_cast<MenuLoader&>(m_storageMgr.menuLoader());
197 mldr.setLevel(outputLevel());
198 Menu& m = ctpcTarget.menu();
199 m.setId(menuid);
200 m.setSuperMasterTableId(ctpcTarget.superMasterTableId());
201 if ( !mldr.load( m ) ) {
202 TRG_MSG_ERROR("failed loading Menu " << m.id());
203 throw std::runtime_error( "CTPConfigLoader: ERROR loading Menu" );
204 }
205 if(isRun1()) {
207 }
208 }
209
210
211 {
212 PrescaleSetLoader& psldr = dynamic_cast<PrescaleSetLoader&>(m_storageMgr.prescaleSetLoader());
213 psldr.setLevel(outputLevel());
214 PrescaleSet pss = ctpcTarget.prescaleSet();
215 if( prescalesetid > 0 && (schema > 6 || isRun2()) ) { //defined in old schema
216 TRG_MSG_INFO("loding LVL1 prescales.");
217 pss.setId(prescalesetid);
218 if ( !psldr.load( ctpcTarget.ctpVersion(), pss ) ) {
219 TRG_MSG_ERROR("CTPConfigLoader: Error loading PrescaleSet " << pss.id());
220 throw std::runtime_error( "CTPConfigLoader: Error loading PrescaleSet" );
221 }
222 ctpcTarget.setPrescaleSet(pss);
223 } else {
224 TRG_MSG_INFO("Not loading LVL1 prescales. PSK = " << prescalesetid);
225 }
226 }
227
228
229 {
230 BunchGroupSetLoader& bgsldr = dynamic_cast<BunchGroupSetLoader&>(m_storageMgr.bunchGroupSetLoader());
231 bgsldr.setLevel(outputLevel());
232 BunchGroupSet bgs = ctpcTarget.bunchGroupSet();
233 if( bunchgroupsetid > 0 && (schema > 6 || isRun2())) { //proby won't work in old schema
234 bgs.setId(bunchgroupsetid);
235 if ( !bgsldr.load( bgs ) ) {
236 TRG_MSG_ERROR("loading BunchGroupSet " << bgs.id());
237 throw std::runtime_error( "CTPConfigLoader: Error loading BunchGroupSet" );
238 }
239 ctpcTarget.setBunchGroupSet(bgs);
240 }
241 }
242
243
244 {
245 PrescaledClockLoader& pscldr = dynamic_cast<PrescaledClockLoader&>(m_storageMgr.prescaledClockLoader());
246 pscldr.setLevel(outputLevel());
248 psc.setId(prescaledclockid);
249 if ( !pscldr.load( psc ) ) {
250 TRG_MSG_ERROR("Can't load PrescaledClock " << psc.id() );
251 throw std::runtime_error( "CTPConfigLoader: Error loading PrescaledClock" );
252 }
253 ctpcTarget.setPrescaledClock(psc);
254 }
255
256
257 if(isRun1() ) {
258 DeadTimeLoader& dtldr = dynamic_cast<DeadTimeLoader&>(m_storageMgr.deadTimeLoader());
259 dtldr.setLevel(outputLevel());
260 DeadTime dt;
261 dt.setId(deadtimeid);
262 if ( !dtldr.load( dt ) ) {
263 TRG_MSG_ERROR("CTPConfigLoader: Error loading DeadTime " << dt.id() );
264 throw std::runtime_error( "CTPConfigLoader: Error loading DeadTime" );
265 }
266 ctpcTarget.setDeadTime(dt);
267 }
268
269
270 {
271 RandomLoader& rldr = dynamic_cast<RandomLoader&>(m_storageMgr.randomLoader());
272 rldr.setLevel(outputLevel());
273 Random r;
274 r.setId(randomid);
275 if ( !rldr.load( r ) ) {
276 TRG_MSG_ERROR("while loading Random " << r.id());
277 throw std::runtime_error( "CTPConfigLoader: Error loading Random" );
278 }
279 ctpcTarget.setRandom(r);
280 }
281
282 }
283 catch( const coral::Exception& e ) {
284 TRG_MSG_ERROR("Coral::Exception: " << e.what());
285 m_session.transaction().rollback();
286 throw;
287 }
288 catch (std::bad_cast& ex) {
289 TRG_MSG_ERROR("Cast exception: " << ex.what());
290 throw;
291 }
292
293 return true;
294}
295
virtual bool load(BunchGroupSet &data) override
virtual bool load(CTPConfig &data) override
unsigned int ctpVersion() const
Definition CTPConfig.h:34
const CTPFiles * ctpfiles() const
Definition CTPConfig.h:45
void setCTPFiles(std::unique_ptr< CTPFiles > ctp)
Definition CTPConfig.h:78
int prescaleSetId() const
Definition CTPConfig.h:36
unsigned int l1Version() const
Definition CTPConfig.h:35
void setPrescaleSet(const PrescaleSet &pss)
Definition CTPConfig.cxx:49
void setDeadTime(const DeadTime &m)
Definition CTPConfig.h:76
const BunchGroupSet & bunchGroupSet() const
Definition CTPConfig.h:41
int bunchGroupSetId() const
Definition CTPConfig.h:37
void setBunchGroupSet(const BunchGroupSet &m)
Definition CTPConfig.h:74
const Menu & menu() const
Definition CTPConfig.h:39
void setPrioritySet(const PrioritySet &m)
Definition CTPConfig.h:79
void setRandom(const Random &m)
Definition CTPConfig.h:77
const PrescaleSet & prescaleSet(unsigned int partition=0) const
Definition CTPConfig.h:40
bool loadCtpmonFiles() const
Definition CTPConfig.h:63
bool loadCtpinFiles() const
Definition CTPConfig.h:62
void setL1Version(unsigned int v)
Definition CTPConfig.cxx:37
void setCTPVersion(unsigned int v)
Definition CTPConfig.cxx:31
bool loadCtpFiles() const
Definition CTPConfig.h:60
bool loadCtpcoreFiles() const
Definition CTPConfig.h:61
void setPrescaledClock(const PrescaledClock &m)
Definition CTPConfig.h:75
TriggerDB loader of the LVL1 LUT and CAM tables.
virtual bool load(CTPFiles &data) override
StorageMgr & m_storageMgr
reference to the storage manager
Definition DBLoader.h:67
virtual MSGTC::Level outputLevel() const override
Definition DBLoader.h:40
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
virtual void setLevel(MSGTC::Level lvl) override
access to output stream
Definition DBLoader.cxx:60
coral::ISessionProxy & m_session
CORAL interface to database session.
Definition DBLoader.h:68
unsigned int triggerDBSchemaVersion()
Definition DBLoader.cxx:76
void startSession()
start session if not already active
Definition DBLoader.cxx:35
TriggerDB loader of the LVL1 deadtime configuration.
virtual bool load(DeadTime &data) override
unsigned int lvl1MasterTableId() const
void setLvl1MasterTableId(unsigned int id)
static void setMaxThresholdsFromL1Version(unsigned int l1version)
Definition L1DataDef.cxx:65
TriggerDB loader of the LVL1 trigger menu configuration.
Definition MenuLoader.h:21
virtual bool load(Menu &data) override
const ThresholdConfig & thresholdConfig() const
Definition Menu.h:73
virtual bool load(unsigned int ctpVersion, PrescaleSet &data) override
virtual bool load(PrescaledClock &data) override
virtual bool load(PrioritySet &data) override
virtual bool load(Random &data) override
unsigned int id() const
void setId(unsigned int id)
int superMasterTableId() const
int r
Definition globals.cxx:22
std::vector< std::string > files
file names and file pointers
Definition hcg.cxx:50
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition DBHelper.cxx:13
Definition Config.h:26
STL namespace.