CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::RootFile Class Reference

#include <RootFile.h>

Public Types

typedef std::array< RootTree *, NumBranchTypesRootTreePtrArray
 

Public Member Functions

std::shared_ptr< BranchIDListHelper const > branchIDListHelper () const
 
std::shared_ptr< BranchIDListHelper > & branchIDListHelper ()
 
bool branchListIndexesUnchanged () const
 
void close ()
 
bool containsItem (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
 
std::unique_ptr< FileBlockcreateFileBlock () const
 
EventAuxiliary const & eventAux () const
 
EventID const & eventID () const
 
RootTree const & eventTree () const
 
std::string const & file () const
 
FileFormatVersion fileFormatVersion () const
 
IndexIntoFile::EntryType getNextItemType (RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
 
bool goToEvent (EventID const &eventID)
 
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch () const
 
IndexIntoFile::IndexIntoFileItr indexIntoFileIter () const
 
std::shared_ptr< IndexIntoFile const > indexIntoFileSharedPtr () const
 
std::shared_ptr< IndexIntoFile > & indexIntoFileSharedPtr ()
 
void initAssociationsFromSecondary (std::vector< BranchID > const &)
 
RootTree const & lumiTree () const
 
bool modifiedIDs () const
 
bool nextEventEntry ()
 
RootFileoperator= (RootFile const &)=delete
 
std::shared_ptr< ProductRegistry const > productRegistry () const
 
bool readCurrentEvent (EventPrincipal &cache)
 
void readEvent (EventPrincipal &cache)
 
void readFakeRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadFakeRunAuxiliary_ ()
 
void readLuminosityBlock_ (LuminosityBlockPrincipal &lumiPrincipal)
 
std::shared_ptr< LuminosityBlockAuxiliaryreadLuminosityBlockAuxiliary_ ()
 
void readRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadRunAuxiliary_ ()
 
void reportOpened (std::string const &inputType)
 
void rewind ()
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, 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 usingGoToEvent, bool enablePrefetching, bool enforceGUIDInFileName)
 
 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)
 
 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)
 
 RootFile (RootFile const &)=delete
 
RootTree const & runTree () const
 
void setAtEventEntry (IndexIntoFile::EntryNumber_t entry)
 
