1 #ifndef RecoLuminosity_LumiProducer_HLTConf2DB_H
2 #define RecoLuminosity_LumiProducer_HLTConf2DB_H
4 #include "CoralBase/AttributeList.h"
5 #include "CoralBase/Attribute.h"
6 #include "CoralBase/AttributeSpecification.h"
7 #include "CoralBase/Exception.h"
8 #include "RelationalAccess/ConnectionService.h"
9 #include "RelationalAccess/ISessionProxy.h"
10 #include "RelationalAccess/ITransaction.h"
11 #include "RelationalAccess/ITypeConverter.h"
12 #include "RelationalAccess/IQuery.h"
13 #include "RelationalAccess/ICursor.h"
14 #include "RelationalAccess/ISchema.h"
15 #include "RelationalAccess/IView.h"
16 #include "RelationalAccess/ITable.h"
17 #include "RelationalAccess/ITableDataEditor.h"
18 #include "RelationalAccess/IBulkOperation.h"
35 virtual const std::string
dataType()
const;
44 std::string runinfoschema(
"CMS_RUNINFO");
46 std::string hltschema(
"CMS_HLT");
47 std::string runsessiontable(
"RUNSESSION_PARAMETER");
50 coral::ConnectionService*
svc=
new coral::ConnectionService;
56 coral::ISessionProxy* srcsession=svc->connect(
m_source, coral::ReadOnly);
57 coral::ITypeConverter& tpc=srcsession->typeConverter();
58 tpc.setCppTypeForSqlType(
"unsigned int",
"NUMBER(38)");
63 std::vector< std::pair<std::string,std::string> > hlt2l1map;
64 hlt2l1map.reserve(200);
66 srcsession->transaction().start(
true);
67 coral::ISchema& runinfoSchemaHandle=srcsession->schema(runinfoschema);
68 if( !runinfoSchemaHandle.existsTable(runsessiontable) ){
69 throw lumi::Exception(
"missing runsession table",
"retrieveData",
"HLTConf2DB");
71 coral::AttributeList rfBindVariableList;
72 rfBindVariableList.extend(
"name",
typeid(std::string));
73 rfBindVariableList.extend(
"runnumber",
typeid(
unsigned int));
74 rfBindVariableList[
"name"].data<std::string>()=std::string(
"CMS.LVL0:HLT_KEY_DESCRIPTION");
75 rfBindVariableList[
"runnumber"].data<
unsigned int>()=runnumber;
76 coral::IQuery* kq=runinfoSchemaHandle.newQuery();
77 coral::AttributeList runinfoOut;
78 runinfoOut.extend(
"STRING_VALUE",
typeid(std::string));
79 kq->addToTableList(runsessiontable);
80 kq->setCondition(
"NAME = :name AND RUNNUMBER = :runnumber",rfBindVariableList);
81 kq->addToOutputList(
"STRING_VALUE");
82 kq->defineOutput(runinfoOut);
83 coral::ICursor& kcursor=kq->execute();
85 while( kcursor.next() ){
86 const coral::AttributeList& row=kcursor.currentRow();
87 hltkey=row[
"STRING_VALUE"].data<std::string>();
90 if( s==0||hltkey.empty() ){
93 srcsession->transaction().rollback();
94 throw lumi::Exception(std::string(
"requested run has no or invalid hltkey"),
"retrieveData",
"TRG2DB");
99 srcsession->transaction().rollback();
100 throw lumi::Exception(std::string(
"requested run has multile hltkey"),
"retrieveData",
"TRG2DB");
103 std::cout<<
"source runinfo database problem "<<er.what()<<std::endl;
104 srcsession->transaction().rollback();
109 coral::ISchema& confSchemaHandle=srcsession->nominalSchema();
112 if( !confSchemaHandle.existsTable(
"PATHS") || !confSchemaHandle.existsTable(
"STRINGPARAMVALUES") || !confSchemaHandle.existsTable(
"PARAMETERS") || !confSchemaHandle.existsTable(
"SUPERIDPARAMETERASSOC") || !confSchemaHandle.existsTable(
"MODULES") || !confSchemaHandle.existsTable(
"MODULETEMPLATES") || !confSchemaHandle.existsTable(
"PATHMODULEASSOC") || !confSchemaHandle.existsTable(
"CONFIGURATIONPATHASSOC") || !confSchemaHandle.existsTable(
"CONFIGURATIONS") ){
113 throw lumi::Exception(
"missing hlt conf tables" ,
"retrieveData",
"HLTConf2DB");
115 coral::AttributeList q1BindVariableList;
116 q1BindVariableList.extend(
"hltseed",
typeid(std::string));
117 q1BindVariableList.extend(
"l1seedexpr",
typeid(std::string));
118 q1BindVariableList.extend(
"hltkey",
typeid(std::string));
119 q1BindVariableList[
"hltseed"].data<std::string>()=std::string(
"HLTLevel1GTSeed");
120 q1BindVariableList[
"l1seedexpr"].data<std::string>()=std::string(
"L1SeedsLogicalExpression");
121 q1BindVariableList[
"hltkey"].data<std::string>()=hltkey;
122 coral::IQuery*
q1=confSchemaHandle.newQuery();
123 q1->addToOutputList(
"PATHS.NAME",
"hltpath");
124 q1->addToOutputList(
"STRINGPARAMVALUES.VALUE",
"l1expression");
126 q1->addToTableList(
"PATHS");
127 q1->addToTableList(
"STRINGPARAMVALUES");
128 q1->addToTableList(
"PARAMETERS");
129 q1->addToTableList(
"SUPERIDPARAMETERASSOC");
130 q1->addToTableList(
"MODULES");
131 q1->addToTableList(
"MODULETEMPLATES");
132 q1->addToTableList(
"PATHMODULEASSOC");
133 q1->addToTableList(
"CONFIGURATIONPATHASSOC");
134 q1->addToTableList(
"CONFIGURATIONS");
136 q1->setCondition(
"PARAMETERS.PARAMID=STRINGPARAMVALUES.PARAMID and SUPERIDPARAMETERASSOC.PARAMID=PARAMETERS.PARAMID and MODULES.SUPERID=SUPERIDPARAMETERASSOC.SUPERID and MODULETEMPLATES.SUPERID=MODULES.TEMPLATEID and PATHMODULEASSOC.MODULEID=MODULES.SUPERID and PATHS.PATHID=PATHMODULEASSOC.PATHID and CONFIGURATIONPATHASSOC.PATHID=PATHS.PATHID and CONFIGURATIONS.CONFIGID=CONFIGURATIONPATHASSOC.CONFIGID and MODULETEMPLATES.NAME = :hltseed and PARAMETERS.NAME = :l1seedexpr and CONFIGURATIONS.CONFIGDESCRIPTOR = :hltkey",q1BindVariableList);
141 coral::ICursor& cursor1=q1->execute();
142 while( cursor1.next() ){
143 const coral::AttributeList& row=cursor1.currentRow();
144 std::string hltpath=row[
"hltpath"].data<std::string>();
145 std::string l1expression=row[
"l1expression"].data<std::string>();
146 hlt2l1map.push_back(std::make_pair(hltpath,l1expression));
151 std::cout<<
"database problem with source hlt confdb"<<er.what()<<std::endl;
152 srcsession->transaction().rollback();
156 srcsession->transaction().commit();
158 std::vector< std::pair<std::string,std::string> >::const_iterator mIt;
159 std::vector< std::pair<std::string,std::string> >::const_iterator mBeg=hlt2l1map.begin();
160 std::vector< std::pair<std::string,std::string> >::const_iterator mEnd=hlt2l1map.end();
165 destsession->transaction().start(
true);
166 bool hltkeyExists=
false;
167 coral::AttributeList kQueryBindList;
168 kQueryBindList.extend(
"hltkey",
typeid(std::string));
170 kQuery->setCondition(
"HLTKEY =:hltkey",kQueryBindList);
171 kQueryBindList[
"hltkey"].data<std::string>()=hltkey;
172 coral::ICursor& kResult=kQuery->execute();
173 while( kResult.next() ){
177 std::cout<<
"hltkey "<<hltkey<<
" already registered , do nothing"<<std::endl;
178 destsession->transaction().commit();
183 destsession->transaction().commit();
184 destsession->transaction().start(
false);
185 coral::ISchema& destschema=destsession->nominalSchema();
187 coral::AttributeList hltconfData;
188 hltconfData.extend<std::string>(
"HLTKEY");
189 hltconfData.extend<std::string>(
"HLTPATHNAME");
190 hltconfData.extend<std::string>(
"L1SEED");
191 coral::IBulkOperation* hltconfInserter=hltconftable.dataEditor().bulkInsert(hltconfData,200);
192 hltconfData[
"HLTKEY"].data<std::string>()=hltkey;
193 std::string& hltpathname=hltconfData[
"HLTPATHNAME"].data<std::string>();
194 std::string& l1seedname=hltconfData[
"L1SEED"].data<std::string>();
195 for(mIt=mBeg; mIt!=mEnd; ++mIt ){
196 hltpathname=mIt->first;
197 l1seedname=mIt->second;
198 hltconfInserter->processNextIteration();
201 hltconfInserter->flush();
202 delete hltconfInserter;
203 destsession->transaction().commit();
205 std::cout<<
"database problem "<<er.what()<<std::endl;
206 destsession->transaction().rollback();
virtual void retrieveData(unsigned int)
virtual const std::string dataType() const
void setAuthentication(const std::string &authPath)
virtual const std::string sourceType() const
static const std::string trghltMapTableName()
HLTConf2DB(const std::string &dest)
#define DEFINE_EDM_PLUGIN(factory, type, name)