ATLAS Offline Software
MuonThresholdSetLoader.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 //
7 //NAME: MuonThresholdSetLoader.cpp
8 //PACKAGE: TrigConfStorage
9 //
10 //AUTHOR: D.Berge (CERN) berge@cern.ch
11 //CREATED: 03. Aug. 2008
12 //
13 //PURPOSE:
14 //
15 //
17 
19 
20 #include <CoralBase/Attribute.h>
21 #include <CoralBase/AttributeList.h>
22 
23 #include "RelationalAccess/SchemaException.h"
24 #include "RelationalAccess/ITransaction.h"
25 #include "RelationalAccess/ITable.h"
26 #include "RelationalAccess/ISchema.h"
27 #include "RelationalAccess/ICursor.h"
28 #include "RelationalAccess/IQuery.h"
29 
31 
32 #include <sstream>
33 #include <iostream>
34 #include <stdexcept>
35 #include <typeinfo>
36 
37 std::vector<TrigConf::MuonThresholdSet>
39 
40  std::vector<TrigConf::MuonThresholdSet> vSets;
41  unsigned int schema = triggerDBSchemaVersion();
42 
43  if(schema > 6) {
44  startSession();
45 
46  std::vector<int> sm_keys;
47  std::vector<std::string> alias;
48  std::vector<bool> def;
49  try {
50  msg() << "Load all sm keys from trigger_alias table." << std::endl;
51  coral::ITable& table = m_session.nominalSchema().tableHandle( "TRIGGER_ALIAS");
52  coral::IQuery* query = table.newQuery();
53  query->setRowCacheSize( 5 );
54 
55  //Set types
56  coral::AttributeList attList;
57  attList.extend<int>( "TAL_SUPER_MASTER_TABLE_ID" );
58  attList.extend<std::string>( "TAL_TRIGGER_ALIAS" );
59  attList.extend<int>( "TAL_DEFAULT" );
60  query->defineOutput(attList);
61 
62  query->addToOutputList( "TAL_SUPER_MASTER_TABLE_ID" );
63  query->addToOutputList( "TAL_TRIGGER_ALIAS" );
64  query->addToOutputList( "TAL_DEFAULT" );
65  coral::ICursor& cursor = query->execute();
66 
67  while (cursor.next()) {
68  const coral::AttributeList& row = cursor.currentRow();
69  sm_keys.push_back(row["TAL_SUPER_MASTER_TABLE_ID"].data<int>());
70  alias.push_back(row["TAL_TRIGGER_ALIAS"].data<std::string>());
71  def.push_back(static_cast<bool>(row["TAL_DEFAULT"].data<int>()));
72  }
73 
74  for(size_t i = 0; i<sm_keys.size(); ++i) {
75 
76  msg() << "Found sm_key " << sm_keys[i] << " alias '" << alias[i]
77  << "' default " << def[i] << std::endl;
78 
80  muons.setSuperMasterTableId(sm_keys[i]);
81  try {
82  if ( !this->load( muons ) ) {
83  msg() << "Muon threshold set for sm key "
84  << sm_keys[i] << " not available" << std::endl;
85  }
86  } catch(std::bad_cast& ex) {
87  msg() << " Failed casting : " << ex.what();
88  }
89  vSets.push_back(muons);
90  }
91 
92  delete query;
93  commitSession();
94  } catch( const coral::SchemaException& e ) {
95  msg() << "MuonThresholdSetLoader >> SchemaException: "
96  << e.what() << std::endl;
97  m_session.transaction().rollback();
98  } catch( const std::exception& e ) {
99  msg() << "MuonThresholdSetLoader >> Standard C++ exception: " << e.what() << std::endl;
100  m_session.transaction().rollback();
101  } catch( ... ) {
102  msg() << "MuonThresholdSetLoader >> unknown C++ exception" << std::endl;
103  m_session.transaction().rollback();
104  }
105  }
106  return vSets;
107 }
108 
110  msg() << "MuonThresholdSetLoader start loading data" << std::endl;
111 
112  unsigned int schema = triggerDBSchemaVersion();
113 
114  startSession();
115 
116  if(schema > 6) {
117 
118  // check if we need to load ID first
119  if(target.id() == 0) {
120 
121  try {
122  int Lvl1MasterKey = 0;
123  int setId = 0;
124  { // load L1 master key from super master key
125 
126  //msg() << "Load L1 master key for sm key " << target.superMasterTableId() << std::endl;
127  coral::ITable& table = m_session.nominalSchema().tableHandle( "SUPER_MASTER_TABLE");
128  coral::IQuery* query = table.newQuery();
129  query->setRowCacheSize( 5 );
130 
131  coral::AttributeList conditionData;
132  conditionData.extend<int>("smtid");
133  query->setCondition( "SMT_ID = :smtid" , conditionData );
134  conditionData[0].data<int>() = target.superMasterTableId();
135 
136  coral::AttributeList attList;
137  attList.extend<int>( "SMT_L1_MASTER_TABLE_ID" );
138  query->defineOutput(attList);
139  query->addToOutputList( "SMT_L1_MASTER_TABLE_ID" );
140 
141  coral::ICursor& cursor = query->execute();
142  if ( ! cursor.next() ) {
143  msg() << "MuonThresholdSetLoader >> No such SuperMaster key exists "
144  << target.superMasterTableId() << std::endl;
145  delete query;
146  commitSession();
147  throw std::runtime_error( "MuonThresholdSetLoader >> SuperMasterKey not available" );
148  }
149  const coral::AttributeList& row = cursor.currentRow();
150  Lvl1MasterKey = row["SMT_L1_MASTER_TABLE_ID"].data<int>();
151 
152  //msg() << "L1 master key " << Lvl1MasterKey << std::endl;
153  delete query;
154  }
155  { // load muon threshold set id from L1 master key
156 
157  //msg() << "Load muon set id for L1 master key " << Lvl1MasterKey << std::endl;
158 
159  coral::ITable& table = m_session.nominalSchema().tableHandle( "L1_MASTER_TABLE");
160  coral::IQuery* query = table.newQuery();
161  query->setRowCacheSize( 5 );
162 
163  coral::AttributeList conditionData;
164  conditionData.extend<int>("l1mtid");
165  query->setCondition( "L1MT_ID = :l1mtid" , conditionData );
166  conditionData[0].data<int>() = Lvl1MasterKey;
167 
168  coral::AttributeList attList;
169  attList.extend<int>( "L1MT_MUON_THRESHOLD_SET_ID" );
170  query->defineOutput(attList);
171 
172  query->addToOutputList( "L1MT_MUON_THRESHOLD_SET_ID" );
173  coral::ICursor& cursor = query->execute();
174  if ( ! cursor.next() ) {
175  msg() << "MuonThresholdSetLoader >> No such L1 master key exists "
176  << Lvl1MasterKey << std::endl;
177  delete query;
178  commitSession();
179  throw std::runtime_error( "MuonThresholdSetLoader >> L1MasterKey not available" );
180  }
181  const coral::AttributeList& row = cursor.currentRow();
182  setId = row["L1MT_MUON_THRESHOLD_SET_ID"].data<int>();
183  //msg() << "Muon set id " << setId << std::endl;
184  delete query;
185  }
186  target.setId(setId);
187  } catch( const coral::SchemaException& e ) {
188  msg() << "MuonThresholdSetLoader >> SchemaException: "
189  << e.what() << std::endl;
190  m_session.transaction().rollback();
191  return false;
192  } catch( const std::exception& e ) {
193  msg() << "MuonThresholdSetLoader >> Standard C++ exception: " << e.what() << std::endl;
194  m_session.transaction().rollback();
195  return false;
196  } catch( ... ) {
197  msg() << "MuonThresholdSetLoader >> unknown C++ exception" << std::endl;
198  m_session.transaction().rollback();
199  return false;
200  }
201  }
202 
203  try {
204  msg() << "Super master key " << target.superMasterTableId()
205  << " MuonThresholdSet id " << target.id() << std::endl;
206 
207  coral::ITable& table = m_session.nominalSchema().tableHandle( "L1_MUON_THRESHOLD_SET");
208  coral::IQuery* query = table.newQuery();
209  query->setRowCacheSize( 5 );
210 
211  std::string cond = "L1MTS_ID = :threshId";
213  alist.extend<int>("threshId");
214  alist[0].data<int>() = target.id();
215  query->setCondition( cond, alist );
216 
217  coral::AttributeList attList;
218  attList.extend<std::string>( "L1MTS_NAME" );
219  attList.extend<int>( "L1MTS_VERSION" );
220  attList.extend<int>( "L1MTS_RPC_AVAILABLE" );
221  attList.extend<int>( "L1MTS_RPC_AVAILABLE_ONLINE" );
222  attList.extend<int>( "L1MTS_TGC_AVAILABLE" );
223  attList.extend<int>( "L1MTS_TGC_AVAILABLE_ONLINE" );
224  attList.extend<int>( "L1MTS_RPC_SET_EXT_ID");
225  attList.extend<std::string>( "L1MTS_RPC_SET_NAME" );
226  attList.extend<int>( "L1MTS_TGC_SET_EXT_ID");
227  attList.extend<std::string>( "L1MTS_TGC_SET_NAME" );
228  attList.extend<int>( "L1MTS_RPC_PT1_EXT_ID" );
229  attList.extend<int>( "L1MTS_RPC_PT2_EXT_ID" );
230  attList.extend<int>( "L1MTS_RPC_PT3_EXT_ID" );
231  attList.extend<int>( "L1MTS_RPC_PT4_EXT_ID" );
232  attList.extend<int>( "L1MTS_RPC_PT5_EXT_ID" );
233  attList.extend<int>( "L1MTS_RPC_PT6_EXT_ID" );
234  query->defineOutput(attList);
235 
236  query->addToOutputList( "L1MTS_NAME" );
237  query->addToOutputList( "L1MTS_VERSION" );
238  query->addToOutputList( "L1MTS_RPC_AVAILABLE" );
239  query->addToOutputList( "L1MTS_RPC_AVAILABLE_ONLINE" );
240  query->addToOutputList( "L1MTS_TGC_AVAILABLE" );
241  query->addToOutputList( "L1MTS_TGC_AVAILABLE_ONLINE" );
242  query->addToOutputList( "L1MTS_RPC_SET_EXT_ID" );
243  query->addToOutputList( "L1MTS_RPC_SET_NAME" );
244  query->addToOutputList( "L1MTS_TGC_SET_EXT_ID" );
245  query->addToOutputList( "L1MTS_TGC_SET_NAME" );
246  query->addToOutputList( "L1MTS_RPC_PT1_EXT_ID" );
247  query->addToOutputList( "L1MTS_RPC_PT2_EXT_ID" );
248  query->addToOutputList( "L1MTS_RPC_PT3_EXT_ID" );
249  query->addToOutputList( "L1MTS_RPC_PT4_EXT_ID" );
250  query->addToOutputList( "L1MTS_RPC_PT5_EXT_ID" );
251  query->addToOutputList( "L1MTS_RPC_PT6_EXT_ID" );
252 
253  coral::ICursor& cursor = query->execute();
254  if ( ! cursor.next() ) {
255  msg() << "MuonThresholdSetLoader >> No such threshold set exists : "
256  << target.id() << std::endl;
257  delete query;
258  commitSession();
259  throw std::runtime_error( "MuonThresholdSetLoader >> ThresholdSet not available" );
260  }
261 
262  const coral::AttributeList& row = cursor.currentRow();
263 
264  target.setName( row["L1MTS_NAME"].data<std::string>() );
265  target.setVersion( row["L1MTS_VERSION"].data<int>() );
266 
267  target.setRpcAvailable( static_cast<bool>(row["L1MTS_RPC_AVAILABLE"].data<int>()) );
268  target.setRpcAvailableOnline( static_cast<bool>(row["L1MTS_RPC_AVAILABLE_ONLINE"].data<int>()) );
269  target.setTgcAvailable( static_cast<bool>(row["L1MTS_TGC_AVAILABLE"].data<int>()) );
270  target.setTgcAvailableOnline( static_cast<bool>(row["L1MTS_TGC_AVAILABLE_ONLINE"].data<int>()) );
271 
272  target.setRpcSetId( row["L1MTS_RPC_SET_EXT_ID"].data<int>() );
273  target.setTgcSetId( row["L1MTS_TGC_SET_EXT_ID"].data<int>() );
274 
275  target.setRpcSetName( row["L1MTS_RPC_SET_NAME"].data<std::string>() );
276  target.setTgcSetName( row["L1MTS_TGC_SET_NAME"].data<std::string>() );
277 
278  target.setRpcPt1Id( row["L1MTS_RPC_PT1_EXT_ID"].data<int>() );
279  target.setRpcPt2Id( row["L1MTS_RPC_PT2_EXT_ID"].data<int>() );
280  target.setRpcPt3Id( row["L1MTS_RPC_PT3_EXT_ID"].data<int>() );
281  target.setRpcPt4Id( row["L1MTS_RPC_PT4_EXT_ID"].data<int>() );
282  target.setRpcPt5Id( row["L1MTS_RPC_PT5_EXT_ID"].data<int>() );
283  target.setRpcPt6Id( row["L1MTS_RPC_PT6_EXT_ID"].data<int>() );
284 
285  delete query;
286  commitSession();
287  return true;
288  } catch( const coral::SchemaException& e ) {
289  msg() << "MuonThresholdSetLoader >> SchemaException: "
290  << e.what() << std::endl;
291  m_session.transaction().rollback();
292  return false;
293  } catch( const std::exception& e ) {
294  msg() << "MuonThresholdSetLoader >> Standard C++ exception: " << e.what() << std::endl;
295  m_session.transaction().rollback();
296  return false;
297  } catch( ... ) {
298  msg() << "MuonThresholdSetLoader >> unknown C++ exception" << std::endl;
299  m_session.transaction().rollback();
300  return false;
301  }
302  } else {
303  msg() << "Schema version " << schema << " too old, don't load MuonThresholdSet" << std::endl;
305  return false;
306  }
307 }
308 
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
query_example.row
row
Definition: query_example.py:24
TrigConf::MuonThresholdSet
Definition: MuonThresholdSet.h:13
MuonThresholdSetLoader.h
TrigConf::DBLoader::triggerDBSchemaVersion
unsigned int triggerDBSchemaVersion()
Definition: DBLoader.cxx:76
python.PyKernel.AttributeList
AttributeList
Definition: PyKernel.py:36
TrigConf::DBLoader::m_session
coral::ISessionProxy & m_session
CORAL interface to database session.
Definition: DBLoader.h:68
CheckTagAssociation.schema
schema
Definition: CheckTagAssociation.py:22
query
Definition: query.py:1
MuonThresholdSet.h
TrigConf::MuonThresholdSetLoader::loadAll
std::vector< TrigConf::MuonThresholdSet > loadAll()
Definition: MuonThresholdSetLoader.cxx:38
TrigConf::TrigConfData::setSuperMasterTableId
void setSuperMasterTableId(int id)
Definition: TrigConfData.h:27
lumiFormat.i
int i
Definition: lumiFormat.py:85
TrigConf::TrigConfMessaging::msg
MsgStreamTC & msg() const
The standard message stream.
Definition: TrigConfMessaging.h:81
COOLRates.alias
alias
Definition: COOLRates.py:1172
calibdata.exception
exception
Definition: calibdata.py:496
query_example.query
query
Definition: query_example.py:15
TrigConf::MuonThresholdSetLoader::load
virtual bool load(MuonThresholdSet &data) override
Definition: MuonThresholdSetLoader.cxx:109
python.ext.table_printer.table
list table
Definition: table_printer.py:81
collListGuids.alist
alist
Definition: collListGuids.py:68
TrigConf::DBLoader::commitSession
void commitSession()
commit session if not already done
Definition: DBLoader.cxx:45
query_example.cursor
cursor
Definition: query_example.py:21
copySelective.target
string target
Definition: copySelective.py:37
TrigConf::DBLoader::startSession
void startSession()
start session if not already active
Definition: DBLoader.cxx:35
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7