CMS 3D CMS Logo

HLTConf2DB.cc
Go to the documentation of this file.
1 #ifndef RecoLuminosity_LumiProducer_HLTConf2DB_H
2 #define RecoLuminosity_LumiProducer_HLTConf2DB_H
3 
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"
19 
26 #include <iostream>
27 #include <map>
28 #include <vector>
29 #include <string>
30 namespace lumi {
31  class HLTConf2DB : public DataPipe {
32  public:
33  explicit HLTConf2DB(const std::string& dest);
34  unsigned long long retrieveData(unsigned int) override;
35  const std::string dataType() const override;
36  const std::string sourceType() const override;
37  ~HLTConf2DB() override;
38  }; //cl HLTConf2DB
39  //
40  //implementation
41  //
43  unsigned long long HLTConf2DB::retrieveData(unsigned int runnumber) {
44  std::string runinfoschema("CMS_RUNINFO");
45  //std::string hltschema("CMS_HLT_V0");
46  std::string hltschema("CMS_HLT");
47  std::string runsessiontable("RUNSESSION_PARAMETER");
48  //
49  //must login as cms_hlt_r
50  coral::ConnectionService* svc = new coral::ConnectionService;
51  lumi::DBConfig dbconf(*svc);
52  if (!m_authpath.empty()) {
54  }
55  //std::cout<<"m_source "<<m_source<<std::endl;
56  coral::ISessionProxy* srcsession = svc->connect(m_source, coral::ReadOnly);
57  coral::ITypeConverter& tpc = srcsession->typeConverter();
58  tpc.setCppTypeForSqlType("unsigned int", "NUMBER(38)");
59  //
60  //select string_value from CMS_RUNINFO.runsession_parameter where name='CMS.LVL0:HLT_KEY_DESCRIPTION' and runnumber=xx;
61  //
62  std::string hltkey("");
63  std::vector<std::pair<std::string, std::string> > hlt2l1map;
64  hlt2l1map.reserve(200);
65  try {
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");
70  }
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();
84  unsigned int s = 0;
85  while (kcursor.next()) {
86  const coral::AttributeList& row = kcursor.currentRow();
87  hltkey = row["STRING_VALUE"].data<std::string>();
88  ++s;
89  }
90  if (s == 0 || hltkey.empty()) {
91  kcursor.close();
92  delete kq;
93  srcsession->transaction().rollback();
94  throw lumi::Exception(std::string("requested run has no or invalid hltkey"), "retrieveData", "TRG2DB");
95  }
96  if (s > 1) {
97  kcursor.close();
98  delete kq;
99  srcsession->transaction().rollback();
100  throw lumi::Exception(std::string("requested run has multile hltkey"), "retrieveData", "TRG2DB");
101  }
102  } catch (const coral::Exception& er) {
103  std::cout << "source runinfo database problem " << er.what() << std::endl;
104  srcsession->transaction().rollback();
105  delete srcsession;
106  delete svc;
107  throw er;
108  }
109  coral::ISchema& confSchemaHandle = srcsession->nominalSchema();
110  try {
111  //srcsession->transaction().start(true);
112  if (!confSchemaHandle.existsTable("PATHS") || !confSchemaHandle.existsTable("STRINGPARAMVALUES") ||
113  !confSchemaHandle.existsTable("PARAMETERS") || !confSchemaHandle.existsTable("SUPERIDPARAMETERASSOC") ||
114  !confSchemaHandle.existsTable("MODULES") || !confSchemaHandle.existsTable("MODULETEMPLATES") ||
115  !confSchemaHandle.existsTable("PATHMODULEASSOC") || !confSchemaHandle.existsTable("CONFIGURATIONPATHASSOC") ||
116  !confSchemaHandle.existsTable("CONFIGURATIONS")) {
117  throw lumi::Exception("missing hlt conf tables", "retrieveData", "HLTConf2DB");
118  }
119  coral::AttributeList q1BindVariableList;
120  q1BindVariableList.extend("hltseed", typeid(std::string));
121  q1BindVariableList.extend("l1seedexpr", typeid(std::string));
122  q1BindVariableList.extend("hltkey", typeid(std::string));
123  q1BindVariableList["hltseed"].data<std::string>() = std::string("HLTLevel1GTSeed");
124  q1BindVariableList["l1seedexpr"].data<std::string>() = std::string("L1SeedsLogicalExpression");
125  q1BindVariableList["hltkey"].data<std::string>() = hltkey;
126  coral::IQuery* q1 = confSchemaHandle.newQuery();
127  q1->addToOutputList("PATHS.NAME", "hltpath");
128  q1->addToOutputList("STRINGPARAMVALUES.VALUE", "l1expression");
129 
130  q1->addToTableList("PATHS");
131  q1->addToTableList("STRINGPARAMVALUES");
132  q1->addToTableList("PARAMETERS");
133  q1->addToTableList("SUPERIDPARAMETERASSOC");
134  q1->addToTableList("MODULES");
135  q1->addToTableList("MODULETEMPLATES");
136  q1->addToTableList("PATHMODULEASSOC");
137  q1->addToTableList("CONFIGURATIONPATHASSOC");
138  q1->addToTableList("CONFIGURATIONS");
139 
140  q1->setCondition(
141  "PARAMETERS.PARAMID=STRINGPARAMVALUES.PARAMID and SUPERIDPARAMETERASSOC.PARAMID=PARAMETERS.PARAMID and "
142  "MODULES.SUPERID=SUPERIDPARAMETERASSOC.SUPERID and MODULETEMPLATES.SUPERID=MODULES.TEMPLATEID and "
143  "PATHMODULEASSOC.MODULEID=MODULES.SUPERID and PATHS.PATHID=PATHMODULEASSOC.PATHID and "
144  "CONFIGURATIONPATHASSOC.PATHID=PATHS.PATHID and CONFIGURATIONS.CONFIGID=CONFIGURATIONPATHASSOC.CONFIGID and "
145  "MODULETEMPLATES.NAME = :hltseed and PARAMETERS.NAME = :l1seedexpr and CONFIGURATIONS.CONFIGDESCRIPTOR = "
146  ":hltkey",
147  q1BindVariableList);
148 
152  coral::ICursor& cursor1 = q1->execute();
153  while (cursor1.next()) {
154  const coral::AttributeList& row = cursor1.currentRow();
155  std::string hltpath = row["hltpath"].data<std::string>();
156  std::string l1expression = row["l1expression"].data<std::string>();
157  hlt2l1map.push_back(std::make_pair(hltpath, l1expression));
158  }
159  cursor1.close();
160  delete q1;
161  } catch (const coral::Exception& er) {
162  std::cout << "database problem with source hlt confdb" << er.what() << std::endl;
163  srcsession->transaction().rollback();
164  delete srcsession;
165  throw er;
166  }
167  srcsession->transaction().commit();
168  delete srcsession;
169  std::vector<std::pair<std::string, std::string> >::const_iterator mIt;
170  std::vector<std::pair<std::string, std::string> >::const_iterator mBeg = hlt2l1map.begin();
171  std::vector<std::pair<std::string, std::string> >::const_iterator mEnd = hlt2l1map.end();
172 
173  coral::ISessionProxy* destsession = svc->connect(m_dest, coral::Update);
174  try {
175  //check if hltkey already exists
176  destsession->transaction().start(true);
177  bool hltkeyExists = false;
178  coral::AttributeList kQueryBindList;
179  kQueryBindList.extend("hltkey", typeid(std::string));
180  coral::IQuery* kQuery = destsession->nominalSchema().tableHandle(LumiNames::trghltMapTableName()).newQuery();
181  kQuery->setCondition("HLTKEY =:hltkey", kQueryBindList);
182  kQueryBindList["hltkey"].data<std::string>() = hltkey;
183  coral::ICursor& kResult = kQuery->execute();
184  while (kResult.next()) {
185  hltkeyExists = true;
186  }
187  if (hltkeyExists) {
188  std::cout << "hltkey " << hltkey << " already registered , do nothing" << std::endl;
189  destsession->transaction().commit();
190  delete kQuery;
191  delete svc;
192  return 0;
193  }
194  destsession->transaction().commit();
195  destsession->transaction().start(false);
196  coral::ISchema& destschema = destsession->nominalSchema();
197  coral::ITable& hltconftable = destschema.tableHandle(LumiNames::trghltMapTableName());
198  coral::AttributeList hltconfData;
199  hltconfData.extend<std::string>("HLTKEY");
200  hltconfData.extend<std::string>("HLTPATHNAME");
201  hltconfData.extend<std::string>("L1SEED");
202  coral::IBulkOperation* hltconfInserter = hltconftable.dataEditor().bulkInsert(hltconfData, 200);
203  hltconfData["HLTKEY"].data<std::string>() = hltkey;
204  std::string& hltpathname = hltconfData["HLTPATHNAME"].data<std::string>();
205  std::string& l1seedname = hltconfData["L1SEED"].data<std::string>();
206  for (mIt = mBeg; mIt != mEnd; ++mIt) {
207  hltpathname = mIt->first;
208  l1seedname = mIt->second;
209  hltconfInserter->processNextIteration();
210  //std::cout<<mIt->first<<" "<<mIt->second<<std::endl;
211  }
212  hltconfInserter->flush();
213  delete hltconfInserter;
214  destsession->transaction().commit();
215  } catch (const coral::Exception& er) {
216  std::cout << "database problem " << er.what() << std::endl;
217  destsession->transaction().rollback();
218  delete destsession;
219  delete svc;
220  throw er;
221  }
222  delete destsession;
223  delete svc;
224  return 0;
225  }
226  const std::string HLTConf2DB::dataType() const { return "HLTConf"; }
227  const std::string HLTConf2DB::sourceType() const { return "DB"; }
229 } // namespace lumi
232 #endif
lumi::DataPipe::m_source
std::string m_source
Definition: DataPipe.h:28
DataPipe.h
lumi::DataPipe::m_dest
std::string m_dest
Definition: DataPipe.h:27
idDealer.h
gather_cfg.cout
cout
Definition: gather_cfg.py:144
lumi::DataPipe
Definition: DataPipe.h:8
lumi::DBConfig::setAuthentication
void setAuthentication(const std::string &authPath)
Definition: DBConfig.cc:15
LumiNames.h
DataPipeFactory.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: PluginFactory.h:124
lumi::LumiNames::trghltMapTableName
static const std::string trghltMapTableName()
Definition: LumiNames.cc:19
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
lumi::HLTConf2DB::dataType
const std::string dataType() const override
Definition: HLTConf2DB.cc:226
lumi::DataPipe::m_authpath
std::string m_authpath
Definition: DataPipe.h:29
q1
double q1[4]
Definition: TauolaWrapper.h:87
edmplugin::PluginFactory
Definition: PluginFactory.h:34
cond::runnumber
Definition: Time.h:19
lumi::DBConfig
Definition: DBConfig.h:8
lumi::HLTConf2DB::~HLTConf2DB
~HLTConf2DB() override
Definition: HLTConf2DB.cc:228
lumi::HLTConf2DB::HLTConf2DB
HLTConf2DB(const std::string &dest)
Definition: HLTConf2DB.cc:42
Exception
Definition: hltDiff.cc:245
lumi::HLTConf2DB::sourceType
const std::string sourceType() const override
Definition: HLTConf2DB.cc:227
lumi::HLTConf2DB
Definition: HLTConf2DB.cc:31
Exception.h
DBConfig.h
lumi
Definition: LumiSectionData.h:20
mps_fire.dest
dest
Definition: mps_fire.py:179
lumi::HLTConf2DB::retrieveData
unsigned long long retrieveData(unsigned int) override
Definition: HLTConf2DB.cc:43
ConstantDef.h