CMS 3D CMS Logo

DQMRootOutputModule.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FwkIO
4 // Class : DQMRootOutputModule
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Chris Jones
10 // Created: Fri Apr 29 13:26:29 CDT 2011
11 //
12 
13 // system include files
14 #include <algorithm>
15 #include <iostream>
16 #include <string>
17 #include <map>
18 #include <memory>
19 #include <vector>
20 #include <boost/shared_ptr.hpp>
21 #include <boost/filesystem.hpp>
22 #include "TFile.h"
23 #include "TTree.h"
24 #include "TString.h"
25 #include "TH1.h"
26 #include "TH2.h"
27 #include "TProfile.h"
28 
29 // user include files
41 
46 
47 #include "format.h"
48 
49 namespace {
50  class TreeHelperBase {
51  public:
52  TreeHelperBase(): m_wasFilled(false), m_firstIndex(0),m_lastIndex(0) {}
53  virtual ~TreeHelperBase(){}
54  void fill(MonitorElement* iElement) {
55  doFill(iElement);
56  if(m_wasFilled) {++m_lastIndex;}
57  m_wasFilled = true; }
58  bool wasFilled() const { return m_wasFilled;}
59  void getRangeAndReset(ULong64_t& iFirstIndex, ULong64_t& iLastIndex) {
60  iFirstIndex = m_firstIndex;
61  iLastIndex = m_lastIndex;
62  m_wasFilled = false;
63  m_firstIndex = m_lastIndex +1;
64  m_lastIndex = m_firstIndex;
65  }
66  private:
67  virtual void doFill(MonitorElement*) = 0;
68  bool m_wasFilled;
69  ULong64_t m_firstIndex;
70  ULong64_t m_lastIndex;
71  };
72 
73  template<class T>
74  class TreeHelper : public TreeHelperBase {
75  public:
76  TreeHelper(TTree* iTree, std::string* iFullNameBufferPtr ):
77  m_tree(iTree), m_flagBuffer(0),m_fullNameBufferPtr(iFullNameBufferPtr){ setup();}
78  virtual void doFill(MonitorElement* iElement) {
79  *m_fullNameBufferPtr = iElement->getFullname();
80  m_flagBuffer = iElement->getTag();
81  m_bufferPtr = dynamic_cast<T*>(iElement->getRootObject());
82  assert(0!=m_bufferPtr);
83  //std::cout <<"#entries: "<<m_bufferPtr->GetEntries()<<std::endl;
84  m_tree->Fill();
85  }
86 
87 
88  private:
89  void setup() {
90  m_tree->Branch(kFullNameBranch,&m_fullNameBufferPtr);
91  m_tree->Branch(kFlagBranch,&m_flagBuffer);
92 
93  m_bufferPtr = 0;
94  m_tree->Branch(kValueBranch,&m_bufferPtr,128*1024,0);
95  }
96  TTree* m_tree;
97  uint32_t m_flagBuffer;
98  std::string* m_fullNameBufferPtr;
99  T* m_bufferPtr;
100  };
101 
102  class IntTreeHelper: public TreeHelperBase {
103  public:
104  IntTreeHelper(TTree* iTree, std::string* iFullNameBufferPtr):
105  m_tree(iTree), m_flagBuffer(0),m_fullNameBufferPtr(iFullNameBufferPtr)
106  {setup();}
107 
108  virtual void doFill(MonitorElement* iElement) {
109  *m_fullNameBufferPtr = iElement->getFullname();
110  m_flagBuffer = iElement->getTag();
111  m_buffer = iElement->getIntValue();
112  m_tree->Fill();
113  }
114 
115  private:
116  void setup() {
117  m_tree->Branch(kFullNameBranch,&m_fullNameBufferPtr);
118  m_tree->Branch(kFlagBranch,&m_flagBuffer);
119  m_tree->Branch(kValueBranch,&m_buffer);
120  }
121  TTree* m_tree;
122  uint32_t m_flagBuffer;
123  std::string* m_fullNameBufferPtr;
124  Long64_t m_buffer;
125  };
126 
127  class FloatTreeHelper: public TreeHelperBase {
128  public:
129  FloatTreeHelper(TTree* iTree, std::string* iFullNameBufferPtr):
130  m_tree(iTree), m_flagBuffer(0),m_fullNameBufferPtr(iFullNameBufferPtr)
131  {setup();}
132  virtual void doFill(MonitorElement* iElement) {
133  *m_fullNameBufferPtr = iElement->getFullname();
134  m_flagBuffer = iElement->getTag();
135  m_buffer = iElement->getFloatValue();
136  m_tree->Fill();
137  }
138  private:
139  void setup() {
140  m_tree->Branch(kFullNameBranch,&m_fullNameBufferPtr);
141  m_tree->Branch(kFlagBranch,&m_flagBuffer);
142  m_tree->Branch(kValueBranch,&m_buffer);
143  }
144 
145  TTree* m_tree;
146  uint32_t m_flagBuffer;
147  std::string* m_fullNameBufferPtr;
148  double m_buffer;
149  };
150 
151  class StringTreeHelper: public TreeHelperBase {
152  public:
153  StringTreeHelper(TTree* iTree, std::string* iFullNameBufferPtr):
154  m_tree(iTree), m_flagBuffer(0),m_fullNameBufferPtr(iFullNameBufferPtr), m_bufferPtr(&m_buffer)
155  {setup();}
156  virtual void doFill(MonitorElement* iElement) {
157  *m_fullNameBufferPtr = iElement->getFullname();
158  m_flagBuffer = iElement->getTag();
159  m_buffer = iElement->getStringValue();
160  m_tree->Fill();
161  }
162  private:
163  void setup() {
164  m_tree->Branch(kFullNameBranch,&m_fullNameBufferPtr);
165  m_tree->Branch(kFlagBranch,&m_flagBuffer);
166  m_tree->Branch(kValueBranch,&m_bufferPtr);
167  }
168 
169  TTree* m_tree;
170  uint32_t m_flagBuffer;
171  std::string* m_fullNameBufferPtr;
172  std::string m_buffer;
173  std::string* m_bufferPtr;
174  };
175 
176 }
177 
178 namespace edm {
179  class ModuleCallingContext;
180 }
181 
183 public:
184  explicit DQMRootOutputModule(edm::ParameterSet const& pset);
185  virtual void beginJob() override;
186  virtual ~DQMRootOutputModule();
187  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
188 
189 private:
190  virtual void write(edm::EventForOutput const& e) override;
191  virtual void writeLuminosityBlock(edm::LuminosityBlockForOutput const&) override;
192  virtual void writeRun(edm::RunForOutput const&) override;
193  virtual bool isFileOpen() const override;
194  virtual void openFile(edm::FileBlock const&) override;
195  virtual void reallyCloseFile() override;
196  virtual void postForkReacquireResources(unsigned int childIndex, unsigned int numberOfChildren) override;
197 
198  void startEndFile();
199  void finishEndFile();
202  std::auto_ptr<TFile> m_file;
203  std::vector<boost::shared_ptr<TreeHelperBase> > m_treeHelpers;
204 
205  unsigned int m_run;
206  unsigned int m_lumi;
207  unsigned int m_type;
208  unsigned int m_presentHistoryIndex;
209  ULong64_t m_beginTime;
210  ULong64_t m_endTime;
211  ULong64_t m_firstIndex;
212  ULong64_t m_lastIndex;
213  unsigned int m_filterOnRun;
215 
218  std::map<unsigned int, unsigned int> m_dqmKindToTypeIndex;
220 
221  std::vector<edm::ProcessHistoryID> m_seenHistories;
224 };
225 
226 //
227 // constants, enums and typedefs
228 //
229 
230 static TreeHelperBase*
231 makeHelper(unsigned int iTypeIndex,
232  TTree* iTree,
233  std::string* iFullNameBufferPtr) {
234  switch(iTypeIndex) {
235  case kIntIndex:
236  return new IntTreeHelper(iTree,iFullNameBufferPtr);
237  case kFloatIndex:
238  return new FloatTreeHelper(iTree,iFullNameBufferPtr);
239  case kStringIndex:
240  return new StringTreeHelper(iTree,iFullNameBufferPtr);
241  case kTH1FIndex:
242  return new TreeHelper<TH1F>(iTree,iFullNameBufferPtr);
243  case kTH1SIndex:
244  return new TreeHelper<TH1S>(iTree,iFullNameBufferPtr);
245  case kTH1DIndex:
246  return new TreeHelper<TH1D>(iTree,iFullNameBufferPtr);
247  case kTH2FIndex:
248  return new TreeHelper<TH2F>(iTree,iFullNameBufferPtr);
249  case kTH2SIndex:
250  return new TreeHelper<TH2S>(iTree,iFullNameBufferPtr);
251  case kTH2DIndex:
252  return new TreeHelper<TH2D>(iTree,iFullNameBufferPtr);
253  case kTH3FIndex:
254  return new TreeHelper<TH3F>(iTree,iFullNameBufferPtr);
255  case kTProfileIndex:
256  return new TreeHelper<TProfile>(iTree,iFullNameBufferPtr);
257  case kTProfile2DIndex:
258  return new TreeHelper<TProfile2D>(iTree,iFullNameBufferPtr);
259  }
260  assert(false);
261  return 0;
262 }
263 
264 //
265 // static data member definitions
266 //
267 
268 //
269 // constructors and destructor
270 //
273 edm::one::OutputModule<>(pset),
274 m_fileName(pset.getUntrackedParameter<std::string>("fileName")),
275 m_logicalFileName(pset.getUntrackedParameter<std::string>("logicalFileName")),
276 m_file(0),
277 m_treeHelpers(kNIndicies,boost::shared_ptr<TreeHelperBase>()),
278 m_presentHistoryIndex(0),
279 m_filterOnRun(pset.getUntrackedParameter<unsigned int>("filterOnRun")),
280 m_enableMultiThread(false),
281 m_fullNameBufferPtr(&m_fullNameBuffer),
282 m_indicesTree(0)
283 {
284 }
285 
286 // DQMRootOutputModule::DQMRootOutputModule(const DQMRootOutputModule& rhs)
287 // {
288 // // do actual copying here;
289 // }
290 
291 void
293 {
294  // Determine if we are running multithreading asking to the DQMStore. Not to be moved in the ctor
295  edm::Service<DQMStore> dstore;
297 }
298 
300 {
301 }
302 
303 //
304 // assignment operators
305 //
306 // const DQMRootOutputModule& DQMRootOutputModule::operator=(const DQMRootOutputModule& rhs)
307 // {
308 // //An exception safe implementation is
309 // DQMRootOutputModule temp(rhs);
310 // swap(rhs);
311 //
312 // return *this;
313 // }
314 
315 //
316 // member functions
317 //
318 bool
320 {
321  return nullptr!=m_file.get();
322 }
323 
324 void
326 {
327  //NOTE: I need to also set the I/O performance settings
328 
329  m_file = std::auto_ptr<TFile>(new TFile(m_fileName.c_str(),"RECREATE",
330  "1" //This is the file format version number
331  ));
332 
334  cms::Digest branchHash;
337  std::string(),
338  "DQMRootOutputModule",
339  description().moduleLabel(),
341  std::string(),
342  branchHash.digest().toString(),
343  std::vector<std::string>()
344  );
345 
346 
348  m_indicesTree->Branch(kRunBranch,&m_run);
349  m_indicesTree->Branch(kLumiBranch,&m_lumi);
353  m_indicesTree->Branch(kTypeBranch,&m_type);
356  m_indicesTree->SetDirectory(m_file.get());
357 
358  unsigned int i = 0;
359  for(std::vector<boost::shared_ptr<TreeHelperBase> >::iterator it = m_treeHelpers.begin(), itEnd = m_treeHelpers.end();
360  it != itEnd;
361  ++it,++i) {
362  //std::cout <<"making "<<kTypeNames[i]<<std::endl;
363  TTree* tree = new TTree(kTypeNames[i],kTypeNames[i]);
364  *it = boost::shared_ptr<TreeHelperBase>(makeHelper(i,tree,m_fullNameBufferPtr));
365  tree->SetDirectory(m_file.get()); //TFile takes ownership
366  }
367 
380 }
381 
382 
383 void
384 DQMRootOutputModule::postForkReacquireResources(unsigned int childIndex, unsigned int numberOfChildren) {
385  // this is copied from IOPool/Output/src/PoolOutputModule.cc, for consistency
386  unsigned int digits = 0;
387  while (numberOfChildren != 0) {
388  ++digits;
389  numberOfChildren /= 10;
390  }
391  // protect against zero numberOfChildren
392  if (digits == 0) {
393  digits = 3;
394  }
395 
396  char buffer[digits + 2];
397  snprintf(buffer, digits + 2, "_%0*d", digits, childIndex);
398 
400  m_fileName = (filename.parent_path() / (filename.stem().string() + buffer + filename.extension().string())).string();
401 }
402 
403 
404 void
406 }
407 
408 
409 void
411  //std::cout << "DQMRootOutputModule::writeLuminosityBlock"<< std::endl;
412  edm::Service<DQMStore> dstore;
413  m_run = iLumi.id().run();
414  m_lumi = iLumi.id().value();
415  m_beginTime = iLumi.beginTime().value();
416  m_endTime = iLumi.endTime().value();
417  bool shouldWrite = (m_filterOnRun == 0 ||
418  (m_filterOnRun != 0 && m_filterOnRun == m_run));
419 
420  if (! shouldWrite)
421  return;
422  std::vector<MonitorElement *> items(dstore->getAllContents("",
424  m_enableMultiThread ? m_lumi : 0));
425  for(std::vector<MonitorElement*>::iterator it = items.begin(), itEnd=items.end();
426  it!=itEnd;
427  ++it) {
428  if((*it)->getLumiFlag()) {
429  std::map<unsigned int,unsigned int>::iterator itFound = m_dqmKindToTypeIndex.find((*it)->kind());
430  assert(itFound !=m_dqmKindToTypeIndex.end());
431  m_treeHelpers[itFound->second]->fill(*it);
432  }
433  }
434 
436  std::vector<edm::ProcessHistoryID>::iterator itFind = std::find(m_seenHistories.begin(),m_seenHistories.end(),id);
437  if(itFind == m_seenHistories.end()) {
440  m_seenHistories.push_back(id);
441  } else {
442  m_presentHistoryIndex = itFind - m_seenHistories.begin();
443  }
444 
445  //Now store the relationship between run/lumi and indices in the other TTrees
446  bool storedLumiIndex = false;
447  unsigned int typeIndex = 0;
448  for(std::vector<boost::shared_ptr<TreeHelperBase> >::iterator it = m_treeHelpers.begin(), itEnd = m_treeHelpers.end();
449  it != itEnd;
450  ++it,++typeIndex) {
451  if((*it)->wasFilled()) {
452  m_type = typeIndex;
453  (*it)->getRangeAndReset(m_firstIndex,m_lastIndex);
454  storedLumiIndex = true;
455  m_indicesTree->Fill();
456  }
457  }
458  if(not storedLumiIndex) {
459  //need to record lumis even if we stored no MonitorElements since some later DQM modules
460  // look to see what lumis were processed
462  m_firstIndex=0;
463  m_lastIndex=0;
464  m_indicesTree->Fill();
465  }
466 
468  jr->reportLumiSection(m_jrToken, m_run, m_lumi);
469 }
470 
472  //std::cout << "DQMRootOutputModule::writeRun"<< std::endl;
473  edm::Service<DQMStore> dstore;
474  m_run = iRun.id().run();
475  m_lumi = 0;
476  m_beginTime = iRun.beginTime().value();
477  m_endTime = iRun.endTime().value();
478  bool shouldWrite = (m_filterOnRun == 0 ||
479  (m_filterOnRun != 0 && m_filterOnRun == m_run));
480 
481  if (! shouldWrite)
482  return;
483 
484  std::vector<MonitorElement*> items(dstore->getAllContents("",
485  m_enableMultiThread ? m_run : 0));
486  for(std::vector<MonitorElement*>::iterator it = items.begin(), itEnd=items.end();
487  it!=itEnd;
488  ++it) {
489  if(not (*it)->getLumiFlag()) {
490  std::map<unsigned int,unsigned int>::iterator itFound = m_dqmKindToTypeIndex.find((*it)->kind());
491  assert (itFound !=m_dqmKindToTypeIndex.end());
492  m_treeHelpers[itFound->second]->fill(*it);
493  }
494  }
495 
497  std::vector<edm::ProcessHistoryID>::iterator itFind = std::find(m_seenHistories.begin(),m_seenHistories.end(),id);
498  if(itFind == m_seenHistories.end()) {
501  m_seenHistories.push_back(id);
502  } else {
503  m_presentHistoryIndex = itFind - m_seenHistories.begin();
504  }
505 
506  //Now store the relationship between run/lumi and indices in the other TTrees
507  unsigned int typeIndex = 0;
508  for(std::vector<boost::shared_ptr<TreeHelperBase> >::iterator it = m_treeHelpers.begin(), itEnd = m_treeHelpers.end();
509  it != itEnd;
510  ++it,++typeIndex) {
511  if((*it)->wasFilled()) {
512  m_type = typeIndex;
513  (*it)->getRangeAndReset(m_firstIndex,m_lastIndex);
514  m_indicesTree->Fill();
515  }
516  }
517 
519  jr->reportRunNumber(m_jrToken, m_run);
520 }
521 
522 void
524  startEndFile();
525  finishEndFile();
526 }
527 
528 
530  //std::cout << "DQMRootOutputModule::startEndFile"<< std::endl;
531  //fill in the meta data
532  m_file->cd();
533  TDirectory* metaDataDirectory = m_file->mkdir(kMetaDataDirectory);
534 
535 
536  //Write out the Process History
537  TTree* processHistoryTree = new TTree(kProcessHistoryTree,kProcessHistoryTree);
538  processHistoryTree->SetDirectory(metaDataDirectory);
539 
540  unsigned int index = 0;
541  processHistoryTree->Branch(kPHIndexBranch,&index);
543  processHistoryTree->Branch(kProcessConfigurationProcessNameBranch,&processName);
544  std::string parameterSetID;
545  processHistoryTree->Branch(kProcessConfigurationParameterSetIDBranch,&parameterSetID);
546  std::string releaseVersion;
547  processHistoryTree->Branch(kProcessConfigurationReleaseVersion,&releaseVersion);
548  std::string passID;
549  processHistoryTree->Branch(kProcessConfigurationPassID,&passID);
550 
551  for(std::vector<edm::ProcessHistoryID>::iterator it = m_seenHistories.begin(), itEnd = m_seenHistories.end();
552  it !=itEnd;
553  ++it) {
555  assert(0!=history);
556  index = 0;
557  for(edm::ProcessHistory::collection_type::const_iterator itPC = history->begin(), itPCEnd = history->end();
558  itPC != itPCEnd;
559  ++itPC,++index) {
560  processName = itPC->processName();
561  releaseVersion = itPC->releaseVersion();
562  passID = itPC->passID();
563  parameterSetID = itPC->parameterSetID().compactForm();
564  processHistoryTree->Fill();
565  }
566  }
567 
568  //Store the ParameterSets
569  TTree* parameterSetsTree = new TTree(kParameterSetTree,kParameterSetTree);
570  parameterSetsTree->SetDirectory(metaDataDirectory);
571  std::string blob;
572  parameterSetsTree->Branch(kParameterSetBranch,&blob);
573 
575  assert(0!=psr);
576  for(edm::pset::Registry::const_iterator it = psr->begin(), itEnd = psr->end();
577  it != itEnd;
578  ++it) {
579  blob.clear();
580  it->second.toString(blob);
581  parameterSetsTree->Fill();
582  }
583 
584 }
585 
587  //std::cout << "DQMRootOutputModule::finishEndFile"<< std::endl;
588  m_file->Write();
589  m_file->Close();
592 }
593 
594 //
595 // const member functions
596 //
597 
598 //
599 // static member functions
600 //
601 void
604 
605  desc.addUntracked<std::string>("fileName");
606  desc.addUntracked<std::string>("logicalFileName","");
607  desc.addUntracked<unsigned int>("filterOnRun",0)
608  ->setComment("Only write the run with this run number. 0 means write all runs.");
609  desc.addOptionalUntracked<int>("splitLevel", 99)
610  ->setComment("UNUSED Only here to allow older configurations written for PoolOutputModule to work.");
611  edm::OutputModule::fillDescription(desc, std::vector<std::string>(1U, std::string("drop *")));
612 
614  dataSet.setAllowAnything();
615  desc.addUntracked<edm::ParameterSetDescription>("dataset", dataSet)
616  ->setComment("PSet is only used by Data Operations and not by this module.");
617 
618  descriptions.addDefault(desc);
619 
620 }
621 
622 
virtual void beginJob() override
const_iterator begin() const
virtual void reallyCloseFile() override
Timestamp const & endTime() const
Definition: RunForOutput.h:48
static const char *const kProcessHistoryTree
Definition: format.h:54
static const char *const kRunBranch
Definition: format.h:41
virtual ProcessHistory const & processHistory() const
boost::uint64_t value() const
map_type::const_iterator const_iterator
Definition: Registry.h:63
ModuleDescription const & description() const
static const char *const kTypeNames[]
Definition: format.h:28
bool getMapped(ProcessHistoryID const &key, ProcessHistory &value) const
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
Definition: CLHEP.h:16
const_iterator end() const
Definition: Registry.h:69
virtual void writeLuminosityBlock(edm::LuminosityBlockForOutput const &) override
RunNumber_t run() const
Definition: RunID.h:39
virtual void write(edm::EventForOutput const &e) override
void setAllowAnything()
allow any parameter label/value pairs
RunID const & id() const
Definition: RunForOutput.h:45
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
static const char *const kIndicesTree
Definition: format.h:40
unsigned int m_presentHistoryIndex
bool registerProcessHistory(ProcessHistory const &processHistory)
static TreeHelperBase * makeHelper(unsigned int iTypeIndex, TTree *iTree, std::string *iFullNameBufferPtr)
edm::ProcessHistoryRegistry m_processHistoryRegistry
static const char *const kFirstIndex
Definition: format.h:47
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
static const char *const kLumiBranch
Definition: format.h:42
static const char *const kFullNameBranch
Definition: format.h:34
MD5Result digest() const
Definition: Digest.cc:194
void reportRunNumber(JobReport::Token token, unsigned int run)
Definition: JobReport.cc:553
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
void beginJob()
Definition: Breakpoints.cc:15
const uint32_t getTag(void) const
Timestamp const & beginTime() const
Definition: RunForOutput.h:47
static const char *const kPHIndexBranch
Definition: format.h:55
std::vector< MonitorElement * > getAllContents(const std::string &path, uint32_t runNumber=0, uint32_t lumi=0) const
Definition: DQMStore.cc:2002
static const char *const kParameterSetBranch
Definition: format.h:62
std::map< unsigned int, unsigned int > m_dqmKindToTypeIndex
void addDefault(ParameterSetDescription const &psetDescription)
def isFileOpen(fName)
static const char *const kMetaDataDirectory
Definition: format.h:52
std::auto_ptr< TFile > m_file
static void fillDescription(ParameterSetDescription &desc, std::vector< std::string > const &iDefaultOutputCommands=ProductSelectorRules::defaultSelectionStrings())
static const char *const kParameterSetTree
Definition: format.h:61
double getFloatValue(void) const
const_iterator begin() const
Definition: Registry.h:65
RunNumber_t run() const
static const char *const kFlagBranch
Definition: format.h:35
static const char *const kTypeBranch
Definition: format.h:46
static const char *const kProcessHistoryIndexBranch
Definition: format.h:43
Token outputFileOpened(std::string const &physicalFileName, std::string const &logicalFileName, std::string const &catalog, std::string const &outputModuleClassName, std::string const &moduleLabel, std::string const &guid, std::string const &dataType, std::string const &branchHash, std::vector< std::string > const &branchNames)
Definition: JobReport.cc:471
static const char *const kEndTimeBranch
Definition: format.h:45
Timestamp const & endTime() const
const std::string getFullname(void) const
get full name of ME including Pathname
const std::string & getStringValue(void) const
std::size_t Token
Definition: JobReport.h:107
DQMRootOutputModule(edm::ParameterSet const &pset)
static const char *const kProcessConfigurationPassID
Definition: format.h:59
doFill
Definition: cuy.py:574
std::vector< boost::shared_ptr< TreeHelperBase > > m_treeHelpers
std::string * m_fullNameBufferPtr
TObject * getRootObject(void) const
virtual void writeRun(edm::RunForOutput const &) override
static const char *const kLastIndex
Definition: format.h:48
int64_t getIntValue(void) const
std::string toString() const
Definition: Digest.cc:87
static const char *const kProcessConfigurationReleaseVersion
Definition: format.h:58
virtual bool isFileOpen() const override
std::string const & processName() const
static const char *const kProcessConfigurationProcessNameBranch
Definition: format.h:56
Timestamp const & beginTime() const
const_iterator end() const
virtual void postForkReacquireResources(unsigned int childIndex, unsigned int numberOfChildren) override
HLT enums.
static const char *const kBeginTimeBranch
Definition: format.h:44
ProcessHistoryID const & processHistoryID() const
void outputFileClosed(Token fileToken)
Definition: JobReport.cc:517
edm::JobReport::Token m_jrToken
virtual void openFile(edm::FileBlock const &) override
ParameterDescriptionBase * addOptionalUntracked(U const &iLabel, T const &value)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: tree.py:1
def write(self, setup)
LuminosityBlockID const & id() const
long double T
TimeValue_t value() const
Definition: Timestamp.h:56
static Registry * instance()
Definition: Registry.cc:12
std::string createGlobalIdentifier()
static const char *const kValueBranch
Definition: format.h:36
bool enableMultiThread_
Definition: DQMStore.h:704
void reportLumiSection(JobReport::Token token, unsigned int run, unsigned int lumiSectId, unsigned long nEvents=0)
Definition: JobReport.cc:543
static const char *const kProcessConfigurationParameterSetIDBranch
Definition: format.h:57
std::vector< edm::ProcessHistoryID > m_seenHistories