bool setEntryAtEvent (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
 
bool setEntryAtItem (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
 
bool setEntryAtLumi (RunNumber_t run, LuminosityBlockNumber_t lumi)
 
bool setEntryAtNextEventInLumi (RunNumber_t run, LuminosityBlockNumber_t lumi)
 
bool setEntryAtRun (RunNumber_t run)
 
void setPosition (IndexIntoFile::IndexIntoFileItr const &position)
 
void setSignals (signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
 
void setToLastEntry ()
 
bool skipEntries (unsigned int &offset)
 
bool skipEvents (int &offset)
 
bool wasFirstEventJustRead () const
 
bool wasLastEventJustRead () const
 
int whyNotFastClonable () const
 
 ~RootFile ()
 

Private Member Functions

std::shared_ptr< BranchChildren const > branchChildren () const
 
std::shared_ptr< BranchChildren > & branchChildren ()
 
void dropOnInput (ProductRegistry &reg, ProductSelectorRules const &rules, bool dropDescendants, InputType inputType)
 
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever (size_t index) const
 
std::shared_ptr< ProductProvenanceRetriever > & eventProductProvenanceRetriever (size_t index)
 
bool fillEventAuxiliary (IndexIntoFile::EntryNumber_t entry)
 
void fillEventHistory ()
 
void fillIndexIntoFile ()
 
std::shared_ptr< LuminosityBlockAuxiliaryfillLumiAuxiliary ()
 
std::shared_ptr< RunAuxiliaryfillRunAuxiliary ()
 
void fillThisEventAuxiliary ()
 
void initializeDuplicateChecker (std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile)
 
bool isDuplicateEvent ()
 
std::shared_ptr< ProductProvenanceRetrievermakeProductProvenanceRetriever (unsigned int iStreamIndex)
 
std::unique_ptr< MakeProvenanceReadermakeProvenanceReaderMaker (InputType inputType)
 
void markBranchToBeDropped (bool dropDescendants, BranchDescription const &branch, std::set< BranchID > &branchesToDrop, std::map< BranchID, BranchID > const &droppedToKeptAlias) const
 
std::string const & newBranchToOldBranch (std::string const &newBranch) const
 
void readEntryDescriptionTree (EntryDescriptionMap &entryDescriptionMap, InputType inputType)
 
void readEventHistoryTree ()
 
void readParentageTree (InputType inputType)
 
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary () const
 
std::shared_ptr< RunAuxiliary > & savedRunAuxiliary ()
 
void setIfFastClonable (int remainingEvents, int remainingLumis)
 
bool skipThisEntry ()
 
RootTreePtrArraytreePointers ()
 
void validateFile (InputType inputType, bool usingGoToEvent)
 

Private Attributes

edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
 
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
 
std::shared_ptr< BranchIDLists const > branchIDLists_
 
BranchListIndexes branchListIndexes_
 
bool branchListIndexesUnchanged_
 
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
 
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
 
edm::propagate_const< TClass * > edProductClass_
 
bool enforceGUIDInFileName_
 
EventAuxiliary eventAux_
 
edm::propagate_const< TTree * > eventHistoryTree_
 
std::vector< EventProcessHistoryIDeventProcessHistoryIDs_
 
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
 
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
 
EventSelectionIDVector eventSelectionIDs_
 
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
 
RootTree eventTree_
 
FileID fid_
 
std::string const file_
 
FileFormatVersion fileFormatVersion_
 
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
 
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
 
std::array< bool, NumBranchTypeshasNewlyDroppedBranch_
 
edm::propagate_const< std::unique_ptr< History > > history_
 
IndexIntoFileindexIntoFile_
 
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
 
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
 
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
 
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
 
InputType inputType_
 
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
 
std::string const logicalFile_
 
RootTree lumiTree_
 
std::map< std::string, std::string > newBranchToOldBranch_
 
bool noEventSort_
 
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
 
std::vector< ParentageIDparentageIDLookup_
 
ProcessConfiguration const & processConfiguration_
 
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
 
InputSource::ProcessingMode processingMode_
 
std::shared_ptr< ProductRegistry const > productRegistry_
 
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
 
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
 
edm::propagate_const< RunHelperBase * > runHelper_
 
RootTree runTree_
 
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
 
bool skipAnyEvents_
 
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
 
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
 
RootTreePtrArray treePointers_
 
int whyNotFastClonable_
 

Detailed Description

Definition at line 63 of file RootFile.h.

Member Typedef Documentation

Definition at line 65 of file RootFile.h.

Constructor & Destructor Documentation

edm::RootFile::RootFile ( std::string const &  fileName,
ProcessConfiguration const &  processConfiguration,
std::string const &  logicalFileName,
std::shared_ptr< InputFile filePtr,
std::shared_ptr< EventSkipperByID eventSkipperByID,
bool  skipAnyEvents,
int  remainingEvents,
int  remainingLumis,
unsigned int  nStreams,
unsigned int  treeCacheSize,
int  treeMaxVirtualSize,
InputSource::ProcessingMode  processingMode,
RunHelperBase runHelper,
bool  noEventSort,
ProductSelectorRules const &  productSelectorRules,
InputType  inputType,
std::shared_ptr< BranchIDListHelper branchIDListHelper,
std::shared_ptr< ThinnedAssociationsHelper thinnedAssociationsHelper,
std::vector< BranchID > const *  associationsFromSecondary,
std::shared_ptr< DuplicateChecker duplicateChecker,
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  usingGoToEvent,
bool  enablePrefetching,
bool  enforceGUIDInFileName 
)

Definition at line 140 of file RootFile.cc.

References edm::IndexIntoFile::begin(), branchChildren_, edm::poolNames::branchIDListBranchName(), branchIDListHelper_, branchIDLists_, branchListIndexesUnchanged_, edm::BranchDescription::branchName(), edm::BranchDescription::branchType(), edm::BranchTypeToAuxiliaryBranchName(), edm::BranchDescription::className(), edm::ProductRegistry::copyProduct(), daqProvenanceHelper_, edm::roottree::defaultNonEventCacheSize, edm::IndexIntoFile::doneFileInitialization(), dropOnInput(), edm::IndexIntoFile::end(), edm::errors::EventCorruption, edm::poolNames::eventHistoryBranchName(), eventProcessHistoryIDs_, eventProcessHistoryIter_, eventSkipperByID_, edm::FileBlock::EventsOrLumisSelectedByID, eventTree_, Exception, fid_, file(), fileFormatVersion(), fileFormatVersion_, edm::poolNames::fileFormatVersionBranchName(), edm::poolNames::fileIdentifierBranchName(), filePtr_, edm::errors::FileReadError, fileThinnedAssociationsHelper_, HLT_2018_cff::finder, edm::IndexIntoFile::firstAppearanceOrder, edm::BranchDescription::friendlyClassName(), edm::friendlyname::friendlyName(), edm::roottree::getEntry(), hasNewlyDroppedBranch_, edm::FileFormatVersion::hasThinnedAssociations(), mps_fire::i, edm::poolNames::idToParameterSetBlobsBranchName(), indexIntoFile_, indexIntoFileBegin_, edm::poolNames::indexIntoFileBranchName(), indexIntoFileEnd_, indexIntoFileIter_, edm::InEvent, edm::BranchDescription::init(), initializeDuplicateChecker(), edm::InLumi, edm::InRun, edm::pset::Registry::insertMapped(), edm::pset::Registry::instance(), lumiTree_, makeProvenanceReaderMaker(), edm::poolNames::mergeableRunProductMetadataBranchName(), edm::poolNames::metaDataTreeName(), edm::poolNames::moduleDescriptionMapBranchName(), newBranchToOldBranch(), newBranchToOldBranch_, edm::IndexIntoFile::numericalOrder, edm::poolNames::parameterSetMapBranchName(), edm::poolNames::parameterSetsTreeName(), edm::Primary, edm::poolNames::processConfigurationBranchName(), edm::poolNames::processHistoryBranchName(), edm::poolNames::processHistoryMapBranchName(), dumpMFGeometry_cfg::prod, edm::poolNames::productDependenciesBranchName(), edm::poolNames::productDescriptionBranchName(), edm::ProductRegistry::productList(), edm::ProductRegistry::productListUpdator(), productRegistry(), productRegistry_, provenanceAdaptor_, provenanceReaderMaker_, muonDTDigis_cfi::pset, l1tstage2_dqm_sourceclient-live_cfg::rawData, readEventHistoryTree(), edm::ProcessHistoryRegistry::registerProcessHistory(), edm::RootTree::resetTraining(), edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, runTree_, edm::SecondaryFile, edm::SecondarySource, setIfFastClonable(), edm::setIsMergeable(), edm::source(), storedMergeableRunProductMetadata_, AlCaHLTBitMon_QueryRunRegistry::string, OrderedSet::t, edm::poolNames::thinnedAssociationsHelperBranchName(), edm::RootTree::trainCache(), edm::roottree::trainCache(), treePointers_, edm::errors::UnimplementedFeature, edm::BranchDescription::updateFriendlyClassName(), validateFile(), and whyNotFastClonable_.

170  : file_(fileName),
171  logicalFile_(logicalFileName),
172  processConfiguration_(processConfiguration),
173  processHistoryRegistry_(&processHistoryRegistry),
174  filePtr_(filePtr),
175  eventSkipperByID_(eventSkipperByID),
177  fid_(),
178  indexIntoFileSharedPtr_(new IndexIntoFile),
180  orderedProcessHistoryIDs_(orderedProcessHistoryIDs),
185  storedMergeableRunProductMetadata_((inputType == InputType::Primary) ? new StoredMergeableRunProductMetadata
186  : nullptr),
190  skipAnyEvents_(skipAnyEvents),
192  enforceGUIDInFileName_(enforceGUIDInFileName),
196  eventAux_(),
197  eventTree_(filePtr,
198  InEvent,
199  nStreams,
200  treeMaxVirtualSize,
201  treeCacheSize,
203  enablePrefetching,
204  inputType),
205  lumiTree_(filePtr,
206  InLumi,
207  1,
208  treeMaxVirtualSize,
211  enablePrefetching,
212  inputType),
213  runTree_(filePtr,
214  InRun,
215  1,
216  treeMaxVirtualSize,
219  enablePrefetching,
220  inputType),
221  treePointers_(),
224  branchIDLists_(),
227  thinnedAssociationsHelper_(thinnedAssociationsHelper),
229  runHelper_(runHelper),
231  eventHistoryTree_(nullptr),
234  history_(),
235  branchChildren_(new BranchChildren),
236  duplicateChecker_(duplicateChecker),
242  edProductClass_(TypeWithDict::byName("edm::WrapperBase").getClass()),
243  inputType_(inputType) {
244  hasNewlyDroppedBranch_.fill(false);
245 
249 
250  // Read the metadata tree.
251  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
252  std::unique_ptr<TTree> metaDataTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::metaDataTreeName().c_str())));
253  if (nullptr == metaDataTree.get()) {
255  << "Could not find tree " << poolNames::metaDataTreeName() << " in the input file.\n";
256  }
257 
258  // To keep things simple, we just read in every possible branch that exists.
259  // We don't pay attention to which branches exist in which file format versions
260 
261  FileFormatVersion* fftPtr = &fileFormatVersion_;
262  if (metaDataTree->FindBranch(poolNames::fileFormatVersionBranchName().c_str()) != nullptr) {
263  TBranch* fft = metaDataTree->GetBranch(poolNames::fileFormatVersionBranchName().c_str());
264  fft->SetAddress(&fftPtr);
265  roottree::getEntry(fft, 0);
266  metaDataTree->SetBranchAddress(poolNames::fileFormatVersionBranchName().c_str(), &fftPtr);
267  }
268 
269  FileID* fidPtr = &fid_;
270  if (metaDataTree->FindBranch(poolNames::fileIdentifierBranchName().c_str()) != nullptr) {
271  metaDataTree->SetBranchAddress(poolNames::fileIdentifierBranchName().c_str(), &fidPtr);
272  }
273 
274  IndexIntoFile* iifPtr = &indexIntoFile_;
275  if (metaDataTree->FindBranch(poolNames::indexIntoFileBranchName().c_str()) != nullptr) {
276  metaDataTree->SetBranchAddress(poolNames::indexIntoFileBranchName().c_str(), &iifPtr);
277  }
278 
279  StoredMergeableRunProductMetadata* smrc = nullptr;
280  if (inputType == InputType::Primary) {
282  if (metaDataTree->FindBranch(poolNames::mergeableRunProductMetadataBranchName().c_str()) != nullptr) {
283  metaDataTree->SetBranchAddress(poolNames::mergeableRunProductMetadataBranchName().c_str(), &smrc);
284  }
285  }
286 
287  // Need to read to a temporary registry so we can do a translation of the BranchKeys.
288  // This preserves backward compatibility against friendly class name algorithm changes.
289  ProductRegistry inputProdDescReg;
290  ProductRegistry* ppReg = &inputProdDescReg;
291  metaDataTree->SetBranchAddress(poolNames::productDescriptionBranchName().c_str(), (&ppReg));
292 
293  typedef std::map<ParameterSetID, ParameterSetBlob> PsetMap;
294  PsetMap psetMap;
295  PsetMap* psetMapPtr = &psetMap;
296  if (metaDataTree->FindBranch(poolNames::parameterSetMapBranchName().c_str()) != nullptr) {
297  //backward compatibility
298  assert(!fileFormatVersion().parameterSetsTree());
299  metaDataTree->SetBranchAddress(poolNames::parameterSetMapBranchName().c_str(), &psetMapPtr);
300  } else {
301  assert(fileFormatVersion().parameterSetsTree());
302  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
303  std::unique_ptr<TTree> psetTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parameterSetsTreeName().c_str())));
304  if (nullptr == psetTree.get()) {
306  << "Could not find tree " << poolNames::parameterSetsTreeName() << " in the input file.\n";
307  }
308 
309  typedef std::pair<ParameterSetID, ParameterSetBlob> IdToBlobs;
310  IdToBlobs idToBlob;
311  IdToBlobs* pIdToBlob = &idToBlob;
312  psetTree->SetBranchAddress(poolNames::idToParameterSetBlobsBranchName().c_str(), &pIdToBlob);
313 
314  std::unique_ptr<TTreeCache> psetTreeCache =
316  psetTreeCache->SetEnablePrefetching(false);
317  filePtr_->SetCacheRead(psetTreeCache.get());
318  for (Long64_t i = 0; i != psetTree->GetEntries(); ++i) {
319  psetTree->GetEntry(i);
320  psetMap.insert(idToBlob);
321  }
322  filePtr_->SetCacheRead(nullptr);
323  }
324 
325  // backward compatibility
327  ProcessHistoryRegistry::collection_type* pHistMapPtr = &pHistMap;
328  if (metaDataTree->FindBranch(poolNames::processHistoryMapBranchName().c_str()) != nullptr) {
329  metaDataTree->SetBranchAddress(poolNames::processHistoryMapBranchName().c_str(), &pHistMapPtr);
330  }
331 
333  ProcessHistoryRegistry::vector_type* pHistVectorPtr = &pHistVector;
334  if (metaDataTree->FindBranch(poolNames::processHistoryBranchName().c_str()) != nullptr) {
335  metaDataTree->SetBranchAddress(poolNames::processHistoryBranchName().c_str(), &pHistVectorPtr);
336  }
337 
338  // backward compatibility
339  ProcessConfigurationVector processConfigurations;
340  ProcessConfigurationVector* procConfigVectorPtr = &processConfigurations;
341  if (metaDataTree->FindBranch(poolNames::processConfigurationBranchName().c_str()) != nullptr) {
342  metaDataTree->SetBranchAddress(poolNames::processConfigurationBranchName().c_str(), &procConfigVectorPtr);
343  }
344 
345  auto branchIDListsAPtr = std::make_unique<BranchIDLists>();
346  BranchIDLists* branchIDListsPtr = branchIDListsAPtr.get();
347  if (metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) != nullptr) {
348  metaDataTree->SetBranchAddress(poolNames::branchIDListBranchName().c_str(), &branchIDListsPtr);
349  }
350 
351  if (inputType != InputType::SecondarySource) {
353  std::make_unique<ThinnedAssociationsHelper>(); // propagate_const<T> has no reset() function
354  ThinnedAssociationsHelper* thinnedAssociationsHelperPtr = fileThinnedAssociationsHelper_.get();
355  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) != nullptr) {
356  metaDataTree->SetBranchAddress(poolNames::thinnedAssociationsHelperBranchName().c_str(),
357  &thinnedAssociationsHelperPtr);
358  }
359  }
360 
361  BranchChildren* branchChildrenBuffer = branchChildren_.get();
362  if (metaDataTree->FindBranch(poolNames::productDependenciesBranchName().c_str()) != nullptr) {
363  metaDataTree->SetBranchAddress(poolNames::productDependenciesBranchName().c_str(), &branchChildrenBuffer);
364  }
365 
366  // backward compatibility
367  std::vector<EventProcessHistoryID>* eventHistoryIDsPtr = &eventProcessHistoryIDs_;
368  if (metaDataTree->FindBranch(poolNames::eventHistoryBranchName().c_str()) != nullptr) {
369  metaDataTree->SetBranchAddress(poolNames::eventHistoryBranchName().c_str(), &eventHistoryIDsPtr);
370  }
371 
372  if (metaDataTree->FindBranch(poolNames::moduleDescriptionMapBranchName().c_str()) != nullptr) {
373  if (metaDataTree->GetBranch(poolNames::moduleDescriptionMapBranchName().c_str())->GetSplitLevel() != 0) {
374  metaDataTree->SetBranchStatus((poolNames::moduleDescriptionMapBranchName() + ".*").c_str(), false);
375  } else {
376  metaDataTree->SetBranchStatus(poolNames::moduleDescriptionMapBranchName().c_str(), false);
377  }
378  }
379 
380  // Here we read the metadata tree
381  roottree::getEntry(metaDataTree.get(), 0);
382 
384 
385  // Here we read the event history tree, if we have one.
387 
389  if (!fileFormatVersion().triggerPathsTracked()) {
390  ParameterSetConverter converter(psetMap, psetIdConverter, fileFormatVersion().parameterSetsByReference());
391  } else {
392  // Merge into the parameter set registry.
393  pset::Registry& psetRegistry = *pset::Registry::instance();
394  for (auto const& psetEntry : psetMap) {
395  ParameterSet pset(psetEntry.second.pset());
396  pset.setID(psetEntry.first);
397  // For thread safety, don't update global registries when a secondary source opens a file.
398  if (inputType != InputType::SecondarySource) {
399  psetRegistry.insertMapped(pset);
400  }
401  }
402  }
403  if (!fileFormatVersion().splitProductIDs()) {
404  // Old provenance format input file. Create a provenance adaptor.
405  // propagate_const<T> has no reset() function
406  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
407  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, true);
408  // Fill in the branchIDLists branch from the provenance adaptor
409  branchIDLists_ = provenanceAdaptor_->branchIDLists();
410  } else {
411  if (!fileFormatVersion().triggerPathsTracked()) {
412  // New provenance format, but change in ParameterSet Format. Create a provenance adaptor.
413  // propagate_const<T> has no reset() function
414  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
415  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, false);
416  }
417  // New provenance format input file. The branchIDLists branch was read directly from the input file.
418  if (metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) == nullptr) {
419  throw Exception(errors::EventCorruption) << "Failed to find branchIDLists branch in metaData tree.\n";
420  }
421  branchIDLists_.reset(branchIDListsAPtr.release());
422  }
423 
425  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) == nullptr) {
427  << "Failed to find thinnedAssociationsHelper branch in metaData tree.\n";
428  }
429  }
430 
431  if (!bypassVersionCheck) {
432  checkReleaseVersion(pHistVector, file());
433  }
434 
435  if (labelRawDataLikeMC) {
436  std::string const rawData("FEDRawDataCollection");
437  std::string const source("source");
438  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
439  BranchKey finder(rawData, source, "", "");
440  ProductRegistry::ProductList::iterator it = pList.lower_bound(finder);
441  if (it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source) {
442  // We found raw data with a module label of source.
443  // We need to change the module label and process name.
444  // Create helper.
445  it->second.init();
446  // propagate_const<T> has no reset() function
447  daqProvenanceHelper_ = std::make_unique<DaqProvenanceHelper>(it->second.unwrappedTypeID());
448  // Create the new branch description
449  BranchDescription const& newBD = daqProvenanceHelper_->branchDescription();
450  // Save info from the old and new branch descriptions
451  daqProvenanceHelper_->saveInfo(it->second, newBD);
452  // Map the new branch name to the old branch name.
453  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), it->second.branchName()));
454  // Remove the old branch description from the product Registry.
455  pList.erase(it);
456  // Check that there was only one.
457  it = pList.lower_bound(finder);
458  assert(!(it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source));
459  // Insert the new branch description into the product registry.
460  inputProdDescReg.copyProduct(newBD);
461  // Fix up other per file metadata.
462  daqProvenanceHelper_->fixMetaData(processConfigurations, pHistVector);
463  daqProvenanceHelper_->fixMetaData(*branchIDLists_);
464  daqProvenanceHelper_->fixMetaData(*branchChildren_);
465  }
466  }
467 
468  for (auto const& history : pHistVector) {
469  processHistoryRegistry.registerProcessHistory(history);
470  }
471 
473 
474  // Update the branch id info. This has to be done before validateFile since
475  // depending on the file format, the branchIDListHelper_ may have its fixBranchListIndexes call made
476  if (inputType == InputType::Primary) {
477  branchListIndexesUnchanged_ = branchIDListHelper_->updateFromInput(*branchIDLists_);
478  }
479 
480  validateFile(inputType, usingGoToEvent);
481 
482  // Here, we make the class that will make the ProvenanceReader
483  // It reads whatever trees it needs.
484  // propagate_const<T> has no reset() function
485  provenanceReaderMaker_ = std::unique_ptr<MakeProvenanceReader>(makeProvenanceReaderMaker(inputType).release());
486 
487  // Merge into the hashed registries.
488  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
490  }
491 
492  initializeDuplicateChecker(indexesIntoFiles, currentIndexIntoFile);
494  indexIntoFile_.begin(noEventSort ? IndexIntoFile::firstAppearanceOrder : IndexIntoFile::numericalOrder);
496  indexIntoFile_.end(noEventSort ? IndexIntoFile::firstAppearanceOrder : IndexIntoFile::numericalOrder);
498  eventProcessHistoryIter_ = eventProcessHistoryIDs_.begin();
499 
500  // Set product presence information in the product registry.
501  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
502  for (auto& product : pList) {
503  BranchDescription& prod = product.second;
504  prod.init();
505  treePointers_[prod.branchType()]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
506  }
507 
508  auto newReg = std::make_unique<ProductRegistry>();
509 
510  // Do the translation from the old registry to the new one
511  {
512  ProductRegistry::ProductList const& prodList = inputProdDescReg.productList();
513  for (auto const& product : prodList) {
514  BranchDescription const& prod = product.second;
515  std::string newFriendlyName = friendlyname::friendlyName(prod.className());
516  if (newFriendlyName == prod.friendlyClassName()) {
517  newReg->copyProduct(prod);
518  } else {
519  if (fileFormatVersion().splitProductIDs()) {
521  << "Cannot change friendly class name algorithm without more development work\n"
522  << "to update BranchIDLists and ThinnedAssociationsHelper. Contact the framework group.\n";
523  }
524  BranchDescription newBD(prod);
525  newBD.updateFriendlyClassName();
526  newReg->copyProduct(newBD);
527  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), prod.branchName()));
528  }
529  }
530  dropOnInput(*newReg, productSelectorRules, dropDescendants, inputType);
531  if (inputType == InputType::SecondaryFile) {
532  thinnedAssociationsHelper->updateFromSecondaryInput(*fileThinnedAssociationsHelper_,
533  *associationsFromSecondary);
534  } else if (inputType == InputType::Primary) {
535  thinnedAssociationsHelper->updateFromPrimaryInput(*fileThinnedAssociationsHelper_);
536  }
537 
538  if (inputType == InputType::Primary) {
539  for (auto& product : newReg->productListUpdator()) {
540  setIsMergeable(product.second);
541  }
542  }
543 
544  // freeze the product registry
545  newReg->setFrozen(inputType != InputType::Primary);
546  productRegistry_.reset(newReg.release());
547  }
548 
549  // Set up information from the product registry.
550  ProductRegistry::ProductList const& prodList = productRegistry()->productList();
551 
552  {
553  std::array<size_t, NumBranchTypes> nBranches;
554  nBranches.fill(0);
555  for (auto const& product : prodList) {
556  ++nBranches[product.second.branchType()];
557  }
558 
559  int i = 0;
560  for (auto t : treePointers_) {
561  t->numberOfBranchesToAdd(nBranches[i]);
562  ++i;
563  }
564  }
565  for (auto const& product : prodList) {
566  BranchDescription const& prod = product.second;
567  treePointers_[prod.branchType()]->addBranch(prod, newBranchToOldBranch(prod.branchName()));
568  }
569 
570  // Determine if this file is fast clonable.
571  setIfFastClonable(remainingEvents, remainingLumis);
572 
573  // We are done with our initial reading of EventAuxiliary.
575 
576  // Tell the event tree to begin training at the next read.
578 
579  // Train the run and lumi trees.
580  runTree_.trainCache("*");
581  lumiTree_.trainCache("*");
582  }
void dropOnInput(ProductRegistry &reg, ProductSelectorRules const &rules, bool dropDescendants, InputType inputType)
Definition: RootFile.cc:1699
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:496
std::string const & idToParameterSetBlobsBranchName()
Definition: BranchType.cc:216
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:346
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:115
unsigned int const defaultNonEventLearningEntries
Definition: RootTree.h:49
void doneFileInitialization() const
Clears the temporary vector of event numbers to reduce memory usage.
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
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
static std::string const source("source")
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
std::map< BranchKey, BranchDescription > ProductList
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:321
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
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:192
IndexIntoFileItr begin(SortOrder sortOrder) const
void initializeDuplicateChecker(std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile)
Definition: RootFile.cc:1675
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:348
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
void trainCache(char const *branchNames)
Definition: RootTree.cc:461
std::shared_ptr< ProductRegistry const > productRegistry() const
Definition: RootFile.h:215
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:362
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:319
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:214
static TypeWithDict byName(std::string const &name)
Definition: TypeWithDict.cc:74
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:359
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:329
FileID fid_
Definition: RootFile.h:320
std::string const logicalFile_
Definition: RootFile.h:314
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
std::string const & processHistoryMapBranchName()
Definition: BranchType.cc:177
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
Definition: RootFile.h:327
bool noEventSort_
Definition: RootFile.h:332
std::string friendlyName(std::string const &iFullName)
std::string const & mergeableRunProductMetadataBranchName()
Definition: BranchType.cc:204
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:342
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:201
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:207
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:352
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:357
bool skipAnyEvents_
Definition: RootFile.h:331
RootTree eventTree_
Definition: RootFile.h:338
std::map< ParameterSetID, ParameterSetID > ParameterSetIdConverter
BranchListIndexes branchListIndexes_
Definition: RootFile.h:353
std::string const & metaDataTreeName()
Definition: BranchType.cc:162
std::string const & parameterSetMapBranchName()
Definition: BranchType.cc:171
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:354
std::string const & processHistoryBranchName()
Definition: BranchType.cc:180
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
RootTree runTree_
Definition: RootFile.h:340
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:358
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:335
static constexpr EntryNumber_t invalidEntry
ProcessConfiguration const & processConfiguration_
Definition: RootFile.h:315
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:343
void setIfFastClonable(int remainingEvents, int remainingLumis)
Definition: RootFile.cc:667
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::string const & file() const
Definition: RootFile.h:214
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:165
std::string const & processConfigurationBranchName()
Definition: BranchType.cc:183
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:324
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
bool branchListIndexesUnchanged_
Definition: RootFile.h:336
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:351
unsigned int const defaultNonEventCacheSize
Definition: RootTree.h:47
RootTreePtrArray treePointers_
Definition: RootFile.h:341
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:323
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:168
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:189
std::unique_ptr< MakeProvenanceReader > makeProvenanceReaderMaker(InputType inputType)
Definition: RootFile.cc:1826
std::string const & branchIDListBranchName()
Definition: BranchType.cc:186
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:360
EventAuxiliary eventAux_
Definition: RootFile.h:337
void resetTraining()
Definition: RootTree.h:192
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:345
void validateFile(InputType inputType, bool usingGoToEvent)
Definition: RootFile.cc:1137
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:727
std::unique_ptr< TTreeCache > trainCache(TTree *tree, InputFile &file, unsigned int cacheSize, char const *branchNames)
Definition: RootTree.cc:516
unsigned int const defaultLearningEntries
Definition: RootTree.h:48
bool hasThinnedAssociations() const
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:195
void setIsMergeable(BranchDescription &)
std::string const & moduleDescriptionMapBranchName()
Definition: BranchType.cc:174
std::string const file_
Definition: RootFile.h:313
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:328
static Registry * instance()
Definition: Registry.cc:12
void readEventHistoryTree()
Definition: RootFile.cc:1664
edm::RootFile::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 
)
inline

