CMS 3D CMS Logo

HLTV32DB.cc
Go to the documentation of this file.
1 #ifndef RecoLuminosity_LumiProducer_HLTV32DB_H
2 #define RecoLuminosity_LumiProducer_HLTV32DB_H
3 #include "CoralBase/AttributeList.h"
4 #include "CoralBase/Attribute.h"
5 #include "CoralBase/AttributeSpecification.h"
6 #include "CoralBase/Blob.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 
27 #include <iostream>
28 #include <map>
29 #include <vector>
30 #include <string>
31 #include <cstring>
33 namespace lumi {
34  class HLTV32DB : public DataPipe {
35  public:
36  const static unsigned int COMMITINTERVAL = 200; //commit interval in LS,totalrow=nls*(~200)
37  const static unsigned int COMMITLSINTERVAL = 500; //commit interval in LS
38 
39  explicit HLTV32DB(const std::string& dest);
40  unsigned long long retrieveData(unsigned int) override;
41  const std::string dataType() const override;
42  const std::string sourceType() const override;
43  ~HLTV32DB() override;
44  struct hltinfo {
45  unsigned int cmsluminr;
47  unsigned int hltinput;
48  unsigned int hltaccept;
49  unsigned int prescale;
50  };
51  typedef std::map<unsigned int, std::string, std::less<unsigned int> > HltPathMap; //order by hltpathid
52  typedef std::vector<std::map<unsigned int, HLTV32DB::hltinfo, std::less<unsigned int> > > HltResult;
53  void writeHltData(coral::ISessionProxy* lumisession,
54  unsigned int irunnumber,
55  const std::string& source,
56  unsigned int npath,
57  HltResult::iterator hltBeg,
58  HltResult::iterator hltEnd,
59  unsigned int commitintv);
60  unsigned long long writeHltDataToSchema2(coral::ISessionProxy* lumisession,
61  unsigned int irunnumber,
62  const std::string& source,
63  unsigned int npath,
64  HltResult::iterator hltBeg,
65  HltResult::iterator hltEnd,
66  HltPathMap& hltpathmap,
67  unsigned int commitintv);
68  }; //cl HLTV32DB
69  //
70  //implementation
71  //
73  unsigned long long HLTV32DB::retrieveData(unsigned int runnumber) {
74  std::string confdbschema("CMS_HLT");
75  std::string hltschema("CMS_RUNINFO");
76  std::string gtschema("CMS_GT_MON");
77  std::string confdbpathtabname("PATHS");
78  std::string triggerpathtabname("HLT_SUPERVISOR_TRIGGERPATHS");
79  std::string maptabname("HLT_SUPERVISOR_SCALAR_MAP_V2");
80  std::string gttabname("LUMI_SECTIONS");
81  coral::ConnectionService* svc = new coral::ConnectionService;
82  lumi::DBConfig dbconf(*svc);
83  if (!m_authpath.empty()) {
85  }
90  std::string::size_type cutpos = m_source.find(';');
91  std::string dbsource = m_source;
92  std::string csvsource("");
93  if (cutpos != std::string::npos) {
94  dbsource = m_source.substr(0, cutpos);
95  csvsource = m_source.substr(cutpos + 1);
96  }
97  //std::cout<<"dbsource: "<<dbsource<<" , csvsource: "<<csvsource<<std::endl;
98  coral::ISessionProxy* srcsession = svc->connect(dbsource, coral::ReadOnly);
99  coral::ITypeConverter& tpc = srcsession->typeConverter();
100  tpc.setCppTypeForSqlType("unsigned int", "NUMBER(11)");
101  srcsession->transaction().start(true);
102  coral::ISchema& gtSchemaHandle = srcsession->schema(gtschema);
103  coral::ISchema& hltSchemaHandle = srcsession->schema(hltschema);
104  coral::ISchema& confdbSchemaHandle = srcsession->schema(confdbschema);
105  if (!hltSchemaHandle.existsTable(triggerpathtabname) || !hltSchemaHandle.existsTable(maptabname)) {
106  throw lumi::Exception("missing hlt tables", "retrieveData", "HLTV32DB");
107  }
109  //this is trg lumi section number
110  std::vector<std::pair<unsigned int, unsigned int> > psindexmap;
111  coral::AttributeList psindexVariableList;
112  psindexVariableList.extend("runnumber", typeid(unsigned int));
113  psindexVariableList["runnumber"].data<unsigned int>() = runnumber;
114  coral::IQuery* qPsindex = gtSchemaHandle.tableHandle(gttabname).newQuery();
115  coral::AttributeList psindexOutput;
116  psindexOutput.extend("PRESCALE_INDEX", typeid(unsigned int));
117  psindexOutput.extend("LUMI_SECTION", typeid(unsigned int));
118  qPsindex->addToOutputList("PRESCALE_INDEX");
119  qPsindex->addToOutputList("LUMI_SECTION");
120  qPsindex->setCondition("RUN_NUMBER=:runnumber", psindexVariableList);
121  qPsindex->defineOutput(psindexOutput);
122  coral::ICursor& psindexCursor = qPsindex->execute();
123  unsigned int lsmin = 4294967295;
124  unsigned int lsmax = 0;
125  while (psindexCursor.next()) {
126  if (!psindexCursor.currentRow()["PRESCALE_INDEX"].isNull()) {
127  unsigned int psindx = psindexCursor.currentRow()["PRESCALE_INDEX"].data<unsigned int>();
128  unsigned int pslsnum = psindexCursor.currentRow()["LUMI_SECTION"].data<unsigned int>();
129  if (pslsnum > lsmax) {
130  lsmax = pslsnum;
131  }
132  if (pslsnum < lsmin) {
133  lsmin = pslsnum;
134  }
135  psindexmap.push_back(std::make_pair(pslsnum, psindx));
136  }
137  }
138  delete qPsindex;
139  if (psindexmap.empty()) {
140  srcsession->transaction().commit();
141  delete srcsession;
142  throw lumi::Exception("no psindex data found", "retrieveData", "HLTV32DB");
143  }
144 
147  HltPathMap hltpathmap;
148  coral::AttributeList bindVariableList;
149  bindVariableList.extend("runnumber", typeid(unsigned int));
150  bindVariableList["runnumber"].data<unsigned int>() = runnumber;
151  coral::IQuery* q1 = hltSchemaHandle.tableHandle(triggerpathtabname).newQuery();
152  coral::AttributeList hltpathid;
153  hltpathid.extend("hltpathid", typeid(unsigned int));
154  q1->addToOutputList("distinct(PATHID)", "hltpathid");
155  q1->setCondition("RUNNUMBER=:runnumber", bindVariableList);
156  q1->defineOutput(hltpathid);
157  coral::ICursor& c = q1->execute();
158  unsigned int npc = 0;
159  while (c.next()) {
160  npc++;
161  unsigned int hid = c.currentRow()["hltpathid"].data<unsigned int>();
162  hltpathmap.insert(std::make_pair(hid, ""));
163  }
164  delete q1;
167  HltPathMap::iterator mpit;
168  HltPathMap::iterator mpitBeg = hltpathmap.begin();
169  HltPathMap::iterator mpitEnd = hltpathmap.end();
170  for (mpit = mpitBeg; mpit != mpitEnd; ++mpit) { //loop over paths
171  coral::IQuery* mq = confdbSchemaHandle.newQuery();
172  coral::AttributeList mqbindVariableList;
173  mqbindVariableList.extend("pathid", typeid(unsigned int));
174  mqbindVariableList["pathid"].data<unsigned int>() = mpit->first;
175  mq->addToTableList(confdbpathtabname);
176  mq->addToOutputList("NAME", "hltpathname");
177  mq->setCondition("PATHID=:pathid", mqbindVariableList);
178  coral::ICursor& mqcursor = mq->execute();
179  while (mqcursor.next()) {
180  std::string pathname = mqcursor.currentRow()["hltpathname"].data<std::string>();
181  hltpathmap[mpit->first] = pathname;
182  }
183  delete mq;
184  }
185 
187  HltResult hltresult;
188  unsigned int nls = lsmax - lsmin + 1;
189  //std::cout<<"nls "<<nls<<std::endl;
190  hltresult.reserve(nls); //
191  //fix all size
192  for (unsigned int i = lsmin; i <= lsmax; ++i) {
193  if (i == 0)
194  continue; //skip ls=0
195  std::map<unsigned int, HLTV32DB::hltinfo> allpaths;
196  HltPathMap::iterator aIt;
197  HltPathMap::iterator aItBeg = hltpathmap.begin();
198  HltPathMap::iterator aItEnd = hltpathmap.end();
199  for (aIt = aItBeg; aIt != aItEnd; ++aIt) {
201  ct.cmsluminr = i;
202  ct.pathname = aIt->second;
203  ct.hltinput = 0;
204  ct.hltaccept = 0;
205  ct.prescale = 0;
206  allpaths.insert(std::make_pair(aIt->first, ct));
207  }
208  hltresult.push_back(allpaths);
209  }
210 
211  bool lscountfromzero = false;
212 
214  for (std::vector<std::pair<unsigned int, unsigned int> >::iterator it = psindexmap.begin(); it != psindexmap.end();
215  ++it) {
216  //loop over ls
217  unsigned int lsnum = it->first;
218  unsigned int psindex = it->second;
219  coral::AttributeList hltdataVariableList;
220  hltdataVariableList.extend("runnumber", typeid(unsigned int));
221  hltdataVariableList.extend("lsnum", typeid(unsigned int));
222  hltdataVariableList.extend("psindex", typeid(unsigned int));
223  hltdataVariableList["runnumber"].data<unsigned int>() = runnumber;
224  hltdataVariableList["lsnum"].data<unsigned int>() = lsnum;
225  hltdataVariableList["psindex"].data<unsigned int>() = psindex;
226  coral::IQuery* qHltData = hltSchemaHandle.newQuery();
227  qHltData->addToTableList(triggerpathtabname, "t");
228  qHltData->addToTableList(maptabname, "m");
229  coral::AttributeList hltdataOutput;
230  hltdataOutput.extend("L1PASS", typeid(unsigned int));
231  hltdataOutput.extend("PACCEPT", typeid(unsigned int));
232  hltdataOutput.extend("PATHID", typeid(unsigned int));
233  hltdataOutput.extend("PSVALUE", typeid(unsigned int));
234 
235  qHltData->addToOutputList("t.L1PASS", "l1pass");
236  qHltData->addToOutputList("t.PACCEPT", "paccept");
237  qHltData->addToOutputList("t.PATHID", "pathid");
238  qHltData->addToOutputList("m.PSVALUE", "psvalue");
239  qHltData->setCondition(
240  "m.PATHID=t.PATHID and m.RUNNUMBER=t.RUNNUMBER and m.RUNNUMBER=:runnumber AND m.PSINDEX=:psindex AND "
241  "t.LSNUMBER=:lsnum",
242  hltdataVariableList);
243  qHltData->defineOutput(hltdataOutput);
244  coral::ICursor& hltdataCursor = qHltData->execute();
245  while (hltdataCursor.next()) {
246  const coral::AttributeList& row = hltdataCursor.currentRow();
247  if (lsnum == 0) {
248  lscountfromzero = true;
249  if (lscountfromzero) {
250  std::cout << "hlt ls count from 0 , we skip/dodge/parry it!" << std::endl;
251  }
252  } else {
253  unsigned int pathid = row["PATHID"].data<unsigned int>();
254  std::map<unsigned int, hltinfo>& allpathinfo = hltresult.at(lsnum - 1);
255  hltinfo& pathcontent = allpathinfo[pathid];
256  pathcontent.hltinput = row["L1PASS"].data<unsigned int>();
257  pathcontent.hltaccept = row["PACCEPT"].data<unsigned int>();
258  pathcontent.prescale = row["PSVALUE"].data<unsigned int>();
259  }
260  }
261  delete qHltData;
262  }
263  srcsession->transaction().commit();
264  delete srcsession;
265  //
266  // Write into DB
267  //
268  unsigned int npath = hltpathmap.size();
269  coral::ISessionProxy* destsession = svc->connect(m_dest, coral::Update);
270  coral::ITypeConverter& lumitpc = destsession->typeConverter();
271  lumitpc.setCppTypeForSqlType("unsigned int", "NUMBER(7)");
272  lumitpc.setCppTypeForSqlType("unsigned int", "NUMBER(10)");
273  lumitpc.setCppTypeForSqlType("unsigned long long", "NUMBER(20)");
274 
275  //for(hltIt=hltItBeg;hltIt!=hltItEnd;++hltIt){
276  // std::map<unsigned int,HLTV32DB::hltinfo>::iterator pathIt;
277  // std::map<unsigned int,HLTV32DB::hltinfo>::iterator pathItBeg=hltIt->begin();
278  // std::map<unsigned int,HLTV32DB::hltinfo>::iterator pathItEnd=hltIt->end();
279  // for(pathIt=pathItBeg;pathIt!=pathItEnd;++pathIt){
280  // std::cout<<"cmslsnr "<<pathIt->second.cmsluminr<<" "<<pathIt->second.pathname<<" "<<pathIt->second.hltinput<<" "<<pathIt->second.hltaccept<<" "<<pathIt->second.prescale<<std::endl;
281  // }
282  //}
283  unsigned int totalcmsls = hltresult.size();
284  std::cout << "inserting totalhltls " << totalcmsls << " total path " << npath << std::endl;
285  //HltResult::iterator hltItBeg=hltresult.begin();
286  //HltResult::iterator hltItEnd=hltresult.end();
287  unsigned long long hltdataid = 0;
288  try {
289  if (m_mode == "loadoldschema") {
290  std::cout << "writing hlt data to old hlt table" << std::endl;
291  writeHltData(destsession, runnumber, dbsource, npath, hltresult.begin(), hltresult.end(), COMMITINTERVAL);
292  std::cout << "done" << std::endl;
293  }
294  std::cout << "writing hlt data to new lshlt table" << std::endl;
295  //std::cout<<"npath "<<npath<<std::endl;
310  hltdataid = writeHltDataToSchema2(
311  destsession, runnumber, dbsource, npath, hltresult.begin(), hltresult.end(), hltpathmap, COMMITLSINTERVAL);
312  std::cout << "done" << std::endl;
313  delete destsession;
314  delete svc;
315  } catch (const coral::Exception& er) {
316  std::cout << "database problem " << er.what() << std::endl;
317  destsession->transaction().rollback();
318  delete destsession;
319  delete svc;
320  throw er;
321  }
322  return hltdataid;
323  }
324  void HLTV32DB::writeHltData(coral::ISessionProxy* lumisession,
325  unsigned int irunnumber,
326  const std::string& source,
327  unsigned int npath,
328  HltResult::iterator hltItBeg,
329  HltResult::iterator hltItEnd,
330  unsigned int commitintv) {
331  std::map<unsigned long long, std::vector<unsigned long long> > idallocationtable;
332  unsigned int hltlscount = 0;
333  unsigned int totalcmsls = std::distance(hltItBeg, hltItEnd);
334  std::cout << "\t allocating total ids " << totalcmsls * npath << std::endl;
335  lumisession->transaction().start(false);
336  lumi::idDealer idg(lumisession->nominalSchema());
337  unsigned long long hltID =
338  idg.generateNextIDForTable(LumiNames::hltTableName(), totalcmsls * npath) - totalcmsls * npath;
339  for (HltResult::iterator hltIt = hltItBeg; hltIt != hltItEnd; ++hltIt, ++hltlscount) {
340  std::vector<unsigned long long> pathvec;
341  pathvec.reserve(npath);
342  for (unsigned int i = 0; i < npath; ++i, ++hltID) {
343  pathvec.push_back(hltID);
344  }
345  idallocationtable.insert(std::make_pair(hltlscount, pathvec));
346  }
347  std::cout << "\t all ids allocated" << std::endl;
348 
349  coral::AttributeList hltData;
350  hltData.extend("HLT_ID", typeid(unsigned long long));
351  hltData.extend("RUNNUM", typeid(unsigned int));
352  hltData.extend("CMSLSNUM", typeid(unsigned int));
353  hltData.extend("PATHNAME", typeid(std::string));
354  hltData.extend("INPUTCOUNT", typeid(unsigned int));
355  hltData.extend("ACCEPTCOUNT", typeid(unsigned int));
356  hltData.extend("PRESCALE", typeid(unsigned int));
357 
358  //loop over lumi LS
359  unsigned long long& hlt_id = hltData["HLT_ID"].data<unsigned long long>();
360  unsigned int& hltrunnum = hltData["RUNNUM"].data<unsigned int>();
361  unsigned int& cmslsnum = hltData["CMSLSNUM"].data<unsigned int>();
362  std::string& pathname = hltData["PATHNAME"].data<std::string>();
363  unsigned int& inputcount = hltData["INPUTCOUNT"].data<unsigned int>();
364  unsigned int& acceptcount = hltData["ACCEPTCOUNT"].data<unsigned int>();
365  unsigned int& prescale = hltData["PRESCALE"].data<unsigned int>();
366  hltlscount = 0;
367  coral::IBulkOperation* hltInserter = nullptr;
368  unsigned int comittedls = 0;
369  for (HltResult::iterator hltIt = hltItBeg; hltIt != hltItEnd; ++hltIt, ++hltlscount) {
370  std::map<unsigned int, HLTV32DB::hltinfo>::const_iterator pathIt;
371  std::map<unsigned int, HLTV32DB::hltinfo>::const_iterator pathBeg = hltIt->begin();
372  std::map<unsigned int, HLTV32DB::hltinfo>::const_iterator pathEnd = hltIt->end();
373  if (!lumisession->transaction().isActive()) {
374  lumisession->transaction().start(false);
375  coral::ITable& hlttable = lumisession->nominalSchema().tableHandle(LumiNames::hltTableName());
376  hltInserter = hlttable.dataEditor().bulkInsert(hltData, npath);
377  } else {
378  if (hltIt == hltItBeg) {
379  coral::ITable& hlttable = lumisession->nominalSchema().tableHandle(LumiNames::hltTableName());
380  hltInserter = hlttable.dataEditor().bulkInsert(hltData, npath);
381  }
382  }
383  unsigned int hltpathcount = 0;
384  for (pathIt = pathBeg; pathIt != pathEnd; ++pathIt, ++hltpathcount) {
385  hlt_id = idallocationtable[hltlscount].at(hltpathcount);
386  hltrunnum = irunnumber;
387  cmslsnum = pathIt->second.cmsluminr;
388  pathname = pathIt->second.pathname;
389  inputcount = pathIt->second.hltinput;
390  acceptcount = pathIt->second.hltaccept;
391  prescale = pathIt->second.prescale;
392  hltInserter->processNextIteration();
393  }
394  hltInserter->flush();
395  ++comittedls;
396  if (comittedls == commitintv) {
397  std::cout << "\t committing in LS chunck " << comittedls << std::endl;
398  delete hltInserter;
399  hltInserter = nullptr;
400  lumisession->transaction().commit();
401  comittedls = 0;
402  std::cout << "\t committed " << std::endl;
403  } else if (hltlscount == (totalcmsls - 1)) {
404  std::cout << "\t committing at the end" << std::endl;
405  delete hltInserter;
406  hltInserter = nullptr;
407  lumisession->transaction().commit();
408  std::cout << "\t done" << std::endl;
409  }
410  }
411  }
412  unsigned long long HLTV32DB::writeHltDataToSchema2(coral::ISessionProxy* lumisession,
413  unsigned int irunnumber,
414  const std::string& source,
415  unsigned int npath,
416  HltResult::iterator hltItBeg,
417  HltResult::iterator hltItEnd,
418  HltPathMap& hltpathmap,
419  unsigned int commitintv) {
420  unsigned int totalcmsls = std::distance(hltItBeg, hltItEnd);
421  std::cout << "inserting totalcmsls " << totalcmsls << std::endl;
422  coral::AttributeList lshltData;
423  lshltData.extend("DATA_ID", typeid(unsigned long long));
424  lshltData.extend("RUNNUM", typeid(unsigned int));
425  lshltData.extend("CMSLSNUM", typeid(unsigned int));
426  lshltData.extend("PRESCALEBLOB", typeid(coral::Blob));
427  lshltData.extend("HLTCOUNTBLOB", typeid(coral::Blob));
428  lshltData.extend("HLTACCEPTBLOB", typeid(coral::Blob));
429  unsigned long long& data_id = lshltData["DATA_ID"].data<unsigned long long>();
430  unsigned int& hltrunnum = lshltData["RUNNUM"].data<unsigned int>();
431  unsigned int& cmslsnum = lshltData["CMSLSNUM"].data<unsigned int>();
432  coral::Blob& prescaleblob = lshltData["PRESCALEBLOB"].data<coral::Blob>();
433  coral::Blob& hltcountblob = lshltData["HLTCOUNTBLOB"].data<coral::Blob>();
434  coral::Blob& hltacceptblob = lshltData["HLTACCEPTBLOB"].data<coral::Blob>();
435 
436  unsigned long long branch_id = 3;
437  std::string branch_name("DATA");
438  lumi::RevisionDML revisionDML;
439  lumi::RevisionDML::HltEntry hltrundata;
440  std::stringstream op;
441  op << irunnumber;
442  std::string runnumberStr = op.str();
443  lumisession->transaction().start(false);
444  hltrundata.entry_name = runnumberStr;
445  hltrundata.source = source;
446  hltrundata.runnumber = irunnumber;
447  hltrundata.npath = npath;
448  std::string pathnames;
449  HltPathMap::iterator hltpathmapIt;
450  HltPathMap::iterator hltpathmapItBeg = hltpathmap.begin();
451  HltPathMap::iterator hltpathmapItEnd = hltpathmap.end();
452  for (hltpathmapIt = hltpathmapItBeg; hltpathmapIt != hltpathmapItEnd; ++hltpathmapIt) {
453  if (hltpathmapIt != hltpathmapItBeg) {
454  pathnames += std::string(",");
455  }
456  pathnames += hltpathmapIt->second;
457  }
458  std::cout << "\tpathnames " << pathnames << std::endl;
459  hltrundata.pathnames = pathnames;
460  hltrundata.entry_id = revisionDML.getEntryInBranchByName(
461  lumisession->nominalSchema(), lumi::LumiNames::hltdataTableName(), runnumberStr, branch_name);
462  if (hltrundata.entry_id == 0) {
463  revisionDML.bookNewEntry(lumisession->nominalSchema(), LumiNames::hltdataTableName(), hltrundata);
464  std::cout << "hltrundata revision_id " << hltrundata.revision_id << " entry_id " << hltrundata.entry_id
465  << " data_id " << hltrundata.data_id << std::endl;
466  revisionDML.addEntry(
467  lumisession->nominalSchema(), LumiNames::hltdataTableName(), hltrundata, branch_id, branch_name);
468  } else {
469  revisionDML.bookNewRevision(lumisession->nominalSchema(), LumiNames::hltdataTableName(), hltrundata);
470  std::cout << "hltrundata revision_id " << hltrundata.revision_id << " entry_id " << hltrundata.entry_id
471  << " data_id " << hltrundata.data_id << std::endl;
472  revisionDML.addRevision(
473  lumisession->nominalSchema(), LumiNames::hltdataTableName(), hltrundata, branch_id, branch_name);
474  }
475  std::cout << "inserting hltrundata" << std::endl;
476  revisionDML.insertHltRunData(lumisession->nominalSchema(), hltrundata);
477  std::cout << "inserting lshlt data" << std::endl;
478 
479  unsigned int hltlscount = 0;
480  coral::IBulkOperation* hltInserter = nullptr;
481  unsigned int comittedls = 0;
482  for (HltResult::iterator hltIt = hltItBeg; hltIt != hltItEnd; ++hltIt, ++hltlscount) {
483  unsigned int cmslscount = hltlscount + 1;
484  std::map<unsigned int, HLTV32DB::hltinfo, std::less<unsigned int> >::const_iterator pathIt;
485  std::map<unsigned int, HLTV32DB::hltinfo, std::less<unsigned int> >::const_iterator pathBeg = hltIt->begin();
486  std::map<unsigned int, HLTV32DB::hltinfo, std::less<unsigned int> >::const_iterator pathEnd = hltIt->end();
487  if (!lumisession->transaction().isActive()) {
488  lumisession->transaction().start(false);
489  coral::ITable& hlttable = lumisession->nominalSchema().tableHandle(LumiNames::lshltTableName());
490  hltInserter = hlttable.dataEditor().bulkInsert(lshltData, npath);
491  } else {
492  if (hltIt == hltItBeg) {
493  coral::ITable& hlttable = lumisession->nominalSchema().tableHandle(LumiNames::lshltTableName());
494  hltInserter = hlttable.dataEditor().bulkInsert(lshltData, npath);
495  }
496  }
497  data_id = hltrundata.data_id;
498  hltrunnum = irunnumber;
499  cmslsnum = cmslscount;
500  std::vector<unsigned int> prescales;
501  prescales.reserve(npath);
502  std::vector<unsigned int> hltcounts;
503  hltcounts.reserve(npath);
504  std::vector<unsigned int> hltaccepts;
505  hltaccepts.reserve(npath);
506 
507  for (pathIt = pathBeg; pathIt != pathEnd; ++pathIt) {
508  unsigned int hltcount = pathIt->second.hltinput;
509  //std::cout<<"hltcount "<<hltcount<<std::endl;
510  hltcounts.push_back(hltcount);
511  unsigned int hltaccept = pathIt->second.hltaccept;
512  //std::cout<<"hltaccept "<<hltaccept<<std::endl;
513  hltaccepts.push_back(hltaccept);
514  unsigned int prescale = pathIt->second.prescale;
515  //std::cout<<"prescale "<<prescale<<std::endl;
516  prescales.push_back(prescale);
517  }
518  prescaleblob.resize(sizeof(unsigned int) * npath);
519  void* prescaleblob_StartAddress = prescaleblob.startingAddress();
520  std::memmove(prescaleblob_StartAddress, &prescales[0], sizeof(unsigned int) * npath);
521  hltcountblob.resize(sizeof(unsigned int) * npath);
522  void* hltcountblob_StartAddress = hltcountblob.startingAddress();
523  std::memmove(hltcountblob_StartAddress, &hltcounts[0], sizeof(unsigned int) * npath);
524  hltacceptblob.resize(sizeof(unsigned int) * npath);
525  void* hltacceptblob_StartAddress = hltacceptblob.startingAddress();
526  std::memmove(hltacceptblob_StartAddress, &hltaccepts[0], sizeof(unsigned int) * npath);
527 
528  hltInserter->processNextIteration();
529  hltInserter->flush();
530  ++comittedls;
531  if (comittedls == commitintv) {
532  std::cout << "\t committing in LS chunck " << comittedls << std::endl;
533  delete hltInserter;
534  hltInserter = nullptr;
535  lumisession->transaction().commit();
536  comittedls = 0;
537  std::cout << "\t committed " << std::endl;
538  } else if (hltlscount == (totalcmsls - 1)) {
539  std::cout << "\t committing at the end" << std::endl;
540  delete hltInserter;
541  hltInserter = nullptr;
542  lumisession->transaction().commit();
543  std::cout << "\t done" << std::endl;
544  }
545  }
546  return hltrundata.data_id;
547  }
548  const std::string HLTV32DB::dataType() const { return "HLTV3"; }
549  const std::string HLTV32DB::sourceType() const { return "DB"; }
551 } // namespace lumi
554 #endif
void addEntry(coral::ISchema &schema, const std::string &datatableName, const Entry &entry, unsigned long long branch_id, const std::string &branchname)
Definition: RevisionDML.cc:60
static const std::string lshltTableName()
Definition: LumiNames.cc:16
const std::string sourceType() const override
Definition: HLTV32DB.cc:549
uint16_t size_type
static const std::string hltdataTableName()
Definition: LumiNames.cc:15
unsigned int cmsluminr
Definition: HLTV32DB.cc:45
std::string m_dest
Definition: DataPipe.h:29
std::map< unsigned int, std::string, std::less< unsigned int > > HltPathMap
Definition: HLTV32DB.cc:51
void writeHltData(coral::ISessionProxy *lumisession, unsigned int irunnumber, const std::string &source, unsigned int npath, HltResult::iterator hltBeg, HltResult::iterator hltEnd, unsigned int commitintv)
Definition: HLTV32DB.cc:324
unsigned long long data_id
Definition: RevisionDML.h:31
void setAuthentication(const std::string &authPath)
Definition: DBConfig.cc:15
unsigned long long getEntryInBranchByName(coral::ISchema &schema, const std::string &datatableName, const std::string &entryname, const std::string &branchname)
Definition: RevisionDML.cc:16
unsigned long long revision_id
Definition: RevisionDML.h:29
std::string pathname
Definition: HLTV32DB.cc:46
static const unsigned int COMMITINTERVAL
Definition: HLTV32DB.cc:36
unsigned long long entry_id
Definition: RevisionDML.h:30
std::vector< std::map< unsigned int, HLTV32DB::hltinfo, std::less< unsigned int > > > HltResult
Definition: HLTV32DB.cc:52
std::string m_source
Definition: DataPipe.h:30
static const unsigned int COMMITLSINTERVAL
Definition: HLTV32DB.cc:37
void bookNewEntry(coral::ISchema &schema, const std::string &datatableName, Entry &entry)
Definition: RevisionDML.cc:44
void insertHltRunData(coral::ISchema &schema, const HltEntry &hltentry)
Definition: RevisionDML.cc:158
unsigned int hltaccept
Definition: HLTV32DB.cc:48
static const std::string hltTableName()
Definition: LumiNames.cc:14
unsigned long long generateNextIDForTable(const std::string &tableName, unsigned int interval=1)
Definition: idDealer.cc:33
const std::string dataType() const override
Definition: HLTV32DB.cc:548
std::string m_authpath
Definition: DataPipe.h:31
std::string m_mode
Definition: DataPipe.h:32
~HLTV32DB() override
Definition: HLTV32DB.cc:550
unsigned long long writeHltDataToSchema2(coral::ISessionProxy *lumisession, unsigned int irunnumber, const std::string &source, unsigned int npath, HltResult::iterator hltBeg, HltResult::iterator hltEnd, HltPathMap &hltpathmap, unsigned int commitintv)
Definition: HLTV32DB.cc:412
#define DEFINE_EDM_PLUGIN(factory, type, name)
void addRevision(coral::ISchema &schema, const std::string &datatableName, const Entry &revision, unsigned long long branch_id, std::string &branchname)
Definition: RevisionDML.cc:97
unsigned int prescale
Definition: HLTV32DB.cc:49
unsigned long long retrieveData(unsigned int) override
Definition: HLTV32DB.cc:73
HLTV32DB(const std::string &dest)
Definition: HLTV32DB.cc:72
static std::string const source
Definition: EdmProvDump.cc:46
void bookNewRevision(coral::ISchema &schema, const std::string &datatableName, Entry &revision)
Definition: RevisionDML.cc:53
unsigned int hltinput
Definition: HLTV32DB.cc:47