58 }
else if(
data.id()!=0 ) {
61 TRG_MSG_ERROR(
"Can not load CaloInfo which has no id or SMK specified");
62 throw runtime_error(
"Can not load CaloInfo, no SMK or Id specified");
72 unique_ptr<coral::IQuery> q(
m_session.nominalSchema().newQuery());
73 q->addToTableList(
"L1_CALO_INFO",
"L1CI" );
74 q->setRowCacheSize( 5 );
77 coral::AttributeList bindList;
78 bindList.extend<
int>(
"Id");
81 q->addToTableList(
"SUPER_MASTER_TABLE",
"SMT" );
82 q->addToTableList(
"L1_MASTER_TABLE",
"L1M" );
83 cond =
"SMT.SMT_ID = :Id";
84 cond +=
" AND SMT.SMT_L1_MASTER_TABLE_ID = L1M.L1MT_ID";
85 cond +=
" AND L1CI.L1CI_ID = L1M.L1MT_CALO_INFO_ID";
86 bindList[0].data<
int>() =
data.smk();
88 cond =
"L1CI.L1CI_ID = :Id";
89 bindList[0].data<
int>() =
data.id();
91 q->setCondition( cond, bindList );
94 coral::AttributeList attList;
95 attList.extend<std::string>(
"L1CI.L1CI_NAME" );
96 attList.extend<
int>(
"L1CI.L1CI_VERSION" );
98 attList.extend<std::string>(
"L1CI.L1CI_GLOBAL_SCALE" );
100 attList.extend<
float>(
"L1CI.L1CI_GLOBAL_EM_SCALE" );
101 attList.extend<
float>(
"L1CI.L1CI_GLOBAL_JET_SCALE" );
104 attList.extend<
int>(
"L1CI.L1CI_XS_SIGMA_SCALE" );
105 attList.extend<
int>(
"L1CI.L1CI_XS_SIGMA_OFFSET" );
106 attList.extend<
int>(
"L1CI.L1CI_XS_XE_MIN" );
107 attList.extend<
int>(
"L1CI.L1CI_XS_XE_MAX" );
108 attList.extend<
int>(
"L1CI.L1CI_XS_TESQRT_MIN" );
109 attList.extend<
int>(
"L1CI.L1CI_XS_TESQRT_MAX" );
113 std::stringstream helpstring;
114 helpstring <<
"L1CI.L1CI_JET_WEIGHT" <<
index;
115 attList.extend<
int>( helpstring.str() );
119 attList.extend<
int>(
"L1CI.L1CI_MIN_TOB_EM" );
120 attList.extend<
int>(
"L1CI.L1CI_MIN_TOB_TAU" );
121 attList.extend<
int>(
"L1CI.L1CI_MIN_TOB_JETS" );
122 attList.extend<
int>(
"L1CI.L1CI_MIN_TOB_JETL" );
123 attList.extend<
int>(
"L1CI.L1CI_ISO_HA_EM" );
124 attList.extend<
int>(
"L1CI.L1CI_ISO_EM_EM" );
125 attList.extend<
int>(
"L1CI.L1CI_ISO_EM_TAU" );
131 coral::ICursor& cursor = q->execute();
140 throw std::runtime_error(
"CaloInfoLoader >> CaloInfo not available" );
144 const coral::AttributeList& row = cursor.currentRow();
153 data.setGlobalEmScale( row[
"L1CI.L1CI_GLOBAL_EM_SCALE"].
data<float>() );
154 data.setGlobalJetScale( row[
"L1CI.L1CI_GLOBAL_JET_SCALE"].
data<float>() );
158 std::stringstream helpstring;
159 helpstring <<
"L1CI.L1CI_JET_WEIGHT" <<
index;
160 data.addJetWeight(
static_cast<int>(row[helpstring.str()].data<
int>()) );
164 int XSSigmaScale = row[
"L1CI.L1CI_XS_SIGMA_SCALE"].data<
int>();
165 int XSSigmaOffset = row[
"L1CI.L1CI_XS_SIGMA_OFFSET"].data<
int>();
166 int XEmin = row[
"L1CI.L1CI_XS_XE_MIN"].data<
int>();
167 int XEmax = row[
"L1CI.L1CI_XS_XE_MAX"].data<
int>();
168 int TESqrtMin = row[
"L1CI.L1CI_XS_TESQRT_MIN"].data<
int>();
169 int TESqrtMax = row[
"L1CI.L1CI_XS_TESQRT_MAX"].data<
int>();
170 data.metSigParam().setValues( XSSigmaScale, XSSigmaOffset,
171 XEmin, XEmax, TESqrtMin, TESqrtMax);
174 vector<int> mintobIDs;
175 vector<int> isoparIDs;
177 mintobIDs.push_back(row[
"L1CI.L1CI_MIN_TOB_EM"].
data<int>());
178 mintobIDs.push_back(row[
"L1CI.L1CI_MIN_TOB_TAU"].
data<int>());
179 mintobIDs.push_back(row[
"L1CI.L1CI_MIN_TOB_JETS"].
data<int>());
180 mintobIDs.push_back(row[
"L1CI.L1CI_MIN_TOB_JETL"].
data<int>());
181 isoparIDs.push_back(row[
"L1CI.L1CI_ISO_HA_EM"].
data<int>());
182 isoparIDs.push_back(row[
"L1CI.L1CI_ISO_EM_EM"].
data<int>());
183 isoparIDs.push_back(row[
"L1CI.L1CI_ISO_EM_TAU"].
data<int>());
187 if ( cursor.next() ) {
189 throw std::runtime_error(
"Too many CaloInfo objects" );
199 catch(
const coral::Exception& e ) {
211 unique_ptr<coral::IQuery> q(
m_session.nominalSchema().tableHandle(
"L1_CALO_MIN_TOB" ).newQuery());
212 q->setRowCacheSize( 4 );
214 string cond(
"L1CMT_ID IN (");
216 for(
int id : mintobIDs) {
217 if(first) { first =
false; }
else { cond +=
","; }
218 cond += std::to_string(
id);
221 q->setCondition( cond, coral::AttributeList() );
223 coral::AttributeList attList;
224 attList.extend<
int>(
"L1CMT_ID" );
225 attList.extend<
string>(
"L1CMT_THR_TYPE" );
226 attList.extend<
int>(
"L1CMT_WINDOW" );
227 attList.extend<
int>(
"L1CMT_PT_MIN" );
228 attList.extend<
int>(
"L1CMT_ETA_MIN" );
229 attList.extend<
int>(
"L1CMT_ETA_MAX" );
230 attList.extend<
int>(
"L1CMT_PRIORITY" );
233 coral::ICursor& cursor = q->execute();
235 while ( cursor.next() ) {
237 const coral::AttributeList& row = cursor.currentRow();
239 string thrtype = row[
"L1CMT_THR_TYPE"].data<
string>();
240 int window = row[
"L1CMT_WINDOW"].data<
int>();
241 int ptmin = row[
"L1CMT_PT_MIN"].data<
int>();
242 int etamin = row[
"L1CMT_ETA_MIN"].data<
int>();
243 int etamax = row[
"L1CMT_ETA_MAX"].data<
int>();
244 int priority = row[
"L1CMT_PRIORITY"].data<
int>();
247 TRG_MSG_ERROR(
"MinTOBPt " << thrtype <<
" with pt " << ptmin <<
" which is less than 0");
248 throw runtime_error(
"PTMin of MinTOBPt found to be less than 0");
251 TRG_MSG_ERROR(
"MinTOBPt " << thrtype <<
" with priority " << priority <<
" which is less than 0");
252 throw runtime_error(
"Priority of MinTOBPt found to be less than 0");
255 MinTOBPt mintob((
unsigned int)ptmin, etamin, etamax, (
unsigned int) priority);
258 data.setMinTobEM(mintob);
259 }
else if(thrtype==
"TAU") {
260 data.setMinTobTau(mintob);
261 }
else if(thrtype==
"JETS") {
262 data.setMinTobJetSmall(mintob);
263 data.setJetWindowSizeSmall(window);
264 }
else if(thrtype==
"JETL") {
265 data.setMinTobJetLarge(mintob);
266 data.setJetWindowSizeLarge(window);
269 throw runtime_error(
"MinTOBPt with unknown threshold type");
283 map<string,vector<int>> m;
286 unique_ptr<coral::IQuery> q(
m_session.nominalSchema().tableHandle(
"L1_CALO_ISOLATION" ).newQuery());
287 q->setRowCacheSize( 3 );
289 string cond(
"L1CIS_ID IN (" + join(isoparIDs) +
")" );
290 q->setCondition( cond, coral::AttributeList() );
292 coral::AttributeList attList;
293 attList.extend<
string>(
"L1CIS_THR_TYPE" );
294 attList.extend<
int>(
"L1CIS_PAR1_ID" );
295 attList.extend<
int>(
"L1CIS_PAR2_ID" );
296 attList.extend<
int>(
"L1CIS_PAR3_ID" );
297 attList.extend<
int>(
"L1CIS_PAR4_ID" );
298 attList.extend<
int>(
"L1CIS_PAR5_ID" );
301 coral::ICursor& cursor = q->execute();
303 while ( cursor.next() ) {
305 const coral::AttributeList& row = cursor.currentRow();
307 string thrtype = row[
"L1CIS_THR_TYPE"].data<
string>();
309 vector<int> & idbytype = m[thrtype];
311 idbytype.push_back( row[
"L1CIS_PAR1_ID"].
data<int>() );
312 idbytype.push_back( row[
"L1CIS_PAR2_ID"].
data<int>() );
313 idbytype.push_back( row[
"L1CIS_PAR3_ID"].
data<int>() );
314 idbytype.push_back( row[
"L1CIS_PAR4_ID"].
data<int>() );
315 idbytype.push_back( row[
"L1CIS_PAR5_ID"].
data<int>() );
324 for(
const auto & isolation : m ) {
326 unique_ptr<coral::IQuery> q(
m_session.nominalSchema().tableHandle(
"L1_CALO_ISOPARAM" ).newQuery());
327 q->setRowCacheSize( 5 );
329 const string & thrtype = isolation.first;
330 const vector<int> & isoparIds = isolation.second;
332 string cond(
"L1CIP_ID IN (" + join(isoparIds) +
")" );
333 q->setCondition( cond, coral::AttributeList() );
335 coral::AttributeList attList;
336 attList.extend<
int>(
"L1CIP_ID" );
337 attList.extend<
int>(
"L1CIP_ISO_BIT" );
338 attList.extend<
int>(
"L1CIP_OFFSET" );
339 attList.extend<
int>(
"L1CIP_SLOPE" );
340 attList.extend<
int>(
"L1CIP_MIN_CUT" );
341 attList.extend<
int>(
"L1CIP_UPPER_LIMIT" );
342 attList.extend<
int>(
"L1CIP_ETA_MIN" );
343 attList.extend<
int>(
"L1CIP_ETA_MAX" );
344 attList.extend<
int>(
"L1CIP_PRIORITY" );
347 coral::ICursor& cursor = q->execute();
349 while ( cursor.next() ) {
351 const coral::AttributeList& row = cursor.currentRow();
353 unsigned int id = (
unsigned int)row[
"L1CIP_ID"].
data<int>();
355 for(
unsigned int parId : isoparIds) {
360 int isobit = row[
"L1CIP_ISO_BIT"].data<
int>();
361 int offset = row[
"L1CIP_OFFSET"].data<
int>();
362 int slope = row[
"L1CIP_SLOPE"].data<
int>();
363 int mincut = row[
"L1CIP_MIN_CUT"].data<
int>();
364 int upperlimit = row[
"L1CIP_UPPER_LIMIT"].data<
int>();
365 int etamin = row[
"L1CIP_ETA_MIN"].data<
int>();
366 int etamax = row[
"L1CIP_ETA_MAX"].data<
int>();
367 int priority = row[
"L1CIP_PRIORITY"].data<
int>();
371 if(pos!=(
unsigned int)isobit) {
372 TRG_MSG_ERROR(thrtype <<
" isolation bit " << isobit <<
" does not match the position it should have " << pos);
373 throw runtime_error(
"Isolation bit not matching");
375 data.setIsolation(thrtype, pos,
IsolationParam( thrtype, isobit, offset, slope, mincut, upperlimit, etamin, etamax, priority ));