Definition at line 97 of file RootFile.h.

119  : RootFile(fileName,
120  processConfiguration,
121  logicalFileName,
122  filePtr,
123  nullptr,
124  false,
125  -1,
126  -1,
127  nStreams,
128  0U,
129  treeMaxVirtualSize,
131  runHelper,
132  false,
133  productSelectorRules,
134  inputType,
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) {}
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:253
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, 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 usingGoToEvent, bool enablePrefetching, bool enforceGUIDInFileName)
Definition: RootFile.cc:140
edm::RootFile::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 
)
inline

Definition at line 150 of file RootFile.h.

References utilities::cache(), and AlCaHLTBitMon_QueryRunRegistry::string.

167  : RootFile(fileName,
168  processConfiguration,
169  logicalFileName,
170  filePtr,
171  nullptr,
172  false,
173  -1,
174  -1,
175  nStreams,
176  treeCacheSize,
177  treeMaxVirtualSize,
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) {}
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, 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 usingGoToEvent, bool enablePrefetching, bool enforceGUIDInFileName)
Definition: RootFile.cc:140
edm::RootFile::~RootFile ( )

Definition at line 584 of file RootFile.cc.

584 {}
edm::RootFile::RootFile ( RootFile const &  )
delete

Member Function Documentation

std::shared_ptr<BranchChildren const> edm::RootFile::branchChildren ( ) const
inlineprivate

Definition at line 303 of file RootFile.h.

References edm::get_underlying_safe().

Referenced by createFileBlock().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:355
std::shared_ptr<BranchChildren>& edm::RootFile::branchChildren ( )
inlineprivate

Definition at line 304 of file RootFile.h.

References edm::get_underlying_safe().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:355
std::shared_ptr<BranchIDListHelper const> edm::RootFile::branchIDListHelper ( ) const
inline

Definition at line 253 of file RootFile.h.

References edm::get_underlying_safe().

253  {
255  }
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:345
std::shared_ptr<BranchIDListHelper>& edm::RootFile::branchIDListHelper ( )
inline

Definition at line 256 of file RootFile.h.

References edm::get_underlying_safe().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:345
bool edm::RootFile::branchListIndexesUnchanged ( ) const
inline

Definition at line 227 of file RootFile.h.

Referenced by createFileBlock().

227 { return branchListIndexesUnchanged_; }
bool branchListIndexesUnchanged_
Definition: RootFile.h:336
void edm::RootFile::close ( void  )

Definition at line 1199 of file RootFile.cc.

References eventHistoryTree_, filePtr_, and treePointers_.

Referenced by esMonitoring.AsyncLineReaderMixin::handle_close(), esMonitoring.FDJsonServer::handle_close(), Vispa.Gui.BoxContentDialog.BoxContentDialog::keyPressEvent(), and Vispa.Gui.FindDialog.FindDialog::keyPressEvent().

1199  {
1200  // Just to play it safe, zero all pointers to objects in the InputFile to be closed.
1201  eventHistoryTree_ = nullptr;
1202  for (auto& treePointer : treePointers_) {
1203  treePointer->close();
1204  treePointer = nullptr;
1205  }
1206  filePtr_->Close();
1207  filePtr_ = nullptr; // propagate_const<T> has no reset() function
1208  }
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:351
RootTreePtrArray treePointers_
Definition: RootFile.h:341
bool edm::RootFile::containsItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 797 of file RootFile.cc.

References edm::IndexIntoFile::containsItem(), and indexIntoFile_.

797  {
799  }
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
Definition: event.py:1
std::unique_ptr< FileBlock > edm::RootFile::createFileBlock ( ) const

Definition at line 711 of file RootFile.cc.

References branchChildren(), branchListIndexesUnchanged(), eventTree_, file_, fileFormatVersion(), hasNewlyDroppedBranch(), lumiTree_, edm::RootTree::metaTree(), modifiedIDs(), runTree_, edm::RootTree::tree(), and whyNotFastClonable().

711  {
712  return std::make_unique<FileBlock>(fileFormatVersion(),
713  eventTree_.tree(),
715  lumiTree_.tree(),
717  runTree_.tree(),
718  runTree_.metaTree(),
721  file_,
723  modifiedIDs(),
724  branchChildren());
725  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
bool branchListIndexesUnchanged() const
Definition: RootFile.h:227
RootTree lumiTree_
Definition: RootFile.h:339
TTree const * metaTree() const
Definition: RootTree.h:182
TTree const * tree() const
Definition: RootTree.h:180
bool modifiedIDs() const
Definition: RootFile.h:228
int whyNotFastClonable() const
Definition: RootFile.h:225
RootTree eventTree_
Definition: RootFile.h:338
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:226
RootTree runTree_
Definition: RootFile.h:340
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:303
std::string const file_
Definition: RootFile.h:313
void edm::RootFile::dropOnInput ( ProductRegistry reg,
ProductSelectorRules const &  rules,
bool  dropDescendants,
InputType  inputType 
)
private

Definition at line 1699 of file RootFile.cc.

References edm::ProductRegistry::allBranchDescriptions(), TrackValidation_cff::association, edm::BranchDescription::branchID(), edm::BranchDescription::branchName(), edm::BranchDescription::branchType(), SimDataFormats::CaloAnalysis::cp, drop, edm::BranchDescription::dropped(), edProductClass_, file_, fileThinnedAssociationsHelper_, edm::TypeWithDict::getClass(), edm::getWrapperBasePtr(), hasNewlyDroppedBranch_, edm::InEvent, edm::ProductSelector::initialize(), markBranchToBeDropped(), newBranchToOldBranch(), hltrates_dqm_sourceclient-live_cfg::offset, edm::BranchDescription::originalBranchID(), AlCaHLTBitMon_ParallelJobs::p, edm::BranchDescription::present(), dumpMFGeometry_cfg::prod, edm::ProductRegistry::productListUpdator(), edm::SecondaryFile, edm::SecondarySource, edm::ProductSelector::selected(), groupFilesInBlocks::temp, treePointers_, edm::BranchDescription::unwrappedType(), and edm::BranchDescription::wrappedType().

Referenced by RootFile().

1702  {
1703  // This is the selector for drop on input.
1704  ProductSelector productSelector;
1705  productSelector.initialize(rules, reg.allBranchDescriptions());
1706 
1707  std::vector<BranchDescription const*> associationDescriptions;
1708 
1709  ProductRegistry::ProductList& prodList = reg.productListUpdator();
1710  // Do drop on input. On the first pass, just fill in a set of branches to be dropped.
1711  std::set<BranchID> branchesToDrop;
1712  std::map<BranchID, BranchID> droppedToKeptAlias;
1713  for (auto const& product : prodList) {
1714  BranchDescription const& prod = product.second;
1715  if (prod.branchID() != prod.originalBranchID() && prod.present()) {
1716  droppedToKeptAlias[prod.originalBranchID()] = prod.branchID();
1717  }
1718  }
1719  for (auto const& product : prodList) {
1720  BranchDescription const& prod = product.second;
1721  // Special handling for ThinnedAssociations
1722  if (prod.unwrappedType() == typeid(ThinnedAssociation) && prod.present()) {
1723  if (inputType != InputType::SecondarySource) {
1724  associationDescriptions.push_back(&prod);
1725  } else {
1726  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1727  }
1728  } else if (!productSelector.selected(prod)) {
1729  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1730  }
1731  }
1732 
1733  if (inputType != InputType::SecondarySource) {
1734  // Decide whether to keep the thinned associations and corresponding
1735  // entries in the helper. For secondary source they are all dropped,
1736  // but in other cases we look for thinned collections the associations
1737  // redirect a Ref or Ptr to when dereferencing them.
1738 
1739  // Need a list of kept products in order to determine which thinned associations
1740  // are kept.
1741  std::set<BranchID> keptProductsInEvent;
1742  for (auto const& product : prodList) {
1743  BranchDescription const& prod = product.second;
1744  if (branchesToDrop.find(prod.branchID()) == branchesToDrop.end() && prod.present() &&
1745  prod.branchType() == InEvent) {
1746  keptProductsInEvent.insert(prod.branchID());
1747  }
1748  }
1749 
1750  // Decide which ThinnedAssociations to keep and store the decision in keepAssociation
1751  std::map<BranchID, bool> keepAssociation;
1752  fileThinnedAssociationsHelper_->selectAssociationProducts(
1753  associationDescriptions, keptProductsInEvent, keepAssociation);
1754 
1755  for (auto association : associationDescriptions) {
1756  if (!keepAssociation[association->branchID()]) {
1757  markBranchToBeDropped(dropDescendants, *association, branchesToDrop, droppedToKeptAlias);
1758  }
1759  }
1760 
1761  // Also delete the dropped associations from the ThinnedAssociationsHelper
1762  auto temp = std::make_unique<ThinnedAssociationsHelper>();
1763  for (auto const& associationBranches : fileThinnedAssociationsHelper_->data()) {
1764  auto iter = keepAssociation.find(associationBranches.association());
1765  if (iter != keepAssociation.end() && iter->second) {
1766  temp->addAssociation(associationBranches);
1767  }
1768  }
1769  // propagate_const<T> has no reset() function
1770  fileThinnedAssociationsHelper_ = std::unique_ptr<ThinnedAssociationsHelper>(temp.release());
1771  }
1772 
1773  // On this pass, actually drop the branches.
1774  std::set<BranchID>::const_iterator branchesToDropEnd = branchesToDrop.end();
1775  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
1776  BranchDescription const& prod = it->second;
1777  bool drop = branchesToDrop.find(prod.branchID()) != branchesToDropEnd;
1778  if (drop) {
1779  if (!prod.dropped()) {
1780  if (productSelector.selected(prod) && prod.unwrappedType() != typeid(ThinnedAssociation)) {
1781  LogWarning("RootFile") << "Branch '" << prod.branchName() << "' is being dropped from the input\n"
1782  << "of file '" << file_ << "' because it is dependent on a branch\n"
1783  << "that was explicitly dropped.\n";
1784  }
1785  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
1786  hasNewlyDroppedBranch_[prod.branchType()] = true;
1787  }
1788  ProductRegistry::ProductList::iterator icopy = it;
1789  ++it;
1790  prodList.erase(icopy);
1791  } else {
1792  ++it;
1793  }
1794  }
1795 
1796  // Drop on input mergeable run and lumi products, this needs to be invoked for secondary file input
1797  if (inputType == InputType::SecondaryFile) {
1798  TString tString;
1799  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
1800  BranchDescription const& prod = it->second;
1801  if (prod.branchType() != InEvent) {
1802  TClass* cp = prod.wrappedType().getClass();
1803  void* p = cp->New();
1804  int offset = cp->GetBaseClassOffset(edProductClass_);
1805  std::unique_ptr<WrapperBase> edp = getWrapperBasePtr(p, offset);
1806  if (edp->isMergeable()) {
1807  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
1808  ProductRegistry::ProductList::iterator icopy = it;
1809  ++it;
1810  prodList.erase(icopy);
1811  } else {
1812  ++it;
1813  }
1814  } else
1815  ++it;
1816  }
1817  }
1818  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:346
std::map< BranchKey, BranchDescription > ProductList
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:362
const int drop
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:335
RootTreePtrArray treePointers_
Definition: RootFile.h:341
std::unique_ptr< WrapperBase > getWrapperBasePtr(void *p, int offset)
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:727
void markBranchToBeDropped(bool dropDescendants, BranchDescription const &branch, std::set< BranchID > &branchesToDrop, std::map< BranchID, BranchID > const &droppedToKeptAlias) const
Definition: RootFile.cc:1688
std::string const file_
Definition: RootFile.h:313
EventAuxiliary const& edm::RootFile::eventAux ( ) const
inline
EventID const& edm::RootFile::eventID ( ) const
inline

Definition at line 220 of file RootFile.h.

220 { return eventAux().id(); }
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
EventID const & id() const
std::shared_ptr<ProductProvenanceRetriever const> edm::RootFile::eventProductProvenanceRetriever ( size_t  index) const
inlineprivate

Definition at line 306 of file RootFile.h.

References edm::get_underlying_safe().

Referenced by makeProductProvenanceRetriever().

306  {
308  }
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:359
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::shared_ptr<ProductProvenanceRetriever>& edm::RootFile::eventProductProvenanceRetriever ( size_t  index)
inlineprivate

Definition at line 309 of file RootFile.h.

References edm::get_underlying_safe().

309  {
311  }
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:359
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
RootTree const& edm::RootFile::eventTree ( ) const
inline

Definition at line 221 of file RootFile.h.

221 { return eventTree_; }
RootTree eventTree_
Definition: RootFile.h:338
std::string const& edm::RootFile::file ( ) const
inline

Definition at line 214 of file RootFile.h.

Referenced by RootFile().

214 { return file_; }
std::string const file_
Definition: RootFile.h:313
FileFormatVersion edm::RootFile::fileFormatVersion ( ) const
inline
bool edm::RootFile::fillEventAuxiliary ( IndexIntoFile::EntryNumber_t  entry)
private

Definition at line 1228 of file RootFile.cc.

References edm::RootTree::current(), eventTree_, fillThisEventAuxiliary(), and edm::RootTree::setEntryNumber().

Referenced by getNextItemType(), isDuplicateEvent(), readEvent(), readLuminosityBlockAuxiliary_(), readRunAuxiliary_(), setEntryAtNextEventInLumi(), skipEvents(), and skipThisEntry().

1228  {
1229  if (!eventTree_.current(entry)) {
1230  return false;
1231  }
1234  return true;
1235  }
bool current() const
Definition: RootTree.h:128
RootTree eventTree_
Definition: RootFile.h:338
void fillThisEventAuxiliary()
Definition: RootFile.cc:1210
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
void edm::RootFile::fillEventHistory ( )
private

Definition at line 1237 of file RootFile.cc.

References branchIDListHelper_, branchListIndexes_, edm::poolNames::branchListIndexesBranchName(), daqProvenanceHelper_, edm::RootTree::entryNumber(), event(), eventAux(), eventAux_, edm::errors::EventCorruption, edm::poolNames::eventHistoryBranchName(), edm::FileFormatVersion::eventHistoryTree(), eventHistoryTree_, eventProcessHistoryIDs_, eventProcessHistoryIter_, eventSelectionIDs_, edm::poolNames::eventSelectionsBranchName(), eventTree_, Exception, fileFormatVersion(), edm::RootTree::fillBranchEntry(), edm::roottree::getEntry(), history_, triggerObjects_cff::id, edm::lower_bound_all(), edm::FileFormatVersion::noMetaDataTrees(), edm::EventAuxiliary::processHistoryID(), provenanceAdaptor_, writedatasetfile::run, edm::EventAuxiliary::setProcessHistoryID(), edm::FileFormatVersion::splitProductIDs(), filterCSVwithJSON::target, and edm::RootTree::tree().

Referenced by fillIndexIntoFile(), readCurrentEvent(), and readRunAuxiliary_().

