ATLAS Offline Software
CTPConfigLoader.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "./CTPConfigLoader.h"
6 #include "./MenuLoader.h"
7 #include "./PrescaleSetLoader.h"
9 #include "./RandomLoader.h"
10 #include "./PrescaledClockLoader.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 
23 using 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 
35  startSession();
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 
98  L1DataDef::setMaxThresholdsFromL1Version( ctpcTarget.l1Version() );
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);
129  commitSession();
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  CTPFiles* files = new 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 );
151  delete files;
152  commitSession();
153  throw std::runtime_error( "CTPConfigLoader: Error loading CTP files" );
154  }
155  ctpcTarget.setCTPFiles( files );
156  }
157  catch (std::bad_cast& ex) {
158  TRG_MSG_ERROR("Caught exception in CTPConfigLoader : " << ex.what());
159  commitSession();
160  throw std::runtime_error( "CTPConfigLoader: Error casting CTPFilesLoader" );
161  }
162  } else {
163  TRG_MSG_ERROR("Error loading CTP files, no files pointed to by the menu. CTP files id = " << filesid << ", SMX files id = " << smxid);
164  }
165 
166  CTPFiles * files = ctpcTarget.ctpfiles();
167  if( files != nullptr ) {
168  TRG_MSG_INFO("Loaded CTPfiles. CAM size=" << files->ctpcoreCAM().size() << ", LUT size=" << files->ctpcoreCAM().size());
169  }
170 
171  //load the priorityset
172  if(isRun1()) {
173  try {
174  PrioritySetLoader& prsldr = dynamic_cast<PrioritySetLoader&>(m_storageMgr.prioritySetLoader());
175  PrioritySet prs;
176  prs.setLvl1MasterTableId(ctpcTarget.lvl1MasterTableId());
177  if ( !prsldr.load( prs ) ) {
178  TRG_MSG_ERROR("Can't load PrioritySet " << prs.lvl1MasterTableId());
179  commitSession();
180  throw std::runtime_error( "CTPConfigLoader: Error loading PrioritySet" );
181  }
182  ctpcTarget.setPrioritySet(prs);
183  } catch (std::bad_cast& ex) {
184  TRG_MSG_ERROR("Caught exception in CTPConfigLoader : " << ex.what() );
185  commitSession();
186  throw std::runtime_error( "CTPConfigLoader: Error casting PrioritySetLoader" );
187  }
188  }
189  } else {
190  TRG_MSG_INFO("No loading of CTPFiles");
191  }
192 
193 
194 
195  // now load the data
196  {
197  MenuLoader& mldr = dynamic_cast<MenuLoader&>(m_storageMgr.menuLoader());
198  mldr.setLevel(outputLevel());
199  Menu& m = ctpcTarget.menu();
200  m.setId(menuid);
201  m.setSuperMasterTableId(ctpcTarget.superMasterTableId());
202  if ( !mldr.load( m ) ) {
203  TRG_MSG_ERROR("failed loading Menu " << m.id());
204  throw std::runtime_error( "CTPConfigLoader: ERROR loading Menu" );
205  }
206  if(isRun1()) {
208  }
209  }
210 
211 
212  {
213  PrescaleSetLoader& psldr = dynamic_cast<PrescaleSetLoader&>(m_storageMgr.prescaleSetLoader());
214  psldr.setLevel(outputLevel());
215  PrescaleSet pss = ctpcTarget.prescaleSet();
216  if( prescalesetid > 0 && (schema > 6 || isRun2()) ) { //defined in old schema
217  TRG_MSG_INFO("loding LVL1 prescales.");
218  pss.setId(prescalesetid);
219  if ( !psldr.load( ctpcTarget.ctpVersion(), pss ) ) {
220  TRG_MSG_ERROR("CTPConfigLoader: Error loading PrescaleSet " << pss.id());
221  throw std::runtime_error( "CTPConfigLoader: Error loading PrescaleSet" );
222  }
223  ctpcTarget.setPrescaleSet(pss);
224  } else {
225  TRG_MSG_INFO("Not loading LVL1 prescales. PSK = " << prescalesetid);
226  }
227  }
228 
229 
230  {
231  BunchGroupSetLoader& bgsldr = dynamic_cast<BunchGroupSetLoader&>(m_storageMgr.bunchGroupSetLoader());
232  bgsldr.setLevel(outputLevel());
233  BunchGroupSet bgs = ctpcTarget.bunchGroupSet();
234  if( bunchgroupsetid > 0 && (schema > 6 || isRun2())) { //proby won't work in old schema
235  bgs.setId(bunchgroupsetid);
236  if ( !bgsldr.load( bgs ) ) {
237  TRG_MSG_ERROR("loading BunchGroupSet " << bgs.id());
238  throw std::runtime_error( "CTPConfigLoader: Error loading BunchGroupSet" );
239  }
240  ctpcTarget.setBunchGroupSet(bgs);
241  }
242  }
243 
244 
245  {
246  PrescaledClockLoader& pscldr = dynamic_cast<PrescaledClockLoader&>(m_storageMgr.prescaledClockLoader());
247  pscldr.setLevel(outputLevel());
249  psc.setId(prescaledclockid);
250  if ( !pscldr.load( psc ) ) {
251  TRG_MSG_ERROR("Can't load PrescaledClock " << psc.id() );
252  throw std::runtime_error( "CTPConfigLoader: Error loading PrescaledClock" );
253  }
254  ctpcTarget.setPrescaledClock(psc);
255  }
256 
257 
258  if(isRun1() ) {
259  DeadTimeLoader& dtldr = dynamic_cast<DeadTimeLoader&>(m_storageMgr.deadTimeLoader());
260  dtldr.setLevel(outputLevel());
261  DeadTime dt;
262  dt.setId(deadtimeid);
263  if ( !dtldr.load( dt ) ) {
264  TRG_MSG_ERROR("CTPConfigLoader: Error loading DeadTime " << dt.id() );
265  throw std::runtime_error( "CTPConfigLoader: Error loading DeadTime" );
266  }
267  ctpcTarget.setDeadTime(dt);
268  }
269 
270 
271  {
272  RandomLoader& rldr = dynamic_cast<RandomLoader&>(m_storageMgr.randomLoader());
273  rldr.setLevel(outputLevel());
274  Random r;
275  r.setId(randomid);
276  if ( !rldr.load( r ) ) {
277  TRG_MSG_ERROR("while loading Random " << r.id());
278  throw std::runtime_error( "CTPConfigLoader: Error loading Random" );
279  }
280  ctpcTarget.setRandom(r);
281  }
282 
283  }
284  catch( const coral::Exception& e ) {
285  TRG_MSG_ERROR("Coral::Exception: " << e.what());
286  m_session.transaction().rollback();
287  throw;
288  }
289  catch (std::bad_cast& ex) {
290  TRG_MSG_ERROR("Cast exception: " << ex.what());
291  throw;
292  }
293 
294  return true;
295 }
296 
TrigConf::PrioritySet
Definition: PrioritySet.h:14
TrigConf::MenuLoader::load
virtual bool load(Menu &data) override
Definition: MenuLoader.cxx:35
TrigConf::BunchGroupSet
Definition: BunchGroupSet.h:19
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
beamspotman.r
def r
Definition: beamspotman.py:676
CTPConfig.h
TrigConf::CTPConfig::loadCtpcoreFiles
bool loadCtpcoreFiles() const
Definition: CTPConfig.h:60
TrigConf::PrioritySetLoader::load
virtual bool load(PrioritySet &data) override
Definition: PrioritySetLoader.cxx:27
TrigConf::BunchGroupSetLoader::load
virtual bool load(BunchGroupSet &data) override
Definition: BunchGroupSetLoader.cxx:18
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
TrigConf::PrescaleSet
Definition: PrescaleSet.h:22
TrigConf::CTPConfig::setCTPFiles
void setCTPFiles(CTPFiles *ctp)
Definition: CTPConfig.h:77
TrigConf::CTPConfig::setBunchGroupSet
void setBunchGroupSet(const BunchGroupSet &m)
Definition: CTPConfig.h:73
TrigConf::CTPFilesLoader::load
virtual bool load(CTPFiles &data) override
Definition: CTPFilesLoader.cxx:46
TrigConf::CTPConfig::ctpVersion
unsigned int ctpVersion() const
Definition: CTPConfig.h:33
TrigConf::CTPConfig::bunchGroupSet
const BunchGroupSet & bunchGroupSet() const
Definition: CTPConfig.h:40
MenuLoader.h
DBHelper.h
TrigConf::fillQuery
void fillQuery(coral::IQuery *q, coral::AttributeList &attList)
Definition: DBHelper.cxx:13
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
TrigConf::DeadTime
Definition: DeadTime.h:13
TrigConf::PrescaleSetLoader::load
virtual bool load(unsigned int ctpVersion, PrescaleSet &data) override
Definition: PrescaleSetLoader.cxx:28
DeadTimeLoader.h
TrigConf::DBLoader::setLevel
virtual void setLevel(MSGTC::Level lvl) override
access to output stream
Definition: DBLoader.cxx:60
TrigConf::MenuLoader
TriggerDB loader of the LVL1 trigger menu configuration.
Definition: MenuLoader.h:21
TrigConf::CTPConfig::loadCtpmonFiles
bool loadCtpmonFiles() const
Definition: CTPConfig.h:62
TrigConf::CTPConfig::setPrescaledClock
void setPrescaledClock(const PrescaledClock &m)
Definition: CTPConfig.h:74
RandomLoader.h
CheckTagAssociation.schema
schema
Definition: CheckTagAssociation.py:22
TrigConf::PrescaledClockLoader::load
virtual bool load(PrescaledClock &data) override
Definition: PrescaledClockLoader.cxx:36
TrigConf::L1DataBaseclass::lvl1MasterTableId
unsigned int lvl1MasterTableId() const
Definition: L1DataBaseclass.h:30
TrigConf::BunchGroupSetLoader
Definition: BunchGroupSetLoader.h:28
CTPConfigLoader.h
TrigConf::PrescaleSetLoader
Definition: PrescaleSetLoader.h:28
psc
Definition: Config.h:26
TrigConf::Menu
Definition: Menu.h:49
TrigConf::DeadTimeLoader::load
virtual bool load(DeadTime &data) override
Definition: DeadTimeLoader.cxx:39
TrigConf::CTPConfig::l1Version
unsigned int l1Version() const
Definition: CTPConfig.h:34
TrigConf::CTPConfig::prescaleSetId
int prescaleSetId() const
Definition: CTPConfig.h:35
TrigConf::Random
Definition: TrigConfiguration/TrigConfL1Data/TrigConfL1Data/Random.h:16
CaloNoise_fillDB.dt
dt
Definition: CaloNoise_fillDB.py:58
TrigConf::CTPConfig::setPrioritySet
void setPrioritySet(const PrioritySet &m)
Definition: CTPConfig.h:78
TrigConf::Menu::thresholdConfig
const ThresholdConfig & thresholdConfig() const
Definition: Menu.h:73
generateReferenceFile.files
files
Definition: generateReferenceFile.py:12
TrigConf::TrigConfData::superMasterTableId
int superMasterTableId() const
Definition: TrigConfData.h:19
PrescaleSetLoader.h
TrigConf::CTPConfig::prescaleSet
const PrescaleSet & prescaleSet(unsigned int partition=0) const
Definition: CTPConfig.h:39
TrigConf::L1DataBaseclass::setLvl1MasterTableId
void setLvl1MasterTableId(unsigned int id)
Definition: L1DataBaseclass.h:31
TrigConf::TrigConfData::setId
void setId(unsigned int id)
Definition: TrigConfData.h:29
BunchGroupSetLoader.h
TRG_MSG_INFO
#define TRG_MSG_INFO(x)
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStreamMacros.h:27
python.TrigConfigSvcUtils.isRun2
def isRun2(cursor, schemaname)
Definition: TrigConfigSvcUtils.py:290
TrigConf::CTPConfig::ctpfiles
const CTPFiles * ctpfiles() const
Definition: CTPConfig.h:44
TrigConf::CTPConfig::loadCtpinFiles
bool loadCtpinFiles() const
Definition: CTPConfig.h:61
TrigConf::TrigConfData::id
unsigned int id() const
Definition: TrigConfData.h:21
TrigConf::ThresholdConfig::attributeThresholdNumbers
void attributeThresholdNumbers()
Definition: ThresholdConfig.cxx:224
TrigConf::CTPConfigLoader::load
virtual bool load(CTPConfig &data) override
Definition: CTPConfigLoader.cxx:25
PrioritySetLoader.h
TrigConf::PrescaledClock
Definition: PrescaledClock.h:13
TrigConf::DeadTimeLoader
TriggerDB loader of the LVL1 deadtime configuration.
Definition: DeadTimeLoader.h:27
TrigConf::RandomLoader::load
virtual bool load(Random &data) override
Definition: RandomLoader.cxx:17
TrigConf::CTPConfig::bunchGroupSetId
int bunchGroupSetId() const
Definition: CTPConfig.h:36
TrigConf::CTPConfig::setRandom
void setRandom(const Random &m)
Definition: CTPConfig.h:76
python.TrigPSCPythonDbSetup.outputLevel
outputLevel
Definition: TrigPSCPythonDbSetup.py:30
TrigConf::CTPConfig::setCTPVersion
void setCTPVersion(unsigned int v)
Definition: CTPConfig.cxx:33
TrigConf::CTPFiles
Definition: CTPFiles.h:17
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
query_example.cursor
cursor
Definition: query_example.py:21
TrigConf::CTPConfig::menu
const Menu & menu() const
Definition: CTPConfig.h:38
TrigConf::CTPConfig::setL1Version
void setL1Version(unsigned int v)
Definition: CTPConfig.cxx:39
TrigConf::CTPFilesLoader
TriggerDB loader of the LVL1 LUT and CAM tables.
Definition: CTPFilesLoader.h:33
TrigConf::PrescaledClockLoader
Definition: PrescaledClockLoader.h:27
TrigConf::CTPConfig
Definition: CTPConfig.h:27
extractSporadic.q
list q
Definition: extractSporadic.py:98
TrigConf::CTPConfig::setDeadTime
void setDeadTime(const DeadTime &m)
Definition: CTPConfig.h:75
TrigConf::RandomLoader
Definition: RandomLoader.h:27
TrigConf::PrioritySetLoader
Definition: PrioritySetLoader.h:14
TrigConf::CTPConfig::loadCtpFiles
bool loadCtpFiles() const
Definition: CTPConfig.h:59
TrigConf::CTPConfig::setPrescaleSet
void setPrescaleSet(const PrescaleSet &pss)
Definition: CTPConfig.cxx:51
CTPFilesLoader.h
PrescaledClockLoader.h