CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
BranchMapReader.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: FWLite
4 // Class : BranchMapReader
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Dan Riley
10 // Created: Tue May 20 10:31:32 EDT 2008
11 //
12 
13 // system include files
14 
15 // user include files
17 
29 
30 #include "TBranch.h"
31 #include "TFile.h"
32 #include "TTree.h"
33 
34 #include <cassert>
35 
36 namespace fwlite {
37  namespace internal {
38 
40 
41  BMRStrategy::BMRStrategy(TFile* file, int fileVersion)
42  : currentFile_(file), eventTree_(0), luminosityBlockTree_(0), runTree_(0),
43  eventEntry_(-1), luminosityBlockEntry_(-1), runEntry_(-1), fileVersion_(fileVersion) {
44  // do in derived obects
45  // updateFile(file);
46  }
47 
49  }
50 
51  class Strategy : public BMRStrategy {
52  public:
53  typedef std::map<edm::BranchID, edm::BranchDescription> bidToDesc;
54 
55  Strategy(TFile* file, int fileVersion);
56  virtual ~Strategy();
57  virtual bool updateFile(TFile* file) override;
58  virtual bool updateEvent(Long_t eventEntry) override { eventEntry_ = eventEntry; return true; }
59  virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override {
60  luminosityBlockEntry_ = luminosityBlockEntry;
61  return true;
62  }
63  virtual bool updateRun(Long_t runEntry) override {
64  runEntry_ = runEntry;
65  return true;
66  }
67  virtual bool updateMap() override { return true; }
68  virtual edm::BranchID productToBranchID(edm::ProductID const& pid) override;
69  virtual edm::BranchDescription const& productToBranch(edm::ProductID const& pid) override;
70  virtual edm::BranchDescription const& branchIDToBranch(edm::BranchID const& bid) const override;
71  virtual std::vector<edm::BranchDescription> const& getBranchDescriptions() override;
73 
74  TBranch* getBranchRegistry(edm::ProductRegistry** pReg);
75 
77  std::vector<edm::BranchDescription> bDesc_;
79  std::unique_ptr<edm::ThinnedAssociationsHelper> thinnedAssociationsHelper_;
80  };
81 
82  Strategy::Strategy(TFile* file, int fileVersion)
83  : BMRStrategy(file, fileVersion), mapperFilled_(false), thinnedAssociationsHelper_(new edm::ThinnedAssociationsHelper) {
84  // do in derived obects
85  // updateFile(file);
86  }
87 
89  // probably need to clean up something here...
90  }
91 
92  bool Strategy::updateFile(TFile* file) {
94  eventTree_ = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::eventTreeName().c_str()));
95  luminosityBlockTree_ = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::luminosityBlockTreeName().c_str()));
96  runTree_ = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::runTreeName().c_str()));
97  fileUUID_ = currentFile_->GetUUID();
98  branchDescriptionMap_.clear();
99  bDesc_.clear();
100  return 0 != eventTree_;
101  }
102 
104  TBranch* bReg(0);
105 
106  TTree* metaDataTree = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::metaDataTreeName().c_str()));
107  if(0 != metaDataTree) {
108  bReg = metaDataTree->GetBranch(edm::poolNames::productDescriptionBranchName().c_str());
109  bReg->SetAddress(ppReg);
110  bReg->GetEntry(0);
111  }
112  return bReg;
113  }
114 
115  std::vector<edm::BranchDescription> const&
117  if(bDesc_.empty()) {
118  for(bidToDesc::const_iterator i = branchDescriptionMap_.begin(); i != branchDescriptionMap_.end(); ++i) {
119  bDesc_.push_back(i->second);
120  }
121  }
122  return bDesc_;
123  }
124 
127  throw edm::Exception(edm::errors::UnimplementedFeature) << "Unsupported EDM file version";
128  }
129 
130  edm::BranchDescription const &
132  edm::BranchID bid = productToBranchID(pid);
133  bidToDesc::const_iterator bdi = branchDescriptionMap_.find(bid);
134  if(branchDescriptionMap_.end() == bdi) {
136  }
137  return bdi->second;
138  }
139 
140  edm::BranchDescription const &
142  bidToDesc::const_iterator bdi = branchDescriptionMap_.find(bid);
143  if(branchDescriptionMap_.end() == bdi) {
145  }
146  return bdi->second;
147  }
148 
150  public:
151  BranchMapReaderStrategyV1(TFile* file, int fileVersion);
152  virtual bool updateFile(TFile* file) override;
153  virtual bool updateMap() override;
154  virtual edm::BranchListIndexes const& branchListIndexes() const override {return dummyBranchListIndexes_;}
155  private:
157  };
158 
160  : Strategy(file, fileVersion) {
161  updateFile(file);
162  }
163 
165  if(Strategy::updateFile(file)) {
166  mapperFilled_ = false;
167  return true;
168  }
169  return false;
170  }
171 
173  if(mapperFilled_) {
174  return true;
175  }
176 
177  branchDescriptionMap_.clear();
178  bDesc_.clear();
179 
181  edm::ProductRegistry* pReg = &reg;
182  TBranch* br = getBranchRegistry(&pReg);
183 
184  if(0 != br) {
186 
187  for(auto& item : prodList) {
188  edm::BranchDescription& prod = item.second;
189  if(edm::InEvent == prod.branchType()) {
190  // call to regenerate branchName
191  prod.init();
193  }
194  }
195  mapperFilled_ = true;
196  }
197  reg.setFrozen(false);
198  return 0 != br;
199  }
200 
201  // v7 has differences in product status that are not implemented in BranchMapReader yet
203  public:
204  BranchMapReaderStrategyV7(TFile* file, int fileVersion);
205  virtual edm::BranchListIndexes const& branchListIndexes() const override {return dummyBranchListIndexes_;}
206  private:
208  };
209 
211  : BranchMapReaderStrategyV1(file, fileVersion) {
212  updateFile(file);
213  }
214 
216  public:
217  BranchMapReaderStrategyV8(TFile* file, int fileVersion);
218  virtual bool updateFile(TFile* file) override;
219  virtual bool updateEvent(Long_t eventEntry) override;
220  virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override;
221  virtual bool updateRun(Long_t runEntry) override;
222  virtual bool updateMap() override;
223  virtual edm::BranchListIndexes const& branchListIndexes() const override {return dummyBranchListIndexes_;}
224  private:
229  };
230 
232  : Strategy(file, fileVersion),
233  eventEntryInfoVector_(), pEventEntryInfoVector_(&eventEntryInfoVector_) {
234  updateFile(file);
235  }
236 
238  // std::cout << "v8 updateevent " << newevent << std::endl;
239  if(newevent != eventEntry_) {
240  eventEntry_ = newevent;
241  mapperFilled_ = false;
242  }
243  return true;
244  }
245 
247  if(newLumi != luminosityBlockEntry_) {
248  luminosityBlockEntry_ = newLumi;
249  mapperFilled_ = false;
250  }
251  return true;
252  }
253 
255  if(newRun != runEntry_) {
256  runEntry_ = newRun;
257  mapperFilled_ = false;
258  }
259  return true;
260  }
261 
263  Strategy::updateFile(file);
264  mapperFilled_ = false;
265  entryInfoBranch_ = 0;
266  TTree* metaDataTree = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::eventMetaDataTreeName().c_str()));
267  if(0 != metaDataTree) {
268  entryInfoBranch_ = metaDataTree->GetBranch(BranchTypeToBranchEntryInfoBranchName(edm::InEvent).c_str());
269 // std::cout << "entryInfoBranch for " << BranchTypeToBranchEntryInfoBranchName(edm::InEvent) << " " << entryInfoBranch_ << std::endl;
270  } else {
271  return false;
272  }
275 
276  branchDescriptionMap_.clear();
277  bDesc_.clear();
278 
280  edm::ProductRegistry* pReg = &reg;
281  TBranch *br = getBranchRegistry(&pReg);
282 
283  if(0 != br) {
285 
286  for(auto& item : prodList) {
287  edm::BranchDescription& prod = item.second;
288  if(edm::InEvent == prod.branchType()) {
289  // call to regenerate branchName
290  prod.init();
292  }
293  }
294  }
295  reg.setFrozen(false);
296  return 0 != br;
297  }
298 
300  if(mapperFilled_) {
301  return true;
302  }
303 
305 
306  entryInfoBranch_->GetEntry(eventEntry_);
307 
308  for(std::vector<edm::EventEntryInfo>::const_iterator it = pEventEntryInfoVector_->begin(),
309  itEnd = pEventEntryInfoVector_->end();
310  it != itEnd; ++it) {
311 // eventInfoMap_.insert(*it);
312  }
313  mapperFilled_ = true;
314  return true;
315  }
316 
318  public:
319  BranchMapReaderStrategyV11(TFile* file, int fileVersion);
320  virtual bool updateFile(TFile* file) override;
321  virtual bool updateEvent(Long_t eventEntry) override;
322  virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override;
323  virtual bool updateRun(Long_t runEntry) override;
324  virtual bool updateMap() override;
325  virtual edm::BranchID productToBranchID(edm::ProductID const& pid) override;
326  virtual edm::BranchListIndexes const& branchListIndexes() const override {return history_.branchListIndexes();}
327  private:
328  std::auto_ptr<edm::BranchIDLists> branchIDLists_;
332  };
333 
335  : Strategy(file, fileVersion), eventHistoryTree_(0), pHistory_(&history_) {
336  updateFile(file);
337  }
338 
340 // std::cout << "v11 updateevent " << newevent << std::endl;
341  if(newevent != eventEntry_) {
342  eventEntry_ = newevent;
343  mapperFilled_ = false;
344  }
345  return true;
346  }
347 
349  if(newlumi != luminosityBlockEntry_) {
350  luminosityBlockEntry_ = newlumi;
351  mapperFilled_ = false;
352  }
353  return true;
354  }
355 
357  if(newRun != runEntry_) {
358  runEntry_ = newRun;
359  mapperFilled_ = false;
360  }
361  return true;
362  }
363 
365  Strategy::updateFile(file);
366  mapperFilled_ = false;
367  TTree* metaDataTree = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::metaDataTreeName().c_str()));
368 
369  if(0 == metaDataTree) {
371  <<"No "<<edm::poolNames::metaDataTreeName()<<" TTree in file";
372  }
374  edm::BranchIDLists* branchIDListsPtr = branchIDLists_.get();
375  if(metaDataTree->FindBranch(edm::poolNames::branchIDListBranchName().c_str()) != 0) {
376  TBranch* b = metaDataTree->GetBranch(edm::poolNames::branchIDListBranchName().c_str());
377  b->SetAddress(&branchIDListsPtr);
378  b->GetEntry(0);
379 // std::cout << "--> " << branchIDLists_->size() << std::endl;
380  } else {
382  << "FindBranch of branchIDList failed";
383  return false;
384  }
385 
386  eventHistoryTree_ = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::eventHistoryTreeName().c_str()));
387 
388  branchDescriptionMap_.clear();
389  bDesc_.clear();
390 
392  edm::ProductRegistry* pReg = &reg;
393  TBranch *br = getBranchRegistry(&pReg);
394 
395  if(0 != br) {
397 
398  for(auto& item : prodList) {
399  edm::BranchDescription& prod = item.second;
400  if(edm::InEvent == prod.branchType()) {
401  // call to regenerate branchName
402  prod.init();
404 // std::cout << "v11 updatefile " << prod.branchID() << std::endl;
405  }
406  }
407  }
408  reg.setFrozen(false);
409  return 0 != br;
410  }
411 
413  if(!mapperFilled_) {
414  TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(edm::poolNames::eventHistoryBranchName().c_str());
415  if(!eventHistoryBranch) {
417  << "Failed to find history branch in event history tree";
418  return false;
419  }
420  // yes, SetAddress really does need to be called every time...
421  eventHistoryBranch->SetAddress(&pHistory_);
422  eventHistoryTree_->GetEntry(eventEntry_);
423  mapperFilled_ = true;
424  }
425  return true;
426  }
427 
430  updateMap();
432  }
433 
435  public:
436  BranchMapReaderStrategyV17(TFile* file, int fileVersion);
437  virtual bool updateFile(TFile* file) override;
438  virtual bool updateEvent(Long_t eventEntry) override;
439  virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override;
440  virtual bool updateRun(Long_t runEntry) override;
441  virtual bool updateMap() override;
442  virtual edm::BranchID productToBranchID(edm::ProductID const& pid) override;
443  virtual edm::BranchListIndexes const& branchListIndexes() const override {return branchListIndexes_;}
444  private:
445  std::auto_ptr<edm::BranchIDLists> branchIDLists_;
446  TTree* eventsTree_;
449  };
450 
452  : Strategy(file, fileVersion), eventsTree_(0), pBranchListIndexes_(&branchListIndexes_) {
453  updateFile(file);
454  }
455 
457 // std::cout << "v11 updateevent " << newevent << std::endl;
458  if(newevent != eventEntry_) {
459  eventEntry_ = newevent;
460  mapperFilled_ = false;
461  }
462  return true;
463  }
464 
466  if(newlumi != luminosityBlockEntry_) {
467  luminosityBlockEntry_ = newlumi;
468  mapperFilled_ = false;
469  }
470  return true;
471  }
472 
474  if(newRun != runEntry_) {
475  runEntry_ = newRun;
476  mapperFilled_ = false;
477  }
478  return true;
479  }
480 
482  Strategy::updateFile(file);
483  mapperFilled_ = false;
484  TTree* metaDataTree = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::metaDataTreeName().c_str()));
485  if(0==metaDataTree) {
487  }
488 
490  edm::ThinnedAssociationsHelper* thinnedAssociationsHelperPtr = thinnedAssociationsHelper_.get();
491  if(metaDataTree->FindBranch(edm::poolNames::thinnedAssociationsHelperBranchName().c_str()) != nullptr) {
492  TBranch* b = metaDataTree->GetBranch(edm::poolNames::thinnedAssociationsHelperBranchName().c_str());
493  b->SetAddress(&thinnedAssociationsHelperPtr);
494  b->GetEntry(0);
495  }
496 
498  edm::BranchIDLists* branchIDListsPtr = branchIDLists_.get();
499  if(metaDataTree->FindBranch(edm::poolNames::branchIDListBranchName().c_str()) != 0) {
500  TBranch* b = metaDataTree->GetBranch(edm::poolNames::branchIDListBranchName().c_str());
501  b->SetAddress(&branchIDListsPtr);
502  b->GetEntry(0);
503 // std::cout << "--> " << branchIDLists_->size() << std::endl;
504  } else {
506  << "FindBranch of branchIDList failed";
507  return false;
508  }
509 
510  eventsTree_ = dynamic_cast<TTree*>(currentFile_->Get(edm::poolNames::eventTreeName().c_str()));
511 
512  branchDescriptionMap_.clear();
513  bDesc_.clear();
514 
516  edm::ProductRegistry* pReg = &reg;
517  TBranch *br = getBranchRegistry(&pReg);
518 
519  if(0 != br) {
521 
522  for(auto& item : prodList) {
523  edm::BranchDescription& prod = item.second;
524  if(edm::InEvent == prod.branchType()) {
525  // call to regenerate branchName
526  prod.init();
528 // std::cout << "v11 updatefile " << prod.branchID() << std::endl;
529  }
530  }
531  }
532  reg.setFrozen(false);
533  return 0 != br;
534  }
535 
537  if(!mapperFilled_) {
538  TBranch* branchListIndexesBranch = eventsTree_->GetBranch(edm::poolNames::branchListIndexesBranchName().c_str());
539  if(!branchListIndexesBranch) {
541  << "Failed to find branch list indexes branch in event tree";
542  return false;
543  }
544  // yes, SetAddress really does need to be called every time...
545  branchListIndexesBranch->SetAddress(&pBranchListIndexes_);
546  branchListIndexesBranch->GetEntry(eventEntry_);
547  mapperFilled_ = true;
548  }
549  return true;
550  }
551 
554  updateMap();
556  }
557  }
558 
559 //
560 // constants, enums and typedefs
561 //
562 
563 //
564 // static data member definitions
565 //
566 
567 //
568 // constructors and destructor
569 //
570 
572  fileVersion_(-1) {
573  if(0==file) {
574  throw cms::Exception("NoFile")<<"The TFile pointer is null";
575  }
576  strategy_ = newStrategy(file, getFileVersion(file));
577 }
578 
579 //
580 // member functions
581 //
582 
584  TTree* metaDataTree = dynamic_cast<TTree*>(file->Get(edm::poolNames::metaDataTreeName().c_str()));
585  if(0==metaDataTree) {
586  return 0;
587  }
588 
591  TBranch* bVer = metaDataTree->GetBranch(edm::poolNames::fileFormatVersionBranchName().c_str());
592  bVer->SetAddress(&pV);
593  bVer->GetEntry(0);
594  fileVersion_ = v.value();
595  return v.value();
596 }
597 
598 bool BranchMapReader::updateEvent(Long_t newevent) {
599  return strategy_->updateEvent(newevent);
600 }
601 
603  return strategy_->updateLuminosityBlock(newlumi);
604 }
605 
606 bool BranchMapReader::updateRun(Long_t newRun) {
607  return strategy_->updateRun(newRun);
608 }
609 
611  if(0 == strategy_.get()) {
612  strategy_ = newStrategy(file, getFileVersion(file));
613  return true;
614  }
615 
616  TFile* currentFile(strategy_->currentFile_);
617  bool isNew(file != currentFile);
618 
619  if(!isNew) {
620  //could still have a new TFile which just happens to share the same memory address as the previous file
621  //will assume that if the Event tree's address and UUID are the same as before then we do not have
622  // to treat this like a new file
623  TTree* eventTreeTemp = dynamic_cast<TTree*>(currentFile->Get(edm::poolNames::eventTreeName().c_str()));
624  isNew = eventTreeTemp != strategy_->eventTree_ || strategy_->fileUUID_ != currentFile->GetUUID();
625  }
626  if(isNew) {
627  int fileVersion = getFileVersion(file);
628  if(fileVersion != strategy_->fileVersion_) {
629  strategy_ = newStrategy(file, fileVersion);
630  } else {
631  strategy_->updateFile(file);
632  }
633  }
634  return isNew;
635 }
636 
639  return strategy_->productToBranch(pid);
640 }
641 
642 std::vector<edm::BranchDescription> const&
644  return strategy_->getBranchDescriptions();
645 }
646 
647 
648 std::auto_ptr<internal::BMRStrategy>
649 BranchMapReader::newStrategy(TFile* file, int fileVersion) {
650  std::auto_ptr<internal::BMRStrategy> s;
651 
652  if(fileVersion >= 17) {
653  s = std::auto_ptr<internal::BMRStrategy>(new internal::BranchMapReaderStrategyV17(file, fileVersion));
654  } else if(fileVersion >= 11) {
655  s = std::auto_ptr<internal::BMRStrategy>(new internal::BranchMapReaderStrategyV11(file, fileVersion));
656  } else if(fileVersion >= 8) {
657  s = std::auto_ptr<internal::BMRStrategy>(new internal::BranchMapReaderStrategyV8(file, fileVersion));
658  } else if(fileVersion >= 7) {
659  s = std::auto_ptr<internal::BMRStrategy>(new internal::BranchMapReaderStrategyV7(file, fileVersion));
660  } else {
661  s = std::auto_ptr<internal::BMRStrategy>(new internal::BranchMapReaderStrategyV1(file, fileVersion));
662  }
663  return s;
664 }
665 }
virtual bool updateFile(TFile *file) override
virtual edm::BranchDescription const & branchIDToBranch(edm::BranchID const &bid) const override
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< internal::BMRStrategy > newStrategy(TFile *file, int fileVersion)
BranchType const & branchType() const
virtual bool updateFile(TFile *file) override
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
std::auto_ptr< internal::BMRStrategy > strategy_
std::unique_ptr< edm::ThinnedAssociationsHelper > thinnedAssociationsHelper_
std::auto_ptr< edm::BranchIDLists > branchIDLists_
BMRStrategy(TFile *file, int fileVersion)
bool updateEvent(Long_t eventEntry)
std::map< BranchKey, BranchDescription > ProductList
assert(m_qm.get())
bool updateFile(TFile *file)
virtual bool updateFile(TFile *file) override
virtual bool updateRun(Long_t runEntry) override
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:218
BranchMapReaderStrategyV7(TFile *file, int fileVersion)
std::vector< EventEntryInfo > EventEntryInfoVector
virtual edm::BranchListIndexes const & branchListIndexes() const override
virtual std::vector< edm::BranchDescription > const & getBranchDescriptions() override
std::string const & luminosityBlockTreeName()
Definition: BranchType.cc:271
std::vector< edm::BranchDescription > bDesc_
bool updateLuminosityBlock(Long_t luminosityBlockEntry)
virtual bool updateEvent(Long_t eventEntry) override
virtual bool updateFile(TFile *file) override
std::vector< BranchListIndex > BranchListIndexes
edm::EventEntryInfoVector eventEntryInfoVector_
BranchID productIDToBranchID(ProductID const &pid, BranchIDLists const &lists, BranchListIndexes const &indexes)
std::auto_ptr< edm::BranchIDLists > branchIDLists_
Strategy(TFile *file, int fileVersion)
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:238
virtual edm::BranchListIndexes const & branchListIndexes() const override
virtual bool updateEvent(Long_t eventEntry) override
virtual edm::BranchID productToBranchID(edm::ProductID const &pid) override
virtual bool updateRun(Long_t runEntry) override
TBranch * getBranchRegistry(edm::ProductRegistry **pReg)
const edm::BranchDescription & productToBranch(const edm::ProductID &pid)
virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override
std::string const & BranchTypeToBranchEntryInfoBranchName(BranchType const &branchType)
Definition: BranchType.cc:127
BranchID const & branchID() const
std::string const & metaDataTreeName()
Definition: BranchType.cc:168
void setFrozen(bool initializeLookupInfo=true)
virtual bool updateFile(TFile *file) override
Container::value_type value_type
virtual edm::BranchListIndexes const & branchListIndexes() const override
std::string const & runTreeName()
Definition: BranchType.cc:274
BranchListIndexes const & branchListIndexes() const
Definition: History.h:50
virtual edm::ThinnedAssociationsHelper const & thinnedAssociationsHelper() const override
BranchMapReaderStrategyV1(TFile *file, int fileVersion)
virtual edm::BranchListIndexes const & branchListIndexes() const override
virtual edm::BranchID productToBranchID(edm::ProductID const &pid) override
std::string const & eventMetaDataTreeName()
Definition: BranchType.cc:264
static const edm::BranchDescription kDefaultBranchDescription
virtual bool updateEvent(Long_t eventEntry) override
tuple pid
Definition: sysUtil.py:22
double b
Definition: hdecay.h:120
ProductList & productListUpdator()
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:173
BranchMapReaderStrategyV8(TFile *file, int fileVersion)
BranchMapReaderStrategyV17(TFile *file, int fileVersion)
virtual bool updateEvent(Long_t eventEntry) override
virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override
BranchMapReaderStrategyV11(TFile *file, int fileVersion)
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:213
std::string const & eventTreeName()
Definition: BranchType.cc:260
bool updateRun(Long_t runEntry)
std::string const & branchIDListBranchName()
Definition: BranchType.cc:208
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:247
edm::EventEntryInfoVector * pEventEntryInfoVector_
virtual bool updateMap() override
std::map< edm::BranchID, edm::BranchDescription > bidToDesc
volatile std::atomic< bool > shutdown_flag false
virtual edm::BranchListIndexes const & branchListIndexes() const override
std::string const & eventHistoryTreeName()
Definition: BranchType.cc:268
virtual edm::BranchID productToBranchID(edm::ProductID const &pid) override
virtual edm::BranchDescription const & productToBranch(edm::ProductID const &pid) override
virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override
const std::vector< edm::BranchDescription > & getBranchDescriptions()
virtual bool updateLuminosityBlock(Long_t luminosityBlockEntry) override
virtual bool updateRun(Long_t runEntry) override
virtual bool updateRun(Long_t runEntry) override