1237  {
1238  // We could consider doing delayed reading, but because we have to
1239  // store this History object in a different tree than the event
1240  // data tree, this is too hard to do in this first version.
1241 
1242  if (fileFormatVersion().eventHistoryBranch()) {
1243  // Lumi block number was not in EventID for the relevant releases.
1244  EventID id(eventAux().id().run(), 0, eventAux().id().event());
1245  if (eventProcessHistoryIter_->eventID() != id) {
1246  EventProcessHistoryID target(id, ProcessHistoryID());
1248  assert(eventProcessHistoryIter_->eventID() == id);
1249  }
1252  } else if (fileFormatVersion().eventHistoryTree()) {
1253  // for backward compatibility.
1254  History* pHistory = history_.get();
1255  TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(poolNames::eventHistoryBranchName().c_str());
1256  if (!eventHistoryBranch) {
1257  throw Exception(errors::EventCorruption) << "Failed to find history branch in event history tree.\n";
1258  }
1259  eventHistoryBranch->SetAddress(&pHistory);
1261  eventAux_.setProcessHistoryID(history_->processHistoryID());
1262  eventSelectionIDs_.swap(history_->eventSelectionIDs());
1263  branchListIndexes_.swap(history_->branchListIndexes());
1264  } else if (fileFormatVersion().noMetaDataTrees()) {
1265  // Current format
1267  TBranch* eventSelectionIDBranch = eventTree_.tree()->GetBranch(poolNames::eventSelectionsBranchName().c_str());
1268  assert(eventSelectionIDBranch != nullptr);
1269  eventTree_.fillBranchEntry(eventSelectionIDBranch, pESV);
1271  TBranch* branchListIndexesBranch = eventTree_.tree()->GetBranch(poolNames::branchListIndexesBranchName().c_str());
1272  assert(branchListIndexesBranch != nullptr);
1273  eventTree_.fillBranchEntry(branchListIndexesBranch, pBLI);
1274  }
1275  if (provenanceAdaptor_) {
1276  eventAux_.setProcessHistoryID(provenanceAdaptor_->convertID(eventAux().processHistoryID()));
1277  for (auto& esID : eventSelectionIDs_) {
1278  esID = provenanceAdaptor_->convertID(esID);
1279  }
1280  }
1281  if (daqProvenanceHelper_) {
1283  }
1285  // old format. branchListIndexes_ must be filled in from the ProvenanceAdaptor.
1286  provenanceAdaptor_->branchListIndexes(branchListIndexes_);
1287  }
1288  if (branchIDListHelper_) {
1289  branchIDListHelper_->fixBranchListIndexes(branchListIndexes_);
1290  }
1291  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:496
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
ForwardSequence::const_iterator lower_bound_all(ForwardSequence const &s, Datum const &d)
wrappers for std::lower_bound
Definition: Algorithms.h:69
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:210
std::vector< EventSelectionID > EventSelectionIDVector
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:329
TTree const * tree() const
Definition: RootTree.h:180
std::vector< BranchListIndex > BranchListIndexes
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:207
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:352
bool eventHistoryTree() const
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:357
RootTree eventTree_
Definition: RootFile.h:338
BranchListIndexes branchListIndexes_
Definition: RootFile.h:353
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
Hash< ProcessHistoryType > ProcessHistoryID
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:354
EntryNumber const & entryNumber() const
Definition: RootTree.h:133
void fillBranchEntry(TBranch *branch, T *&pbuf)
Definition: RootTree.h:158
void setProcessHistoryID(ProcessHistoryID const &phid)
ProcessHistoryID const & processHistoryID() const
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:351
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:212
EventAuxiliary eventAux_
Definition: RootFile.h:337
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:345
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:328
void edm::RootFile::fillIndexIntoFile ( )
private

Definition at line 913 of file RootFile.cc.

References edm::RootTree::entries(), edm::RootTree::entryNumber(), event(), eventAux(), eventAux_, eventTree_, fileFormatVersion(), fillEventHistory(), fillLumiAuxiliary(), fillRunAuxiliary(), fillThisEventAuxiliary(), edm::find_in_all(), indexIntoFile_, edm::IndexIntoFile::invalidEntry, edm::RootTree::isValid(), B2GTnPMonitor_cfi::item, lastEventEntryNumberRead_, edm::EventAuxiliary::luminosityBlock(), edmLumisInFiles::lumis, lumiTree_, eostools::move(), edm::RootTree::next(), processHistoryRegistry_, writedatasetfile::run, edm::EventAuxiliary::run(), writedatasetfile::runs, runTree_, edm::second(), edm::RootTree::setEntryNumber(), edm::IndexIntoFile::setProcessHistoryIDs(), edm::IndexIntoFile::setRunOrLumiEntries(), edm::stable_sort_all(), mitigatedMETSequence_cff::U, and edm::IndexIntoFile::unsortedEventNumbers().

Referenced by validateFile().

913  {
914  // This function is for backward compatibility.
915  // If reading a current format file, indexIntoFile_ is read from the input
916  // file and should always be there. Note that the algorithm below will work
917  // sometimes but often fail with the new format introduced in release 3_8_0.
918  // If it ever becomes necessary to rebuild IndexIntoFile from the new format,
919  // probably a separate function should be written to deal with the task.
920  // This is possible just not implemented yet.
921  assert(!fileFormatVersion().hasIndexIntoFile());
922 
923  typedef std::list<LumiItem> LumiList;
924  LumiList lumis; // (declare 1)
925 
926  typedef std::set<LuminosityBlockID> RunLumiSet;
927  RunLumiSet runLumiSet; // (declare 2)
928 
929  typedef std::list<RunItem> RunList;
930  RunList runs; // (declare 5)
931 
932  typedef std::set<RunNumber_t> RunSet;
933  RunSet runSet; // (declare 4)
934 
935  typedef std::set<RunItem, RunItemSortByRunPhid> RunItemSet;
936  RunItemSet runItemSet; // (declare 3)
937 
938  typedef std::map<RunNumber_t, ProcessHistoryID> PHIDMap;
939  PHIDMap phidMap;
940 
941  RunNumber_t prevRun = 0;
942  LuminosityBlockNumber_t prevLumi = 0;
943  ProcessHistoryID prevPhid;
944  bool iFirst = true;
945 
946  indexIntoFile_.unsortedEventNumbers().clear(); // should already be empty, just being careful
948 
949  // First, loop through the event tree.
950  while (eventTree_.next()) {
951  bool newRun = false;
952  bool newLumi = false;
955 
956  // Save the event numbers as we loop through the event auxiliary to avoid
957  // having to read through the event auxiliary again later. These event numbers
958  // are not actually used in this function, but could be needed elsewhere.
960 
961  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(eventAux().processHistoryID());
962 
963  if (iFirst || prevPhid != reducedPHID || prevRun != eventAux().run()) {
964  iFirst = false;
965  newRun = newLumi = true;
966  } else if (prevLumi != eventAux().luminosityBlock()) {
967  newLumi = true;
968  }
969  prevPhid = reducedPHID;
970  prevRun = eventAux().run();
971  prevLumi = eventAux().luminosityBlock();
972  if (newLumi) {
973  lumis.emplace_back(
974  reducedPHID, eventAux().run(), eventAux().luminosityBlock(), eventTree_.entryNumber()); // (insert 1)
975  runLumiSet.insert(LuminosityBlockID(eventAux().run(), eventAux().luminosityBlock())); // (insert 2)
976  } else {
977  LumiItem& currentLumi = lumis.back();
978  assert(currentLumi.lastEventEntry_ == eventTree_.entryNumber());
979  ++currentLumi.lastEventEntry_;
980  }
981  if (newRun) {
982  // Insert run in list if it is not already there.
983  RunItem item(reducedPHID, eventAux().run());
984  if (runItemSet.insert(item).second) { // (check 3, insert 3)
985  runs.push_back(std::move(item)); // (insert 5)
986  runSet.insert(eventAux().run()); // (insert 4)
987  phidMap.insert(std::make_pair(eventAux().run(), reducedPHID));
988  }
989  }
990  }
991  // now clean up.
993  eventAux_ = EventAuxiliary();
995 
996  // Loop over run entries and fill information.
997 
998  typedef std::map<RunNumber_t, IndexIntoFile::EntryNumber_t> RunMap;
999  RunMap runMap; // (declare 11)
1000 
1001  typedef std::vector<RunItem> RunVector;
1002  RunVector emptyRuns; // (declare 12)
1003 
1004  if (runTree_.isValid()) {
1005  while (runTree_.next()) {
1006  // Note: adjacent duplicates will be skipped without an explicit check.
1007 
1008  std::shared_ptr<RunAuxiliary> runAux = fillRunAuxiliary();
1009  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(runAux->processHistoryID());
1010 
1011  if (runSet.insert(runAux->run()).second) { // (check 4, insert 4)
1012  // This run was not associated with any events.
1013  emptyRuns.emplace_back(reducedPHID, runAux->run()); // (insert 12)
1014  }
1015  runMap.insert(std::make_pair(runAux->run(), runTree_.entryNumber())); // (insert 11)
1016  phidMap.insert(std::make_pair(runAux->run(), reducedPHID));
1017  }
1018  // now clean up.
1020  }
1021 
1022  // Insert the ordered empty runs into the run list.
1023  RunItemSortByRun runItemSortByRun;
1024  stable_sort_all(emptyRuns, runItemSortByRun);
1025 
1026  RunList::iterator itRuns = runs.begin(), endRuns = runs.end();
1027  for (auto const& emptyRun : emptyRuns) {
1028  for (; itRuns != endRuns; ++itRuns) {
1029  if (runItemSortByRun(emptyRun, *itRuns)) {
1030  break;
1031  }
1032  }
1033  runs.insert(itRuns, emptyRun);
1034  }
1035 
1036  // Loop over luminosity block entries and fill information.
1037 
1038  typedef std::vector<LumiItem> LumiVector;
1039  LumiVector emptyLumis; // (declare 7)
1040 
1041  typedef std::map<LuminosityBlockID, IndexIntoFile::EntryNumber_t> RunLumiMap;
1042  RunLumiMap runLumiMap; // (declare 6)
1043 
1044  if (lumiTree_.isValid()) {
1045  while (lumiTree_.next()) {
1046  // Note: adjacent duplicates will be skipped without an explicit check.
1047  std::shared_ptr<LuminosityBlockAuxiliary> lumiAux = fillLumiAuxiliary();
1048  LuminosityBlockID lumiID = LuminosityBlockID(lumiAux->run(), lumiAux->luminosityBlock());
1049  if (runLumiSet.insert(lumiID).second) { // (check 2, insert 2)
1050  // This lumi was not associated with any events.
1051  // Use the process history ID from the corresponding run. In cases of practical
1052  // importance, this should be the correct process history ID, but it is possible
1053  // to construct files where this is not the correct process history ID ...
1054  PHIDMap::const_iterator iPhidMap = phidMap.find(lumiAux->run());
1055  assert(iPhidMap != phidMap.end());
1056  emptyLumis.emplace_back(
1057  iPhidMap->second, lumiAux->run(), lumiAux->luminosityBlock(), IndexIntoFile::invalidEntry); // (insert 7)
1058  }
1059  runLumiMap.insert(std::make_pair(lumiID, lumiTree_.entryNumber()));
1060  }
1061  // now clean up.
1063  }
1064 
1065  // Insert the ordered empty lumis into the lumi list.
1066  LumiItemSortByRunLumi lumiItemSortByRunLumi;
1067  stable_sort_all(emptyLumis, lumiItemSortByRunLumi);
1068 
1069  LumiList::iterator itLumis = lumis.begin(), endLumis = lumis.end();
1070  for (auto const& emptyLumi : emptyLumis) {
1071  for (; itLumis != endLumis; ++itLumis) {
1072  if (lumiItemSortByRunLumi(emptyLumi, *itLumis)) {
1073  break;
1074  }
1075  }
1076  lumis.insert(itLumis, emptyLumi);
1077  }
1078 
1079  // Create a map of RunItems that gives the order of first appearance in the list.
1080  // Also fill in the vector of process history IDs
1081  typedef std::map<RunItem, int, RunItemSortByRunPhid> RunCountMap;
1082  RunCountMap runCountMap; // Declare (17)
1083  std::vector<ProcessHistoryID>& phids = indexIntoFile_.setProcessHistoryIDs();
1084  assert(phids.empty());
1085  std::vector<IndexIntoFile::RunOrLumiEntry>& entries = indexIntoFile_.setRunOrLumiEntries();
1086  assert(entries.empty());
1087  int rcount = 0;
1088  for (auto& run : runs) {
1089  RunCountMap::const_iterator countMapItem = runCountMap.find(run);
1090  if (countMapItem == runCountMap.end()) {
1091  countMapItem = runCountMap.insert(std::make_pair(run, rcount)).first; // Insert (17)
1092  assert(countMapItem != runCountMap.end());
1093  ++rcount;
1094  }
1095  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, run.phid_);
1096  if (phidItem == phids.end()) {
1097  phids.push_back(run.phid_);
1098  phidItem = phids.end() - 1;
1099  }
1100  entries.emplace_back(countMapItem->second, // use (17)
1102  runMap[run.run_], // use (11)
1103  phidItem - phids.begin(),
1104  run.run_,
1105  0U,
1108  }
1109 
1110  // Create a map of LumiItems that gives the order of first appearance in the list.
1111  typedef std::map<LumiItem, int, LumiItemSortByRunLumiPhid> LumiCountMap;
1112  LumiCountMap lumiCountMap; // Declare (19)
1113  int lcount = 0;
1114  for (auto& lumi : lumis) {
1115  RunCountMap::const_iterator runCountMapItem = runCountMap.find(RunItem(lumi.phid_, lumi.run_));
1116  assert(runCountMapItem != runCountMap.end());
1117  LumiCountMap::const_iterator countMapItem = lumiCountMap.find(lumi);
1118  if (countMapItem == lumiCountMap.end()) {
1119  countMapItem = lumiCountMap.insert(std::make_pair(lumi, lcount)).first; // Insert (17)
1120  assert(countMapItem != lumiCountMap.end());
1121  ++lcount;
1122  }
1123  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, lumi.phid_);
1124  assert(phidItem != phids.end());
1125  entries.emplace_back(runCountMapItem->second,
1126  countMapItem->second,
1127  runLumiMap[LuminosityBlockID(lumi.run_, lumi.lumi_)],
1128  phidItem - phids.begin(),
1129  lumi.run_,
1130  lumi.lumi_,
1131  lumi.firstEventEntry_,
1132  lumi.lastEventEntry_);
1133  }
1134  stable_sort_all(entries);
1135  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1293
RootTree lumiTree_
Definition: RootFile.h:339
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
EntryNumber const & entries() const
Definition: RootTree.h:135
RunNumber_t run() const
void stable_sort_all(RandomAccessSequence &s)
wrappers for std::stable_sort
Definition: Algorithms.h:103
unsigned int LuminosityBlockNumber_t
LuminosityBlockNumber_t luminosityBlock() const
U second(std::pair< T, U > const &p)
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool next()
Definition: RootTree.h:125
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:342
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1316
RootTree eventTree_
Definition: RootFile.h:338
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
RootTree runTree_
Definition: RootFile.h:340
EntryNumber const & entryNumber() const
Definition: RootTree.h:133
std::vector< RunOrLumiEntry > & setRunOrLumiEntries()
std::vector< EventNumber_t > & unsortedEventNumbers() const
static constexpr EntryNumber_t invalidEntry
ForwardSequence::const_iterator find_in_all(ForwardSequence const &s, Datum const &d)
wrappers for std::find
Definition: Algorithms.h:26
void fillEventHistory()
Definition: RootFile.cc:1237
bool isValid() const
Definition: RootTree.cc:110
unsigned int RunNumber_t
EventAuxiliary eventAux_
Definition: RootFile.h:337
void fillThisEventAuxiliary()
Definition: RootFile.cc:1210
def move(src, dest)
Definition: eostools.py:511
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::fillLumiAuxiliary ( )
private

Definition at line 1293 of file RootFile.cc.

References edm::conversion(), daqProvenanceHelper_, fileFormatVersion(), edm::RootTree::fillAux(), lumiTree_, edm::FileFormatVersion::newAuxiliary(), provenanceAdaptor_, and edm::FileFormatVersion::runsAndLumis().

Referenced by fillIndexIntoFile(), and readLuminosityBlockAuxiliary_().

