35 #include "CoralBase/Exception.h" 36 #include "CoralBase/AttributeList.h" 37 #include "CoralBase/Attribute.h" 38 #include "CoralBase/AttributeSpecification.h" 39 #include "CoralBase/Exception.h" 40 #include "CoralBase/Blob.h" 41 #include "RelationalAccess/ISessionProxy.h" 42 #include "RelationalAccess/ITransaction.h" 43 #include "RelationalAccess/AccessMode.h" 44 #include "RelationalAccess/ITypeConverter.h" 45 #include "RelationalAccess/IQuery.h" 46 #include "RelationalAccess/ICursor.h" 47 #include "RelationalAccess/ISchema.h" 48 #include "RelationalAccess/ITable.h" 64 #include <boost/tokenizer.hpp> 65 #include <xercesc/dom/DOM.hpp> 66 #include <xercesc/parsers/XercesDOMParser.hpp> 68 #include <xercesc/util/XMLString.hpp> 70 #include "boost/filesystem/path.hpp" 71 #include "boost/filesystem/operations.hpp" 81 edm::BeginLuminosityBlockProducer,
82 edm::EndRunProducer> {
140 void fillLSCache(
unsigned int luminum);
141 void writeProductsForEntry(
edm::
LuminosityBlock & iLBlock,
unsigned int runnumber,
unsigned int luminum);
142 const
std::
string servletTranslation(const
std::
string& servlet) const;
143 std::
string x2s(const XMLCh*
input)const;
144 XMLCh* s2x(const
std::
string&
input)const;
145 std::
string toParentString(const
xercesc::DOMNode &nodeToConvert)const;
146 unsigned long long getLumiDataId(const
coral::ISchema& schema,
unsigned int runnumber);
147 unsigned long long getTrgDataId(const
coral::ISchema& schema,
unsigned int runnumber);
148 unsigned long long getHltDataId(const
coral::ISchema& schema,
unsigned int runnumber);
149 std::
string getCurrentDataTag(const
coral::ISchema& schema);
151 std::
string m_lumiversion;
152 std::
string m_siteconfpath;
153 unsigned int m_cachedrun;
154 unsigned long long m_cachedlumidataid;
155 unsigned long long m_cachedtrgdataid;
156 unsigned long long m_cachedhltdataid;
160 unsigned int m_cachesize;
175 XMLCh* buff = xercesc::XMLString::transcode(temp.c_str());
181 std::ostringstream oss;
182 xercesc::DOMNodeList *childList = nodeToConvert.getChildNodes();
184 unsigned int numNodes = childList->getLength ();
185 for (
unsigned int i = 0;
i < numNodes; ++
i){
186 xercesc::DOMNode *childNode = childList->item(
i);
187 if (childNode->getNodeType() != xercesc::DOMNode::ELEMENT_NODE)
189 xercesc::DOMElement *
child = static_cast < xercesc::DOMElement *> (childNode);
190 xercesc::DOMNamedNodeMap *attributes = child->getAttributes();
191 unsigned int numAttributes = attributes->getLength ();
192 for (
unsigned int j = 0; j < numAttributes; ++j){
193 xercesc::DOMNode *attributeNode = attributes->item(j);
194 if (attributeNode->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
196 xercesc::DOMAttr *attribute = static_cast <xercesc::DOMAttr *> (attributeNode);
198 oss <<
"(" << x2s(child->getTagName()) <<
199 x2s(attribute->getName()) <<
"=" <<
200 x2s(attribute->getValue()) <<
")";
211 std::unique_ptr< xercesc::XercesDOMParser >
parser(
new xercesc::XercesDOMParser);
213 parser->setValidationScheme(xercesc::XercesDOMParser::Val_Auto);
214 parser->setDoNamespaces(
false);
215 parser->parse(m_siteconfpath.c_str());
216 xercesc::DOMDocument*
doc=parser->getDocument();
221 xercesc::DOMNodeList *frontierConnectList=doc->getElementsByTagName(s2x(
"frontier-connect"));
222 if (frontierConnectList->getLength()>0){
223 xercesc::DOMElement *frontierConnectElement=static_cast < xercesc::DOMElement *> (frontierConnectList->item (0));
224 frontierConnect = toParentString(*frontierConnectElement);
231 while ((serverurl=frontierConnect.find(
"(serverurl=", nextparen)) != std::string::npos){
232 realconnect.append(frontierConnect, nextparen, serverurl - nextparen);
233 nextparen=frontierConnect.find(
')', serverurl);
234 lastslash=frontierConnect.rfind(
'/', nextparen);
235 realconnect.append(frontierConnect,serverurl,lastslash-serverurl+1);
236 realconnect.append(servlet);
238 realconnect.append(frontierConnect, nextparen,frontierConnect.length()-nextparen);
239 }
catch(xercesc::DOMException &
e){
245 LumiProducer::LumiProducer(
const edm::ParameterSet& iConfig):m_cachedrun(0),m_isNullRun(
false),m_cachesize(0)
248 produces<LumiSummaryRunHeader, edm::Transition::EndRun>();
249 produces<LumiSummary, edm::Transition::BeginLuminosityBlock>();
250 produces<LumiDetails, edm::Transition::BeginLuminosityBlock>();
257 if(connectStr.substr(0,fproto.length())==fproto){
260 if(endservlet==std::string::npos){
261 endservlet=connectStr.rfind(
'/',connectStr.length());
263 std::string servlet=connectStr.substr(startservlet,endservlet-startservlet);
264 if( (!servlet.empty())&& (servlet.find_first_of(
":/)[]")==std::string::npos)){
265 if(servlet==
"cms_conditions_data") servlet=
"";
268 if(siteconfpath.length()==0){
270 char *
tmp = getenv (
"CMS_PATH");
281 m_connectStr=fproto+servletTranslation(servlet)+connectStr.substr(endservlet);
283 m_connectStr=connectStr;
286 m_connectStr=connectStr;
307 coral::AttributeList bindVariables;
308 bindVariables.extend(
"runnum",
typeid(
unsigned int));
309 bindVariables[
"runnum"].data<
unsigned int>()=runnumber;
310 coral::AttributeList lumiidOutput;
311 lumiidOutput.extend(
"lumidataid",
typeid(
unsigned long long));
312 coral::IQuery* lumiQuery=schema.newQuery();
314 lumiQuery->addToOutputList(
"MAX(DATA_ID)",
"lumidataid");
315 lumiQuery->setCondition(
"RUNNUM=:runnum",bindVariables);
316 lumiQuery->defineOutput(lumiidOutput);
317 coral::ICursor& lumicursor=lumiQuery->execute();
318 while( lumicursor.next() ){
319 const coral::AttributeList& row=lumicursor.currentRow();
320 if(!row[
"lumidataid"].isNull()){
321 lumidataid=row[
"lumidataid"].data<
unsigned long long>();
333 coral::AttributeList bindVariables;
334 bindVariables.extend(
"runnum",
typeid(
unsigned int));
335 bindVariables[
"runnum"].data<
unsigned int>()=runnumber;
336 coral::AttributeList trgidOutput;
337 trgidOutput.extend(
"trgdataid",
typeid(
unsigned long long));
338 coral::IQuery* trgQuery=schema.newQuery();
340 trgQuery->addToOutputList(
"MAX(DATA_ID)",
"trgdataid");
341 trgQuery->setCondition(
"RUNNUM=:runnum",bindVariables);
342 trgQuery->defineOutput(trgidOutput);
343 coral::ICursor& trgcursor=trgQuery->execute();
344 while( trgcursor.next() ){
345 const coral::AttributeList& row=trgcursor.currentRow();
346 if(!row[
"trgdataid"].isNull()){
347 trgdataid=row[
"trgdataid"].data<
unsigned long long>();
359 coral::AttributeList bindVariables;
360 bindVariables.extend(
"runnum",
typeid(
unsigned int));
361 bindVariables[
"runnum"].data<
unsigned int>()=runnumber;
362 coral::AttributeList hltidOutput;
363 hltidOutput.extend(
"hltdataid",
typeid(
unsigned long long));
364 coral::IQuery* hltQuery=schema.newQuery();
366 hltQuery->addToOutputList(
"MAX(DATA_ID)",
"hltdataid");
367 hltQuery->setCondition(
"RUNNUM=:runnum",bindVariables);
368 hltQuery->defineOutput(hltidOutput);
369 coral::ICursor& hltcursor=hltQuery->execute();
370 while( hltcursor.next() ){
371 const coral::AttributeList& row=hltcursor.currentRow();
372 if(!row[
"hltdataid"].isNull()){
373 hltdataid=row[
"hltdataid"].data<
unsigned long long>();
384 std::map<unsigned long long,std::string>
alltags;
385 coral::IQuery* tagQuery=schema.newQuery();
387 tagQuery->addToOutputList(
"TAGID");
388 tagQuery->addToOutputList(
"TAGNAME");
389 coral::AttributeList tagoutput;
390 tagoutput.extend(
"TAGID",
typeid(
unsigned long long));
392 tagQuery->defineOutput(tagoutput);
393 coral::ICursor& tagcursor=tagQuery->execute();
394 while( tagcursor.next() ){
395 const coral::AttributeList& row=tagcursor.currentRow();
396 unsigned long long tagid=row[
"TAGID"].data<
unsigned long long>();
398 alltags.insert(std::make_pair(tagid,tagname));
401 unsigned long long maxid=0;
402 for(std::map<unsigned long long,std::string>::iterator it = alltags.begin(); it !=alltags.end(); ++it) {
403 if( it->first > maxid){
407 result=alltags[maxid];
415 if(m_cachedrun!=runnumber){
420 throw cms::Exception(
"Non existing service lumi::service::DBService");
424 session->transaction().start(
true);
426 if(m_cachedlumidataid!=0){
433 session->transaction().commit();
435 session->transaction().rollback();
449 iLBlock.
put(std::make_unique<LumiSummary>());
450 iLBlock.
put(std::make_unique<LumiDetails>());
453 if(m_lscache.find(luminum)==m_lscache.end()){
455 fillLSCache(luminum);
458 writeProductsForEntry(iLBlock,runnumber,luminum);
466 auto lsrh = std::make_unique<LumiSummaryRunHeader>();
467 lsrh->swapL1Names(m_runcache.TRGBitNames);
468 lsrh->swapHLTNames(m_runcache.HLTPathNames);
470 m_runcache.TRGBitNameToIndex.clear();
471 m_runcache.HLTPathNameToIndex.clear();
475 if(m_lumiversion.empty()){
476 m_lumiversion=getCurrentDataTag(schema);
478 std::cout<<
"lumi tag version 2 "<<m_lumiversion<<std::endl;
479 if(m_cachedtrgdataid!=0){
480 coral::AttributeList trgBindVariables;
481 trgBindVariables.extend(
"trgdataid",
typeid(
unsigned long long));
482 trgBindVariables[
"trgdataid"].data<
unsigned long long>()=m_cachedtrgdataid;
484 coral::AttributeList trgOutput;
485 trgOutput.extend(
"bitzeroname",
typeid(
std::string));
486 trgOutput.extend(
"bitnameclob",
typeid(
std::string));
487 coral::IQuery* trgQuery=schema.newQuery();
489 trgQuery->addToOutputList(
"BITZERONAME");
490 trgQuery->addToOutputList(
"BITNAMECLOB");
491 trgQuery->setCondition(
"DATA_ID=:trgdataid",trgBindVariables);
492 trgQuery->defineOutput(trgOutput);
493 coral::ICursor& trgcursor=trgQuery->execute();
494 while( trgcursor.next() ){
495 const coral::AttributeList& row=trgcursor.currentRow();
496 m_runcache.bitzeroname=row[
"bitzeroname"].data<
std::string>();
499 boost::char_separator<char> sep(
",");
500 boost::tokenizer<boost::char_separator<char> > tokens(bitnames,sep);
501 for(boost::tokenizer<boost::char_separator<char> >::iterator tok_it=tokens.begin();tok_it!=tokens.end();++tok_it){
502 m_runcache.TRGBitNames.push_back(*tok_it);
504 for(
unsigned int i=0;
i<m_runcache.TRGBitNames.size();++
i){
505 m_runcache.TRGBitNameToIndex.insert(std::make_pair(m_runcache.TRGBitNames.at(
i),
i) );
510 if(m_cachedhltdataid!=0){
514 coral::AttributeList hltBindVariables;
515 hltBindVariables.extend(
"hltdataid",
typeid(
unsigned long long));
516 hltBindVariables[
"hltdataid"].data<
unsigned long long>()=m_cachedhltdataid;
517 coral::AttributeList hltOutput;
518 hltOutput.extend(
"PATHNAMECLOB",
typeid(
std::string));
519 coral::IQuery* hltQuery=schema.newQuery();
521 hltQuery->addToOutputList(
"PATHNAMECLOB");
522 hltQuery->setCondition(
"DATA_ID=:hltdataid",hltBindVariables);
523 hltQuery->defineOutput(hltOutput);
524 coral::ICursor& hltcursor=hltQuery->execute();
525 while( hltcursor.next() ){
526 const coral::AttributeList& row=hltcursor.currentRow();
528 boost::char_separator<char> sep(
",");
529 boost::tokenizer<boost::char_separator<char> > tokens(pathnames,sep);
530 for(boost::tokenizer<boost::char_separator<char> >::iterator tok_it=tokens.begin();tok_it!=tokens.end();++tok_it){
531 m_runcache.HLTPathNames.push_back(*tok_it);
533 for(
unsigned int i=0;
i<m_runcache.HLTPathNames.size();++
i){
534 m_runcache.HLTPathNameToIndex.insert(std::make_pair(m_runcache.HLTPathNames.at(
i),
i));
543 if(m_isNullRun)
return;
545 for(
unsigned int n=luminum;
n<luminum+m_cachesize;++
n){
554 m_lscache.insert(std::make_pair(
n,l));
562 throw cms::Exception(
"Non existing service lumi::service::DBService");
566 session->transaction().start(
true);
568 coral::AttributeList lumisummaryBindVariables;
569 lumisummaryBindVariables.extend(
"lsmin",
typeid(
unsigned int));
570 lumisummaryBindVariables.extend(
"lsmax",
typeid(
unsigned int));
571 lumisummaryBindVariables.extend(
"lumidataid",
typeid(
unsigned long long));
572 lumisummaryBindVariables[
"lumidataid"].data<
unsigned long long>()=m_cachedlumidataid;
573 lumisummaryBindVariables[
"lsmin"].data<
unsigned int>()=luminum;
574 lumisummaryBindVariables[
"lsmax"].data<
unsigned int>()=luminum+m_cachesize;
575 coral::AttributeList lumisummaryOutput;
576 lumisummaryOutput.extend(
"CMSLSNUM",
typeid(
unsigned int));
577 lumisummaryOutput.extend(
"INSTLUMI",
typeid(
float));
578 lumisummaryOutput.extend(
"STARTORBIT",
typeid(
unsigned int));
579 lumisummaryOutput.extend(
"NUMORBIT",
typeid(
unsigned int));
580 lumisummaryOutput.extend(
"CMSBXINDEXBLOB",
typeid(coral::Blob));
581 lumisummaryOutput.extend(
"BEAMINTENSITYBLOB_1",
typeid(coral::Blob));
582 lumisummaryOutput.extend(
"BEAMINTENSITYBLOB_2",
typeid(coral::Blob));
583 lumisummaryOutput.extend(
"BXLUMIVALUE_OCC1",
typeid(coral::Blob));
584 lumisummaryOutput.extend(
"BXLUMIVALUE_OCC2",
typeid(coral::Blob));
585 lumisummaryOutput.extend(
"BXLUMIVALUE_ET",
typeid(coral::Blob));
586 coral::IQuery* lumisummaryQuery=schema.newQuery();
588 lumisummaryQuery->addToOutputList(
"CMSLSNUM");
589 lumisummaryQuery->addToOutputList(
"INSTLUMI");
590 lumisummaryQuery->addToOutputList(
"STARTORBIT");
591 lumisummaryQuery->addToOutputList(
"NUMORBIT");
592 lumisummaryQuery->addToOutputList(
"CMSBXINDEXBLOB");
593 lumisummaryQuery->addToOutputList(
"BEAMINTENSITYBLOB_1");
594 lumisummaryQuery->addToOutputList(
"BEAMINTENSITYBLOB_2");
595 lumisummaryQuery->addToOutputList(
"BXLUMIVALUE_OCC1");
596 lumisummaryQuery->addToOutputList(
"BXLUMIVALUE_OCC2");
597 lumisummaryQuery->addToOutputList(
"BXLUMIVALUE_ET");
598 lumisummaryQuery->setCondition(
"CMSLSNUM>=:lsmin AND CMSLSNUM<:lsmax AND DATA_ID=:lumidataid",lumisummaryBindVariables);
599 lumisummaryQuery->defineOutput(lumisummaryOutput);
600 coral::ICursor& lumisummarycursor=lumisummaryQuery->execute();
601 unsigned int rowcounter=0;
602 while( lumisummarycursor.next() ){
603 const coral::AttributeList& row=lumisummarycursor.currentRow();
604 unsigned int cmslsnum=row[
"CMSLSNUM"].data<
unsigned int>();
607 lsdata.
lumivalue=row[
"INSTLUMI"].data<
float>();
608 lsdata.lumierror=0.0;
609 lsdata.lumiquality=0;
610 lsdata.startorbit=row[
"STARTORBIT"].data<
unsigned int>();
611 lsdata.numorbit=row[
"NUMORBIT"].data<
unsigned int>();
613 if(!row[
"CMSBXINDEXBLOB"].isNull() && !row[
"BXLUMIVALUE_OCC1"].isNull() ){
614 const coral::Blob& bxindexBlob=row[
"CMSBXINDEXBLOB"].data<coral::Blob>();
615 const void* bxindex_StartAddress=bxindexBlob.startingAddress();
616 short* bxindex=(
short*)::malloc(bxindexBlob.size());
617 const coral::Blob& beam1intensityBlob=row[
"BEAMINTENSITYBLOB_1"].data<coral::Blob>();
618 const void* beam1intensityBlob_StartAddress=beam1intensityBlob.startingAddress();
619 float* beam1intensity=(
float*)::malloc(beam1intensityBlob.size());
620 const coral::Blob& beam2intensityBlob=row[
"BEAMINTENSITYBLOB_2"].data<coral::Blob>();
621 const void* beam2intensityBlob_StartAddress=beam2intensityBlob.startingAddress();
622 float* beam2intensity=(
float*)::malloc(beam2intensityBlob.size());
623 std::memmove(bxindex,bxindex_StartAddress,bxindexBlob.size());
624 std::memmove(beam1intensity,beam1intensityBlob_StartAddress,beam1intensityBlob.size());
625 std::memmove(beam2intensity,beam2intensityBlob_StartAddress,beam2intensityBlob.size());
627 unsigned int iMax = bxindexBlob.size()/
sizeof(short);
628 unsigned int lsb1Max = lsdata.beam1intensity.size();
629 unsigned int lsb2Max = lsdata.beam2intensity.size();
630 unsigned int ib1Max = beam1intensityBlob.size()/
sizeof(
float);
631 unsigned int ib2Max = beam2intensityBlob.size()/
sizeof(
float);
632 for(
unsigned int i=0;
i<iMax;++
i){
633 unsigned int idx=bxindex[
i];
634 if(ib1Max>
i && lsb1Max>idx){
635 lsdata.beam1intensity.at(idx)=beam1intensity[
i];
637 if(ib2Max>
i && lsb2Max>idx){
638 lsdata.beam2intensity.at(idx)=beam2intensity[
i];
642 ::free(beam1intensity);
643 ::free(beam2intensity);
645 const coral::Blob& bxlumivalBlob_occ1=row[
"BXLUMIVALUE_OCC1"].data<coral::Blob>();
646 const void* bxlumival_occ1_StartAddress=bxlumivalBlob_occ1.startingAddress();
647 float* bxlumival_occ1=(
float*)::malloc(bxlumivalBlob_occ1.size());
648 std::memmove(bxlumival_occ1,bxlumival_occ1_StartAddress,bxlumivalBlob_occ1.size());
649 std::vector<float> bxlumivalVec_occ1(bxlumival_occ1,bxlumival_occ1+bxlumivalBlob_occ1.size()/
sizeof(
float));
650 ::free(bxlumival_occ1);
651 lsdata.bunchlumivalue.push_back(std::make_pair(
std::string(
"OCC1"),bxlumivalVec_occ1));
652 lsdata.bunchlumierror.push_back(std::make_pair(
std::string(
"OCC1"),std::vector<float>(3564)));
653 lsdata.bunchlumiquality.push_back(std::make_pair(
std::string(
"OCC1"),std::vector<short>(3564)));
654 const coral::Blob& bxlumivalBlob_occ2=row[
"BXLUMIVALUE_OCC2"].data<coral::Blob>();
655 const void* bxlumival_occ2_StartAddress=bxlumivalBlob_occ2.startingAddress();
656 float* bxlumival_occ2=(
float*)::malloc(bxlumivalBlob_occ2.size());
657 std::memmove(bxlumival_occ2,bxlumival_occ2_StartAddress,bxlumivalBlob_occ2.size());
658 std::vector<float> bxlumivalVec_occ2(bxlumival_occ2,bxlumival_occ2+bxlumivalBlob_occ1.size()/
sizeof(
float));
659 ::free(bxlumival_occ2);
660 lsdata.bunchlumivalue.push_back(std::make_pair(
std::string(
"OCC2"),bxlumivalVec_occ2));
661 lsdata.bunchlumierror.push_back(std::make_pair(
std::string(
"OCC2"),std::vector<float>(3564)));
662 lsdata.bunchlumiquality.push_back(std::make_pair(
std::string(
"OCC2"),std::vector<short>(3564)));
664 const coral::Blob& bxlumivalBlob_et=row[
"BXLUMIVALUE_ET"].data<coral::Blob>();
665 const void* bxlumival_et_StartAddress=bxlumivalBlob_et.startingAddress();
666 float* bxlumival_et=(
float*)::malloc(bxlumivalBlob_et.size());
667 std::memmove(bxlumival_et,bxlumival_et_StartAddress,bxlumivalBlob_et.size());
668 std::vector<float> bxlumivalVec_et(bxlumival_et,bxlumival_et+bxlumivalBlob_et.size()/
sizeof(
float));
669 ::free(bxlumival_et);
670 lsdata.bunchlumivalue.push_back(std::make_pair(
std::string(
"ET"),bxlumivalVec_et));
671 lsdata.bunchlumierror.push_back(std::make_pair(
std::string(
"ET"),std::vector<float>(3564)));
672 lsdata.bunchlumiquality.push_back(std::make_pair(
std::string(
"ET"),std::vector<short>(3564)));
680 delete lumisummaryQuery;
685 coral::AttributeList trgBindVariables;
686 trgBindVariables.extend(
"lsmin",
typeid(
unsigned int));
687 trgBindVariables.extend(
"lsmax",
typeid(
unsigned int));
688 trgBindVariables.extend(
"trgdataid",
typeid(
unsigned long long));
689 trgBindVariables[
"lsmin"].data<
unsigned int>()=luminum;
690 trgBindVariables[
"lsmax"].data<
unsigned int>()=luminum+m_cachesize;
691 trgBindVariables[
"trgdataid"].data<
unsigned long long>()=m_cachedtrgdataid;
692 coral::AttributeList trgOutput;
693 trgOutput.extend(
"CMSLSNUM",
typeid(
unsigned int));
694 trgOutput.extend(
"DEADTIMECOUNT",
typeid(
unsigned long long));
695 trgOutput.extend(
"BITZEROCOUNT",
typeid(
unsigned int));
696 trgOutput.extend(
"BITZEROPRESCALE",
typeid(
unsigned int));
697 trgOutput.extend(
"PRESCALEBLOB",
typeid(coral::Blob));
698 trgOutput.extend(
"TRGCOUNTBLOB",
typeid(coral::Blob));
700 coral::IQuery* trgQuery=schema.newQuery();
702 trgQuery->addToOutputList(
"CMSLSNUM");
703 trgQuery->addToOutputList(
"DEADTIMECOUNT");
704 trgQuery->addToOutputList(
"BITZEROCOUNT");
705 trgQuery->addToOutputList(
"BITZEROPRESCALE");
706 trgQuery->addToOutputList(
"PRESCALEBLOB");
707 trgQuery->addToOutputList(
"TRGCOUNTBLOB");
708 trgQuery->setCondition(
"CMSLSNUM>=:lsmin AND CMSLSNUM<:lsmax AND DATA_ID=:trgdataid",trgBindVariables);
709 trgQuery->defineOutput(trgOutput);
710 coral::ICursor& trgcursor=trgQuery->execute();
711 while( trgcursor.next() ){
712 const coral::AttributeList& row=trgcursor.currentRow();
713 unsigned int cmslsnum=row[
"CMSLSNUM"].data<
unsigned int>();
715 lsdata.
deadcount=row[
"DEADTIMECOUNT"].data<
unsigned long long>();
716 lsdata.bitzerocount=row[
"BITZEROCOUNT"].data<
unsigned int>();
717 lsdata.bitzeroprescale=row[
"BITZEROPRESCALE"].data<
unsigned int>();
718 if(!row[
"PRESCALEBLOB"].isNull()){
719 const coral::Blob& prescaleblob=row[
"PRESCALEBLOB"].data<coral::Blob>();
720 const void* prescaleblob_StartAddress=prescaleblob.startingAddress();
721 unsigned int* prescales=(
unsigned int*)::malloc(prescaleblob.size());
722 std::memmove(prescales,prescaleblob_StartAddress,prescaleblob.size());
723 const coral::Blob& trgcountblob=row[
"TRGCOUNTBLOB"].data<coral::Blob>();
724 const void* trgcountblob_StartAddress=trgcountblob.startingAddress();
725 unsigned int* trgcounts=(
unsigned int*)::malloc(trgcountblob.size());
726 std::memmove(trgcounts,trgcountblob_StartAddress,trgcountblob.size());
727 for(
unsigned int i=0;
i < trgcountblob.size()/
sizeof(
unsigned int); ++
i){
729 l1tmp.
bitname=m_runcache.TRGBitNames[
i];
732 lsdata.l1data.push_back(l1tmp);
742 coral::AttributeList hltBindVariables;
743 hltBindVariables.extend(
"lsmin",
typeid(
unsigned int));
744 hltBindVariables.extend(
"lsmax",
typeid(
unsigned int));
745 hltBindVariables.extend(
"hltdataid",
typeid(
unsigned long long));
746 hltBindVariables[
"lsmin"].data<
unsigned int>()=luminum;
747 hltBindVariables[
"lsmax"].data<
unsigned int>()=luminum+m_cachesize;
748 hltBindVariables[
"hltdataid"].data<
unsigned long long>()=m_cachedhltdataid;
749 coral::AttributeList hltOutput;
750 hltOutput.extend(
"CMSLSNUM",
typeid(
unsigned int));
751 hltOutput.extend(
"HLTCOUNTBLOB",
typeid(coral::Blob));
752 hltOutput.extend(
"HLTACCEPTBLOB",
typeid(coral::Blob));
753 hltOutput.extend(
"PRESCALEBLOB",
typeid(coral::Blob));
754 coral::IQuery* hltQuery=schema.newQuery();
756 hltQuery->addToOutputList(
"CMSLSNUM");
757 hltQuery->addToOutputList(
"HLTCOUNTBLOB");
758 hltQuery->addToOutputList(
"HLTACCEPTBLOB");
759 hltQuery->addToOutputList(
"PRESCALEBLOB");
760 hltQuery->setCondition(
"CMSLSNUM>=:lsmin AND CMSLSNUM<:lsmax AND DATA_ID=:hltdataid",hltBindVariables);
761 hltQuery->defineOutput(hltOutput);
762 coral::ICursor& hltcursor=hltQuery->execute();
763 while( hltcursor.next() ){
764 const coral::AttributeList& row=hltcursor.currentRow();
765 unsigned int cmslsnum=row[
"CMSLSNUM"].data<
unsigned int>();
767 if(!row[
"PRESCALEBLOB"].isNull()){
768 const coral::Blob& hltprescaleblob=row[
"PRESCALEBLOB"].data<coral::Blob>();
769 const void* hltprescaleblob_StartAddress=hltprescaleblob.startingAddress();
770 unsigned int* hltprescales=(
unsigned int*)::malloc(hltprescaleblob.size());
771 std::memmove(hltprescales,hltprescaleblob_StartAddress,hltprescaleblob.size());
772 const coral::Blob& hltcountblob=row[
"HLTCOUNTBLOB"].data<coral::Blob>();
773 const void* hltcountblob_StartAddress=hltcountblob.startingAddress();
774 unsigned int* hltcounts=(
unsigned int*)::malloc(hltcountblob.size());
775 std::memmove(hltcounts,hltcountblob_StartAddress,hltcountblob.size());
776 const coral::Blob& hltacceptblob=row[
"HLTACCEPTBLOB"].data<coral::Blob>();
777 const void* hltacceptblob_StartAddress=hltacceptblob.startingAddress();
778 unsigned int* hltaccepts=(
unsigned int*)::malloc(hltacceptblob.size());
779 std::memmove(hltaccepts,hltacceptblob_StartAddress,hltacceptblob.size());
780 unsigned int nhltaccepts = hltacceptblob.size()/
sizeof(
unsigned int);
781 if(nhltaccepts > 0 && m_runcache.HLTPathNames.empty()){
783 <<
" hltaccepts, but the run chache is empty. hltdata will not be written";
787 for(
unsigned int i=0;
i < hltacceptblob.size()/
sizeof(
unsigned int); ++
i){
789 hlttmp.
pathname=m_runcache.HLTPathNames[
i];
793 lsdata.hltdata.push_back(hlttmp);
795 ::free(hltprescales);
801 session->transaction().commit();
803 session->transaction().rollback();
810 auto pIn1 = std::make_unique<LumiSummary>();
811 auto pIn2 = std::make_unique<LumiDetails>();
813 pIn1->setLumiVersion(
"-1");
814 pIn2->setLumiVersion(
"-1");
822 if(!lsdata.
l1data.empty()){
828 pIn1->setlsnumber(luminum);
830 std::vector<LumiSummary::L1> l1temp;
831 for(std::vector< L1Data >::iterator it=lsdata.
l1data.begin();it!=lsdata.
l1data.end();++it){
835 l1temp.push_back(trgtmp);
837 std::vector<LumiSummary::HLT> hlttemp;
838 for(std::vector< HLTData >::iterator it=lsdata.
hltdata.begin();it!=lsdata.
hltdata.end();++it){
840 hlttmp.
pathnameidx=m_runcache.HLTPathNameToIndex[it->pathname];;
842 hlttemp.push_back(hlttmp);
844 pIn1->swapL1Data(l1temp);
845 pIn1->swapHLTData(hlttemp);
846 pIn1->setLumiVersion(m_lumiversion);
850 if(algoname==
"OCC1"){
852 }
else if(algoname==
"OCC2"){
854 }
else if(algoname==
"ET"){
856 }
else if(algoname==
"PLT"){
860 pIn2->setLumiVersion(m_lumiversion);
void writeProductsForEntry(edm::LuminosityBlock &iLBlock, unsigned int runnumber, unsigned int luminum)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< std::pair< std::string, std::vector< float > > > bunchlumivalue
static const std::string trgdataTableName()
unsigned int bitzeroprescale
std::vector< float > beam1intensity
void produce(edm::Event &, const edm::EventSetup &) final
static const std::string lshltTableName()
XMLCh * s2x(const std::string &input) const
unsigned long long getLumiDataId(const coral::ISchema &schema, unsigned int runnumber)
ISessionProxyPtr connectReadOnly(const std::string &connectstring)
void beginLuminosityBlockProduce(edm::LuminosityBlock &iLBlock, edm::EventSetup const &iSetup) final
static const std::string lstrgTableName()
static std::string const input
LuminosityBlockNumber_t luminosityBlock() const
static const std::string hltdataTableName()
std::map< std::string, unsigned int > HLTPathNameToIndex
unsigned long long getHltDataId(const coral::ISchema &schema, unsigned int runnumber)
void beginRun(edm::Run const &, edm::EventSetup const &) final
#define DEFINE_FWK_MODULE(type)
void endRun(edm::Run const &, edm::EventSetup const &) final
std::string toParentString(const xercesc::DOMNode &nodeToConvert) const
std::vector< std::pair< std::string, std::vector< float > > > bunchlumierror
void put(std::unique_ptr< PROD > product)
Put a new product.
void fillLSCache(unsigned int luminum)
std::vector< HLTData > hltdata
static const std::string tagsTableName()
unsigned int bitzerocount
static const std::string lumidataTableName()
unsigned long long getTrgDataId(const coral::ISchema &schema, unsigned int runnumber)
std::vector< L1Data > l1data
void put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< std::string > TRGBitNames
static const std::string lumisummaryv2TableName()
unsigned long long deadcount
std::vector< std::vector< double > > tmp
std::string getCurrentDataTag(const coral::ISchema &schema)
void fillRunCache(const coral::ISchema &schema, unsigned int runnumber)
const std::string servletTranslation(const std::string &servlet) const
std::vector< std::string > HLTPathNames
std::vector< std::pair< std::string, std::vector< short > > > bunchlumiquality
std::map< std::string, unsigned int > TRGBitNameToIndex
void endRunProduce(edm::Run &, edm::EventSetup const &) final
std::vector< float > beam2intensity