CMS 3D CMS Logo

DQMRootSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FwkIO
4 // Class : DQMRootSource
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Chris Jones
10 // Created: Tue May 3 11:13:47 CDT 2011
11 //
12 
13 // system include files
14 #include <memory>
15 
16 #include "TFile.h"
17 #include "TString.h"
18 #include "TTree.h"
19 #include <map>
20 #include <string>
21 #include <vector>
22 
26 
32 
35 
41 
44 
47 
51 
52 #include "format.h"
53 
54 // class rather than namespace so we can make this a friend of the
55 // MonitorElement to get access to constructors etc.
56 struct DQMTTreeIO {
59 
60  // TODO: this should probably be moved somewhere else
62  public:
63  // Utility function to check the consistency of the axis labels
64  // Taken from TH1::CheckBinLabels which is not public
65  static bool CheckBinLabels(const TAxis* a1, const TAxis* a2) {
66  // Check that axis have same labels
67  THashList* l1 = (const_cast<TAxis*>(a1))->GetLabels();
68  THashList* l2 = (const_cast<TAxis*>(a2))->GetLabels();
69 
70  if (!l1 && !l2)
71  return true;
72  if (!l1 || !l2) {
73  return false;
74  }
75 
76  // Check now labels sizes are the same
77  if (l1->GetSize() != l2->GetSize()) {
78  return false;
79  }
80 
81  for (int i = 1; i <= a1->GetNbins(); ++i) {
82  std::string_view label1 = a1->GetBinLabel(i);
83  std::string_view label2 = a2->GetBinLabel(i);
84  if (label1 != label2) {
85  return false;
86  }
87  }
88 
89  return true;
90  }
91 
92  // NOTE: the merge logic comes from DataFormats/Histograms/interface/MEtoEDMFormat.h
93  static void mergeTogether(TH1* original, TH1* toAdd) {
94  if (original->CanExtendAllAxes() && toAdd->CanExtendAllAxes()) {
95  TList list;
96  list.Add(toAdd);
97  if (original->Merge(&list) == -1) {
98  edm::LogError("MergeFailure") << "Failed to merge DQM element " << original->GetName();
99  }
100  } else {
101  // TODO: Redo. This is both more strict than what ROOT checks for yet
102  // allows cases where ROOT fails with merging.
103  if (original->GetNbinsX() == toAdd->GetNbinsX() &&
104  original->GetXaxis()->GetXmin() == toAdd->GetXaxis()->GetXmin() &&
105  original->GetXaxis()->GetXmax() == toAdd->GetXaxis()->GetXmax() &&
106  original->GetNbinsY() == toAdd->GetNbinsY() &&
107  original->GetYaxis()->GetXmin() == toAdd->GetYaxis()->GetXmin() &&
108  original->GetYaxis()->GetXmax() == toAdd->GetYaxis()->GetXmax() &&
109  original->GetNbinsZ() == toAdd->GetNbinsZ() &&
110  original->GetZaxis()->GetXmin() == toAdd->GetZaxis()->GetXmin() &&
111  original->GetZaxis()->GetXmax() == toAdd->GetZaxis()->GetXmax() &&
112  CheckBinLabels(original->GetXaxis(), toAdd->GetXaxis()) &&
113  CheckBinLabels(original->GetYaxis(), toAdd->GetYaxis()) &&
114  CheckBinLabels(original->GetZaxis(), toAdd->GetZaxis())) {
115  original->Add(toAdd);
116  } else {
117  edm::LogError("MergeFailure") << "Found histograms with different axis limits or different labels '"
118  << original->GetName() << "' not merged.";
119  }
120  }
121  }
122  };
123 
124  // This struct allows to find all MEs belonging to a run-lumi pair
125  // All files will be open at once so m_file property indicates the file where data is saved.
126  struct FileMetadata {
127  unsigned int m_run;
128  unsigned int m_lumi;
129  ULong64_t m_beginTime;
130  ULong64_t m_endTime;
131  ULong64_t m_firstIndex;
132  ULong64_t m_lastIndex; // Last is inclusive
133  unsigned int m_type;
134  TFile* m_file;
135 
136  // This will be used when sorting a vector
137  bool operator<(const FileMetadata& obj) const {
138  if (m_run == obj.m_run)
139  return m_lumi < obj.m_lumi;
140  else
141  return m_run < obj.m_run;
142  }
143 
144  void describe() {
145  std::cout << "read r:" << m_run << " l:" << m_lumi << " bt:" << m_beginTime << " et:" << m_endTime
146  << " fi:" << m_firstIndex << " li:" << m_lastIndex << " type:" << m_type << " file: " << m_file
147  << std::endl;
148  }
149  };
150 
152  public:
154  : m_kind(kind), m_rescope(rescope) {}
155  virtual ~TreeReaderBase() {}
156 
157  MonitorElementData::Key makeKey(std::string const& fullname, int run, int lumi) {
159  key.kind_ = m_kind;
161  if (m_rescope == MonitorElementData::Scope::LUMI) {
162  // no rescoping
163  key.scope_ = lumi == 0 ? MonitorElementData::Scope::RUN : MonitorElementData::Scope::LUMI;
165  } else if (m_rescope == MonitorElementData::Scope::RUN) {
166  // everything becomes run, we'll never see Scope::JOB inside DQMIO files.
167  key.scope_ = MonitorElementData::Scope::RUN;
168  key.id_ = edm::LuminosityBlockID(run, 0);
169  } else if (m_rescope == MonitorElementData::Scope::JOB) {
170  // Everything is aggregated over the entire job.
171  key.scope_ = MonitorElementData::Scope::JOB;
172  key.id_ = edm::LuminosityBlockID(0, 0);
173  } else {
174  assert(!"Invalid Scope in rescope option.");
175  }
176  return key;
177  }
178  virtual void read(ULong64_t iIndex, DQMStore* dqmstore, int run, int lumi) = 0;
179  virtual void setTree(TTree* iTree) = 0;
180 
181  protected:
184  };
185 
186  template <class T>
188  public:
193  }
194 
195  void read(ULong64_t iIndex, DQMStore* dqmstore, int run, int lumi) override {
196  // This will populate the fields as defined in setTree method
197  m_tree->GetEntry(iIndex);
198 
199  auto key = makeKey(*m_fullName, run, lumi);
200  auto existing = dqmstore->findOrRecycle(key);
201  if (existing) {
202  // TODO: make sure there is sufficient locking here.
204  } else {
205  // We make our own MEs here, to avoid a round-trip through the booking API.
206  MonitorElementData meData;
207  meData.key_ = key;
208  meData.value_.object_ = std::unique_ptr<T>((T*)(m_buffer->Clone()));
209  auto me = new MonitorElement(std::move(meData));
210  dqmstore->putME(me);
211  }
212  }
213 
214  void setTree(TTree* iTree) override {
215  m_tree = iTree;
216  m_tree->SetBranchAddress(kFullNameBranch, &m_fullName);
217  m_tree->SetBranchAddress(kFlagBranch, &m_tag);
218  m_tree->SetBranchAddress(kValueBranch, &m_buffer);
219  }
220 
221  private:
222  TTree* m_tree = nullptr;
224  T* m_buffer = nullptr;
225  uint32_t m_tag = 0;
226  };
227 
229  public:
232  }
233 
234  void read(ULong64_t iIndex, DQMStore* dqmstore, int run, int lumi) override {
235  // This will populate the fields as defined in setTree method
236  m_tree->GetEntry(iIndex);
237 
238  auto key = makeKey(*m_fullName, run, lumi);
239  auto existing = dqmstore->findOrRecycle(key);
240 
241  if (existing) {
242  existing->Fill(*m_value);
243  } else {
244  // We make our own MEs here, to avoid a round-trip through the booking API.
245  MonitorElementData meData;
246  meData.key_ = key;
247  meData.value_.scalar_.str = *m_value;
248  auto me = new MonitorElement(std::move(meData));
249  dqmstore->putME(me);
250  }
251  }
252 
253  void setTree(TTree* iTree) override {
254  m_tree = iTree;
255  m_tree->SetBranchAddress(kFullNameBranch, &m_fullName);
256  m_tree->SetBranchAddress(kFlagBranch, &m_tag);
257  m_tree->SetBranchAddress(kValueBranch, &m_value);
258  }
259 
260  private:
261  TTree* m_tree = nullptr;
263  std::string* m_value = nullptr;
264  uint32_t m_tag = 0;
265  };
266 
267  template <class T>
269  public:
272  }
273 
274  void read(ULong64_t iIndex, DQMStore* dqmstore, int run, int lumi) override {
275  // This will populate the fields as defined in setTree method
276  m_tree->GetEntry(iIndex);
277 
278  auto key = makeKey(*m_fullName, run, lumi);
279  auto existing = dqmstore->findOrRecycle(key);
280 
281  if (existing) {
282  existing->Fill(m_buffer);
283  } else {
284  // We make our own MEs here, to avoid a round-trip through the booking API.
285  MonitorElementData meData;
286  meData.key_ = key;
288  meData.value_.scalar_.num = m_buffer;
290  meData.value_.scalar_.real = m_buffer;
291  auto me = new MonitorElement(std::move(meData));
292  dqmstore->putME(me);
293  }
294  }
295 
296  void setTree(TTree* iTree) override {
297  m_tree = iTree;
298  m_tree->SetBranchAddress(kFullNameBranch, &m_fullName);
299  m_tree->SetBranchAddress(kFlagBranch, &m_tag);
300  m_tree->SetBranchAddress(kValueBranch, &m_buffer);
301  }
302 
303  private:
304  TTree* m_tree = nullptr;
306  T m_buffer = 0;
307  uint32_t m_tag = 0;
308  };
309 };
310 
312 public:
314  ~DQMRootSource() override;
315 
316  // ---------- const member functions ---------------------
317 
318  // ---------- static member functions --------------------
319 
320  // ---------- member functions ---------------------------
321  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
322 
323 private:
324  DQMRootSource(const DQMRootSource&) = delete;
325 
327 
328  std::unique_ptr<edm::FileBlock> readFile_() override;
329  std::shared_ptr<edm::RunAuxiliary> readRunAuxiliary_() override;
330  std::shared_ptr<edm::LuminosityBlockAuxiliary> readLuminosityBlockAuxiliary_() override;
331  void readRun_(edm::RunPrincipal& rpCache) override;
332  void readLuminosityBlock_(edm::LuminosityBlockPrincipal& lbCache) override;
333  void readEvent_(edm::EventPrincipal&) override;
334 
335  // Read MEs from m_fileMetadatas to DQMStore till run or lumi transition
336  void readElements();
337  // True if m_currentIndex points to an element that has a different
338  // run or lumi than the previous element (a transition needs to happen).
339  // False otherwise.
340  bool isRunOrLumiTransition() const;
341  void readNextItemType();
342 
343  // These methods will be called by the framework.
344  // MEs in DQMStore will be put to products.
345  void beginRun(edm::Run& run) override;
347 
348  // If the run matches the filterOnRun configuration parameter, the run
349  // (and all its lumis) will be kept.
350  // Otherwise, check if a run and a lumi are in the range that needs to be processed.
351  // Range is retrieved from lumisToProcess configuration parameter.
352  // If at least one lumi of a run needs to be kept, per run MEs of that run will also be kept.
354  void logFileAction(char const* msg, char const* fileName) const;
355 
356  const DQMRootSource& operator=(const DQMRootSource&) = delete; // stop default
357 
358  // ---------- member data --------------------------------
359 
360  // Properties from python config
362  unsigned int m_filterOnRun;
364  std::vector<edm::LuminosityBlockRange> m_lumisToProcess;
366 
368  // Each ME type gets its own reader
369  std::vector<std::shared_ptr<TreeReaderBase>> m_treeReaders;
370 
371  // Index of currenlty processed row in m_fileMetadatas
372  unsigned int m_currentIndex;
373  // All open DQMIO files
374  std::vector<TFile*> m_openFiles;
375  // An item here is a row read from DQMIO indices (metadata) table
376  std::vector<FileMetadata> m_fileMetadatas;
377 };
378 
379 //
380 // constants, enums and typedefs
381 //
382 
383 //
384 // static data member definitions
385 //
386 
389  desc.addUntracked<std::vector<std::string>>("fileNames")->setComment("Names of files to be processed.");
390  desc.addUntracked<unsigned int>("filterOnRun", 0)->setComment("Just limit the process to the selected run.");
391  desc.addUntracked<std::string>("reScope", "JOB")
392  ->setComment(
393  "Accumulate histograms more coarsely."
394  " Options: \"\": keep unchanged, \"RUN\": turn LUMI histograms into RUN histograms, \"JOB\": turn everything "
395  "into JOB histograms.");
396  desc.addUntracked<bool>("skipBadFiles", false)->setComment("Skip the file if it is not valid");
397  desc.addUntracked<std::string>("overrideCatalog", std::string())
398  ->setComment("An alternate file catalog to use instead of the standard site one.");
399  std::vector<edm::LuminosityBlockRange> defaultLumis;
400  desc.addUntracked<std::vector<edm::LuminosityBlockRange>>("lumisToProcess", defaultLumis)
401  ->setComment("Skip any lumi inside the specified run:lumi range.");
402 
403  descriptions.addDefault(desc);
404 }
405 
406 //
407 // constructors and destructor
408 //
409 
411  : edm::PuttableSourceBase(iPSet, iDesc),
412  m_skipBadFiles(iPSet.getUntrackedParameter<bool>("skipBadFiles", false)),
413  m_filterOnRun(iPSet.getUntrackedParameter<unsigned int>("filterOnRun", 0)),
414  m_catalog(iPSet.getUntrackedParameter<std::vector<std::string>>("fileNames"),
415  iPSet.getUntrackedParameter<std::string>("overrideCatalog")),
416  m_lumisToProcess(iPSet.getUntrackedParameter<std::vector<edm::LuminosityBlockRange>>(
417  "lumisToProcess", std::vector<edm::LuminosityBlockRange>())),
418  m_rescope(std::map<std::string, MonitorElementData::Scope>{
419  {"", MonitorElementData::Scope::LUMI},
420  {"LUMI", MonitorElementData::Scope::LUMI},
421  {"RUN", MonitorElementData::Scope::RUN},
422  {"JOB", MonitorElementData::Scope::JOB}}[iPSet.getUntrackedParameter<std::string>("reScope", "JOB")]),
423  m_nextItemType(edm::InputSource::IsFile),
424  m_treeReaders(kNIndicies, std::shared_ptr<TreeReaderBase>()),
425  m_currentIndex(0),
426  m_openFiles(std::vector<TFile*>()),
427  m_fileMetadatas(std::vector<FileMetadata>()) {
428  edm::sortAndRemoveOverlaps(m_lumisToProcess);
429 
430  if (m_catalog.fileNames(0).empty()) {
431  m_nextItemType = edm::InputSource::IsStop;
432  } else {
433  m_treeReaders[kIntIndex].reset(new TreeSimpleReader<Long64_t>(MonitorElementData::Kind::INT, m_rescope));
434  m_treeReaders[kFloatIndex].reset(new TreeSimpleReader<double>(MonitorElementData::Kind::REAL, m_rescope));
435  m_treeReaders[kStringIndex].reset(new TreeStringReader(MonitorElementData::Kind::STRING, m_rescope));
436  m_treeReaders[kTH1FIndex].reset(new TreeObjectReader<TH1F>(MonitorElementData::Kind::TH1F, m_rescope));
437  m_treeReaders[kTH1SIndex].reset(new TreeObjectReader<TH1S>(MonitorElementData::Kind::TH1S, m_rescope));
438  m_treeReaders[kTH1DIndex].reset(new TreeObjectReader<TH1D>(MonitorElementData::Kind::TH1D, m_rescope));
439  m_treeReaders[kTH2FIndex].reset(new TreeObjectReader<TH2F>(MonitorElementData::Kind::TH2F, m_rescope));
440  m_treeReaders[kTH2SIndex].reset(new TreeObjectReader<TH2S>(MonitorElementData::Kind::TH2S, m_rescope));
441  m_treeReaders[kTH2DIndex].reset(new TreeObjectReader<TH2D>(MonitorElementData::Kind::TH2D, m_rescope));
442  m_treeReaders[kTH3FIndex].reset(new TreeObjectReader<TH3F>(MonitorElementData::Kind::TH3F, m_rescope));
443  m_treeReaders[kTProfileIndex].reset(new TreeObjectReader<TProfile>(MonitorElementData::Kind::TPROFILE, m_rescope));
444  m_treeReaders[kTProfile2DIndex].reset(
445  new TreeObjectReader<TProfile2D>(MonitorElementData::Kind::TPROFILE2D, m_rescope));
446  }
447 
448  produces<DQMToken, edm::Transition::BeginRun>("DQMGenerationRecoRun");
449  produces<DQMToken, edm::Transition::BeginLuminosityBlock>("DQMGenerationRecoLumi");
450 }
451 
453  for (auto& file : m_openFiles) {
454  if (file != nullptr && file->IsOpen()) {
455  file->Close();
456  logFileAction("Closed file", "");
457  }
458  }
459 }
460 
461 //
462 // member functions
463 //
464 
466 
467 // We will read the metadata of all files and fill m_fileMetadatas vector
468 std::unique_ptr<edm::FileBlock> DQMRootSource::readFile_() {
469  const int numFiles = m_catalog.fileNames(0).size();
470  m_openFiles.reserve(numFiles);
471 
472  for (auto& fileitem : m_catalog.fileCatalogItems()) {
473  TFile* file;
474  std::list<std::string> exInfo;
475  //loop over names of a file, each of them corresponds to a data catalog
476  bool isGoodFile(true);
477  //get all names of a file, each of them corresponds to a data catalog
478  const std::vector<std::string>& fNames = fileitem.fileNames();
479  for (std::vector<std::string>::const_iterator it = fNames.begin(); it != fNames.end(); ++it) {
480  // Try to open a file
481  try {
482  file = TFile::Open(it->c_str());
483 
484  // Exception will be trapped so we pull it out ourselves
485  std::exception_ptr e = edm::threadLocalException::getException();
486  if (e != std::exception_ptr()) {
487  edm::threadLocalException::setException(std::exception_ptr());
488  std::rethrow_exception(e);
489  }
490 
491  } catch (cms::Exception const& e) {
492  file = nullptr; // is there anything we need to free?
493  if (std::next(it) == fNames.end()) { //last name corresponding to the last data catalog to try
494  if (!m_skipBadFiles) {
496  ex.addContext("Opening DQM Root file");
497  ex << "\nInput file " << it->c_str() << " was not found, could not be opened, or is corrupted.\n";
498  //report previous exceptions when use other names to open file
499  for (auto const& s : exInfo)
500  ex.addAdditionalInfo(s);
501  throw ex;
502  }
503  isGoodFile = false;
504  }
505  // save in case of error when trying next name
506  for (auto const& s : e.additionalInfo())
507  exInfo.push_back(s);
508  }
509 
510  // Check if a file is usable
511  if (file && !file->IsZombie()) {
512  logFileAction("Successfully opened file ", it->c_str());
513  break;
514  } else {
515  if (std::next(it) == fNames.end()) {
516  if (!m_skipBadFiles) {
518  ex << "Input file " << it->c_str() << " could not be opened.\n";
519  ex.addContext("Opening DQM Root file");
520  //report previous exceptions when use other names to open file
521  for (auto const& s : exInfo)
522  ex.addAdditionalInfo(s);
523  throw ex;
524  }
525  isGoodFile = false;
526  }
527  if (file) {
528  delete file;
529  file = nullptr;
530  }
531  }
532  } //end loop over names of the file
533 
534  if (!isGoodFile && m_skipBadFiles)
535  continue;
536 
537  m_openFiles.insert(m_openFiles.begin(), file);
538 
539  // Check file format version, which is encoded in the Title of the TFile
540  if (strcmp(file->GetTitle(), "1") != 0) {
542  ex << "Input file " << fNames[0].c_str() << " does not appear to be a DQM Root file.\n";
543  }
544 
545  // Read metadata from the file
546  TTree* indicesTree = dynamic_cast<TTree*>(file->Get(kIndicesTree));
547  assert(indicesTree != nullptr);
548 
549  FileMetadata temp;
550  // Each line of metadata will be read into the coresponding fields of temp.
551  indicesTree->SetBranchAddress(kRunBranch, &temp.m_run);
552  indicesTree->SetBranchAddress(kLumiBranch, &temp.m_lumi);
553  indicesTree->SetBranchAddress(kBeginTimeBranch, &temp.m_beginTime);
554  indicesTree->SetBranchAddress(kEndTimeBranch, &temp.m_endTime);
555  indicesTree->SetBranchAddress(kTypeBranch, &temp.m_type);
556  indicesTree->SetBranchAddress(kFirstIndex, &temp.m_firstIndex);
557  indicesTree->SetBranchAddress(kLastIndex, &temp.m_lastIndex);
558 
559  for (Long64_t index = 0; index != indicesTree->GetEntries(); ++index) {
560  indicesTree->GetEntry(index);
561  temp.m_file = file;
562 
563  if (keepIt(temp.m_run, temp.m_lumi)) {
564  m_fileMetadatas.push_back(temp);
565  }
566  }
567 
568  } //end loop over files
569 
570  // Sort to make sure runs and lumis appear in sequential order
571  std::stable_sort(m_fileMetadatas.begin(), m_fileMetadatas.end());
572 
573  // If we have lumisections without matching runs, insert dummy runs here.
574  unsigned int run = 0;
575  auto toadd = std::vector<FileMetadata>();
576  for (auto& metadata : m_fileMetadatas) {
577  if (run < metadata.m_run && metadata.m_lumi != 0) {
578  // run transition and lumi transition at the same time!
579  FileMetadata dummy{}; // zero initialize
580  dummy.m_run = metadata.m_run;
581  dummy.m_lumi = 0;
582  dummy.m_type = kNoTypesStored;
583  toadd.push_back(dummy);
584  }
585  run = metadata.m_run;
586  }
587 
588  if (!toadd.empty()) {
589  // rather than trying to insert at the right places, just append and sort again.
590  m_fileMetadatas.insert(m_fileMetadatas.end(), toadd.begin(), toadd.end());
591  std::stable_sort(m_fileMetadatas.begin(), m_fileMetadatas.end());
592  }
593 
594  //for (auto& metadata : m_fileMetadatas)
595  // metadata.describe();
596 
597  // Stop if there's nothing to process. Otherwise start the run.
598  if (m_fileMetadatas.empty())
600  else
602 
603  // We have to return something but not sure why
604  return std::make_unique<edm::FileBlock>();
605 }
606 
607 std::shared_ptr<edm::RunAuxiliary> DQMRootSource::readRunAuxiliary_() {
608  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
609  auto runAux =
610  edm::RunAuxiliary(metadata.m_run, edm::Timestamp(metadata.m_beginTime), edm::Timestamp(metadata.m_endTime));
611  return std::make_shared<edm::RunAuxiliary>(runAux);
612 }
613 
614 std::shared_ptr<edm::LuminosityBlockAuxiliary> DQMRootSource::readLuminosityBlockAuxiliary_() {
615  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
617  edm::Timestamp(metadata.m_beginTime),
618  edm::Timestamp(metadata.m_endTime));
619  return std::make_shared<edm::LuminosityBlockAuxiliary>(lumiAux);
620 }
621 
623  // Read elements of a current run.
624  do {
625  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
626  if (metadata.m_lumi == 0) {
627  readElements();
628  }
629  m_currentIndex++;
630  } while (!isRunOrLumiTransition());
631 
633 
635  jr->reportInputRunNumber(rpCache.id().run());
637 }
638 
640  // Read elements of a current lumi.
641  do {
642  readElements();
643  m_currentIndex++;
644  } while (!isRunOrLumiTransition());
645 
647 
649  jr->reportInputLumiSection(lbCache.id().run(), lbCache.id().luminosityBlock());
651 }
652 
654 
656  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
657 
658  if (metadata.m_type != kNoTypesStored) {
659  std::shared_ptr<TreeReaderBase> reader = m_treeReaders[metadata.m_type];
660  TTree* tree = dynamic_cast<TTree*>(metadata.m_file->Get(kTypeNames[metadata.m_type]));
661  // The Reset() below screws up the tree, so we need to re-read it from file
662  // before use here.
663  tree->Refresh();
664 
665  reader->setTree(tree);
666 
667  ULong64_t index = metadata.m_firstIndex;
668  ULong64_t endIndex = metadata.m_lastIndex + 1;
669 
670  for (; index != endIndex; ++index) {
671  reader->read(index, edm::Service<DQMStore>().operator->(), metadata.m_run, metadata.m_lumi);
672  }
673  // Drop buffers in the TTree. This reduces memory consuption while the tree
674  // just sits there and waits for the next block to be read.
675  tree->Reset();
676  }
677 }
678 
680  if (m_currentIndex == 0) {
681  return false;
682  }
683 
684  if (m_currentIndex > m_fileMetadatas.size() - 1) {
685  // We reached the end
686  return true;
687  }
688 
689  FileMetadata previousMetadata = m_fileMetadatas[m_currentIndex - 1];
690  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
691 
692  return previousMetadata.m_run != metadata.m_run || previousMetadata.m_lumi != metadata.m_lumi;
693 }
694 
696  if (m_currentIndex == 0) {
698  } else if (m_currentIndex > m_fileMetadatas.size() - 1) {
699  // We reached the end
701  } else {
702  FileMetadata previousMetadata = m_fileMetadatas[m_currentIndex - 1];
703  FileMetadata metadata = m_fileMetadatas[m_currentIndex];
704 
705  if (previousMetadata.m_run != metadata.m_run) {
707  } else if (previousMetadata.m_lumi != metadata.m_lumi) {
709  }
710  }
711 }
712 
714  std::unique_ptr<DQMToken> product = std::make_unique<DQMToken>();
715  run.put(std::move(product), "DQMGenerationRecoRun");
716 }
717 
719  std::unique_ptr<DQMToken> product = std::make_unique<DQMToken>();
720  lumi.put(std::move(product), "DQMGenerationRecoLumi");
721 }
722 
724  if (m_filterOnRun != 0 && run != m_filterOnRun) {
725  return false;
726  }
727 
728  if (m_lumisToProcess.empty()) {
729  return true;
730  }
731 
732  for (edm::LuminosityBlockRange const& lumiToProcess : m_lumisToProcess) {
733  if (run >= lumiToProcess.startRun() && run <= lumiToProcess.endRun()) {
734  if (lumi >= lumiToProcess.startLumi() && lumi <= lumiToProcess.endLumi()) {
735  return true;
736  } else if (lumi == 0) {
737  return true;
738  }
739  }
740  }
741  return false;
742 }
743 
744 void DQMRootSource::logFileAction(char const* msg, char const* fileName) const {
745  edm::LogAbsolute("fileAction") << std::setprecision(0) << edm::TimeOfDay() << msg << fileName;
747 }
748 
749 //
750 // const member functions
751 //
752 
753 //
754 // static member functions
755 //
edm::RunPrincipal::id
RunID const & id() const
Definition: RunPrincipal.h:65
ConfigurationDescriptions.h
DQMRootSource::m_nextItemType
edm::InputSource::ItemType m_nextItemType
Definition: DQMRootSource.cc:367
kValueBranch
static const char *const kValueBranch
Definition: format.h:55
DQMTTreeIO::TreeObjectReader::read
void read(ULong64_t iIndex, DQMStore *dqmstore, int run, int lumi) override
Definition: DQMRootSource.cc:195
edm::RunNumber_t
unsigned int RunNumber_t
Definition: RunLumiEventNumber.h:14
kLastIndex
static const char *const kLastIndex
Definition: format.h:66
DQMTTreeIO::FileMetadata::m_beginTime
ULong64_t m_beginTime
Definition: DQMRootSource.cc:129
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
DQMRootSource::DQMRootSource
DQMRootSource(edm::ParameterSet const &, const edm::InputSourceDescription &)
Definition: DQMRootSource.cc:410
DQMRootSource::keepIt
bool keepIt(edm::RunNumber_t, edm::LuminosityBlockNumber_t) const
Definition: DQMRootSource.cc:723
dqm::implementation::DQMStore::findOrRecycle
MonitorElement * findOrRecycle(MonitorElementData::Key const &)
Definition: DQMStore.cc:317
kTProfileIndex
Definition: format.h:33
MessageLogger.h
funct::false
false
Definition: Factorize.h:29
MonitorElementData::Kind::INT
DQMTTreeIO::TreeObjectReader::m_fullName
std::string * m_fullName
Definition: DQMRootSource.cc:223
DQMRootSource::readRun_
void readRun_(edm::RunPrincipal &rpCache) override
Definition: DQMRootSource.cc:622
cms::Exception::addContext
void addContext(std::string const &context)
Definition: Exception.cc:165
DQMTTreeIO::TreeObjectReader::setTree
void setTree(TTree *iTree) override
Definition: DQMRootSource.cc:214
edm::TimeOfDay
Definition: TimeOfDay.h:9
DQMTTreeIO::FileMetadata::m_lumi
unsigned int m_lumi
Definition: DQMRootSource.cc:128
DQMTTreeIO::TreeSimpleReader::TreeSimpleReader
TreeSimpleReader(MonitorElementData::Kind kind, MonitorElementData::Scope rescope)
Definition: DQMRootSource.cc:270
MonitorElementData::Scalar::num
int64_t num
Definition: MonitorElementCollection.h:46
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
edm::RunID::run
RunNumber_t run() const
Definition: RunID.h:36
MonitorElementData::Kind::TH1S
edm::Run
Definition: Run.h:45
MonitorElementData::Scalar::real
double real
Definition: MonitorElementCollection.h:47
DQMRootSource::operator=
const DQMRootSource & operator=(const DQMRootSource &)=delete
edm::JobReport::reportInputLumiSection
void reportInputLumiSection(unsigned int run, unsigned int lumiSectId)
Definition: JobReport.cc:465
LuminosityBlock.h
MonitorElementData::Kind::TH1F
edm
HLT enums.
Definition: AlignableModifier.h:19
DQMTTreeIO::FileMetadata::m_firstIndex
ULong64_t m_firstIndex
Definition: DQMRootSource.cc:131
DQMRootSource::m_skipBadFiles
bool m_skipBadFiles
Definition: DQMRootSource.cc:361
tree
Definition: tree.py:1
gather_cfg.cout
cout
Definition: gather_cfg.py:144
MonitorElementData::Kind::STRING
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
format.h
DQMTTreeIO::FileMetadata::m_run
unsigned int m_run
Definition: DQMRootSource.cc:127
edm::LuminosityBlockPrincipal
Definition: LuminosityBlockPrincipal.h:31
ExceptionPropagate.h
dqmPostProcessing_online.existing
existing
Definition: dqmPostProcessing_online.py:126
edm::InputSourceDescription
Definition: InputSourceDescription.h:20
DQMTTreeIO::TreeReaderBase::m_rescope
MonitorElementData::Scope m_rescope
Definition: DQMRootSource.cc:183
cms::cuda::assert
assert(be >=bs)
edm::InputFileCatalog::fileNames
std::vector< std::string > fileNames(unsigned iCatalog) const
Definition: InputFileCatalog.cc:26
edm::sortAndRemoveOverlaps
std::vector< EventRange > & sortAndRemoveOverlaps(std::vector< EventRange > &eventRange)
Definition: EventRange.cc:98
DQMStore.h
dqm::legacy::MonitorElement
Definition: MonitorElement.h:461
mps_check.msg
tuple msg
Definition: mps_check.py:285
ProcessHistoryRegistry.h
edm::InputFileCatalog
Definition: InputFileCatalog.h:32
edm::threadLocalException::getException
std::exception_ptr getException()
Definition: ExceptionPropagate.cc:7
PuttableSourceBase.h
kFullNameBranch
static const char *const kFullNameBranch
Definition: format.h:53
InputFileCatalog.h
MillePedeFileConverter_cfg.fileName
fileName
Definition: MillePedeFileConverter_cfg.py:32
kLumiBranch
static const char *const kLumiBranch
Definition: format.h:60
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
edm::LuminosityBlockNumber_t
unsigned int LuminosityBlockNumber_t
Definition: RunLumiEventNumber.h:13
MonitorElementData::key_
Key key_
Definition: MonitorElementCollection.h:245
DQMRootSource::~DQMRootSource
~DQMRootSource() override
Definition: DQMRootSource.cc:452
LuminosityBlockID.h
DQMTTreeIO::TreeSimpleReader::m_buffer
T m_buffer
Definition: DQMRootSource.cc:306
edm::InputSource::processHistoryRegistryForUpdate
ProcessHistoryRegistry & processHistoryRegistryForUpdate()
Definition: InputSource.h:330
MonitorElementData::Kind::TH2D
DQMTTreeIO::TreeReaderBase::makeKey
MonitorElementData::Key makeKey(std::string const &fullname, int run, int lumi)
Definition: DQMRootSource.cc:157
DQMTTreeIO::TreeSimpleReader
Definition: DQMRootSource.cc:268
edm::errors::FileOpenError
Definition: EDMException.h:49
Utilities.operator
operator
Definition: Utilities.py:24
testProducerWithPsetDescEmpty_cfi.a2
a2
Definition: testProducerWithPsetDescEmpty_cfi.py:35
edm::InputSource::IsRun
Definition: InputSource.h:78
edm::Exception
Definition: EDMException.h:77
edm::LuminosityBlockPrincipal::aux
LuminosityBlockAuxiliary const & aux() const
Definition: LuminosityBlockPrincipal.h:64
DQMTTreeIO::FileMetadata
Definition: DQMRootSource.cc:126
DQMTTreeIO::FileMetadata::m_file
TFile * m_file
Definition: DQMRootSource.cc:134
MonitorElementData::Kind::TH2F
edm::LuminosityBlockAuxiliary
Definition: LuminosityBlockAuxiliary.h:15
DQMRootSource::readRunAuxiliary_
std::shared_ptr< edm::RunAuxiliary > readRunAuxiliary_() override
Definition: DQMRootSource.cc:607
DQMTTreeIO::FileMetadata::describe
void describe()
Definition: DQMRootSource.cc:144
DQMTTreeIO::TreeObjectReader::m_tree
TTree * m_tree
Definition: DQMRootSource.cc:222
DQMTTreeIO::TreeReaderBase::~TreeReaderBase
virtual ~TreeReaderBase()
Definition: DQMRootSource.cc:155
DQMTTreeIO::FileMetadata::m_endTime
ULong64_t m_endTime
Definition: DQMRootSource.cc:130
kTypeNames
static const char *const kTypeNames[]
Definition: format.h:39
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DQMRootSource::isRunOrLumiTransition
bool isRunOrLumiTransition() const
Definition: DQMRootSource.cc:679
edm::EventPrincipal
Definition: EventPrincipal.h:46
dqm::legacy::DQMStore
Definition: DQMStore.h:727
MonitorElementData::Path::Type::DIR_AND_NAME
MonitorElementData::Key
Definition: MonitorElementCollection.h:224
DQMTTreeIO
Definition: DQMRootSource.cc:56
kNoTypesStored
Definition: format.h:36
DQMToken.h
DQM.reader
reader
Definition: DQM.py:105
bTagCommon_cff.label2
label2
Definition: bTagCommon_cff.py:168
DQMTTreeIO::TreeObjectReader::TreeObjectReader
TreeObjectReader(MonitorElementData::Kind kind, MonitorElementData::Scope rescope)
Definition: DQMRootSource.cc:189
Service.h
DQMTTreeIO::TreeReaderBase::read
virtual void read(ULong64_t iIndex, DQMStore *dqmstore, int run, int lumi)=0
DEFINE_FWK_INPUT_SOURCE
#define DEFINE_FWK_INPUT_SOURCE(type)
Definition: InputSourceMacros.h:8
MonitorElementData::Value::scalar_
Scalar scalar_
Definition: MonitorElementCollection.h:157
kTH3FIndex
Definition: format.h:32
edm::threadLocalException::setException
void setException(std::exception_ptr e)
Definition: ExceptionPropagate.cc:6
Run.h
MonitorElementData::Scope
Scope
Definition: MonitorElementCollection.h:152
DQMRootSource::beginRun
void beginRun(edm::Run &run) override
Definition: DQMRootSource.cc:713
DQMTTreeIO::DQMMergeHelper::CheckBinLabels
static bool CheckBinLabels(const TAxis *a1, const TAxis *a2)
Definition: DQMRootSource.cc:65
DQMRootSource::readLuminosityBlockAuxiliary_
std::shared_ptr< edm::LuminosityBlockAuxiliary > readLuminosityBlockAuxiliary_() override
Definition: DQMRootSource.cc:614
DQMTTreeIO::DQMMergeHelper::mergeTogether
static void mergeTogether(TH1 *original, TH1 *toAdd)
Definition: DQMRootSource.cc:93
ParameterSetDescription.h
edm::LuminosityBlockID
Definition: LuminosityBlockID.h:31
DQMTTreeIO::TreeSimpleReader::read
void read(ULong64_t iIndex, DQMStore *dqmstore, int run, int lumi) override
Definition: DQMRootSource.cc:274
TrackingMonitor_cfi.metadata
metadata
Definition: TrackingMonitor_cfi.py:71
DQMTTreeIO::FileMetadata::m_lastIndex
ULong64_t m_lastIndex
Definition: DQMRootSource.cc:132
MonitorElementData::value_
Value value_
Definition: MonitorElementCollection.h:246
edm::JobReport::reportInputRunNumber
void reportInputRunNumber(unsigned int run)
Definition: JobReport.cc:471
getGTfromDQMFile.obj
obj
Definition: getGTfromDQMFile.py:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
kTypeBranch
static const char *const kTypeBranch
Definition: format.h:64
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DQMTTreeIO::TreeStringReader::TreeStringReader
TreeStringReader(MonitorElementData::Kind kind, MonitorElementData::Scope rescope)
Definition: DQMRootSource.cc:230
kFlagBranch
static const char *const kFlagBranch
Definition: format.h:54
edm::InputSource::IsFile
Definition: InputSource.h:78
dqm::implementation::DQMStore::putME
MonitorElement * putME(MonitorElement *me)
Definition: DQMStore.cc:148
DQMTTreeIO::FileMetadata::m_type
unsigned int m_type
Definition: DQMRootSource.cc:133
DQMTTreeIO::TreeObjectReader::m_buffer
T * m_buffer
Definition: DQMRootSource.cc:224
edm::LuminosityBlockAuxiliary::processHistoryID
ProcessHistoryID const & processHistoryID() const
Definition: LuminosityBlockAuxiliary.h:32
edm::InputSource::processHistoryRegistry
ProcessHistoryRegistry const & processHistoryRegistry() const
Accessors for process history registry.
Definition: InputSource.h:158
edm::FlushMessageLog
void FlushMessageLog()
Definition: MessageLogger.cc:34
edm::ParameterSet
Definition: ParameterSet.h:47
DQMRootSource::m_fileMetadatas
std::vector< FileMetadata > m_fileMetadatas
Definition: DQMRootSource.cc:376
kIntIndex
Definition: format.h:23
cms::Exception::addAdditionalInfo
void addAdditionalInfo(std::string const &info)
Definition: Exception.cc:169
DQMTTreeIO::FileMetadata::operator<
bool operator<(const FileMetadata &obj) const
Definition: DQMRootSource.cc:137
edm::InputSource::IsLumi
Definition: InputSource.h:78
kTH1FIndex
Definition: format.h:26
edm::LuminosityBlockPrincipal::fillLuminosityBlockPrincipal
void fillLuminosityBlockPrincipal(ProcessHistory const *processHistory, DelayedReader *reader=nullptr)
Definition: LuminosityBlockPrincipal.cc:16
DQMRootSource::beginLuminosityBlock
void beginLuminosityBlock(edm::LuminosityBlock &lumi) override
Definition: DQMRootSource.cc:718
DQMRootSource::readEvent_
void readEvent_(edm::EventPrincipal &) override
Definition: DQMRootSource.cc:653
MonitorElementData::Kind
Kind
Definition: MonitorElementCollection.h:129
DQMTTreeIO::TreeSimpleReader::m_tree
TTree * m_tree
Definition: DQMRootSource.cc:304
RunPrincipal.h
definitions.original
original
Definition: definitions.py:57
DQMRootSource::m_treeReaders
std::vector< std::shared_ptr< TreeReaderBase > > m_treeReaders
Definition: DQMRootSource.cc:369
DQMRootSource::m_catalog
edm::InputFileCatalog m_catalog
Definition: DQMRootSource.cc:363
DQMRootSource::m_lumisToProcess
std::vector< edm::LuminosityBlockRange > m_lumisToProcess
Definition: DQMRootSource.cc:364
edm::Service
Definition: Service.h:30
createfilelist.int
int
Definition: createfilelist.py:10
DQMTTreeIO::TreeSimpleReader::setTree
void setTree(TTree *iTree) override
Definition: DQMRootSource.cc:296
DQMTTreeIO::DQMMergeHelper
Definition: DQMRootSource.cc:61
FrontierConditions_GlobalTag_cff.file
file
Definition: FrontierConditions_GlobalTag_cff.py:13
DQMTTreeIO::TreeReaderBase::TreeReaderBase
TreeReaderBase(MonitorElementData::Kind kind, MonitorElementData::Scope rescope)
Definition: DQMRootSource.cc:153
edm::LuminosityBlockID::luminosityBlock
LuminosityBlockNumber_t luminosityBlock() const
Definition: LuminosityBlockID.h:42
trackerHitRTTI::vector
Definition: trackerHitRTTI.h:21
edm::LogAbsolute
Log< level::System, true > LogAbsolute
Definition: MessageLogger.h:134
kStringIndex
Definition: format.h:25
kTH1SIndex
Definition: format.h:27
edm::InputSource::IsStop
Definition: InputSource.h:78
DQMRootSource::readFile_
std::unique_ptr< edm::FileBlock > readFile_() override
Definition: DQMRootSource.cc:468
kTH2SIndex
Definition: format.h:30
kTH2FIndex
Definition: format.h:29
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
DQMTTreeIO::TreeReaderBase
Definition: DQMRootSource.cc:151
kEndTimeBranch
static const char *const kEndTimeBranch
Definition: format.h:63
MonitorElementData::Kind::TH1D
CalibrationSummaryClient_cfi.kind
kind
Definition: CalibrationSummaryClient_cfi.py:37
LuminosityBlockPrincipal.h
DQMTTreeIO::TreeObjectReader
Definition: DQMRootSource.cc:187
InputSourceMacros.h
LuminosityBlockRange
FileBlock.h
DQMTTreeIO::TreeSimpleReader::m_fullName
std::string * m_fullName
Definition: DQMRootSource.cc:305
DQMRootSource::getNextItemType
edm::InputSource::ItemType getNextItemType() override
Definition: DQMRootSource.cc:465
DQMTTreeIO::TreeStringReader::m_tag
uint32_t m_tag
Definition: DQMRootSource.cc:264
DQMTTreeIO::TreeStringReader::m_tree
TTree * m_tree
Definition: DQMRootSource.cc:261
edm::InputSource::ItemType
ItemType
Definition: InputSource.h:78
kTH2DIndex
Definition: format.h:31
edm::RunPrincipal::fillRunPrincipal
void fillRunPrincipal(ProcessHistoryRegistry const &processHistoryRegistry, DelayedReader *reader=nullptr)
Definition: RunPrincipal.cc:26
DQMRootSource::readLuminosityBlock_
void readLuminosityBlock_(edm::LuminosityBlockPrincipal &lbCache) override
Definition: DQMRootSource.cc:639
kNIndicies
Definition: format.h:35
MonitorElementData::Kind::TH2S
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
MonitorElementData::Value::object_
edm::propagate_const< std::unique_ptr< TH1 > > object_
Definition: MonitorElementCollection.h:158
eostools.move
def move(src, dest)
Definition: eostools.py:511
std
Definition: JetResolutionObject.h:76
writedatasetfile.run
run
Definition: writedatasetfile.py:27
MonitorElementData::Kind::TPROFILE2D
MonitorElementData::Kind::TH3F
DQMTTreeIO::TreeStringReader::read
void read(ULong64_t iIndex, DQMStore *dqmstore, int run, int lumi) override
Definition: DQMRootSource.cc:234
DQMRootSource::m_openFiles
std::vector< TFile * > m_openFiles
Definition: DQMRootSource.cc:374
DQMTTreeIO::TreeStringReader::setTree
void setTree(TTree *iTree) override
Definition: DQMRootSource.cc:253
kBeginTimeBranch
static const char *const kBeginTimeBranch
Definition: format.h:62
bTagCommon_cff.label1
label1
Definition: bTagCommon_cff.py:167
edm::LuminosityBlockPrincipal::id
LuminosityBlockID id() const
Definition: LuminosityBlockPrincipal.h:53
DQMRootSource::readNextItemType
void readNextItemType()
Definition: DQMRootSource.cc:695
DQMTTreeIO::TreeObjectReader::m_tag
uint32_t m_tag
Definition: DQMRootSource.cc:225
InputSource.h
DQMRootSource::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: DQMRootSource.cc:387
T
long double T
Definition: Basic3DVectorLD.h:48
DQMRootSource::m_rescope
MonitorElementData::Scope m_rescope
Definition: DQMRootSource.cc:365
DQMTTreeIO::MonitorElement
dqm::harvesting::MonitorElement MonitorElement
Definition: DQMRootSource.cc:57
LuminosityBlockRange.h
MonitorElementData::Scalar::str
std::string str
Definition: MonitorElementCollection.h:48
MonitorElementData
Definition: MonitorElementCollection.h:43
edm::LuminosityBlockID::run
RunNumber_t run() const
Definition: LuminosityBlockID.h:41
DQMTTreeIO::TreeReaderBase::m_kind
MonitorElementData::Kind m_kind
Definition: DQMRootSource.cc:182
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
kFirstIndex
static const char *const kFirstIndex
Definition: format.h:65
DQMTTreeIO::TreeStringReader::m_fullName
std::string * m_fullName
Definition: DQMRootSource.cc:262
kTH1DIndex
Definition: format.h:28
cms::Exception
Definition: Exception.h:70
JobReport.h
DQMTTreeIO::TreeSimpleReader::m_tag
uint32_t m_tag
Definition: DQMRootSource.cc:307
genParticles_cff.map
map
Definition: genParticles_cff.py:11
kFloatIndex
Definition: format.h:24
ParameterSet.h
dummy
Definition: DummySelector.h:38
edm::RunPrincipal
Definition: RunPrincipal.h:34
TimeOfDay.h
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
kIndicesTree
static const char *const kIndicesTree
Definition: format.h:58
edm::PuttableSourceBase
Definition: PuttableSourceBase.h:30
edm::ConfigurationDescriptions::addDefault
void addDefault(ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:99
crabWrapper.key
key
Definition: crabWrapper.py:19
DQMTTreeIO::DQMStore
dqm::harvesting::DQMStore DQMStore
Definition: DQMRootSource.cc:58
lumi
Definition: LumiSectionData.h:20
DQMRootSource
Definition: DQMRootSource.cc:311
HLT_FULL_cff.toAdd
toAdd
Definition: HLT_FULL_cff.py:52121
edm::errors::FileReadError
Definition: EDMException.h:50
DQMTTreeIO::TreeReaderBase::setTree
virtual void setTree(TTree *iTree)=0
MonitorElementData::Kind::TPROFILE
DQMRootSource::m_currentIndex
unsigned int m_currentIndex
Definition: DQMRootSource.cc:372
edm::InputFileCatalog::fileCatalogItems
std::vector< FileCatalogItem > const & fileCatalogItems() const
Definition: InputFileCatalog.h:39
MonitorElementData::Kind::REAL
DQMRootSource::m_filterOnRun
unsigned int m_filterOnRun
Definition: DQMRootSource.cc:362
kTProfile2DIndex
Definition: format.h:34
GetRecoTauVFromDQM_MC_cff.next
next
Definition: GetRecoTauVFromDQM_MC_cff.py:31
edm::LuminosityBlockRange
Definition: LuminosityBlockRange.h:32
edm::RunAuxiliary
Definition: RunAuxiliary.h:15
edm::InputSource::run
RunNumber_t run() const
Accessor for current run number.
Definition: InputSource.cc:439
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
DQMRootSource::logFileAction
void logFileAction(char const *msg, char const *fileName) const
Definition: DQMRootSource.cc:744
DQMTTreeIO::TreeStringReader::m_value
std::string * m_value
Definition: DQMRootSource.cc:263
DQMRootSource::readElements
void readElements()
Definition: DQMRootSource.cc:655
PuttableSourceBase
kRunBranch
static const char *const kRunBranch
Definition: format.h:59
DQMTTreeIO::TreeStringReader
Definition: DQMRootSource.cc:228
edm::Timestamp
Definition: Timestamp.h:30