1293  {
1294  auto lumiAuxiliary = std::make_shared<LuminosityBlockAuxiliary>();
1295  if (fileFormatVersion().newAuxiliary()) {
1296  LuminosityBlockAuxiliary* pLumiAux = lumiAuxiliary.get();
1297  lumiTree_.fillAux<LuminosityBlockAuxiliary>(pLumiAux);
1298  } else {
1299  LuminosityBlockAux lumiAux;
1300  LuminosityBlockAux* pLumiAux = &lumiAux;
1301  lumiTree_.fillAux<LuminosityBlockAux>(pLumiAux);
1302  conversion(lumiAux, *lumiAuxiliary);
1303  }
1304  if (provenanceAdaptor_) {
1305  lumiAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(lumiAuxiliary->processHistoryID()));
1306  }
1307  if (daqProvenanceHelper_) {
1308  lumiAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(lumiAuxiliary->processHistoryID()));
1309  }
1310  if (lumiAuxiliary->luminosityBlock() == 0 && !fileFormatVersion().runsAndLumis()) {
1311  lumiAuxiliary->id() = LuminosityBlockID(RunNumber_t(1), LuminosityBlockNumber_t(1));
1312  }
1313  return lumiAuxiliary;
1314  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
RootTree lumiTree_
Definition: RootFile.h:339
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
unsigned int LuminosityBlockNumber_t
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:357
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
unsigned int RunNumber_t
void fillAux(T *&pAux)
Definition: RootTree.h:142
std::shared_ptr< RunAuxiliary > edm::RootFile::fillRunAuxiliary ( )
private

Definition at line 1316 of file RootFile.cc.

References edm::conversion(), daqProvenanceHelper_, fileFormatVersion(), edm::RootTree::fillAux(), edm::FileFormatVersion::newAuxiliary(), provenanceAdaptor_, and runTree_.

Referenced by fillIndexIntoFile(), and readRunAuxiliary_().

1316  {
1317  auto runAuxiliary = std::make_shared<RunAuxiliary>();
1318  if (fileFormatVersion().newAuxiliary()) {
1319  RunAuxiliary* pRunAux = runAuxiliary.get();
1320  runTree_.fillAux<RunAuxiliary>(pRunAux);
1321  } else {
1322  RunAux runAux;
1323  RunAux* pRunAux = &runAux;
1324  runTree_.fillAux<RunAux>(pRunAux);
1325  conversion(runAux, *runAuxiliary);
1326  }
1327  if (provenanceAdaptor_) {
1328  runAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(runAuxiliary->processHistoryID()));
1329  }
1330  if (daqProvenanceHelper_) {
1331  runAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(runAuxiliary->processHistoryID()));
1332  }
1333  return runAuxiliary;
1334  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:357
RootTree runTree_
Definition: RootFile.h:340
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
void fillAux(T *&pAux)
Definition: RootTree.h:142
void edm::RootFile::fillThisEventAuxiliary ( )
private

Definition at line 1210 of file RootFile.cc.

References edm::conversion(), edm::RootTree::entryNumber(), eventAux(), eventAux_, eventTree_, fileFormatVersion(), edm::RootTree::fillAux(), lastEventEntryNumberRead_, and edm::FileFormatVersion::newAuxiliary().

Referenced by fillEventAuxiliary(), fillIndexIntoFile(), initializeDuplicateChecker(), and readCurrentEvent().

1210  {
1212  // Already read.
1213  return;
1214  }
1215  if (fileFormatVersion().newAuxiliary()) {
1216  EventAuxiliary* pEvAux = &eventAux_;
1217  eventTree_.fillAux<EventAuxiliary>(pEvAux);
1218  } else {
1219  // for backward compatibility.
1220  EventAux eventAux;
1221  EventAux* pEvAux = &eventAux;
1222  eventTree_.fillAux<EventAux>(pEvAux);
1223  conversion(eventAux, eventAux_);
1224  }
1226  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:342
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
RootTree eventTree_
Definition: RootFile.h:338
EntryNumber const & entryNumber() const
Definition: RootTree.h:133
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
EventAuxiliary eventAux_
Definition: RootFile.h:337
void fillAux(T *&pAux)
Definition: RootTree.h:142
IndexIntoFile::EntryType edm::RootFile::getNextItemType ( RunNumber_t run,
LuminosityBlockNumber_t lumi,
EventNumber_t event 
)

Definition at line 801 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::advanceToNextLumiOrRun(), edm::IndexIntoFile::IndexIntoFileItr::advanceToNextRun(), edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::EventAuxiliary::event(), eventAux_, fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileIter_, isDuplicateEvent(), edm::IndexIntoFile::kEnd, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::kLumi, edm::IndexIntoFile::kRun, edm::IndexIntoFile::IndexIntoFileItr::lumi(), processingMode_, edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, edm::InputSource::Runs, edm::InputSource::RunsAndLumis, and skipThisEntry().

803  {
804  // First, account for consecutive skipped entries.
805  while (skipThisEntry()) {
810  } else {
812  }
813  }
814  // OK, we have an entry that is not skipped.
816  if (entryType == IndexIntoFile::kEnd) {
817  return IndexIntoFile::kEnd;
818  }
819  if (entryType == IndexIntoFile::kRun) {
821  runHelper_->checkForNewRun(run);
822  return IndexIntoFile::kRun;
823  } else if (processingMode_ == InputSource::Runs) {
825  return getNextItemType(run, lumi, event);
826  }
827  if (entryType == IndexIntoFile::kLumi) {
830  return IndexIntoFile::kLumi;
833  return getNextItemType(run, lumi, event);
834  }
835  if (isDuplicateEvent()) {
837  return getNextItemType(run, lumi, event);
838  }
842  event = eventAux_.event();
843  return IndexIntoFile::kEvent;
844  }
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:348
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
bool skipThisEntry()
Definition: RootFile.cc:746
IndexIntoFile::EntryType getNextItemType(RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
Definition: RootFile.cc:801
bool isDuplicateEvent()
Definition: RootFile.cc:784
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
EventAuxiliary eventAux_
Definition: RootFile.h:337
EventNumber_t event() const
Definition: event.py:1
bool edm::RootFile::goToEvent ( EventID const &  eventID)

Definition at line 1392 of file RootFile.cc.

References duplicateChecker_, edm::IndexIntoFile::end(), edm::EventID::event(), edm::IndexIntoFile::fillEventNumbers(), edm::IndexIntoFile::findPosition(), edm::IndexIntoFile::firstAppearanceOrder, indexIntoFile_, indexIntoFileIter_, edm::EventID::luminosityBlock(), noEventSort_, edm::IndexIntoFile::numericalOrder, and edm::EventID::run().

1392  {
1394 
1395  if (duplicateChecker_) {
1396  duplicateChecker_->disable();
1397  }
1398 
1400  if (noEventSort_)
1402 
1403  IndexIntoFile::IndexIntoFileItr iter =
1405 
1406  if (iter == indexIntoFile_.end(sortOrder)) {
1407  return false;
1408  }
1409  indexIntoFileIter_ = iter;
1410  return true;
1411  }
RunNumber_t run() const
Definition: EventID.h:38
EventID const & eventID() const
Definition: RootFile.h:220
EventNumber_t event() const
Definition: EventID.h:40
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:39
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
bool noEventSort_
Definition: RootFile.h:332
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
void fillEventNumbers() const
std::array<bool, NumBranchTypes> const& edm::RootFile::hasNewlyDroppedBranch ( ) const
inline

Definition at line 226 of file RootFile.h.

Referenced by createFileBlock().

226 { return hasNewlyDroppedBranch_; }
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:335
IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileIter ( ) const

Definition at line 735 of file RootFile.cc.

References indexIntoFileIter_.

735 { return indexIntoFileIter_; }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
std::shared_ptr<IndexIntoFile const> edm::RootFile::indexIntoFileSharedPtr ( ) const
inline

Definition at line 257 of file RootFile.h.

References edm::get_underlying_safe().

257  {
259  }
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:321
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::shared_ptr<IndexIntoFile>& edm::RootFile::indexIntoFileSharedPtr ( )
inline

Definition at line 260 of file RootFile.h.

References edm::get_underlying_safe(), and position.

edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:321
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void edm::RootFile::initAssociationsFromSecondary ( std::vector< BranchID > const &  associationsFromSecondary)

Definition at line 741 of file RootFile.cc.

References fileThinnedAssociationsHelper_, and thinnedAssociationsHelper_.

741  {
742  thinnedAssociationsHelper_->initAssociationsFromSecondary(associationsFromSecondary,
744  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:346
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:347
void edm::RootFile::initializeDuplicateChecker ( std::vector< std::shared_ptr< IndexIntoFile >> const &  indexesIntoFiles,
std::vector< std::shared_ptr< IndexIntoFile >>::size_type  currentIndexIntoFile 
)
private

Definition at line 1675 of file RootFile.cc.

References duplicateChecker_, eventAux(), eventTree_, fillThisEventAuxiliary(), indexIntoFile_, edm::IndexIntoFile::invalidEntry, edm::RootTree::next(), and edm::RootTree::setEntryNumber().

Referenced by RootFile().

1677  {
1678  if (duplicateChecker_ && !duplicateChecker_->checkDisabled()) {
1679  if (eventTree_.next()) {
1681  duplicateChecker_->inputFileOpened(
1682  eventAux().isRealData(), indexIntoFile_, indexesIntoFiles, currentIndexIntoFile);
1683  }
1685  }
1686  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
bool next()
Definition: RootTree.h:125
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
RootTree eventTree_
Definition: RootFile.h:338
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
static constexpr EntryNumber_t invalidEntry
void fillThisEventAuxiliary()
Definition: RootFile.cc:1210
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
bool edm::RootFile::isDuplicateEvent ( )
private

Definition at line 784 of file RootFile.cc.

References duplicateChecker_, edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::EventID::event(), eventAux_, file_, fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), edm::EventAuxiliary::id(), indexIntoFileIter_, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::IndexIntoFile::IndexIntoFileItr::processHistoryIDIndex(), and edm::IndexIntoFile::IndexIntoFileItr::run().

Referenced by getNextItemType().

784  {
786  if (duplicateChecker_.get() == nullptr) {
787  return false;
788  }
790  return duplicateChecker_->isDuplicateAndCheckActive(indexIntoFileIter_.processHistoryIDIndex(),
793  eventAux_.id().event(),
794  file_);
795  }
EventNumber_t event() const
Definition: EventID.h:40
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
EventID const & id() const
EventAuxiliary eventAux_
Definition: RootFile.h:337
std::string const file_
Definition: RootFile.h:313
RootTree const& edm::RootFile::lumiTree ( ) const
inline

Definition at line 222 of file RootFile.h.

222 { return lumiTree_; }
RootTree lumiTree_
Definition: RootFile.h:339
std::shared_ptr< ProductProvenanceRetriever > edm::RootFile::makeProductProvenanceRetriever ( unsigned int  iStreamIndex)
private

Definition at line 1842 of file RootFile.cc.

References daqProvenanceHelper_, eventProductProvenanceRetriever(), eventProductProvenanceRetrievers_, eventTree_, and provenanceReaderMaker_.

Referenced by readCurrentEvent().

1842  {
1843  if (eventProductProvenanceRetrievers_.size() <= iStreamID) {
1844  eventProductProvenanceRetrievers_.resize(iStreamID + 1);
1845  }
1846  if (!eventProductProvenanceRetrievers_[iStreamID]) {
1847  // propagate_const<T> has no reset() function
1848  eventProductProvenanceRetrievers_[iStreamID] = std::make_shared<ProductProvenanceRetriever>(
1850  }
1851  eventProductProvenanceRetrievers_[iStreamID]->reset();
1852  return eventProductProvenanceRetriever(iStreamID);
1853  }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever(size_t index) const
Definition: RootFile.h:306
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:359
RootTree eventTree_
Definition: RootFile.h:338
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:358
std::unique_ptr< MakeProvenanceReader > edm::RootFile::makeProvenanceReaderMaker ( InputType  inputType)
private

Definition at line 1826 of file RootFile.cc.

References fileFormatVersion_, eostools::move(), parentageIDLookup_, edm::FileFormatVersion::perEventProductIDs(), readEntryDescriptionTree(), readParentageTree(), edm::FileFormatVersion::splitProductIDs(), and edm::FileFormatVersion::storedProductProvenanceUsed().

Referenced by RootFile().

1826  {
1828  readParentageTree(inputType);
1829  return std::make_unique<MakeReducedProvenanceReader>(parentageIDLookup_);
1830  } else if (fileFormatVersion_.splitProductIDs()) {
1831  readParentageTree(inputType);
1832  return std::make_unique<MakeFullProvenanceReader>();
1833  } else if (fileFormatVersion_.perEventProductIDs()) {
1834  auto entryDescriptionMap = std::make_unique<EntryDescriptionMap>();
1835  readEntryDescriptionTree(*entryDescriptionMap, inputType);
1836  return std::make_unique<MakeOldProvenanceReader>(std::move(entryDescriptionMap));
1837  } else {
1838  return std::make_unique<MakeDummyProvenanceReader>();
1839  }
1840  }
void readEntryDescriptionTree(EntryDescriptionMap &entryDescriptionMap, InputType inputType)
Definition: RootFile.cc:586
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:319
void readParentageTree(InputType inputType)
Definition: RootFile.cc:632
bool storedProductProvenanceUsed() const
bool perEventProductIDs() const
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:360
def move(src, dest)
Definition: eostools.py:511
void edm::RootFile::markBranchToBeDropped ( bool  dropDescendants,
BranchDescription const &  branch,
std::set< BranchID > &  branchesToDrop,
std::map< BranchID, BranchID > const &  droppedToKeptAlias 
) const
private

Definition at line 1688 of file RootFile.cc.

References branchChildren_, and edm::BranchDescription::branchID().

Referenced by dropOnInput().

1691  {
1692  if (dropDescendants) {
1693  branchChildren_->appendToDescendants(branch, branchesToDrop, droppedToKeptAlias);
1694  } else {
1695  branchesToDrop.insert(branch.branchID());
1696  }
1697  }
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:355
bool edm::RootFile::modifiedIDs ( ) const
inline

Definition at line 228 of file RootFile.h.

Referenced by createFileBlock().

228 { return daqProvenanceHelper_.get() != nullptr; }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
std::string const & edm::RootFile::newBranchToOldBranch ( std::string const &  newBranch) const
private

Definition at line 727 of file RootFile.cc.

References newBranchToOldBranch_.

Referenced by dropOnInput(), and RootFile().

727  {
728  std::map<std::string, std::string>::const_iterator it = newBranchToOldBranch_.find(newBranch);
729  if (it != newBranchToOldBranch_.end()) {
730  return it->second;
731  }
732  return newBranch;
733  }
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:350
bool edm::RootFile::nextEventEntry ( )
inline

Definition at line 251 of file RootFile.h.

251 { return eventTree_.nextWithCache(); }
RootTree eventTree_
Definition: RootFile.h:338
bool nextWithCache()
Definition: RootTree.cc:194
RootFile& edm::RootFile::operator= ( RootFile const &  )
delete
std::shared_ptr<ProductRegistry const> edm::RootFile::productRegistry ( ) const
inline

Definition at line 215 of file RootFile.h.

Referenced by RootFile().

215 { return productRegistry_; }
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:343
bool edm::RootFile::readCurrentEvent ( EventPrincipal cache)

Definition at line 1449 of file RootFile.cc.

References branchListIndexes_, edm::RootTree::current(), eventAux(), eventAux_, eventSelectionIDs_, eventTree_, fileFormatVersion(), filePtr_, fillEventHistory(), edm::EventPrincipal::fillEventPrincipal(), fillThisEventAuxiliary(), edm::EventAuxiliary::id(), edm::RootTree::insertEntryForIndex(), edm::EventAuxiliary::isRealData(), makeProductProvenanceRetriever(), eostools::move(), edm::EventAuxiliary::oldLuminosityBlock(), processHistoryRegistry_, edm::RootTree::resetAndGetRootDelayedReader(), edm::EventAuxiliary::resetObsoleteInfo(), runHelper_, edm::EventPrincipal::streamID(), edm::EDProductGetter::transitionIndex(), and edm::StreamID::value().

Referenced by readEvent().

1449  {
1450  if (!eventTree_.current()) {
1451  return false;
1452  }
1454  if (!fileFormatVersion().lumiInEventID()) {
1455  //ugly, but will disappear when the backward compatibility is done with schema evolution.
1456  const_cast<EventID&>(eventAux_.id()).setLuminosityBlockNumber(eventAux_.oldLuminosityBlock());
1458  }
1459  fillEventHistory();
1460  runHelper_->overrideRunNumber(eventAux_.id(), eventAux().isRealData());
1461 
1462  // We're not done ... so prepare the EventPrincipal
1463  eventTree_.insertEntryForIndex(principal.transitionIndex());
1464  principal.fillEventPrincipal(eventAux(),
1468  *(makeProductProvenanceRetriever(principal.streamID().value())),
1470 
1471  // report event read from file
1472  filePtr_->eventReadFromFile();
1473  return true;
1474  }
bool isRealData() const
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
bool current() const
Definition: RootTree.h:128
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:105
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:123
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:352
RootTree eventTree_
Definition: RootFile.h:338
BranchListIndexes branchListIndexes_
Definition: RootFile.h:353
LuminosityBlockNumber_t oldLuminosityBlock() const
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
void fillEventHistory()
Definition: RootFile.cc:1237
std::shared_ptr< ProductProvenanceRetriever > makeProductProvenanceRetriever(unsigned int iStreamIndex)
Definition: RootFile.cc:1842
EventID const & id() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
EventAuxiliary eventAux_
Definition: RootFile.h:337
void fillThisEventAuxiliary()
Definition: RootFile.cc:1210
def move(src, dest)
Definition: eostools.py:511
void edm::RootFile::readEntryDescriptionTree ( EntryDescriptionMap entryDescriptionMap,
InputType  inputType 
)
private

Definition at line 586 of file RootFile.cc.

References daqProvenanceHelper_, edm::poolNames::entryDescriptionBranchName(), edm::poolNames::entryDescriptionIDBranchName(), edm::poolNames::entryDescriptionTreeName(), edm::errors::EventCorruption, Exception, filePtr_, edm::errors::FileReadError, edm::roottree::getEntry(), mps_fire::i, edm::EventEntryDescription::id(), edm::Parentage::id(), edm::ParentageRegistry::insertMapped(), edm::ParentageRegistry::instance(), edm::numEntries(), parents, edm::EventEntryDescription::parents(), edm::Parentage::parentsForUpdate(), edm::SecondarySource, and edm::Parentage::setParents().

Referenced by makeProvenanceReaderMaker().

586  {
587  // Called only for old format files.
588  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
589  std::unique_ptr<TTree> entryDescriptionTree(
590  dynamic_cast<TTree*>(filePtr_->Get(poolNames::entryDescriptionTreeName().c_str())));
591  if (nullptr == entryDescriptionTree.get()) {
593  << "Could not find tree " << poolNames::entryDescriptionTreeName() << " in the input file.\n";
594  }
595 
596  EntryDescriptionID idBuffer;
597  EntryDescriptionID* pidBuffer = &idBuffer;
598  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), &pidBuffer);
599 
600  EventEntryDescription entryDescriptionBuffer;
601  EventEntryDescription* pEntryDescriptionBuffer = &entryDescriptionBuffer;
602  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), &pEntryDescriptionBuffer);
603 
604  // Fill in the parentage registry.
605  ParentageRegistry& registry = *ParentageRegistry::instance();
606 
607  for (Long64_t i = 0, numEntries = entryDescriptionTree->GetEntries(); i < numEntries; ++i) {
608  roottree::getEntry(entryDescriptionTree.get(), i);
609  if (idBuffer != entryDescriptionBuffer.id()) {
610  throw Exception(errors::EventCorruption) << "Corruption of EntryDescription tree detected.\n";
611  }
612  entryDescriptionMap.insert(std::make_pair(entryDescriptionBuffer.id(), entryDescriptionBuffer));
613  Parentage parents;
614  parents.setParents(entryDescriptionBuffer.parents());
615  if (daqProvenanceHelper_) {
616  ParentageID const oldID = parents.id();
617  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
618  ParentageID newID = parents.id();
619  if (newID != oldID) {
620  daqProvenanceHelper_->setOldParentageIDToNew(oldID, newID);
621  }
622  }
623  // For thread safety, don't update global registries when a secondary source opens a file.
624  if (inputType != InputType::SecondarySource) {
625  registry.insertMapped(parents);
626  }
627  }
628  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), nullptr);
629  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), nullptr);
630  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:496
TPRegexp parents
Definition: eve_filter.cc:21
std::string const & entryDescriptionBranchName()
Definition: BranchType.cc:154
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
Hash< EntryDescriptionType > EntryDescriptionID
std::string const & entryDescriptionTreeName()
Definition: BranchType.cc:150
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
std::string const & entryDescriptionIDBranchName()
Definition: BranchType.cc:152
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:8
void edm::RootFile::readEvent ( EventPrincipal cache)

