25 #include "CoralBase/Exception.h"
26 #include "CoralBase/AttributeList.h"
27 #include "CoralBase/Attribute.h"
28 #include "CoralBase/AttributeSpecification.h"
29 #include "CoralBase/Exception.h"
30 #include "RelationalAccess/ISessionProxy.h"
31 #include "RelationalAccess/ITransaction.h"
32 #include "RelationalAccess/AccessMode.h"
33 #include "RelationalAccess/ITypeConverter.h"
34 #include "RelationalAccess/IQuery.h"
35 #include "RelationalAccess/ICursor.h"
36 #include "RelationalAccess/ISchema.h"
37 #include "RelationalAccess/ITable.h"
53 #include <boost/foreach.hpp>
54 #include <boost/tokenizer.hpp>
55 #include <xercesc/dom/DOM.hpp>
56 #include <xercesc/parsers/XercesDOMParser.hpp>
58 #include <xercesc/util/XMLString.hpp>
60 #include "boost/filesystem/path.hpp"
61 #include "boost/filesystem/operations.hpp"
66 findingRecord<DIPLuminosityRcd>();
76 if(currentls==0||currentls==4294967295){
77 return std::make_shared<DIPLumiSummary>();
87 return std::make_shared<DIPLumiSummary>();
90 std::vector<unsigned int>
v;
92 v.push_back(it->first);
99 return std::make_shared<DIPLumiSummary>();
108 if(currentls==0||currentls==4294967295){
109 return std::make_shared<DIPLumiDetail>();
119 return std::make_shared<DIPLumiDetail>();
122 std::vector<unsigned int>
v;
124 v.push_back(it->first);
131 return std::make_shared<DIPLumiDetail>();
160 throw cms::Exception(
"Non existing service lumi::service::DBService");
163 coral::ITypeConverter& tconverter=session->typeConverter();
167 unsigned int lsmin=1;
168 unsigned int lsmax=currentlsnum;
170 session->transaction().start(
true);
171 coral::ISchema&
schema=session->nominalSchema();
173 if(maxavailableLS!=0 && maxavailableLS<currentlsnum){
174 lsmax=maxavailableLS;
175 }
else if(maxavailableLS==0){
177 session->transaction().commit();
185 coral::AttributeList lumisummaryBindVariables;
186 lumisummaryBindVariables.extend(
"lsmin",
typeid(
unsigned int));
187 lumisummaryBindVariables.extend(
"lsmax",
typeid(
unsigned int));
188 lumisummaryBindVariables.extend(
"runnumber",
typeid(
unsigned int));
190 lumisummaryBindVariables[
"lsmin"].data<
unsigned int>()=lsmin;
191 lumisummaryBindVariables[
"lsmax"].data<
unsigned int>()=lsmax;
192 std::string conditionStr(
"RUNNUMBER=:runnumber AND LUMISECTION>=:lsmin AND LUMISECTION<=:lsmax");
193 coral::AttributeList lumisummaryOutput;
194 lumisummaryOutput.extend(
"LUMISECTION",
typeid(
unsigned int));
195 lumisummaryOutput.extend(
"INSTLUMI",
typeid(
float));
196 lumisummaryOutput.extend(
"DELIVLUMISECTION",
typeid(
float));
197 lumisummaryOutput.extend(
"LIVELUMISECTION",
typeid(
float));
198 lumisummaryOutput.extend(
"CMS_ACTIVE",
typeid(
unsigned short));
199 coral::IQuery* lumisummaryQuery=schema.newQuery();
200 lumisummaryQuery->addToTableList(
std::string(
"LUMI_SECTIONS"));
201 lumisummaryQuery->addToOutputList(
"LUMISECTION");
202 lumisummaryQuery->addToOutputList(
"INSTLUMI");
203 lumisummaryQuery->addToOutputList(
"DELIVLUMISECTION");
204 lumisummaryQuery->addToOutputList(
"LIVELUMISECTION");
205 lumisummaryQuery->addToOutputList(
"CMS_ACTIVE");
206 lumisummaryQuery->setCondition(conditionStr,lumisummaryBindVariables);
207 lumisummaryQuery->defineOutput(lumisummaryOutput);
208 coral::ICursor& lumisummarycursor=lumisummaryQuery->execute();
209 while( lumisummarycursor.next() ){
210 const coral::AttributeList& row=lumisummarycursor.currentRow();
211 unsigned int lsnum=row[
"LUMISECTION"].data<
unsigned int>();
213 if(!row[
"INSTLUMI"].isNull()){
214 instlumi=row[
"INSTLUMI"].data<
float>();
216 float intgdellumi=0.0;
217 if(!row[
"DELIVLUMISECTION"].isNull()){
218 intgdellumi=row[
"DELIVLUMISECTION"].data<
float>()*1000.0;
220 float intgreclumi=0.0;
221 if(!row[
"LIVELUMISECTION"].isNull()){
222 intgreclumi=row[
"LIVELUMISECTION"].data<
float>()*1000.0;
224 unsigned short cmsalive=0;
225 if(!row[
"CMS_ACTIVE"].isNull()){
226 cmsalive=row[
"CMS_ACTIVE"].data<
unsigned short>();
228 auto tmpls = std::make_shared<DIPLumiSummary>(instlumi,intgdellumi,intgreclumi,cmsalive);
233 delete lumisummaryQuery;
234 session->transaction().commit();
236 session->transaction().rollback();
248 coral::AttributeList bindVariables;
249 bindVariables.extend(
"runnumber",
typeid(
unsigned int));
250 bindVariables[
"runnumber"].data<
unsigned int>()=runnumber;
252 coral::AttributeList MyOutput;
253 MyOutput.extend(
"maxavailablels",
typeid(
unsigned int));
254 coral::IQuery*
myQuery=schema.newQuery();
255 myQuery->addToTableList(tablename);
256 myQuery->addToOutputList(
"max(LUMISECTION)",
"maxavailablels");
257 myQuery->setCondition(conditionStr,bindVariables);
258 myQuery->defineOutput(MyOutput);
259 coral::ICursor& mycursor=myQuery->execute();
260 while( mycursor.next() ){
261 const coral::AttributeList& row=mycursor.currentRow();
262 if(!row[
"maxavailablels"].isNull()){
263 result=row[
"maxavailablels"].data<
unsigned int>();
279 throw cms::Exception(
"Non existing service lumi::service::DBService");
282 coral::ITypeConverter& tconverter=session->typeConverter();
285 unsigned int lsmin=1;
286 unsigned int lsmax=currentlsnum;
288 session->transaction().start(
true);
289 coral::ISchema&
schema=session->nominalSchema();
291 if(maxavailableLS!=0 &&maxavailableLS<currentlsnum ){
292 lsmax=maxavailableLS;
293 }
else if(maxavailableLS==0){
295 session->transaction().commit();
302 coral::AttributeList lumidetailBindVariables;
303 lumidetailBindVariables.extend(
"lsmin",
typeid(
unsigned int));
304 lumidetailBindVariables.extend(
"lsmax",
typeid(
unsigned int));
305 lumidetailBindVariables.extend(
"runnumber",
typeid(
unsigned int));
307 lumidetailBindVariables[
"lsmin"].data<
unsigned int>()=lsmin;
308 lumidetailBindVariables[
"lsmax"].data<
unsigned int>()=lsmax;
309 std::string conditionStr(
"RUNNUMBER=:runnumber AND LUMISECTION>=:lsmin AND LUMISECTION<=:lsmax AND BUNCHLUMI>0 ");
310 coral::AttributeList lumidetailOutput;
311 lumidetailOutput.extend(
"LUMISECTION",
typeid(
unsigned int));
312 lumidetailOutput.extend(
"BUNCH",
typeid(
unsigned int));
313 lumidetailOutput.extend(
"BUNCHLUMI",
typeid(
float));
314 coral::IQuery* lumidetailQuery=schema.newQuery();
315 lumidetailQuery->addToTableList(
std::string(
"BUNCH_LUMI_SECTIONS"));
316 lumidetailQuery->addToOutputList(
"LUMISECTION");
317 lumidetailQuery->addToOutputList(
"BUNCH");
318 lumidetailQuery->addToOutputList(
"BUNCHLUMI");
319 lumidetailQuery->setCondition(conditionStr,lumidetailBindVariables);
320 lumidetailQuery->defineOutput(lumidetailOutput);
321 coral::ICursor& lumidetailcursor=lumidetailQuery->execute();
322 while( lumidetailcursor.next() ){
323 const coral::AttributeList& row=lumidetailcursor.currentRow();
324 unsigned int lsnum=row[
"LUMISECTION"].data<
unsigned int>();
326 m_detailcache.insert(std::make_pair(lsnum,std::make_shared<DIPLumiDetail>()));
329 if(!row[
"BUNCH"].isNull()){
330 unsigned int bxidx=row[
"BUNCH"].data<
unsigned int>();
332 if(!row[
"BUNCHLUMI"].isNull()){
333 bxlumi=row[
"BUNCHLUMI"].data<
float>();
338 delete lumidetailQuery;
339 session->transaction().commit();
341 session->transaction().rollback();
void setFirst(const IOVSyncValue &iTime)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
unsigned int m_detailcachedrun
const EventID & eventID() const
DIPLumiProducer(const edm::ParameterSet &)
std::shared_ptr< DIPLumiSummary > ReturnSummaryType
ReturnDetailType produceDetail(const DIPLuminosityRcd &)
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
std::shared_ptr< DIPLumiSummary > m_summaryresult
virtual void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &)
LuminosityBlockNumber_t luminosityBlockNumber() const
std::shared_ptr< DIPLumiDetail > m_detailresult
void disconnect(coral::ISessionProxy *session)
void setLast(const IOVSyncValue &iTime)
std::map< unsigned int, std::shared_ptr< DIPLumiSummary > > m_summarycache
unsigned int m_summarycachedrun
std::shared_ptr< DIPLumiDetail > ReturnDetailType
#define DEFINE_FWK_EVENTSETUP_SOURCE(type)
unsigned int maxavailableLSforRun(coral::ISchema &schema, const std::string &tablename, unsigned int runnumber)
void filldetailcache(unsigned int runnumber, unsigned int startlsnum)
const edm::IOVSyncValue * m_pcurrentTime
coral::ISessionProxy * connectReadOnly(const std::string &connectstring)
std::map< unsigned int, std::shared_ptr< DIPLumiDetail > > m_detailcache
void fillsummarycache(unsigned int runnumber, unsigned int startlsnum)
ReturnSummaryType produceSummary(const DIPLuminosityRcd &)