ATLAS Offline Software
Loading...
Searching...
No Matches
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
37std::vector<TrigConf::MuonThresholdSet>
39
40 std::vector<TrigConf::MuonThresholdSet> vSets;
41 unsigned int schema = triggerDBSchemaVersion();
42
43 if(schema > 6) {
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;
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;
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;
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";
212 coral::AttributeList alist;
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;
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;
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;
304 target = MuonThresholdSet();
305 return false;
306 }
307}
308
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
void commitSession()
commit session if not already done
Definition DBLoader.cxx:45
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
virtual bool load(MuonThresholdSet &data) override
std::vector< TrigConf::MuonThresholdSet > loadAll()
void setSuperMasterTableId(int id)
MsgStreamTC & msg() const
The standard message stream.
Definition query.py:1
MsgStream & msg
Definition testRead.cxx:32