Definition at line 1425 of file RootFile.cc.

References daqProvenanceHelper_, edm::IndexIntoFile::IndexIntoFileItr::entry(), eventAux(), fileFormatVersion(), fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFile_, indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::EventAuxiliary::processHistoryID(), edm::IndexIntoFile::processHistoryID(), edm::IndexIntoFile::IndexIntoFileItr::processHistoryIDIndex(), processHistoryRegistry_, readCurrentEvent(), writedatasetfile::run, edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, and edm::FileFormatVersion::useReducedProcessHistoryID().

1425  {
1428  // read the event auxiliary if not alrady read.
1430 
1431  // read the event
1432  readCurrentEvent(principal);
1433 
1434  runHelper_->checkRunConsistency(eventAux().run(), indexIntoFileIter_.run());
1435  runHelper_->checkLumiConsistency(eventAux().luminosityBlock(), indexIntoFileIter_.lumi());
1436 
1437  // If this next assert shows up in performance profiling or significantly affects memory, then these three lines should be deleted.
1438  // The IndexIntoFile should guarantee that it never fails.
1440  ? *daqProvenanceHelper_->oldProcessHistoryID()
1441  : eventAux().processHistoryID());
1442  ProcessHistoryID const& reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(idToCheck);
1444 
1446  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t lumi() const
bool readCurrentEvent(EventPrincipal &cache)
Definition: RootFile.cc:1449
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
ProcessHistoryID const & processHistoryID(int i) const
ProcessHistoryID const & processHistoryID() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
bool useReducedProcessHistoryID() const
void edm::RootFile::readEventHistoryTree ( )
private

Definition at line 1664 of file RootFile.cc.

References edm::errors::EventCorruption, eventHistoryTree_, edm::poolNames::eventHistoryTreeName(), Exception, fileFormatVersion(), filePtr_, and history_.

Referenced by RootFile().

1664  {
1665  // Read in the event history tree, if we have one...
1666  if (fileFormatVersion().eventHistoryTree()) {
1667  history_ = std::make_unique<History>(); // propagate_const<T> has no reset() function
1668  eventHistoryTree_ = dynamic_cast<TTree*>(filePtr_->Get(poolNames::eventHistoryTreeName().c_str()));
1669  if (!eventHistoryTree_) {
1670  throw Exception(errors::EventCorruption) << "Failed to find the event history tree.\n";
1671  }
1672  }
1673  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:354
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:351
std::string const & eventHistoryTreeName()
Definition: BranchType.cc:222
void edm::RootFile::readFakeRun_ ( RunPrincipal runPrincipal)
std::shared_ptr<RunAuxiliary> edm::RootFile::readFakeRunAuxiliary_ ( )
void edm::RootFile::readLuminosityBlock_ ( LuminosityBlockPrincipal lumiPrincipal)

Definition at line 1607 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::LuminosityBlockPrincipal::fillLuminosityBlockPrincipal(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, edm::RootTree::insertEntryForIndex(), edm::RootTree::isValid(), edm::IndexIntoFile::kLumi, lumiTree_, processHistoryRegistry_, edm::Principal::readAllFromSourceAndMergeImmediately(), edm::RootTree::resetAndGetRootDelayedReader(), and edm::RootTree::setEntryNumber().

1607  {
1610  // Begin code for backward compatibility before the existence of lumi trees.
1611  if (!lumiTree_.isValid()) {
1613  return;
1614  }
1615  // End code for backward compatibility before the existence of lumi trees.
1617  // NOTE: we use 0 for the index since do not do delayed reads for LuminosityBlockPrincipals
1619  lumiPrincipal.fillLuminosityBlockPrincipal(*processHistoryRegistry_, lumiTree_.resetAndGetRootDelayedReader());
1620  // Read in all the products now.
1621  lumiPrincipal.readAllFromSourceAndMergeImmediately();
1623  }
RootTree lumiTree_
Definition: RootFile.h:339
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:105
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:123
bool isValid() const
Definition: RootTree.cc:110
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::readLuminosityBlockAuxiliary_ ( )

Definition at line 1569 of file RootFile.cc.

References edm::RootTree::current(), edm::IndexIntoFile::IndexIntoFileItr::entry(), eventAux(), eventTree_, fileFormatVersion(), filePtr_, fillEventAuxiliary(), fillLumiAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::firstEventEntryThisLumi(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, edm::Timestamp::invalidTimestamp(), edm::RootTree::isValid(), edm::IndexIntoFile::kLumi, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::LuminosityBlockID::luminosityBlock(), lumiTree_, edm::LuminosityBlockID::run(), edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, savedRunAuxiliary_, edm::RootTree::setEntryNumber(), edm::EventAuxiliary::time(), and ntuplemaker::time.

1569  {
1572  // Begin code for backward compatibility before the existence of lumi trees.
1573  if (!lumiTree_.isValid()) {
1575  assert(eventEntry != IndexIntoFile::invalidEntry);
1576  assert(eventTree_.current(eventEntry));
1577  fillEventAuxiliary(eventEntry);
1578 
1579  LuminosityBlockID lumi = LuminosityBlockID(indexIntoFileIter_.run(), indexIntoFileIter_.lumi());
1580  runHelper_->overrideRunNumber(lumi);
1581  return std::make_shared<LuminosityBlockAuxiliary>(
1582  lumi.run(), lumi.luminosityBlock(), eventAux().time(), Timestamp::invalidTimestamp());
1583  }
1584  // End code for backward compatibility before the existence of lumi trees.
1586  std::shared_ptr<LuminosityBlockAuxiliary> lumiAuxiliary = fillLumiAuxiliary();
1587  assert(lumiAuxiliary->run() == indexIntoFileIter_.run());
1588  assert(lumiAuxiliary->luminosityBlock() == indexIntoFileIter_.lumi());
1589  runHelper_->overrideRunNumber(lumiAuxiliary->id());
1590  filePtr_->reportInputLumiSection(lumiAuxiliary->run(), lumiAuxiliary->luminosityBlock());
1591  if (lumiAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1593  if (eventEntry != IndexIntoFile::invalidEntry) {
1594  assert(eventTree_.current(eventEntry));
1595  fillEventAuxiliary(eventEntry);
1596 
1597  lumiAuxiliary->setBeginTime(eventAux().time());
1598  }
1599  lumiAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1600  }
1601  if (!fileFormatVersion().processHistorySameWithinRun() && savedRunAuxiliary_) {
1602  lumiAuxiliary->setProcessHistoryID(savedRunAuxiliary_->processHistoryID());
1603  }
1604  return lumiAuxiliary;
1605  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1293
static Timestamp invalidTimestamp()
Definition: Timestamp.h:82
RootTree lumiTree_
Definition: RootFile.h:339
Timestamp const & time() const
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:330
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
bool current() const
Definition: RootTree.h:128
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
RootTree eventTree_
Definition: RootFile.h:338
static constexpr EntryNumber_t invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
bool isValid() const
Definition: RootTree.cc:110
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
void edm::RootFile::readParentageTree ( InputType  inputType)
private

Definition at line 632 of file RootFile.cc.

References daqProvenanceHelper_, Exception, filePtr_, edm::errors::FileReadError, edm::roottree::getEntry(), mps_fire::i, edm::Parentage::id(), edm::ParentageRegistry::insertMapped(), edm::ParentageRegistry::instance(), edm::numEntries(), edm::poolNames::parentageBranchName(), parentageIDLookup_, edm::poolNames::parentageTreeName(), parents, edm::Parentage::parentsForUpdate(), and edm::SecondarySource.

Referenced by makeProvenanceReaderMaker().

632  {
633  // New format file
634  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
635  std::unique_ptr<TTree> parentageTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parentageTreeName().c_str())));
636  if (nullptr == parentageTree.get()) {
638  << "Could not find tree " << poolNames::parentageTreeName() << " in the input file.\n";
639  }
640 
641  Parentage parents;
642  Parentage* pParentageBuffer = &parents;
643  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), &pParentageBuffer);
644 
645  ParentageRegistry& registry = *ParentageRegistry::instance();
646 
647  parentageIDLookup_.reserve(parentageTree->GetEntries());
648  for (Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
649  roottree::getEntry(parentageTree.get(), i);
650  if (daqProvenanceHelper_) {
651  ParentageID const oldID = parents.id();
652  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
653  ParentageID newID = parents.id();
654  if (newID != oldID) {
655  daqProvenanceHelper_->setOldParentageIDToNew(oldID, newID);
656  }
657  }
658  // For thread safety, don't update global registries when a secondary source opens a file.
659  if (inputType != InputType::SecondarySource) {
660  registry.insertMapped(parents);
661  }
662  parentageIDLookup_.push_back(parents.id());
663  }
664  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), nullptr);
665  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:496
TPRegexp parents
Definition: eve_filter.cc:21
std::string const & parentageTreeName()
Definition: BranchType.cc:157
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
std::string const & parentageBranchName()
Definition: BranchType.cc:159
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:360
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:8
void edm::RootFile::readRun_ ( RunPrincipal runPrincipal)

Definition at line 1542 of file RootFile.cc.

References edm::RootTree::entryNumber(), edm::RunPrincipal::fillRunPrincipal(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, inputType_, edm::RootTree::insertEntryForIndex(), edm::RootTree::isValid(), edm::IndexIntoFile::kRun, edm::RunPrincipal::mergeableRunProductMetadata(), edm::Primary, processHistoryRegistry_, edm::Principal::readAllFromSourceAndMergeImmediately(), edm::MergeableRunProductMetadata::readRun(), edm::RootTree::resetAndGetRootDelayedReader(), runHelper_, runTree_, and storedMergeableRunProductMetadata_.

1542  {
1543  MergeableRunProductMetadata* mergeableRunProductMetadata = nullptr;
1544  if (inputType_ == InputType::Primary) {
1545  mergeableRunProductMetadata = runPrincipal.mergeableRunProductMetadata();
1546  RootTree::EntryNumber const& entryNumber = runTree_.entryNumber();
1547  assert(entryNumber >= 0);
1548  mergeableRunProductMetadata->readRun(
1549  entryNumber, *storedMergeableRunProductMetadata_, IndexIntoFileItrHolder(indexIntoFileIter_));
1550  }
1551 
1552  if (!runHelper_->fakeNewRun()) {
1556  }
1557  // Begin code for backward compatibility before the existence of run trees.
1558  if (!runTree_.isValid()) {
1559  return;
1560  }
1561  // End code for backward compatibility before the existence of run trees.
1562  // NOTE: we use 0 for the index since do not do delayed reads for RunPrincipals
1564  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, runTree_.resetAndGetRootDelayedReader());
1565  // Read in all the products now.
1566  runPrincipal.readAllFromSourceAndMergeImmediately(mergeableRunProductMetadata);
1567  }
InputType inputType_
Definition: RootFile.h:363
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
Definition: RootFile.h:327
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:105
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:123
RootTree runTree_
Definition: RootFile.h:340
EntryNumber const & entryNumber() const
Definition: RootTree.h:133
bool isValid() const
Definition: RootTree.cc:110
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
roottree::EntryNumber EntryNumber
Definition: RootTree.h:104
std::shared_ptr< RunAuxiliary > edm::RootFile::readRunAuxiliary_ ( )

