24 #include "CoralBase/Exception.h" 25 #include "CoralBase/AttributeList.h" 26 #include "CoralBase/Attribute.h" 27 #include "CoralBase/AttributeSpecification.h" 28 #include "CoralBase/Exception.h" 29 #include "CoralKernel/Context.h" 30 #include "RelationalAccess/IAuthenticationService.h" 31 #include "RelationalAccess/ConnectionService.h" 32 #include "CoralBase/Exception.h" 33 #include "RelationalAccess/ISessionProxy.h" 34 #include "RelationalAccess/ITransaction.h" 35 #include "RelationalAccess/AccessMode.h" 36 #include "RelationalAccess/ITypeConverter.h" 37 #include "RelationalAccess/IQuery.h" 38 #include "RelationalAccess/ICursor.h" 39 #include "RelationalAccess/ISchema.h" 40 #include "RelationalAccess/ITable.h" 41 #include "CoralKernel/IPropertyManager.h" 42 #include "RelationalAccess/AuthenticationServiceException.h" 59 #include <boost/tokenizer.hpp> 60 #include <xercesc/dom/DOM.hpp> 61 #include <xercesc/parsers/XercesDOMParser.hpp> 63 #include <xercesc/util/XMLString.hpp> 64 #include <boost/filesystem.hpp> 65 #include "boost/filesystem/path.hpp" 66 #include "boost/filesystem/operations.hpp" 75 XMLCh* buff = xercesc::XMLString::transcode(temp.c_str());
81 std::ostringstream oss;
82 xercesc::DOMNodeList *childList = nodeToConvert.getChildNodes();
84 unsigned int numNodes = childList->getLength ();
85 for (
unsigned int i = 0;
i < numNodes; ++
i){
86 xercesc::DOMNode *childNode = childList->item(
i);
87 if (childNode->getNodeType() != xercesc::DOMNode::ELEMENT_NODE)
89 xercesc::DOMElement *
child = static_cast < xercesc::DOMElement *> (childNode);
90 xercesc::DOMNamedNodeMap *attributes = child->getAttributes();
91 unsigned int numAttributes = attributes->getLength ();
92 for (
unsigned int j = 0; j < numAttributes; ++j){
93 xercesc::DOMNode *attributeNode = attributes->item(j);
94 if (attributeNode->getNodeType() != xercesc::DOMNode::ATTRIBUTE_NODE)
96 xercesc::DOMAttr *attribute = static_cast <xercesc::DOMAttr *> (attributeNode);
98 oss <<
"(" <<
x2s(child->getTagName()) <<
99 x2s(attribute->getName()) <<
"=" <<
100 x2s(attribute->getValue()) <<
")";
111 std::unique_ptr< xercesc::XercesDOMParser >
parser(
new xercesc::XercesDOMParser);
113 parser->setValidationScheme(xercesc::XercesDOMParser::Val_Auto);
114 parser->setDoNamespaces(
false);
116 xercesc::DOMDocument*
doc=parser->getDocument();
121 xercesc::DOMNodeList *frontierConnectList=doc->getElementsByTagName(
s2x(
"frontier-connect"));
122 if (frontierConnectList->getLength()>0){
123 xercesc::DOMElement *frontierConnectElement=static_cast < xercesc::DOMElement *> (frontierConnectList->item (0));
131 while ((serverurl=frontierConnect.find(
"(serverurl=", nextparen)) != std::string::npos){
132 realconnect.append(frontierConnect, nextparen, serverurl - nextparen);
133 nextparen=frontierConnect.find(
')', serverurl);
134 lastslash=frontierConnect.rfind(
'/', nextparen);
135 realconnect.append(frontierConnect,serverurl,lastslash-serverurl+1);
136 realconnect.append(servlet);
138 realconnect.append(frontierConnect, nextparen,frontierConnect.length()-nextparen);
139 }
catch(xercesc::DOMException &
e){
150 if(endservlet==std::string::npos){
151 endservlet=connectStr.rfind(
'/',connectStr.length());
153 std::string servlet=connectStr.substr(startservlet,endservlet-startservlet);
154 if( (!servlet.empty())&& (servlet.find_first_of(
":/)[]")==std::string::npos)){
155 if(servlet==
"cms_conditions_data") servlet=
"";
158 char *
tmp = getenv (
"CMS_PATH");
175 findingRecord<LumiCorrectionParamRcd>();
178 if(iConfig.
exists(
"globaltag")){
187 if(connectStr.substr(0,fproto.length())==fproto){
189 }
else if(connectStr.substr(0,11)==
"sqlite_file"){
195 if(boost::filesystem::is_directory(boostAuthPath)){
206 if(currentrun==0||currentrun==4294967295){
207 return std::make_shared<const LumiCorrectionParam>();
217 return std::make_shared<const LumiCorrectionParam>();
220 if(m_paramresult.get()==
nullptr){
221 return std::make_shared<const LumiCorrectionParam>();
248 coral::IHandle<coral::IAuthenticationService> authSvc=
coral::Context::instance().query<coral::IAuthenticationService>();
249 if( authSvc.isValid() ){
252 }
catch(
const coral::UnknownConnectionException& er){
259 coral::ConnectionService* mydbservice=
new coral::ConnectionService;
261 coral::ISessionProxy* gsession=mydbservice->connect(
m_connectStr,coral::ReadOnly);
262 gsession->transaction().start(
true);
264 gsession->transaction().commit();
268 coral::ITypeConverter& tconverter=session->typeConverter();
274 session->transaction().start(
true);
275 coral::ISchema&
schema=session->nominalSchema();
277 unsigned long long tagid=0;
287 std::shared_ptr<const LumiCorrectionParam> const_result =
std::move(
result);
288 m_paramcache.insert(std::make_pair(runnumber,const_result));
289 session->transaction().commit();
295 coral::AttributeList lumidataBindVariables;
296 lumidataBindVariables.extend(
"dataid",
typeid(
unsigned long long));
297 lumidataBindVariables[
"dataid"].data<
unsigned long long>()=lumiid;
299 coral::AttributeList lumiparamOutput;
300 lumiparamOutput.extend(
"NCOLLIDINGBUNCHES",
typeid(
unsigned int));
301 coral::IQuery* lumiparamQuery=schema.newQuery();
302 lumiparamQuery->addToTableList(
std::string(
"LUMIDATA"));
303 lumiparamQuery->setCondition(conditionStr,lumidataBindVariables);
304 lumiparamQuery->addToOutputList(
"NCOLLIDINGBUNCHES");
305 lumiparamQuery->defineOutput(lumiparamOutput);
306 coral::ICursor& lumiparamcursor=lumiparamQuery->execute();
307 unsigned int ncollidingbx=0;
308 while( lumiparamcursor.next() ){
309 const coral::AttributeList& row=lumiparamcursor.currentRow();
310 if(!row[
"NCOLLIDINGBUNCHES"].isNull()){
311 ncollidingbx=row[
"NCOLLIDINGBUNCHES"].data<
unsigned int>();
313 result->setNBX(ncollidingbx);
315 delete lumiparamQuery;
317 unsigned long long normid=0;
318 std::map<std::string,unsigned long long> normidmap;
322 normid=normidmap.begin()->second;
327 std::map< unsigned int,lumi::NormDML::normData > normDataMap;
328 normdml.
normById(schema,normid,normDataMap);
330 std::map< unsigned int,lumi::NormDML::normData >::iterator normIt=--normDataMap.end();
331 if(runnumber<normIt->
first){
332 normIt=normDataMap.upper_bound(runnumber);
336 result->setcorrFunc(normIt->second.corrfunc);
337 result->setnonlinearCoeff(normIt->second.coefficientmap);
338 result->setafterglows(normIt->second.afterglows);
339 result->setdescription(normIt->second.amodetag,normIt->second.beamegev);
340 if(normIt->second.coefficientmap[
"DRIFT"]!=0.){
342 result->setintglumi(intglumi);
345 session->transaction().commit();
347 session->transaction().rollback();
360 coral::IQuery* qHandle=schema.newQuery();
361 qHandle->addToTableList(
"TAGINVENTORY_TABLE",
"i");
362 qHandle->addToTableList(tagtreetabname,
"v");
363 coral::AttributeList qResult;
366 std::string conditionStr(
"v.tagid=i.tagid and i.recordname=:recordname");
367 coral::AttributeList qCondition;
368 qCondition.extend(
"recordname",
typeid(
std::string));
370 qHandle->setCondition(conditionStr,qCondition);
371 qHandle->addToOutputList(
"i.pfn");
372 qHandle->addToOutputList(
"i.tagname");
373 qHandle->defineOutput(qResult);
374 coral::ICursor& iCursor=qHandle->execute();
375 while( iCursor.next() ){
376 const coral::AttributeList& row=iCursor.currentRow();
379 if(connectStr.substr(0,fproto.length())==fproto){
391 coral::IQuery* qHandle=schema.newQuery();
393 coral::AttributeList qResult;
394 qResult.extend(
"INTGLUMI",
typeid(
float));
396 coral::AttributeList qCondition;
397 qCondition.extend(
"runnumber",
typeid(
unsigned int));
398 qCondition[
"runnumber"].data<
unsigned int>()=runnumber;
399 qHandle->setCondition(conditionStr,qCondition);
400 qHandle->addToOutputList(
"INTGLUMI");
401 qHandle->defineOutput(qResult);
402 coral::ICursor& intglumiCursor=qHandle->execute();
403 while( intglumiCursor.next() ){
404 const coral::AttributeList& row=intglumiCursor.currentRow();
405 if(!row[
"INTGLUMI"].isNull()){
406 result=row[
"INTGLUMI"].data<
float>();
std::string translateFrontierConnect(const std::string &connectStr)
void setFirst(const IOVSyncValue &iTime)
T getParameter(std::string const &) const
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
T getUntrackedParameter(std::string const &, T const &) const
std::string m_authfilename
unsigned int m_paramcachedrun
const std::string servletTranslation(const std::string &servlet) const
const EventID & eventID() const
void setIntervalFor(const edm::eventsetup::EventSetupRecordKey &, const edm::IOVSyncValue &, edm::ValidityInterval &) override
static PFTauRenderPlugin instance
std::shared_ptr< const LumiCorrectionParam > ReturnParamType
bool exists(std::string const ¶meterName) const
checks if a parameter exists
std::map< unsigned int, std::shared_ptr< const LumiCorrectionParam > > m_paramcache
DataID dataIDForRun(coral::ISchema &schema, unsigned int runnum, unsigned long long tagid)
static const std::string intglumiv2TableName()
void parseGlobaltagForLumi(coral::ISchema &schema, const std::string &globaltag)
float fetchIntglumi(coral::ISchema &schema, unsigned int runnumber)
const edm::IOVSyncValue * m_pcurrentTime
std::shared_ptr< const LumiCorrectionParam > m_paramresult
std::string m_siteconfpath
std::string toParentString(const xercesc::DOMNode &nodeToConvert) const
unsigned long long HFDataTagIdByName(coral::ISchema &schema, const std::string &datatagname)
void setLast(const IOVSyncValue &iTime)
void normById(const coral::ISchema &schema, unsigned long long normid, std::map< unsigned int, normData > &result)
~LumiCorrectionSource() override
void fillparamcache(unsigned int runnumber)
LumiCorrectionSource(const edm::ParameterSet &)
std::vector< std::vector< double > > tmp
XMLCh * s2x(const std::string &input) const
ReturnParamType produceLumiCorrectionParam(const LumiCorrectionParamRcd &)
#define DEFINE_FWK_EVENTSETUP_SOURCE(type)
unsigned long long currentHFDataTagId(coral::ISchema &schema)
void normIdByType(const coral::ISchema &schema, std::map< std::string, unsigned long long > &resultMap, LumiType=HF, bool defaultonly=true)
std::string x2s(const XMLCh *input) const
unsigned long long lumi_id
unsigned long long normIdByName(const coral::ISchema &schema, const std::string &normtagname)