194 throw cms::Exception(
"Non existing service lumi::service::DBService");
197 coral::ITypeConverter& tconverter = session->typeConverter();
201 unsigned int lsmin = 1;
202 unsigned int lsmax = currentlsnum;
204 session->transaction().start(
true);
205 coral::ISchema& schema = session->nominalSchema();
207 if (maxavailableLS != 0 && maxavailableLS < currentlsnum) {
208 lsmax = maxavailableLS;
209 }
else if (maxavailableLS == 0) {
211 session->transaction().commit();
219 n, PerLSData{.bunchlumivalue = {3564, 0.0}, .bunchlumierror = {3564, 0.0}, .bunchlumiquality = {3564, 0}}));
222 coral::AttributeList lumisummaryBindVariables;
223 lumisummaryBindVariables.extend(
"lsmin",
typeid(
unsigned int));
224 lumisummaryBindVariables.extend(
"runnumber",
typeid(
unsigned int));
225 lumisummaryBindVariables[
"runnumber"].data<
unsigned int>() =
m_cachedrun;
226 lumisummaryBindVariables[
"lsmin"].data<
unsigned int>() =
lsmin;
227 std::string conditionStr(
" RUNNUMBER=:runnumber AND LUMISECTION>=:lsmin ");
228 coral::AttributeList lumisummaryOutput;
229 lumisummaryOutput.extend(
"LUMISECTION",
typeid(
unsigned int));
230 lumisummaryOutput.extend(
"INSTLUMI",
typeid(
float));
231 lumisummaryOutput.extend(
"DELIVLUMISECTION",
typeid(
float));
232 lumisummaryOutput.extend(
"LIVELUMISECTION",
typeid(
float));
233 lumisummaryOutput.extend(
"STARTORBIT",
typeid(
unsigned long long));
235 lumisummaryBindVariables.extend(
"lsmax",
typeid(
unsigned int));
236 conditionStr = conditionStr +
"AND LUMISECTION<=:lsmax";
237 lumisummaryBindVariables[
"lsmax"].data<
unsigned int>() =
lsmax;
239 coral::IQuery* lumisummaryQuery = schema.newQuery();
240 lumisummaryQuery->addToTableList(
std::string(
"LUMI_SECTIONS"));
241 lumisummaryQuery->addToOutputList(
"LUMISECTION");
242 lumisummaryQuery->addToOutputList(
"INSTLUMI");
243 lumisummaryQuery->addToOutputList(
"DELIVLUMISECTION");
244 lumisummaryQuery->addToOutputList(
"LIVELUMISECTION");
245 lumisummaryQuery->addToOutputList(
"STARTORBIT");
246 lumisummaryQuery->setCondition(conditionStr, lumisummaryBindVariables);
247 lumisummaryQuery->defineOutput(lumisummaryOutput);
248 coral::ICursor& lumisummarycursor = lumisummaryQuery->execute();
249 unsigned int rowcounter = 0;
250 while (lumisummarycursor.next()) {
251 const coral::AttributeList& row = lumisummarycursor.currentRow();
252 unsigned int lsnum = row[
"LUMISECTION"].data<
unsigned int>();
253 float instlumi = 0.0;
254 if (!row[
"INSTLUMI"].isNull()) {
255 instlumi = row[
"INSTLUMI"].data<
float>();
257 float deadfrac = 1.0;
258 float intgdellumi = 0.0;
259 float intgreclumi = 0.0;
260 unsigned long long startorbit = 0;
261 if (!row[
"DELIVLUMISECTION"].isNull()) {
262 intgdellumi = row[
"DELIVLUMISECTION"].data<
float>() * 1000.0;
264 if (!row[
"LIVELUMISECTION"].isNull()) {
265 intgreclumi = row[
"LIVELUMISECTION"].data<
float>() * 1000.0;
267 if (intgdellumi > 0) {
268 deadfrac = 1.0 - intgreclumi / intgdellumi;
270 if (!row[
"STARTORBIT"].isNull()) {
271 startorbit = row[
"STARTORBIT"].data<
unsigned long long>();
273 unsigned long long deadcount = deadfrac * 10000.0;
274 unsigned long long bitzerocount = 10000.0;
276 lsdata.lsnum = lsnum;
277 lsdata.lumivalue = instlumi;
278 lsdata.deadcount = deadcount;
279 lsdata.bitzerocount = bitzerocount;
280 lsdata.startorbit = startorbit;
281 lsdata.numorbit = 262144;
284 if (rowcounter == 0) {
287 delete lumisummaryQuery;
295 coral::AttributeList lumidetailBindVariables;
296 lumidetailBindVariables.extend(
"lsmin",
typeid(
unsigned int));
297 lumidetailBindVariables.extend(
"runnumber",
typeid(
unsigned int));
298 lumidetailBindVariables[
"runnumber"].data<
unsigned int>() =
m_cachedrun;
299 lumidetailBindVariables[
"lsmin"].data<
unsigned int>() =
lsmin;
300 std::string detailconditionStr(
" RUNNUMBER=:runnumber AND LUMISECTION>=:lsmin AND BUNCHLUMI>0 ");
301 coral::AttributeList lumidetailOutput;
302 lumidetailOutput.extend(
"LUMISECTION",
typeid(
unsigned int));
303 lumidetailOutput.extend(
"BUNCH",
typeid(
unsigned int));
304 lumidetailOutput.extend(
"BUNCHLUMI",
typeid(
float));
306 lumidetailBindVariables.extend(
"lsmax",
typeid(
unsigned int));
307 detailconditionStr = detailconditionStr +
"AND LUMISECTION<=:lsmax";
308 lumidetailBindVariables[
"lsmax"].data<
unsigned int>() =
lsmax;
310 coral::IQuery* lumidetailQuery = schema.newQuery();
311 lumidetailQuery->addToTableList(
std::string(
"BUNCH_LUMI_SECTIONS"));
312 lumidetailQuery->addToOutputList(
"LUMISECTION");
313 lumidetailQuery->addToOutputList(
"BUNCH");
314 lumidetailQuery->addToOutputList(
"BUNCHLUMI");
315 lumidetailQuery->setCondition(detailconditionStr, lumidetailBindVariables);
316 lumidetailQuery->defineOutput(lumidetailOutput);
317 coral::ICursor& lumidetailcursor = lumidetailQuery->execute();
318 while (lumidetailcursor.next()) {
319 const coral::AttributeList& row = lumidetailcursor.currentRow();
320 unsigned int lsnum = row[
"LUMISECTION"].data<
unsigned int>();
321 unsigned int bxidx = row[
"BUNCH"].data<
unsigned int>();
322 float bxlumi = row[
"BUNCHLUMI"].data<
float>();
323 m_lscache[lsnum].bunchlumivalue[bxidx] = bxlumi;
325 delete lumidetailQuery;
326 session->transaction().commit();
328 session->transaction().rollback();
ISessionProxyPtr connectReadOnly(const std::string &connectstring)
unsigned int maxavailableLSforRun(coral::ISchema &schema, const std::string &tablename, unsigned int runnumber)
std::map< unsigned int, PerLSData > m_lscache