Definition at line 1478 of file RootFile.cc.

References edm::RootTree::current(), edm::IndexIntoFile::IndexIntoFileItr::entry(), eventAux(), eventTree_, fileFormatVersion(), filePtr_, fillEventAuxiliary(), fillEventHistory(), fillRunAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::firstEventEntryThisRun(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, edm::Timestamp::invalidTimestamp(), edm::RootTree::isValid(), edm::IndexIntoFile::kRun, edm::FileFormatVersion::processHistorySameWithinRun(), writedatasetfile::run, edm::RunID::run(), edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, runTree_, savedRunAuxiliary(), savedRunAuxiliary_, edm::RootTree::setEntryNumber(), edm::EventAuxiliary::time(), and ntuplemaker::time.

1478  {
1479  if (runHelper_->fakeNewRun()) {
1480  auto runAuxiliary = std::make_shared<RunAuxiliary>(*savedRunAuxiliary());
1481  runHelper_->overrideRunNumber(runAuxiliary->id());
1482  return runAuxiliary;
1483  }
1486 
1487  // Begin code for backward compatibility before the existence of run trees.
1488  if (!runTree_.isValid()) {
1489  // prior to the support of run trees.
1490  // RunAuxiliary did not contain a valid timestamp. Take it from the next event.
1492  assert(eventEntry != IndexIntoFile::invalidEntry);
1493  assert(eventTree_.current(eventEntry));
1494  fillEventAuxiliary(eventEntry);
1495 
1496  RunID run = RunID(indexIntoFileIter_.run());
1497  runHelper_->overrideRunNumber(run);
1498  savedRunAuxiliary_ = std::make_shared<RunAuxiliary>(run.run(), eventAux().time(), Timestamp::invalidTimestamp());
1499  return savedRunAuxiliary();
1500  }
1501  // End code for backward compatibility before the existence of run trees.
1503  std::shared_ptr<RunAuxiliary> runAuxiliary = fillRunAuxiliary();
1504  assert(runAuxiliary->run() == indexIntoFileIter_.run());
1505  runHelper_->overrideRunNumber(runAuxiliary->id());
1506  filePtr_->reportInputRunNumber(runAuxiliary->run());
1507  // If RunAuxiliary did not contain a valid begin timestamp, invalidate any end timestamp.
1508  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1509  runAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1510  }
1511 
1512  // If RunAuxiliary did not contain a valid timestamp, or if this an old format file from
1513  // when the Run's ProcessHistory included only processes where products were added to the Run itself,
1514  // we attempt to read the first event in the run to get appropriate info.
1515  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp() ||
1518  // If we have a valid event, use its information.
1519  if (eventEntry != IndexIntoFile::invalidEntry) {
1520  assert(eventTree_.current(eventEntry));
1521  fillEventAuxiliary(eventEntry);
1522 
1523  // RunAuxiliary did not contain a valid timestamp. Take it from the next event in this run if there is one.
1524  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1525  runAuxiliary->setBeginTime(eventAux().time());
1526  }
1527 
1528  // For backwards compatibility when the Run's ProcessHistory included only processes where products were added to the
1529  // Run, and then the Run and Event auxiliaries could be different. Use the event ProcessHistoryID if there is one. It should
1530  // almost always be correct by the current definition (processes included if any products are added. This makes the run, lumi,
1531  // and event ProcessHistory's always be the same if no file merging occurs).
1532  if (!fileFormatVersion().processHistorySameWithinRun()) {
1533  fillEventHistory();
1534  runAuxiliary->setProcessHistoryID(eventAux().processHistoryID());
1535  }
1536  }
1537  }
1538  savedRunAuxiliary_ = runAuxiliary;
1539  return runAuxiliary;
1540  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
static Timestamp invalidTimestamp()
Definition: Timestamp.h:82
Timestamp const & time() const
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:330
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
bool current() const
Definition: RootTree.h:128
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
EventAuxiliary const & eventAux() const
Definition: RootFile.h:216
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1316
RootTree eventTree_
Definition: RootFile.h:338
RootTree runTree_
Definition: RootFile.h:340
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary() const
Definition: RootFile.h:300
static constexpr EntryNumber_t invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
bool processHistorySameWithinRun() const
void fillEventHistory()
Definition: RootFile.cc:1237
bool isValid() const
Definition: RootTree.cc:110
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:349
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
void edm::RootFile::reportOpened ( std::string const &  inputType)

Definition at line 1192 of file RootFile.cc.

References edm::RootTree::branchNames(), eventTree_, edm::FileID::fid(), fid_, filePtr_, label, logicalFile_, edm::moduleName(), and AlCaHLTBitMon_QueryRunRegistry::string.

1192  {
1193  // Report file opened.
1194  std::string const label = "source";
1195  std::string moduleName = "PoolSource";
1196  filePtr_->inputFileOpened(logicalFile_, inputType, moduleName, label, fid_.fid(), eventTree_.branchNames());
1197  }
std::vector< std::string > const & branchNames() const
Definition: RootTree.h:138
char const * label
FileID fid_
Definition: RootFile.h:320
std::string const logicalFile_
Definition: RootFile.h:314
std::string moduleName(Provenance const &provenance)
Definition: Provenance.cc:27
std::string const & fid() const
Definition: FileID.h:19
RootTree eventTree_
Definition: RootFile.h:338
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:317
void edm::RootFile::rewind ( )
inline

Definition at line 240 of file RootFile.h.

240  {
242  eventTree_.rewind();
243  lumiTree_.rewind();
244  runTree_.rewind();
245  }
RootTree lumiTree_
Definition: RootFile.h:339
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
RootTree eventTree_
Definition: RootFile.h:338
RootTree runTree_
Definition: RootFile.h:340
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:324
void rewind()
Definition: RootTree.h:130
RootTree const& edm::RootFile::runTree ( ) const
inline

Definition at line 223 of file RootFile.h.

Referenced by validateFile().

223 { return runTree_; }
RootTree runTree_
Definition: RootFile.h:340
std::shared_ptr<RunAuxiliary const> edm::RootFile::savedRunAuxiliary ( ) const
inlineprivate

Definition at line 300 of file RootFile.h.

References edm::get_underlying_safe().

Referenced by readRunAuxiliary_().

edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:330
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::shared_ptr<RunAuxiliary>& edm::RootFile::savedRunAuxiliary ( )
inlineprivate

Definition at line 301 of file RootFile.h.

References edm::get_underlying_safe().

edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:330
std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
void edm::RootFile::setAtEventEntry ( IndexIntoFile::EntryNumber_t  entry)

Definition at line 1476 of file RootFile.cc.

References eventTree_, and edm::RootTree::setEntryNumber().

RootTree eventTree_
Definition: RootFile.h:338
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
bool edm::RootFile::setEntryAtEvent ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 1625 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), eventTree_, edm::IndexIntoFile::findEventPosition(), indexIntoFile_, indexIntoFileEnd_, indexIntoFileIter_, and edm::RootTree::setEntryNumber().

1625  {
1628  return false;
1630  return true;
1631  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
RootTree eventTree_
Definition: RootFile.h:338
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
Definition: event.py:1
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
bool edm::RootFile::setEntryAtItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)
inline

Definition at line 230 of file RootFile.h.

References mps_splice::entry, and writedatasetfile::run.

230  {
232  }
bool setEntryAtRun(RunNumber_t run)
Definition: RootFile.cc:1641
bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi)
Definition: RootFile.cc:1633
bool setEntryAtEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
Definition: RootFile.cc:1625
Definition: event.py:1
bool edm::RootFile::setEntryAtLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1633 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::IndexIntoFile::findLumiPosition(), indexIntoFile_, indexIntoFileEnd_, indexIntoFileIter_, lumiTree_, and edm::RootTree::setEntryNumber().

1633  {
1636  return false;
1638  return true;
1639  }
RootTree lumiTree_
Definition: RootFile.h:339
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
IndexIntoFileItr findLumiPosition(RunNumber_t run, LuminosityBlockNumber_t lumi) const
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
bool edm::RootFile::setEntryAtNextEventInLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1649 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::advanceToEvent(), edm::IndexIntoFile::IndexIntoFileItr::entry(), fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileIter_, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::IndexIntoFileItr::lumi(), and edm::IndexIntoFile::IndexIntoFileItr::run().

1649  {
1652  }
1655  return false;
1656  if (run != indexIntoFileIter_.run())
1657  return false;
1658  if (lumi != indexIntoFileIter_.lumi())
1659  return false;
1661  return true;
1662  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
bool edm::RootFile::setEntryAtRun ( RunNumber_t  run)

Definition at line 1641 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::IndexIntoFile::findRunPosition(), indexIntoFile_, indexIntoFileEnd_, indexIntoFileIter_, runTree_, and edm::RootTree::setEntryNumber().

1641  {
1644  return false;
1646  return true;
1647  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
RootTree runTree_
Definition: RootFile.h:340
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:202
void edm::RootFile::setIfFastClonable ( int  remainingEvents,
int  remainingLumis 
)
private

Definition at line 667 of file RootFile.cc.

References duplicateChecker_, edm::FileBlock::DuplicateEventsRemoved, edm::RootTree::entries(), edm::FileBlock::EventsToBeSorted, eventTree_, fileFormatVersion(), edm::FileBlock::FileTooOld, edm::IndexIntoFile::firstAppearanceOrder, edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFile_, indexIntoFileBegin_, indexIntoFileEnd_, edm::FileBlock::InitialEventsSkipped, edm::IndexIntoFile::iterationWillBeInEntryOrder(), edm::IndexIntoFile::kEvent, lumiTree_, edm::FileBlock::MaxEventsTooSmall, edm::FileBlock::MaxLumisTooSmall, edm::FileBlock::NoEventsInFile, noEventSort_, edm::FileBlock::NotProcessingEvents, edm::IndexIntoFile::numericalOrder, processingMode_, edm::FileBlock::RunOrLumiNotContiguous, edm::InputSource::RunsLumisAndEvents, skipAnyEvents_, and whyNotFastClonable_.

Referenced by RootFile().

667  {
668  if (fileFormatVersion().noMetaDataTrees() and !fileFormatVersion().storedProductProvenanceUsed()) {
669  //we must avoid copying the old branch which stored the per product per event provenance
671  return;
672  }
673  if (!fileFormatVersion().splitProductIDs()) {
675  return;
676  }
679  return;
680  }
681  // Find entry for first event in file
682  IndexIntoFile::IndexIntoFileItr it = indexIntoFileBegin_;
683  while (it != indexIntoFileEnd_ && it.getEntryType() != IndexIntoFile::kEvent) {
684  ++it;
685  }
686  if (it == indexIntoFileEnd_) {
688  return;
689  }
690 
691  // From here on, record all reasons we can't fast clone.
692  IndexIntoFile::SortOrder sortOrder =
696  }
697  if (skipAnyEvents_) {
699  }
700  if (remainingEvents >= 0 && eventTree_.entries() > remainingEvents) {
702  }
703  if (remainingLumis >= 0 && lumiTree_.entries() > remainingLumis) {
705  }
706  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
708  }
709  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
int whyNotFastClonable_
Definition: RootFile.h:334
RootTree lumiTree_
Definition: RootFile.h:339
EntryNumber const & entries() const
Definition: RootTree.h:135
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:348
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
bool noEventSort_
Definition: RootFile.h:332
bool skipAnyEvents_
Definition: RootFile.h:331
RootTree eventTree_
Definition: RootFile.h:338
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:324
void edm::RootFile::setPosition ( IndexIntoFile::IndexIntoFileItr const &  position)

Definition at line 737 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::copyPosition(), and indexIntoFileIter_.

737  {
739  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
void copyPosition(IndexIntoFileItr const &position)
Copy the position without modifying the pointer to the IndexIntoFile or size.
static int position[264][3]
Definition: ReadPGInfo.cc:289
void edm::RootFile::setSignals ( signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *  preEventReadSource,
signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *  postEventReadSource 
)

Definition at line 1820 of file RootFile.cc.

References eventTree_, and edm::RootTree::setSignals().

1822  {
1823  eventTree_.setSignals(preEventReadSource, postEventReadSource);
1824  }
void setSignals(signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
Definition: RootTree.cc:489
RootTree eventTree_
Definition: RootFile.h:338
void edm::RootFile::setToLastEntry ( )
inline

Definition at line 246 of file RootFile.h.

IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
bool edm::RootFile::skipEntries ( unsigned int &  offset)
inline
bool edm::RootFile::skipEvents ( int &  offset)

Definition at line 1336 of file RootFile.cc.

References duplicateChecker_, edm::EventID::event(), eventAux_, eventSkipperByID_, file_, fillEventAuxiliary(), edm::EventAuxiliary::id(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, edm::IndexIntoFile::invalidIndex, edm::IndexIntoFile::invalidLumi, edm::IndexIntoFile::invalidRun, hltrates_dqm_sourceclient-live_cfg::offset, edm::IndexIntoFile::IndexIntoFileItr::skipEventBackward(), and edm::IndexIntoFile::IndexIntoFileItr::skipEventForward().

1336  {
1337  while (offset > 0 && indexIntoFileIter_ != indexIntoFileEnd_) {
1338  int phIndexOfSkippedEvent = IndexIntoFile::invalidIndex;
1339  RunNumber_t runOfSkippedEvent = IndexIntoFile::invalidRun;
1342 
1344  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1345 
1346  // At the end of the file and there were no more events to skip
1347  if (skippedEventEntry == IndexIntoFile::invalidEntry)
1348  break;
1349 
1350  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1351  fillEventAuxiliary(skippedEventEntry);
1352  if (eventSkipperByID_->skipIt(runOfSkippedEvent, lumiOfSkippedEvent, eventAux_.id().event())) {
1353  continue;
1354  }
1355  }
1356  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
1357  fillEventAuxiliary(skippedEventEntry);
1358  if (duplicateChecker_->isDuplicateAndCheckActive(
1359  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, eventAux_.id().event(), file_)) {
1360  continue;
1361  }
1362  }
1363  --offset;
1364  }
1365 
1366  while (offset < 0) {
1367  if (duplicateChecker_) {
1368  duplicateChecker_->disable();
1369  }
1370 
1371  int phIndexOfEvent = IndexIntoFile::invalidIndex;
1375 
1376  indexIntoFileIter_.skipEventBackward(phIndexOfEvent, runOfEvent, lumiOfEvent, eventEntry);
1377 
1378  if (eventEntry == IndexIntoFile::invalidEntry)
1379  break;
1380 
1381  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1382  fillEventAuxiliary(eventEntry);
1383  if (eventSkipperByID_->skipIt(runOfEvent, lumiOfEvent, eventAux_.id().event())) {
1384  continue;
1385  }
1386  }
1387  ++offset;
1388  }
1390  }
EventNumber_t event() const
Definition: EventID.h:40
static constexpr int invalidIndex
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:318
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
unsigned int LuminosityBlockNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
static constexpr RunNumber_t invalidRun
void skipEventBackward(int &phIndexOfEvent, RunNumber_t &runOfEvent, LuminosityBlockNumber_t &lumiOfEvent, EntryNumber_t &eventEntry)
static constexpr EntryNumber_t invalidEntry
static constexpr LuminosityBlockNumber_t invalidLumi
EventID const & id() const
unsigned int RunNumber_t
EventAuxiliary eventAux_
Definition: RootFile.h:337
std::string const file_
Definition: RootFile.h:313
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)
bool edm::RootFile::skipThisEntry ( )
private

