CMS 3D CMS Logo

RootFile.h
Go to the documentation of this file.
1 #ifndef IOPool_Input_RootFile_h
2 #define IOPool_Input_RootFile_h
3 
4 /*----------------------------------------------------------------------
5 
6 RootFile.h // used by ROOT input sources
7 
8 ----------------------------------------------------------------------*/
9 
10 #include "RootTree.h"
14 #include "DataFormats/Provenance/interface/EntryDescriptionID.h" // backward compatibility
16 #include "DataFormats/Provenance/interface/EventEntryDescription.h" // backward compatibility
17 #include "DataFormats/Provenance/interface/EventProcessHistoryID.h" // backward compatibility
27 
28 #include <array>
29 #include <map>
30 #include <memory>
31 #include <string>
32 #include <vector>
33 
34 namespace edm {
35 
36  //------------------------------------------------------------
37  // Class RootFile: supports file reading.
38 
39  class BranchID;
40  class BranchIDListHelper;
41  class ProductProvenanceRetriever;
42  struct DaqProvenanceHelper;
43  class DuplicateChecker;
44  class EventSkipperByID;
45  class ProcessHistoryRegistry;
46  class ProductSelectorRules;
47  class InputFile;
48  class ProvenanceReaderBase;
49  class ProvenanceAdaptor;
50  class StoredMergeableRunProductMetadata;
51  class RunHelperBase;
53 
54  typedef std::map<EntryDescriptionID, EventEntryDescription> EntryDescriptionMap;
55 
57  public:
58  virtual std::unique_ptr<ProvenanceReaderBase> makeReader(RootTree& eventTree,
59  DaqProvenanceHelper const* daqProvenanceHelper) const = 0;
60  virtual ~MakeProvenanceReader() = default;
61  };
62 
63  class RootFile {
64  public:
65  typedef std::array<RootTree*, NumBranchTypes> RootTreePtrArray;
67  ProcessConfiguration const& processConfiguration,
68  std::string const& logicalFileName,
69  std::shared_ptr<InputFile> filePtr,
70  std::shared_ptr<EventSkipperByID> eventSkipperByID,
71  bool skipAnyEvents,
72  int remainingEvents,
73  int remainingLumis,
74  unsigned int nStreams,
75  unsigned int treeCacheSize,
76  int treeMaxVirtualSize,
77  InputSource::ProcessingMode processingMode,
78  RunHelperBase* runHelper,
79  bool noEventSort,
80  ProductSelectorRules const& productSelectorRules,
81  InputType inputType,
82  std::shared_ptr<BranchIDListHelper> branchIDListHelper,
83  std::shared_ptr<ThinnedAssociationsHelper> thinnedAssociationsHelper,
84  std::vector<BranchID> const* associationsFromSecondary,
85  std::shared_ptr<DuplicateChecker> duplicateChecker,
86  bool dropDescendantsOfDroppedProducts,
87  ProcessHistoryRegistry& processHistoryRegistry,
88  std::vector<std::shared_ptr<IndexIntoFile>> const& indexesIntoFiles,
89  std::vector<std::shared_ptr<IndexIntoFile>>::size_type currentIndexIntoFile,
90  std::vector<ProcessHistoryID>& orderedProcessHistoryIDs,
91  bool bypassVersionCheck,
92  bool labelRawDataLikeMC,
93  bool usingGoToEvent,
94  bool enablePrefetching,
95  bool enforceGUIDInFileName);
96 
98  ProcessConfiguration const& processConfiguration,
99  std::string const& logicalFileName,
100  std::shared_ptr<InputFile> filePtr,
101  unsigned int nStreams,
102  int treeMaxVirtualSize,
103  InputSource::ProcessingMode processingMode,
104  RunHelperBase* runHelper,
105  ProductSelectorRules const& productSelectorRules,
106  InputType inputType,
107  std::shared_ptr<BranchIDListHelper> branchIDListHelper,
108  std::shared_ptr<ThinnedAssociationsHelper> thinnedAssociationsHelper,
109  std::vector<BranchID> const* associationsFromSecondary,
110  bool dropDescendantsOfDroppedProducts,
111  ProcessHistoryRegistry& processHistoryRegistry,
112  std::vector<std::shared_ptr<IndexIntoFile>> const& indexesIntoFiles,
113  std::vector<std::shared_ptr<IndexIntoFile>>::size_type currentIndexIntoFile,
114  std::vector<ProcessHistoryID>& orderedProcessHistoryIDs,
115  bool bypassVersionCheck,
116  bool labelRawDataLikeMC,
117  bool enablePrefetching,
118  bool enforceGUIDInFileName)
119  : RootFile(fileName,
120  processConfiguration,
121  logicalFileName,
122  filePtr,
123  nullptr,
124  false,
125  -1,
126  -1,
127  nStreams,
128  0U,
129  treeMaxVirtualSize,
130  processingMode,
131  runHelper,
132  false,
133  productSelectorRules,
134  inputType,
135  branchIDListHelper,
136  thinnedAssociationsHelper,
137  associationsFromSecondary,
138  nullptr,
139  dropDescendantsOfDroppedProducts,
140  processHistoryRegistry,
141  indexesIntoFiles,
142  currentIndexIntoFile,
143  orderedProcessHistoryIDs,
144  bypassVersionCheck,
145  labelRawDataLikeMC,
146  false,
147  enablePrefetching,
148  enforceGUIDInFileName) {}
149 
151  ProcessConfiguration const& processConfiguration,
152  std::string const& logicalFileName,
153  std::shared_ptr<InputFile> filePtr,
154  unsigned int nStreams,
155  unsigned int treeCacheSize,
156  int treeMaxVirtualSize,
157  RunHelperBase* runHelper,
158  ProductSelectorRules const& productSelectorRules,
159  InputType inputType,
160  ProcessHistoryRegistry& processHistoryRegistry,
161  std::vector<std::shared_ptr<IndexIntoFile>> const& indexesIntoFiles,
162  std::vector<std::shared_ptr<IndexIntoFile>>::size_type currentIndexIntoFile,
163  std::vector<ProcessHistoryID>& orderedProcessHistoryIDs,
164  bool bypassVersionCheck,
165  bool enablePrefetching,
166  bool enforceGUIDInFileName)
167  : RootFile(fileName,
168  processConfiguration,
169  logicalFileName,
170  filePtr,
171  nullptr,
172  false,
173  -1,
174  -1,
175  nStreams,
176  treeCacheSize,
177  treeMaxVirtualSize,
178  InputSource::RunsLumisAndEvents,
179  runHelper,
180  false,
181  productSelectorRules,
182  inputType,
183  nullptr,
184  nullptr,
185  nullptr,
186  nullptr,
187  false,
188  processHistoryRegistry,
189  indexesIntoFiles,
190  currentIndexIntoFile,
191  orderedProcessHistoryIDs,
192  bypassVersionCheck,
193  false,
194  false,
195  enablePrefetching,
196  enforceGUIDInFileName) {}
197 
198  ~RootFile();
199 
200  RootFile(RootFile const&) = delete; // Disallow copying and moving
201  RootFile& operator=(RootFile const&) = delete; // Disallow copying and moving
202 
203  void reportOpened(std::string const& inputType);
204  void close();
205  bool readCurrentEvent(EventPrincipal& cache);
206  void readEvent(EventPrincipal& cache);
207 
208  std::shared_ptr<LuminosityBlockAuxiliary> readLuminosityBlockAuxiliary_();
209  std::shared_ptr<RunAuxiliary> readRunAuxiliary_();
210  std::shared_ptr<RunAuxiliary> readFakeRunAuxiliary_();
211  void readRun_(RunPrincipal& runPrincipal);
212  void readFakeRun_(RunPrincipal& runPrincipal);
213  void readLuminosityBlock_(LuminosityBlockPrincipal& lumiPrincipal);
214  std::string const& file() const { return file_; }
215  std::shared_ptr<ProductRegistry const> productRegistry() const { return productRegistry_; }
216  EventAuxiliary const& eventAux() const { return eventAux_; }
217  // IndexIntoFile::EntryNumber_t const& entryNumber() const {return indexIntoFileIter().entry();}
218  // LuminosityBlockNumber_t const& luminosityBlockNumber() const {return indexIntoFileIter().lumi();}
219  // RunNumber_t const& runNumber() const {return indexIntoFileIter().run();}
220  EventID const& eventID() const { return eventAux().id(); }
221  RootTree const& eventTree() const { return eventTree_; }
222  RootTree const& lumiTree() const { return lumiTree_; }
223  RootTree const& runTree() const { return runTree_; }
224  FileFormatVersion fileFormatVersion() const { return fileFormatVersion_; }
225  int whyNotFastClonable() const { return whyNotFastClonable_; }
226  std::array<bool, NumBranchTypes> const& hasNewlyDroppedBranch() const { return hasNewlyDroppedBranch_; }
227  bool branchListIndexesUnchanged() const { return branchListIndexesUnchanged_; }
228  bool modifiedIDs() const { return daqProvenanceHelper_.get() != nullptr; }
229  std::unique_ptr<FileBlock> createFileBlock() const;
231  return (event != 0) ? setEntryAtEvent(run, lumi, event) : (lumi ? setEntryAtLumi(run, lumi) : setEntryAtRun(run));
232  }
233  bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const;
234  bool setEntryAtEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event);
235  bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi);
236  bool setEntryAtRun(RunNumber_t run);
237  bool setEntryAtNextEventInLumi(RunNumber_t run, LuminosityBlockNumber_t lumi);
238  void setAtEventEntry(IndexIntoFile::EntryNumber_t entry);
239 
240  void rewind() {
241  indexIntoFileIter_ = indexIntoFileBegin_;
242  eventTree_.rewind();
243  lumiTree_.rewind();
244  runTree_.rewind();
245  }
246  void setToLastEntry() { indexIntoFileIter_ = indexIntoFileEnd_; }
247 
248  bool skipEntries(unsigned int& offset) { return eventTree_.skipEntries(offset); }
249  bool skipEvents(int& offset);
250  bool goToEvent(EventID const& eventID);
251  bool nextEventEntry() { return eventTree_.nextWithCache(); }
252  IndexIntoFile::EntryType getNextItemType(RunNumber_t& run, LuminosityBlockNumber_t& lumi, EventNumber_t& event);
253  std::shared_ptr<BranchIDListHelper const> branchIDListHelper() const {
254  return get_underlying_safe(branchIDListHelper_);
255  }
256  std::shared_ptr<BranchIDListHelper>& branchIDListHelper() { return get_underlying_safe(branchIDListHelper_); }
257  std::shared_ptr<IndexIntoFile const> indexIntoFileSharedPtr() const {
258  return get_underlying_safe(indexIntoFileSharedPtr_);
259  }
260  std::shared_ptr<IndexIntoFile>& indexIntoFileSharedPtr() { return get_underlying_safe(indexIntoFileSharedPtr_); }
261  bool wasLastEventJustRead() const;
262  bool wasFirstEventJustRead() const;
263  IndexIntoFile::IndexIntoFileItr indexIntoFileIter() const;
264  void setPosition(IndexIntoFile::IndexIntoFileItr const& position);
265  void initAssociationsFromSecondary(std::vector<BranchID> const&);
266 
267  void setSignals(
268  signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* preEventReadSource,
269  signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const* postEventReadSource);
270 
271  private:
272  RootTreePtrArray& treePointers() { return treePointers_; }
273  bool skipThisEntry();
274  void setIfFastClonable(int remainingEvents, int remainingLumis);
275  void validateFile(InputType inputType, bool usingGoToEvent);
276  void fillIndexIntoFile();
277  bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry);
278  void fillThisEventAuxiliary();
279  void fillEventHistory();
280  std::shared_ptr<LuminosityBlockAuxiliary> fillLumiAuxiliary();
281  std::shared_ptr<RunAuxiliary> fillRunAuxiliary();
282  std::string const& newBranchToOldBranch(std::string const& newBranch) const;
283  void markBranchToBeDropped(bool dropDescendants,
284  BranchDescription const& branch,
285  std::set<BranchID>& branchesToDrop,
286  std::map<BranchID, BranchID> const& droppedToKeptAlias) const;
287  void dropOnInput(ProductRegistry& reg, ProductSelectorRules const& rules, bool dropDescendants, InputType inputType);
288  void readParentageTree(InputType inputType);
289  void readEntryDescriptionTree(EntryDescriptionMap& entryDescriptionMap,
290  InputType inputType); // backward compatibility
291  void readEventHistoryTree();
292  bool isDuplicateEvent();
293 
294  void initializeDuplicateChecker(std::vector<std::shared_ptr<IndexIntoFile>> const& indexesIntoFiles,
295  std::vector<std::shared_ptr<IndexIntoFile>>::size_type currentIndexIntoFile);
296 
297  std::unique_ptr<MakeProvenanceReader> makeProvenanceReaderMaker(InputType inputType);
298  std::shared_ptr<ProductProvenanceRetriever> makeProductProvenanceRetriever(unsigned int iStreamIndex);
299 
300  std::shared_ptr<RunAuxiliary const> savedRunAuxiliary() const { return get_underlying_safe(savedRunAuxiliary_); }
301  std::shared_ptr<RunAuxiliary>& savedRunAuxiliary() { return get_underlying_safe(savedRunAuxiliary_); }
302 
303  std::shared_ptr<BranchChildren const> branchChildren() const { return get_underlying_safe(branchChildren_); }
304  std::shared_ptr<BranchChildren>& branchChildren() { return get_underlying_safe(branchChildren_); }
305 
306  std::shared_ptr<ProductProvenanceRetriever const> eventProductProvenanceRetriever(size_t index) const {
307  return get_underlying_safe(eventProductProvenanceRetrievers_[index]);
308  }
309  std::shared_ptr<ProductProvenanceRetriever>& eventProductProvenanceRetriever(size_t index) {
310  return get_underlying_safe(eventProductProvenanceRetrievers_[index]);
311  }
312 
323  std::vector<ProcessHistoryID>& orderedProcessHistoryIDs_;
328  std::vector<EventProcessHistoryID> eventProcessHistoryIDs_; // backward compatibility
329  std::vector<EventProcessHistoryID>::const_iterator eventProcessHistoryIter_; // backward compatibility
335  std::array<bool, NumBranchTypes> hasNewlyDroppedBranch_;
341  RootTreePtrArray treePointers_;
343  std::shared_ptr<ProductRegistry const> productRegistry_;
344  std::shared_ptr<BranchIDLists const> branchIDLists_;
350  std::map<std::string, std::string> newBranchToOldBranch_;
359  std::vector<edm::propagate_const<std::shared_ptr<ProductProvenanceRetriever>>> eventProductProvenanceRetrievers_;
360  std::vector<ParentageID> parentageIDLookup_;
364  }; // class RootFile
365 
366 } // namespace edm
367 #endif
EventID const & eventID() const
Definition: RootFile.h:220
bool setEntryAtItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
Definition: RootFile.h:230
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:346
InputType
Definition: InputType.h:5
RootTree const & lumiTree() const
Definition: RootFile.h:222
std::shared_ptr< BranchIDLists const > branchIDLists_
Definition: RootFile.h:344
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:253
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
virtual ~MakeProvenanceReader()=default
bool branchListIndexesUnchanged() const
Definition: RootFile.h:227
bool nextEventEntry()
Definition: RootFile.h:251
bool enforceGUIDInFileName_
Definition: RootFile.h:333
int whyNotFastClonable_
Definition: RootFile.h:334
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:318
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:347
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:350
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:321
#define nullptr
RootTree lumiTree_
Definition: RootFile.h:339
InputType inputType_
Definition: RootFile.h:363
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:330
unsigned long long EventNumber_t
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:348
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever(size_t index) const
Definition: RootFile.h:306
bool skipEntries(unsigned int &offset)
Definition: RootFile.h:248
std::shared_ptr< IndexIntoFile > & indexIntoFileSharedPtr()
Definition: RootFile.h:260
std::shared_ptr< ProductRegistry const > productRegistry() const
Definition: RootFile.h:215
uint16_t size_type
unsigned int LuminosityBlockNumber_t
std::vector< EventSelectionID > EventSelectionIDVector
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:362
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:319
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, RunHelperBase *runHelper, ProductSelectorRules const &productSelectorRules, InputType inputType, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool enablePrefetching, bool enforceGUIDInFileName)
Definition: RootFile.h:150
void rewind()
Definition: RootFile.h:240
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:359
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:329
void setToLastEntry()
Definition: RootFile.h:246
FileID fid_
Definition: RootFile.h:320
long long EntryNumber_t
std::string const logicalFile_
Definition: RootFile.h:314
std::vector< BranchListIndex > BranchListIndexes
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
Definition: RootFile.h:327
bool noEventSort_
Definition: RootFile.h:332
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, unsigned int nStreams, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, bool dropDescendantsOfDroppedProducts, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool labelRawDataLikeMC, bool enablePrefetching, bool enforceGUIDInFileName)
Definition: RootFile.h:97
RootTree const & runTree() const
Definition: RootFile.h:223
bool modifiedIDs() const
Definition: RootFile.h:228
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:342
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:352
int whyNotFastClonable() const
Definition: RootFile.h:225
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:357
std::shared_ptr< ProductProvenanceRetriever > & eventProductProvenanceRetriever(size_t index)
Definition: RootFile.h:309
bool skipAnyEvents_
Definition: RootFile.h:331
RootTree eventTree_
Definition: RootFile.h:338
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:226
BranchListIndexes branchListIndexes_
Definition: RootFile.h:353
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:354
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
std::shared_ptr< BranchIDListHelper > & branchIDListHelper()
Definition: RootFile.h:256
RootTree runTree_
Definition: RootFile.h:340
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:358
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary() const
Definition: RootFile.h:300
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:335
std::shared_ptr< RunAuxiliary > & savedRunAuxiliary()
Definition: RootFile.h:301
ProcessConfiguration const & processConfiguration_
Definition: RootFile.h:315
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:343
std::map< EntryDescriptionID, EventEntryDescription > EntryDescriptionMap
Definition: RootFile.h:52
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:355
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:303
std::shared_ptr< BranchChildren > & branchChildren()
Definition: RootFile.h:304
std::string const & file() const
Definition: RootFile.h:214
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:324
std::array< RootTree *, NumBranchTypes > RootTreePtrArray
Definition: RootFile.h:65
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
bool branchListIndexesUnchanged_
Definition: RootFile.h:336
HLT enums.
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:351
RootTreePtrArray treePointers_
Definition: RootFile.h:341
static int position[264][3]
Definition: ReadPGInfo.cc:509
def cache(function)
Definition: utilities.py:3
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:323
RootTreePtrArray & treePointers()
Definition: RootFile.h:272
std::shared_ptr< IndexIntoFile const > indexIntoFileSharedPtr() const
Definition: RootFile.h:257
unsigned int RunNumber_t
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:360
EventAuxiliary eventAux_
Definition: RootFile.h:337
RootTree const & eventTree() const
Definition: RootFile.h:221
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:345
virtual std::unique_ptr< ProvenanceReaderBase > makeReader(RootTree &eventTree, DaqProvenanceHelper const *daqProvenanceHelper) const =0
std::string const file_
Definition: RootFile.h:313
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:328
Definition: event.py:1