CMS 3D CMS Logo

EcalCondDBWriter.cc
Go to the documentation of this file.
1 #include <memory>
2 
4 
6 
12 
13 #include "TObjArray.h"
14 #include "TPRegexp.h"
15 #include "TString.h"
16 
17 void setBit(int &_bitArray, unsigned _iBit) { _bitArray |= (0x1 << _iBit); }
18 
19 bool getBit(int &_bitArray, unsigned _iBit) { return (_bitArray & (0x1 << _iBit)) != 0; }
20 
22  : runNumber_(0),
23  db_(nullptr),
24  location_(_ps.getUntrackedParameter<std::string>("location")),
25  runType_(_ps.getUntrackedParameter<std::string>("runType")),
26  runGeneralTag_(_ps.getUntrackedParameter<std::string>("runGeneralTag")),
27  monRunGeneralTag_(_ps.getUntrackedParameter<std::string>("monRunGeneralTag")),
28  summaryWriter_(_ps.getUntrackedParameterSet("workerParams")),
29  verbosity_(_ps.getUntrackedParameter<int>("verbosity")),
30  executed_(false) {
31  std::vector<std::string> inputRootFiles(_ps.getUntrackedParameter<std::vector<std::string>>("inputRootFiles"));
32 
33  if (inputRootFiles.empty())
34  throw cms::Exception("Configuration") << "No input ROOT file given";
35 
36  if (verbosity_ > 0)
37  edm::LogInfo("EcalDQM") << "Initializing DQMStore from input ROOT files";
38 
40 
41  for (unsigned iF(0); iF < inputRootFiles.size(); ++iF) {
43 
44  if (verbosity_ > 1)
45  edm::LogInfo("EcalDQM") << " " << fileName;
46 
47  TPRegexp pat("DQM_V[0-9]+(?:|_[0-9a-zA-Z]+)_R([0-9]+)");
48  std::unique_ptr<TObjArray> matches(pat.MatchS(fileName.c_str()));
49  if (matches->GetEntries() == 0)
50  throw cms::Exception("Configuration") << "Input file " << fileName << " is not an DQM output";
51 
52  if (iF == 0)
53  runNumber_ = TString(matches->At(1)->GetName()).Atoi();
54  else if (TString(matches->At(1)->GetName()).Atoi() != runNumber_)
55  throw cms::Exception("Configuration") << "Input files disagree in run number";
56 
57  dqmStore.open(fileName, false, "", "", DQMStore::StripRunDirs);
58  }
59 
62  int hostPort(_ps.getUntrackedParameter<int>("hostPort"));
65 
66  std::unique_ptr<EcalCondDBInterface> db(nullptr);
67 
68  if (verbosity_ > 0)
69  edm::LogInfo("EcalDQM") << "Establishing DB connection";
70 
71  try {
72  db = std::make_unique<EcalCondDBInterface>(DBName, userName, password);
73  } catch (std::runtime_error &re) {
74  if (!hostName.empty()) {
75  try {
76  db = std::make_unique<EcalCondDBInterface>(hostName, DBName, userName, password, hostPort);
77  } catch (std::runtime_error &re2) {
78  throw cms::Exception("DBError") << re2.what();
79  }
80  } else
81  throw cms::Exception("DBError") << re.what();
82  }
83 
84  db_ = db.release();
85 
86  if (verbosity_ > 0)
87  edm::LogInfo("EcalDQM") << " Done.";
88 
89  edm::ParameterSet const &workerParams(_ps.getUntrackedParameterSet("workerParams"));
90 
92  workers_[Cosmic] = nullptr;
97  workers_[BeamCalo] = nullptr;
98  workers_[BeamHodo] = nullptr;
99  workers_[TriggerPrimitives] = nullptr;
100  workers_[Cluster] = nullptr;
103  workers_[RawData] = nullptr;
105 
106  for (unsigned iC(0); iC < nTasks; ++iC)
107  if (workers_[iC])
109 }
110 
112  try {
113  delete db_;
114  } catch (std::runtime_error &e) {
115  throw cms::Exception("DBError") << e.what();
116  }
117 
118  for (unsigned iC(0); iC < nTasks; ++iC)
119  delete workers_[iC];
120 }
121 
122 void EcalCondDBWriter::beginRun(edm::Run const &_run, edm::EventSetup const &_es) {
123  for (unsigned iC(0); iC < nTasks; ++iC)
124  if (workers_[iC])
125  workers_[iC]->setSetupObjects(_es);
126 }
127 
129  if (executed_)
130  return;
131 
133 
134  if (verbosity_ > 1)
135  edm::LogInfo("EcalDQM") << " Searching event info";
136 
137  uint64_t timeStampInFile(0);
138  unsigned processedEvents(0);
139 
140  _igetter.cd();
141  std::vector<std::string> dirs(_igetter.getSubdirs());
142  for (unsigned iD(0); iD < dirs.size(); ++iD) {
143  if (!_igetter.dirExists(dirs[iD] + "/EventInfo"))
144  continue;
145 
146  MonitorElement *timeStampME(_igetter.get(dirs[iD] + "/EventInfo/runStartTimeStamp"));
147  if (timeStampME) {
148  double timeStampValue(timeStampME->getFloatValue());
149  uint64_t seconds(timeStampValue);
150  uint64_t microseconds((timeStampValue - seconds) * 1.e6);
151  timeStampInFile = (seconds << 32) | microseconds;
152  }
153 
154  MonitorElement *eventsME(_igetter.get(dirs[iD] + "/EventInfo/processedEvents"));
155  if (eventsME)
156  processedEvents = eventsME->getIntValue();
157 
158  if (timeStampInFile != 0 && processedEvents != 0) {
159  if (verbosity_ > 1)
160  edm::LogInfo("EcalDQM") << " Event info found; timestamp=" << timeStampInFile
161  << " processedEvents=" << processedEvents;
162  break;
163  }
164  }
165 
166  if (verbosity_ > 0)
167  edm::LogInfo("EcalDQM") << " Done.";
168 
170 
171  if (verbosity_ > 0)
172  edm::LogInfo("EcalDQM") << "Setting up source MonitorElements for given run type " << runType_;
173 
174  int taskList(0);
175  for (unsigned iC(0); iC < nTasks; ++iC) {
176  if (!workers_[iC] || !workers_[iC]->runsOn(runType_))
177  continue;
178 
179  workers_[iC]->retrieveSource(_igetter);
180 
181  setBit(taskList, iC);
182  }
183 
184  if (verbosity_ > 0)
185  edm::LogInfo("EcalDQM") << " Done.";
186 
188 
189  if (verbosity_ > 0)
190  edm::LogInfo("EcalDQM") << "Initializing DB entry";
191 
192  RunIOV runIOV;
193  RunTag runTag;
194  try {
195  runIOV = db_->fetchRunIOV(location_, runNumber_);
196  runTag = runIOV.getRunTag();
197  } catch (std::runtime_error &e) {
198  std::cerr << e.what();
199 
200  if (timeStampInFile == 0)
201  throw cms::Exception("Initialization") << "Time stamp for the run could not be found";
202 
203  LocationDef locationDef;
204  locationDef.setLocation(location_);
205  RunTypeDef runTypeDef;
206  runTypeDef.setRunType(runType_);
207  runTag.setLocationDef(locationDef);
208  runTag.setRunTypeDef(runTypeDef);
210 
211  runIOV.setRunStart(Tm(timeStampInFile));
212  runIOV.setRunNumber(runNumber_);
213  runIOV.setRunTag(runTag);
214 
215  try {
216  db_->insertRunIOV(&runIOV);
217  runIOV = db_->fetchRunIOV(&runTag, runNumber_);
218  } catch (std::runtime_error &e) {
219  throw cms::Exception("DBError") << e.what();
220  }
221  }
222 
223  // No filtering - DAQ definitions change time to time..
224  // if(runType_ != runIOV.getRunTag().getRunTypeDef().getRunType())
225  // throw cms::Exception("Configuration") << "Given run type " << runType_
226  // << " does not match the run type in DB " <<
227  // runIOV.getRunTag().getRunTypeDef().getRunType();
228 
229  MonVersionDef versionDef;
230  versionDef.setMonitoringVersion("test01"); // the only mon_ver in mon_version_def table as of September
231  // 2012
232  MonRunTag monTag;
233  monTag.setMonVersionDef(versionDef);
235 
236  MonRunIOV monIOV;
237 
238  try {
239  monIOV = db_->fetchMonRunIOV(&runTag, &monTag, runNumber_, 1);
240  } catch (std::runtime_error &e) {
241  std::cerr << e.what();
242 
243  monIOV.setRunIOV(runIOV);
244  monIOV.setSubRunNumber(1);
245  monIOV.setSubRunStart(runIOV.getRunStart());
246  monIOV.setSubRunEnd(runIOV.getRunEnd());
247  monIOV.setMonRunTag(monTag);
248 
249  try {
250  db_->insertMonRunIOV(&monIOV);
251  monIOV = db_->fetchMonRunIOV(&runTag, &monTag, runNumber_, 1);
252  } catch (std::runtime_error &e) {
253  throw cms::Exception("DBError") << e.what();
254  }
255  }
256 
257  if (verbosity_ > 0)
258  edm::LogInfo("EcalDQM") << " Done.";
259 
261 
262  if (verbosity_ > 0)
263  edm::LogInfo("EcalDQM") << "Writing to DB";
264 
265  int outcome(0);
266  for (unsigned iC(0); iC < nTasks; ++iC) {
267  if (!getBit(taskList, iC))
268  continue;
269 
270  if (verbosity_ > 1)
271  edm::LogInfo("EcalDQM") << " " << workers_[iC]->getName();
272 
273  if (workers_[iC]->isActive() && workers_[iC]->run(db_, monIOV))
274  setBit(outcome, iC);
275  }
276 
277  if (verbosity_ > 0)
278  edm::LogInfo("EcalDQM") << " Done.";
279 
280  if (verbosity_ > 0)
281  edm::LogInfo("EcalDQM") << "Registering the outcome of DB writing";
282 
283  summaryWriter_.setTaskList(taskList);
284  summaryWriter_.setOutcome(outcome);
285  summaryWriter_.setProcessedEvents(processedEvents);
286  summaryWriter_.run(db_, monIOV);
287 
288  if (verbosity_ > 0)
289  edm::LogInfo("EcalDQM") << " Done.";
290 
291  executed_ = true;
292 }
293 
static const char runNumber_[]
void setRunTypeDef(const RunTypeDef &runTypeDef)
Definition: RunTag.cc:42
void setRunStart(const Tm &start)
Definition: RunIOV.cc:33
bool run(EcalCondDBInterface *, MonRunIOV &) override
double seconds()
MonRunIOV fetchMonRunIOV(RunTag *runtag, MonRunTag *montag, run_t run, subrun_t monrun) noexcept(false)
void insertMonRunIOV(MonRunIOV *iov) noexcept(false)
EcalCondDBWriter(edm::ParameterSet const &)
std::string location_
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::string monRunGeneralTag_
Definition: RunTag.h:13
void setRunIOV(const RunIOV &iov)
Definition: MonRunIOV.cc:36
void setProcessedEvents(unsigned _n)
virtual bool dirExists(std::string const &path) const
Definition: DQMStore.cc:737
ParameterSet getUntrackedParameterSet(std::string const &name, ParameterSet const &defaultValue) const
~EcalCondDBWriter() override
std::string runGeneralTag_
void setGeneralTag(std::string tag)
Definition: MonRunTag.cc:21
void setRunTag(const RunTag &tag)
Definition: RunIOV.cc:51
Definition: HeavyIon.h:7
T getUntrackedParameter(std::string const &, T const &) const
void setRunNumber(run_t run)
Definition: RunIOV.cc:22
std::string const & getName() const
RunIOV fetchRunIOV(RunTag *tag, run_t run) noexcept(false)
EcalCondDBInterface * db_
void setTaskList(int _list)
Tm getRunEnd() const
Definition: RunIOV.cc:49
void setSubRunEnd(const Tm &end)
Definition: MonRunIOV.cc:63
void setSubRunNumber(subrun_t subrun)
Definition: MonRunIOV.cc:45
void insertRunIOV(RunIOV *iov) noexcept(false)
RunTag getRunTag() const
Definition: RunIOV.cc:58
void setMonVersionDef(const MonVersionDef &ver)
Definition: MonRunTag.cc:30
void setSubRunStart(const Tm &start)
Definition: MonRunIOV.cc:54
void setLocationDef(const LocationDef &locDef)
Definition: RunTag.cc:33
void setBit(int &_bitArray, unsigned _iBit)
Log< level::Info, false > LogInfo
void beginRun(edm::Run const &, edm::EventSetup const &) override
unsigned long long uint64_t
Definition: Time.h:13
void setRunType(std::string runtype)
Definition: RunTypeDef.cc:21
Tm getRunStart() const
Definition: RunIOV.cc:40
void setMonRunTag(const MonRunTag &tag)
Definition: MonRunIOV.cc:27
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:680
void retrieveSource(DQMStore::IGetter &)
void setMonitoringVersion(std::string ver)
ecaldqm::DBWriterWorker * workers_[nTasks]
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
void setLocation(std::string loc)
Definition: LocationDef.cc:20
ecaldqm::SummaryWriter summaryWriter_
void setSetupObjects(edm::EventSetup const &)
Definition: DQWorker.cc:104
void setGeneralTag(std::string tag)
Definition: RunTag.cc:24
Definition: RunIOV.h:13
Definition: Tm.h:13
bool getBit(int &_bitArray, unsigned _iBit)
void setOutcome(int _outcome)
std::string runType_
Definition: Run.h:45
virtual int64_t getIntValue() const
virtual DQM_DEPRECATED std::vector< std::string > getSubdirs() const
Definition: DQMStore.cc:707