Definition at line 746 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::EventID::event(), eventAux_, eventSkipperByID_, fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), edm::EventAuxiliary::id(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::invalidLumi, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::kRun, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::IndexIntoFile::IndexIntoFileItr::peekAheadAtLumi(), edm::IndexIntoFile::IndexIntoFileItr::run(), edm::IndexIntoFile::IndexIntoFileItr::skipLumiInRun(), and mitigatedMETSequence_cff::U.

Referenced by getNextItemType().

746  {
748  return false;
749  }
750  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
751  // See first if the entire lumi or run is skipped, so we won't have to read the event Auxiliary in that case.
753  return true;
754  }
755 
756  // The Lumi is not skipped. If this is an event, see if the event is skipped.
760  return true;
761  }
762  }
763 
764  // Skip runs with no lumis if either lumisToSkip or lumisToProcess have been set to select lumis
766  IndexIntoFile::IndexIntoFileItr iterLumi = indexIntoFileIter_;
767 
768  // There are no lumis in this run, not even ones we will skip
769  if (iterLumi.peekAheadAtLumi() == IndexIntoFile::invalidLumi) {
770  return true;
771  }
772  // If we get here there are lumis in the run, check to see if we are skipping all of them
773  do {
774  if (!eventSkipperByID_->skipIt(iterLumi.run(), iterLumi.peekAheadAtLumi(), 0U)) {
775  return false;
776  }
777  } while (iterLumi.skipLumiInRun());
778  return true;
779  }
780  }
781  return false;
782  }
EventNumber_t event() const
Definition: EventID.h:40
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:318
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1228
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:325
static constexpr LuminosityBlockNumber_t invalidLumi
EventID const & id() const
EventAuxiliary eventAux_
Definition: RootFile.h:337
RootTreePtrArray& edm::RootFile::treePointers ( )
inlineprivate

Definition at line 272 of file RootFile.h.

References MicroEventContent_cff::branch, cmsCodeRulesChecker::rules, and AlCaHLTBitMon_QueryRunRegistry::string.

272 { return treePointers_; }
RootTreePtrArray treePointers_
Definition: RootFile.h:341
void edm::RootFile::validateFile ( InputType  inputType,
bool  usingGoToEvent 
)
private

Definition at line 1137 of file RootFile.cc.

References edm::createGlobalIdentifier(), daqProvenanceHelper_, duplicateChecker_, edm::IndexIntoFile::empty(), enforceGUIDInFileName_, edm::RootTree::entries(), edm::errors::EventCorruption, eventTree_, Exception, edm::FileID::fid(), fid_, file_, fileFormatVersion(), edm::errors::FileNameInconsistentWithGUID, edm::IndexIntoFile::fillEventNumbersOrEntries(), fillIndexIntoFile(), edm::IndexIntoFile::fixIndexes(), indexIntoFile_, edm::FileID::isValid(), edm::RootTree::isValid(), noEventSort_, orderedProcessHistoryIDs_, edm::Primary, processHistoryRegistry_, edm::IndexIntoFile::reduceProcessHistoryIDs(), runTree(), edm::IndexIntoFile::setEventFinder(), edm::IndexIntoFile::setNumberOfEvents(), edm::IndexIntoFile::setProcessHistoryIDs(), edm::stemFromPath(), and edm::FileFormatVersion::useReducedProcessHistoryID().

Referenced by RootFile().

1137  {
1138  if (!fid_.isValid()) {
1139  fid_ = FileID(createGlobalIdentifier());
1140  }
1141  if (!eventTree_.isValid()) {
1142  throw Exception(errors::EventCorruption) << "'Events' tree is corrupted or not present\n"
1143  << "in the input file.\n";
1144  }
1145  if (enforceGUIDInFileName_) {
1146  auto guidFromName = stemFromPath(file_);
1147  if (guidFromName != fid_.fid()) {
1149  << "GUID " << guidFromName << " extracted from file name " << file_
1150  << " is inconsistent with the GUID read from the file " << fid_.fid();
1151  }
1152  }
1153 
1154  if (fileFormatVersion().hasIndexIntoFile()) {
1155  if (runTree().entries() > 0) {
1156  assert(!indexIntoFile_.empty());
1157  }
1159  if (daqProvenanceHelper_) {
1160  std::vector<ProcessHistoryID>& phidVec = indexIntoFile_.setProcessHistoryIDs();
1161  for (auto& phid : phidVec) {
1162  phid = daqProvenanceHelper_->mapProcessHistoryID(phid);
1163  }
1164  }
1166  }
1167  } else {
1168  assert(indexIntoFile_.empty());
1170  }
1171 
1175  std::shared_ptr<IndexIntoFile::EventFinder>(std::make_shared<RootFileEventFinder>(eventTree_)));
1176  // We fill the event numbers explicitly if we need to find events in closed files,
1177  // such as for secondary files (or secondary sources) or if duplicate checking across files.
1178  bool needEventNumbers = false;
1179  bool needIndexesForDuplicateChecker =
1180  duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
1181  if (inputType != InputType::Primary || needIndexesForDuplicateChecker || usingGoToEvent) {
1182  needEventNumbers = true;
1183  }
1184  bool needEventEntries = false;
1185  if (inputType != InputType::Primary || !noEventSort_) {
1186  // We need event entries for sorting or for secondary files or sources.
1187  needEventEntries = true;
1188  }
1189  indexIntoFile_.fillEventNumbersOrEntries(needEventNumbers, needEventEntries);
1190  }
void fillEventNumbersOrEntries(bool needEventNumbers, bool needEventEntries) const
void setEventFinder(std::shared_ptr< EventFinder > ptr) const
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:356
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:224
bool enforceGUIDInFileName_
Definition: RootFile.h:333
bool empty() const
True if no runs, lumis, or events are in the file.
std::string_view stemFromPath(std::string_view path)
Definition: stemFromPath.cc:4
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:316
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:361
EntryNumber const & entries() const
Definition: RootTree.h:135
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
FileID fid_
Definition: RootFile.h:320
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool noEventSort_
Definition: RootFile.h:332
std::string const & fid() const
Definition: FileID.h:19
RootTree const & runTree() const
Definition: RootFile.h:223
RootTree eventTree_
Definition: RootFile.h:338
bool isValid() const
Definition: FileID.h:18
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:322
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
bool isValid() const
Definition: RootTree.cc:110
void fillIndexIntoFile()
Definition: RootFile.cc:913
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:323
void setNumberOfEvents(EntryNumber_t nevents) const
bool useReducedProcessHistoryID() const
std::string const file_
Definition: RootFile.h:313
std::string createGlobalIdentifier()
bool edm::RootFile::wasFirstEventJustRead ( ) const

Definition at line 852 of file RootFile.cc.

References a, b, mps_splice::entry, indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, BXlumiParameters_cfi::lumi, writedatasetfile::run, and edm::IndexIntoFile::IndexIntoFileItr::skipEventBackward().

852  {
853  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
854  int phIndex;
857  IndexIntoFile::EntryNumber_t eventEntry;
858  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
859  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
860  return eventEntry == IndexIntoFile::invalidEntry;
861  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
static constexpr EntryNumber_t invalidEntry
unsigned int RunNumber_t
bool edm::RootFile::wasLastEventJustRead ( ) const

Definition at line 846 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::advanceToEvent(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileIter_, and edm::IndexIntoFile::kEnd.

846  {
847  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
848  itr.advanceToEvent();
849  return itr.getEntryType() == IndexIntoFile::kEnd;
850  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:326
int edm::RootFile::whyNotFastClonable ( ) const
inline

Definition at line 225 of file RootFile.h.

Referenced by createFileBlock().

225 { return whyNotFastClonable_; }
int whyNotFastClonable_
Definition: RootFile.h:334

Member Data Documentation

edm::propagate_const<std::shared_ptr<BranchChildren> > edm::RootFile::branchChildren_
private

Definition at line 355 of file RootFile.h.

Referenced by markBranchToBeDropped(), and RootFile().

edm::propagate_const<std::shared_ptr<BranchIDListHelper> > edm::RootFile::branchIDListHelper_
private

Definition at line 345 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

std::shared_ptr<BranchIDLists const> edm::RootFile::branchIDLists_
private

Definition at line 344 of file RootFile.h.

Referenced by RootFile().

BranchListIndexes edm::RootFile::branchListIndexes_
private

Definition at line 353 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

bool edm::RootFile::branchListIndexesUnchanged_
private

Definition at line 336 of file RootFile.h.

Referenced by RootFile().

edm::propagate_const<std::unique_ptr<DaqProvenanceHelper> > edm::RootFile::daqProvenanceHelper_
private
edm::propagate_const<std::shared_ptr<DuplicateChecker> > edm::RootFile::duplicateChecker_
private
edm::propagate_const<TClass*> edm::RootFile::edProductClass_
private

Definition at line 362 of file RootFile.h.

Referenced by dropOnInput().

bool edm::RootFile::enforceGUIDInFileName_
private

Definition at line 333 of file RootFile.h.

Referenced by validateFile().

EventAuxiliary edm::RootFile::eventAux_
private
edm::propagate_const<TTree*> edm::RootFile::eventHistoryTree_
private

Definition at line 351 of file RootFile.h.

Referenced by close(), fillEventHistory(), and readEventHistoryTree().

std::vector<EventProcessHistoryID> edm::RootFile::eventProcessHistoryIDs_
private

Definition at line 328 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

std::vector<EventProcessHistoryID>::const_iterator edm::RootFile::eventProcessHistoryIter_
private

Definition at line 329 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

std::vector<edm::propagate_const<std::shared_ptr<ProductProvenanceRetriever> > > edm::RootFile::eventProductProvenanceRetrievers_
private

Definition at line 359 of file RootFile.h.

Referenced by makeProductProvenanceRetriever().

EventSelectionIDVector edm::RootFile::eventSelectionIDs_
private

Definition at line 352 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

edm::propagate_const<std::shared_ptr<EventSkipperByID> > edm::RootFile::eventSkipperByID_
private

Definition at line 318 of file RootFile.h.

Referenced by RootFile(), skipEvents(), and skipThisEntry().

RootTree edm::RootFile::eventTree_
private
FileID edm::RootFile::fid_
private

Definition at line 320 of file RootFile.h.

Referenced by reportOpened(), RootFile(), and validateFile().

std::string const edm::RootFile::file_
private

Definition at line 313 of file RootFile.h.

Referenced by createFileBlock(), dropOnInput(), isDuplicateEvent(), skipEvents(), and validateFile().

FileFormatVersion edm::RootFile::fileFormatVersion_
private

Definition at line 319 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and RootFile().

edm::propagate_const<std::shared_ptr<InputFile> > edm::RootFile::filePtr_
private
edm::propagate_const<std::unique_ptr<ThinnedAssociationsHelper> > edm::RootFile::fileThinnedAssociationsHelper_
private

Definition at line 346 of file RootFile.h.

Referenced by dropOnInput(), initAssociationsFromSecondary(), and RootFile().

std::array<bool, NumBranchTypes> edm::RootFile::hasNewlyDroppedBranch_
private

Definition at line 335 of file RootFile.h.

Referenced by dropOnInput(), and RootFile().

edm::propagate_const<std::unique_ptr<History> > edm::RootFile::history_
private

Definition at line 354 of file RootFile.h.

Referenced by fillEventHistory(), and readEventHistoryTree().

IndexIntoFile& edm::RootFile::indexIntoFile_
private
IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileBegin_
private

Definition at line 324 of file RootFile.h.

Referenced by RootFile(), and setIfFastClonable().

IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileEnd_
private
IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileIter_
private
edm::propagate_const<std::shared_ptr<IndexIntoFile> > edm::RootFile::indexIntoFileSharedPtr_
private

Definition at line 321 of file RootFile.h.

InputType edm::RootFile::inputType_
private

Definition at line 363 of file RootFile.h.

Referenced by readRun_().

IndexIntoFile::EntryNumber_t edm::RootFile::lastEventEntryNumberRead_
private

Definition at line 342 of file RootFile.h.

Referenced by fillIndexIntoFile(), and fillThisEventAuxiliary().

std::string const edm::RootFile::logicalFile_
private

Definition at line 314 of file RootFile.h.

Referenced by reportOpened().

RootTree edm::RootFile::lumiTree_
private
std::map<std::string, std::string> edm::RootFile::newBranchToOldBranch_
private

Definition at line 350 of file RootFile.h.

Referenced by newBranchToOldBranch(), and RootFile().

bool edm::RootFile::noEventSort_
private

Definition at line 332 of file RootFile.h.

Referenced by goToEvent(), setIfFastClonable(), and validateFile().

std::vector<ProcessHistoryID>& edm::RootFile::orderedProcessHistoryIDs_
private

Definition at line 323 of file RootFile.h.

Referenced by validateFile().

std::vector<ParentageID> edm::RootFile::parentageIDLookup_
private

Definition at line 360 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and readParentageTree().

ProcessConfiguration const& edm::RootFile::processConfiguration_
private

Definition at line 315 of file RootFile.h.

edm::propagate_const<ProcessHistoryRegistry*> edm::RootFile::processHistoryRegistry_
private
InputSource::ProcessingMode edm::RootFile::processingMode_
private

Definition at line 348 of file RootFile.h.

Referenced by getNextItemType(), and setIfFastClonable().

std::shared_ptr<ProductRegistry const> edm::RootFile::productRegistry_
private

Definition at line 343 of file RootFile.h.

Referenced by RootFile().

edm::propagate_const<std::unique_ptr<ProvenanceAdaptor> > edm::RootFile::provenanceAdaptor_
private

Definition at line 357 of file RootFile.h.

Referenced by fillEventHistory(), fillLumiAuxiliary(), fillRunAuxiliary(), and RootFile().

edm::propagate_const<std::unique_ptr<MakeProvenanceReader> > edm::RootFile::provenanceReaderMaker_
private

Definition at line 358 of file RootFile.h.

Referenced by makeProductProvenanceRetriever(), and RootFile().

edm::propagate_const<RunHelperBase*> edm::RootFile::runHelper_
private
RootTree edm::RootFile::runTree_
private
edm::propagate_const<std::shared_ptr<RunAuxiliary> > edm::RootFile::savedRunAuxiliary_
private

Definition at line 330 of file RootFile.h.

Referenced by readLuminosityBlockAuxiliary_(), and readRunAuxiliary_().

bool edm::RootFile::skipAnyEvents_
private

Definition at line 331 of file RootFile.h.

Referenced by setIfFastClonable().

edm::propagate_const<std::unique_ptr<StoredMergeableRunProductMetadata> > edm::RootFile::storedMergeableRunProductMetadata_
private

Definition at line 327 of file RootFile.h.

Referenced by readRun_(), and RootFile().

edm::propagate_const<std::shared_ptr<ThinnedAssociationsHelper> > edm::RootFile::thinnedAssociationsHelper_
private

Definition at line 347 of file RootFile.h.

Referenced by initAssociationsFromSecondary().

RootTreePtrArray edm::RootFile::treePointers_
private

Definition at line 341 of file RootFile.h.

Referenced by close(), dropOnInput(), and RootFile().

int edm::RootFile::whyNotFastClonable_
private

Definition at line 334 of file RootFile.h.

Referenced by RootFile(), and setIfFastClonable().