CMS 3D CMS Logo

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

#include <RootFile.h>

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::shared_ptr< FileBlockcreateFileBlock ()
 
bool endOfProcessBlocksReached () const
 
RootTree const & eventTree () const
 
std::string const & file () const
 
FileFormatVersion fileFormatVersion () const
 
void fillProcessBlockHelper_ ()
 
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 &)
 
bool initializeFirstProcessBlockEntry ()
 
RootTree const & lumiTree () const
 
bool modifiedIDs () const
 
bool nextEventEntry ()
 
bool nextProcessBlock_ (ProcessBlockPrincipal &)
 
RootFileoperator= (RootFile const &)=delete
 
std::shared_ptr< ProductRegistry const > productRegistry () const
 
std::tuple< bool, bool > readCurrentEvent (EventPrincipal &cache, bool assertOnFailure=true)
 
bool readEvent (EventPrincipal &cache)
 
void readFakeRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadFakeRunAuxiliary_ ()
 
bool readLuminosityBlock_ (LuminosityBlockPrincipal &lumiPrincipal)
 
std::shared_ptr< LuminosityBlockAuxiliaryreadLuminosityBlockAuxiliary_ ()
 
void readProcessBlock_ (ProcessBlockPrincipal &)
 
bool 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 noRunLumiSort, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, ProcessBlockHelper *, 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)
 
void updateFileBlock (FileBlock &)
 
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 dropOnInputAndReorder (ProductRegistry &, ProductSelectorRules const &, bool dropDescendants, InputType, StoredProcessBlockHelper &, ProcessBlockHelper const *)
 
void dropProcessesAndReorder (StoredProcessBlockHelper &, std::set< std::string > const &processesWithKeptProcessBlockProducts, ProcessBlockHelper const *)
 
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever (size_t index) const
 
std::shared_ptr< ProductProvenanceRetriever > & eventProductProvenanceRetriever (size_t index)
 
EventAuxiliary fillEventAuxiliary (IndexIntoFile::EntryNumber_t entry)
 
bool fillEventHistory (EventAuxiliary &evtAux, EventSelectionIDVector &eventSelectionIDs, BranchListIndexes &branchListIndexes, bool assertOnFailure=true)
 
void fillEventToProcessBlockIndexes ()
 
void fillIndexIntoFile ()
 
std::shared_ptr< LuminosityBlockAuxiliaryfillLumiAuxiliary ()
 
std::shared_ptr< RunAuxiliaryfillRunAuxiliary ()
 
EventAuxiliary const & fillThisEventAuxiliary ()
 
void initializeDuplicateChecker (std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile)
 
bool isDuplicateEvent ()
 
void makeProcessBlockRootTrees (std::shared_ptr< InputFile > filePtr, int treeMaxVirtualSize, bool enablePrefetching, InputType inputType, StoredProcessBlockHelper const &storedProcessBlockHelper)
 
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)
 
void setPresenceInProductRegistry (ProductRegistry &, StoredProcessBlockHelper const &)
 
bool skipThisEntry ()
 
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_
 
bool branchListIndexesUnchanged_
 
unsigned int currentProcessBlockTree_ = 0
 
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
 
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
 
edm::propagate_const< TClass * > edProductClass_
 
bool enforceGUIDInFileName_
 
EventAuxiliary eventAuxCache_
 
edm::propagate_const< TTree * > eventHistoryTree_
 
std::vector< EventProcessHistoryIDeventProcessHistoryIDs_
 
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
 
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
 
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
 
EventToProcessBlockIndexes eventToProcessBlockIndexes_
 
edm::propagate_const< TBranch * > eventToProcessBlockIndexesBranch_
 
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_
 
bool noRunLumiSort_
 
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
 
std::vector< ParentageIDparentageIDLookup_
 
edm::propagate_const< ProcessBlockHelper * > processBlockHelper_
 
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
 
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::unique_ptr< StoredProcessBlockHelper > > storedProcessBlockHelper_
 
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
 
std::vector< edm::propagate_const< RootTree * > > treePointers_
 
int whyNotFastClonable_
 

Detailed Description

Definition at line 71 of file RootFile.h.

Constructor & Destructor Documentation

◆ RootFile() [1/4]

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  noRunLumiSort,
bool  noEventSort,
ProductSelectorRules const &  productSelectorRules,
InputType  inputType,
std::shared_ptr< BranchIDListHelper branchIDListHelper,
ProcessBlockHelper processBlockHelper,
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 145 of file RootFile.cc.

References cms::cuda::assert(), edm::IndexIntoFile::begin(), branchChildren_, edm::poolNames::branchIDListBranchName(), branchIDListHelper_, branchIDLists_, branchListIndexesUnchanged_, edm::BranchDescription::branchName(), edm::BranchTypeToAuxiliaryBranchName(), edm::Exception::categoryCode(), edm::errors::Configuration, edm::ProductRegistry::copyProduct(), daqProvenanceHelper_, edm::roottree::defaultNonEventCacheSize, HLT_2024v14_cff::distance, edm::IndexIntoFile::doneFileInitialization(), dropOnInputAndReorder(), edm::IndexIntoFile::end(), edm::IndexIntoFile::entryOrder, edm::errors::EventCorruption, edm::poolNames::eventHistoryBranchName(), eventProcessHistoryIDs_, eventProcessHistoryIter_, eventSkipperByID_, edm::FileBlock::EventsOrLumisSelectedByID, eventTree_, cppFunctionSkipper::exception, Exception, fid_, file(), fileFormatVersion(), fileFormatVersion_, edm::poolNames::fileFormatVersionBranchName(), edm::poolNames::fileIdentifierBranchName(), filePtr_, edm::errors::FileReadError, fileThinnedAssociationsHelper_, spr::find(), HLT_2024v14_cff::finder, edm::IndexIntoFile::firstAppearanceOrder, edm::errors::FormatIncompatibility, edm::friendlyname::friendlyName(), edm::roottree::getEntry(), hasNewlyDroppedBranch_, edm::FileFormatVersion::hasThinnedAssociations(), isotrackTrainRegressor::history, mps_fire::i, edm::poolNames::idToParameterSetBlobsBranchName(), indexIntoFile_, indexIntoFileBegin_, edm::poolNames::indexIntoFileBranchName(), indexIntoFileEnd_, indexIntoFileIter_, edm::InEvent, initializeDuplicateChecker(), edm::ProcessBlockHelper::initializeFromPrimaryInput(), edm::InLumi, edm::InProcess, edm::InRun, edm::pset::Registry::insertMapped(), edm::pset::Registry::instance(), ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, lumiTree_, makeProcessBlockRootTrees(), makeProvenanceReaderMaker(), edm::poolNames::mergeableRunProductMetadataBranchName(), cms::Exception::message(), edm::poolNames::metaDataTreeName(), edm::poolNames::moduleDescriptionMapBranchName(), newBranchToOldBranch(), newBranchToOldBranch_, edm::numberOfRunLumiEventProductTrees, edm::IndexIntoFile::numericalOrder, edm::poolNames::parameterSetMapBranchName(), edm::poolNames::parameterSetsTreeName(), edm::Primary, edm::poolNames::processBlockHelperBranchName(), processBlockTrees_, edm::poolNames::processConfigurationBranchName(), dqmiodatasetharvest::processes, edm::poolNames::processHistoryBranchName(), edm::poolNames::processHistoryMapBranchName(), copyEcalPFRecHitThresholds_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(), setPresenceInProductRegistry(), edm::source(), storedMergeableRunProductMetadata_, storedProcessBlockHelper_, AlCaHLTBitMon_QueryRunRegistry::string, submitPVValidationJobs::t, edm::poolNames::thinnedAssociationsHelperBranchName(), edm::RootTree::trainCache(), edm::roottree::trainCache(), treePointers_, edm::errors::UnimplementedFeature, edm::BranchDescription::updateFriendlyClassName(), validateFile(), and whyNotFastClonable_.

177  : file_(fileName),
178  logicalFile_(logicalFileName),
179  processConfiguration_(processConfiguration),
180  processHistoryRegistry_(&processHistoryRegistry),
181  filePtr_(filePtr),
182  eventSkipperByID_(eventSkipperByID),
184  fid_(),
185  indexIntoFileSharedPtr_(new IndexIntoFile),
187  orderedProcessHistoryIDs_(orderedProcessHistoryIDs),
189  noRunLumiSort ? IndexIntoFile::entryOrder
193  storedMergeableRunProductMetadata_((inputType == InputType::Primary) ? new StoredMergeableRunProductMetadata
194  : nullptr),
198  skipAnyEvents_(skipAnyEvents),
199  noRunLumiSort_(noRunLumiSort),
200  noEventSort_(noEventSort),
201  enforceGUIDInFileName_(enforceGUIDInFileName),
205  eventAuxCache_(),
206  eventTree_(filePtr,
207  InEvent,
208  nStreams,
209  treeMaxVirtualSize,
210  treeCacheSize,
212  enablePrefetching,
213  inputType),
214  lumiTree_(filePtr,
215  InLumi,
216  1,
217  treeMaxVirtualSize,
220  enablePrefetching,
221  inputType),
222  runTree_(filePtr,
223  InRun,
224  1,
225  treeMaxVirtualSize,
228  enablePrefetching,
229  inputType),
230  treePointers_(),
233  branchIDLists_(),
235  processBlockHelper_(processBlockHelper),
237  thinnedAssociationsHelper_(thinnedAssociationsHelper),
239  runHelper_(runHelper),
241  eventHistoryTree_(nullptr),
243  inputType == InputType::Primary
245  : nullptr),
246  history_(),
247  branchChildren_(new BranchChildren),
248  duplicateChecker_(duplicateChecker),
254  edProductClass_(TypeWithDict::byName("edm::WrapperBase").getClass()),
255  inputType_(inputType) {
256  hasNewlyDroppedBranch_.fill(false);
257 
258  treePointers_.resize(3);
262 
263  // Read the metadata tree.
264  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
265  std::unique_ptr<TTree> metaDataTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::metaDataTreeName().c_str())));
266  if (nullptr == metaDataTree.get()) {
268  << "Could not find tree " << poolNames::metaDataTreeName() << " in the input file.\n";
269  }
270 
271  // To keep things simple, we just read in every possible branch that exists.
272  // We don't pay attention to which branches exist in which file format versions
273 
274  FileFormatVersion* fftPtr = &fileFormatVersion_;
275  if (metaDataTree->FindBranch(poolNames::fileFormatVersionBranchName().c_str()) != nullptr) {
276  TBranch* fft = metaDataTree->GetBranch(poolNames::fileFormatVersionBranchName().c_str());
277  fft->SetAddress(&fftPtr);
278  roottree::getEntry(fft, 0);
279  metaDataTree->SetBranchAddress(poolNames::fileFormatVersionBranchName().c_str(), &fftPtr);
280  }
281 
282  FileID* fidPtr = &fid_;
283  if (metaDataTree->FindBranch(poolNames::fileIdentifierBranchName().c_str()) != nullptr) {
284  metaDataTree->SetBranchAddress(poolNames::fileIdentifierBranchName().c_str(), &fidPtr);
285  }
286 
287  IndexIntoFile* iifPtr = &indexIntoFile_;
288  if (metaDataTree->FindBranch(poolNames::indexIntoFileBranchName().c_str()) != nullptr) {
289  metaDataTree->SetBranchAddress(poolNames::indexIntoFileBranchName().c_str(), &iifPtr);
290  }
291 
292  storedProcessBlockHelper_ = std::make_unique<StoredProcessBlockHelper>();
293  StoredProcessBlockHelper& storedProcessBlockHelper = *storedProcessBlockHelper_;
294  StoredProcessBlockHelper* pStoredProcessBlockHelper = storedProcessBlockHelper_.get();
295  if (inputType == InputType::Primary) {
296  if (metaDataTree->FindBranch(poolNames::processBlockHelperBranchName().c_str()) != nullptr) {
297  metaDataTree->SetBranchAddress(poolNames::processBlockHelperBranchName().c_str(), &pStoredProcessBlockHelper);
298  }
299  }
300 
301  StoredMergeableRunProductMetadata* smrc = nullptr;
302  if (inputType == InputType::Primary) {
304  if (metaDataTree->FindBranch(poolNames::mergeableRunProductMetadataBranchName().c_str()) != nullptr) {
305  metaDataTree->SetBranchAddress(poolNames::mergeableRunProductMetadataBranchName().c_str(), &smrc);
306  }
307  }
308 
309  // Need to read to a temporary registry so we can do a translation of the BranchKeys.
310  // This preserves backward compatibility against friendly class name algorithm changes.
311  ProductRegistry inputProdDescReg;
312  ProductRegistry* ppReg = &inputProdDescReg;
313  metaDataTree->SetBranchAddress(poolNames::productDescriptionBranchName().c_str(), (&ppReg));
314 
315  using PsetMap = std::map<ParameterSetID, ParameterSetBlob>;
316  PsetMap psetMap;
317  PsetMap* psetMapPtr = &psetMap;
318  if (metaDataTree->FindBranch(poolNames::parameterSetMapBranchName().c_str()) != nullptr) {
319  //backward compatibility
320  assert(!fileFormatVersion().parameterSetsTree());
321  metaDataTree->SetBranchAddress(poolNames::parameterSetMapBranchName().c_str(), &psetMapPtr);
322  } else {
323  assert(fileFormatVersion().parameterSetsTree());
324  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
325  std::unique_ptr<TTree> psetTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parameterSetsTreeName().c_str())));
326  if (nullptr == psetTree.get()) {
328  << "Could not find tree " << poolNames::parameterSetsTreeName() << " in the input file.\n";
329  }
330 
331  using IdToBlobs = std::pair<ParameterSetID, ParameterSetBlob>;
332  IdToBlobs idToBlob;
333  IdToBlobs* pIdToBlob = &idToBlob;
334  psetTree->SetBranchAddress(poolNames::idToParameterSetBlobsBranchName().c_str(), &pIdToBlob);
335 
336  std::unique_ptr<TTreeCache> psetTreeCache =
338  psetTreeCache->SetEnablePrefetching(false);
339  filePtr_->SetCacheRead(psetTreeCache.get());
340  for (Long64_t i = 0; i != psetTree->GetEntries(); ++i) {
341  psetTree->GetEntry(i);
342  psetMap.insert(idToBlob);
343  }
344  filePtr_->SetCacheRead(nullptr);
345  }
346 
347  // backward compatibility
349  ProcessHistoryRegistry::collection_type* pHistMapPtr = &pHistMap;
350  if (metaDataTree->FindBranch(poolNames::processHistoryMapBranchName().c_str()) != nullptr) {
351  metaDataTree->SetBranchAddress(poolNames::processHistoryMapBranchName().c_str(), &pHistMapPtr);
352  }
353 
355  ProcessHistoryRegistry::vector_type* pHistVectorPtr = &pHistVector;
356  if (metaDataTree->FindBranch(poolNames::processHistoryBranchName().c_str()) != nullptr) {
357  metaDataTree->SetBranchAddress(poolNames::processHistoryBranchName().c_str(), &pHistVectorPtr);
358  }
359 
360  // backward compatibility
361  ProcessConfigurationVector processConfigurations;
362  ProcessConfigurationVector* procConfigVectorPtr = &processConfigurations;
363  if (metaDataTree->FindBranch(poolNames::processConfigurationBranchName().c_str()) != nullptr) {
364  metaDataTree->SetBranchAddress(poolNames::processConfigurationBranchName().c_str(), &procConfigVectorPtr);
365  }
366 
367  auto branchIDListsAPtr = std::make_unique<BranchIDLists>();
368  BranchIDLists* branchIDListsPtr = branchIDListsAPtr.get();
369  if (metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) != nullptr) {
370  metaDataTree->SetBranchAddress(poolNames::branchIDListBranchName().c_str(), &branchIDListsPtr);
371  }
372 
373  ThinnedAssociationsHelper* thinnedAssociationsHelperPtr; // must remain in scope through getEntry()
374  if (inputType != InputType::SecondarySource) {
376  std::make_unique<ThinnedAssociationsHelper>(); // propagate_const<T> has no reset() function
377  thinnedAssociationsHelperPtr = fileThinnedAssociationsHelper_.get();
378  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) != nullptr) {
379  metaDataTree->SetBranchAddress(poolNames::thinnedAssociationsHelperBranchName().c_str(),
380  &thinnedAssociationsHelperPtr);
381  }
382  }
383 
384  BranchChildren* branchChildrenBuffer = branchChildren_.get();
385  if (metaDataTree->FindBranch(poolNames::productDependenciesBranchName().c_str()) != nullptr) {
386  metaDataTree->SetBranchAddress(poolNames::productDependenciesBranchName().c_str(), &branchChildrenBuffer);
387  }
388 
389  // backward compatibility
390  std::vector<EventProcessHistoryID>* eventHistoryIDsPtr = &eventProcessHistoryIDs_;
391  if (metaDataTree->FindBranch(poolNames::eventHistoryBranchName().c_str()) != nullptr) {
392  metaDataTree->SetBranchAddress(poolNames::eventHistoryBranchName().c_str(), &eventHistoryIDsPtr);
393  }
394 
395  if (metaDataTree->FindBranch(poolNames::moduleDescriptionMapBranchName().c_str()) != nullptr) {
396  if (metaDataTree->GetBranch(poolNames::moduleDescriptionMapBranchName().c_str())->GetSplitLevel() != 0) {
397  metaDataTree->SetBranchStatus((poolNames::moduleDescriptionMapBranchName() + ".*").c_str(), false);
398  } else {
399  metaDataTree->SetBranchStatus(poolNames::moduleDescriptionMapBranchName().c_str(), false);
400  }
401  }
402 
403  // Here we read the metadata tree
404  roottree::getEntry(metaDataTree.get(), 0);
405 
407 
408  // Here we read the event history tree, if we have one.
410 
412  if (!fileFormatVersion().triggerPathsTracked()) {
413  ParameterSetConverter converter(psetMap, psetIdConverter, fileFormatVersion().parameterSetsByReference());
414  } else {
415  // Merge into the parameter set registry.
416  pset::Registry& psetRegistry = *pset::Registry::instance();
417  try {
418  for (auto const& psetEntry : psetMap) {
419  ParameterSet pset(psetEntry.second.pset());
420  pset.setID(psetEntry.first);
421  // For thread safety, don't update global registries when a secondary source opens a file.
422  if (inputType != InputType::SecondarySource) {
423  psetRegistry.insertMapped(pset);
424  }
425  }
426  } catch (edm::Exception const& iExcept) {
427  if (iExcept.categoryCode() == edm::errors::Configuration) {
429  exception << iExcept.message();
430  exception.addContext("Creating ParameterSets from file");
431  throw exception;
432  } else {
433  throw;
434  }
435  }
436  }
437  if (!fileFormatVersion().splitProductIDs()) {
438  // Old provenance format input file. Create a provenance adaptor.
439  // propagate_const<T> has no reset() function
440  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
441  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, true);
442  // Fill in the branchIDLists branch from the provenance adaptor
443  branchIDLists_ = provenanceAdaptor_->branchIDLists();
444  } else {
445  if (!fileFormatVersion().triggerPathsTracked()) {
446  // New provenance format, but change in ParameterSet Format. Create a provenance adaptor.
447  // propagate_const<T> has no reset() function
448  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
449  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, false);
450  }
451  // New provenance format input file. The branchIDLists branch was read directly from the input file.
452  if (metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) == nullptr) {
453  throw Exception(errors::EventCorruption) << "Failed to find branchIDLists branch in metaData tree.\n";
454  }
455  branchIDLists_.reset(branchIDListsAPtr.release());
456  }
457 
459  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) == nullptr) {
461  << "Failed to find thinnedAssociationsHelper branch in metaData tree.\n";
462  }
463  }
464 
465  if (!bypassVersionCheck) {
466  checkReleaseVersion(pHistVector, file());
467  }
468 
469  if (labelRawDataLikeMC) {
470  std::string const rawData("FEDRawDataCollection");
471  std::string const source("source");
472  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
473  BranchKey finder(rawData, source, "", "");
474  ProductRegistry::ProductList::iterator it = pList.lower_bound(finder);
475  if (it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source) {
476  // We found raw data with a module label of source.
477  // We need to change the module label and process name.
478  // Create helper.
479  it->second.init();
480  // propagate_const<T> has no reset() function
481  daqProvenanceHelper_ = std::make_unique<DaqProvenanceHelper>(it->second.unwrappedTypeID());
482  // Create the new branch description
483  BranchDescription const& newBD = daqProvenanceHelper_->branchDescription();
484  // Save info from the old and new branch descriptions
485  daqProvenanceHelper_->saveInfo(it->second, newBD);
486  // Map the new branch name to the old branch name.
487  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), it->second.branchName()));
488  // Remove the old branch description from the product Registry.
489  pList.erase(it);
490  // Check that there was only one.
491  it = pList.lower_bound(finder);
492  assert(!(it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source));
493  // Insert the new branch description into the product registry.
494  inputProdDescReg.copyProduct(newBD);
495  // Fix up other per file metadata.
496  daqProvenanceHelper_->fixMetaData(processConfigurations, pHistVector);
497  daqProvenanceHelper_->fixMetaData(*branchIDLists_);
498  daqProvenanceHelper_->fixMetaData(*branchChildren_);
499  }
500  }
501 
502  for (auto const& history : pHistVector) {
503  processHistoryRegistry.registerProcessHistory(history);
504  }
505 
507 
508  // Update the branch id info. This has to be done before validateFile since
509  // depending on the file format, the branchIDListHelper_ may have its fixBranchListIndexes call made
510  if (inputType == InputType::Primary) {
512  }
513 
514  validateFile(inputType, usingGoToEvent);
515 
516  // Here, we make the class that will make the ProvenanceReader
517  // It reads whatever trees it needs.
518  // propagate_const<T> has no reset() function
519  provenanceReaderMaker_ = std::unique_ptr<MakeProvenanceReader>(makeProvenanceReaderMaker(inputType).release());
520 
521  // Merge into the hashed registries.
522  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
524  }
525 
526  initializeDuplicateChecker(indexesIntoFiles, currentIndexIntoFile);
528  noRunLumiSort ? IndexIntoFile::entryOrder
531  noRunLumiSort ? IndexIntoFile::entryOrder
535 
536  makeProcessBlockRootTrees(filePtr, treeMaxVirtualSize, enablePrefetching, inputType, storedProcessBlockHelper);
537 
538  setPresenceInProductRegistry(inputProdDescReg, storedProcessBlockHelper);
539 
540  auto newReg = std::make_unique<ProductRegistry>();
541 
542  // Do the translation from the old registry to the new one
543  {
544  ProductRegistry::ProductList const& prodList = inputProdDescReg.productList();
545  for (auto const& product : prodList) {
546  BranchDescription const& prod = product.second;
547  std::string newFriendlyName = friendlyname::friendlyName(prod.className());
548  if (newFriendlyName == prod.friendlyClassName()) {
549  newReg->copyProduct(prod);
550  } else {
551  if (fileFormatVersion().splitProductIDs()) {
553  << "Cannot change friendly class name algorithm without more development work\n"
554  << "to update BranchIDLists and ThinnedAssociationsHelper. Contact the framework group.\n";
555  }
556  BranchDescription newBD(prod);
557  newBD.updateFriendlyClassName();
558  newReg->copyProduct(newBD);
559  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), prod.branchName()));
560  }
561  }
562 
564  *newReg, productSelectorRules, dropDescendants, inputType, storedProcessBlockHelper, processBlockHelper);
565 
566  if (inputType == InputType::SecondaryFile) {
567  thinnedAssociationsHelper->updateFromSecondaryInput(*fileThinnedAssociationsHelper_,
568  *associationsFromSecondary);
569  } else if (inputType == InputType::Primary) {
570  processBlockHelper->initializeFromPrimaryInput(storedProcessBlockHelper);
571  thinnedAssociationsHelper->updateFromPrimaryInput(*fileThinnedAssociationsHelper_);
572  }
573 
574  if (inputType == InputType::Primary) {
575  for (auto& product : newReg->productListUpdator()) {
576  setIsMergeable(product.second);
577  }
578  }
579  //inform system we want to use DelayedReader
580  for (auto& product : newReg->productListUpdator()) {
581  product.second.setOnDemand(true);
582  }
583 
584  for (auto& processBlockTree : processBlockTrees_) {
585  treePointers_.push_back(processBlockTree.get());
586  }
587 
588  // freeze the product registry
589  newReg->setFrozen(inputType != InputType::Primary);
590  productRegistry_.reset(newReg.release());
591  }
592 
593  // Set up information from the product registry.
594  ProductRegistry::ProductList const& prodList = productRegistry()->productList();
595 
596  {
597  std::vector<size_t> nBranches(treePointers_.size(), 0);
598  for (auto const& product : prodList) {
599  if (product.second.branchType() == InProcess) {
600  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
601  auto it = std::find(processes.begin(), processes.end(), product.second.processName());
602  if (it != processes.end()) {
603  auto index = std::distance(processes.begin(), it);
605  }
606  } else {
607  ++nBranches[product.second.branchType()];
608  }
609  }
610 
611  int i = 0;
612  for (auto& t : treePointers_) {
613  t->numberOfBranchesToAdd(nBranches[i]);
614  ++i;
615  }
616  }
617  for (auto const& product : prodList) {
618  BranchDescription const& prod = product.second;
619  if (prod.branchType() == InProcess) {
620  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
621  auto it = std::find(processes.begin(), processes.end(), prod.processName());
622  if (it != processes.end()) {
623  auto index = std::distance(processes.begin(), it);
625  newBranchToOldBranch(prod.branchName()));
626  }
627  } else {
628  treePointers_[prod.branchType()]->addBranch(prod, newBranchToOldBranch(prod.branchName()));
629  }
630  }
631 
632  // Determine if this file is fast clonable.
633  setIfFastClonable(remainingEvents, remainingLumis);
634 
635  // We are done with our initial reading of EventAuxiliary.
637 
638  // Tell the event tree to begin training at the next read.
640 
641  // Train the run and lumi trees.
642  runTree_.trainCache("*");
643  lumiTree_.trainCache("*");
644  for (auto& processBlockTree : processBlockTrees_) {
645  processBlockTree->trainCache("*");
646  }
647  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
IndexIntoFileItr begin(SortOrder sortOrder) const
bool noRunLumiSort_
Definition: RootFile.h:377
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & metaDataTreeName()
Definition: BranchType.cc:159
unsigned int const defaultNonEventLearningEntries
Definition: RootTree.h:41
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:192
std::string const & mergeableRunProductMetadataBranchName()
Definition: BranchType.cc:201
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
std::string const & processBlockHelperBranchName()
Definition: BranchType.cc:204
std::shared_ptr< BranchIDLists const > branchIDLists_
Definition: RootFile.h:393
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
TTree const * tree() const
Definition: RootTree.h:169
static std::string const source("source")
bool enforceGUIDInFileName_
Definition: RootFile.h:379
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
int whyNotFastClonable_
Definition: RootFile.h:380
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:363
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:398
std::string const & moduleDescriptionMapBranchName()
Definition: BranchType.cc:171
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:401
constexpr unsigned int numberOfRunLumiEventProductTrees
Definition: BranchType.h:15
std::map< BranchKey, BranchDescription > ProductList
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:366
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:822
std::shared_ptr< ProductRegistry const > productRegistry() const
Definition: RootFile.h:238
RootTree lumiTree_
Definition: RootFile.h:385
InputType inputType_
Definition: RootFile.h:414
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
std::string const & processHistoryBranchName()
Definition: BranchType.cc:177
EventAuxiliary eventAuxCache_
Definition: RootFile.h:383
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:165
void initializeDuplicateChecker(std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile)
Definition: RootFile.cc:1890
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:399
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
Code categoryCode() const
Definition: EDMException.h:102
assert(be >=bs)
void trainCache(char const *branchNames)
Definition: RootTree.cc:490
std::string const & parameterSetMapBranchName()
Definition: BranchType.cc:168
edm::propagate_const< ProcessBlockHelper * > processBlockHelper_
Definition: RootFile.h:395
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:189
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:162
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:413
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:364
static TypeWithDict byName(std::string const &name)
Definition: TypeWithDict.cc:74
std::string const & branchIDListBranchName()
Definition: BranchType.cc:183
std::string message() const
Definition: Exception.cc:149
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:410
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:374
std::string const & processHistoryMapBranchName()
Definition: BranchType.cc:174
FileID fid_
Definition: RootFile.h:365
std::string const logicalFile_
Definition: RootFile.h:359
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
Definition: RootFile.h:372
bool noEventSort_
Definition: RootFile.h:378
void setPresenceInProductRegistry(ProductRegistry &, StoredProcessBlockHelper const &)
Definition: RootFile.cc:1903
std::string friendlyName(std::string const &iFullName)
bool hasThinnedAssociations() const
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:391
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:216
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:408
edm::propagate_const< TBranch * > eventToProcessBlockIndexesBranch_
Definition: RootFile.h:404
bool skipAnyEvents_
Definition: RootFile.h:376
RootTree eventTree_
Definition: RootFile.h:384
std::map< ParameterSetID, ParameterSetID > ParameterSetIdConverter
std::vector< edm::propagate_const< RootTree * > > treePointers_
Definition: RootFile.h:389
std::string const & eventToProcessBlockIndexesBranchName()
Definition: BranchType.cc:214
std::string const & idToParameterSetBlobsBranchName()
Definition: BranchType.cc:218
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:405
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
RootTree runTree_
Definition: RootFile.h:386
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:409
std::string const & file() const
Definition: RootFile.h:237
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:280
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:381
static constexpr EntryNumber_t invalidEntry
ProcessConfiguration const & processConfiguration_
Definition: RootFile.h:360
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:392
void setIfFastClonable(int remainingEvents, int remainingLumis)
Definition: RootFile.cc:732
std::string const & processConfigurationBranchName()
Definition: BranchType.cc:180
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:406
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
void dropOnInputAndReorder(ProductRegistry &, ProductSelectorRules const &, bool dropDescendants, InputType, StoredProcessBlockHelper &, ProcessBlockHelper const *)
Definition: RootFile.cc:1948
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:369
void doneFileInitialization()
Clears the temporary vector of event numbers to reduce memory usage.
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:207
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
bool branchListIndexesUnchanged_
Definition: RootFile.h:382
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:402
unsigned int const defaultNonEventCacheSize
Definition: RootTree.h:39
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:368
void makeProcessBlockRootTrees(std::shared_ptr< InputFile > filePtr, int treeMaxVirtualSize, bool enablePrefetching, InputType inputType, StoredProcessBlockHelper const &storedProcessBlockHelper)
Definition: RootFile.cc:2154
std::unique_ptr< MakeProvenanceReader > makeProvenanceReaderMaker(InputType inputType)
Definition: RootFile.cc:2178
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:411
void resetTraining()
Definition: RootTree.h:182
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:394
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:198
void validateFile(InputType inputType, bool usingGoToEvent)
Definition: RootFile.cc:1232
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:116
std::unique_ptr< TTreeCache > trainCache(TTree *tree, InputFile &file, unsigned int cacheSize, char const *branchNames)
Definition: RootTree.cc:547
unsigned int const defaultLearningEntries
Definition: RootTree.h:40
edm::propagate_const< std::unique_ptr< StoredProcessBlockHelper > > storedProcessBlockHelper_
Definition: RootFile.h:396
void setIsMergeable(BranchDescription &)
std::string const file_
Definition: RootFile.h:358
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:373
static Registry * instance()
Definition: Registry.cc:12
void readEventHistoryTree()
Definition: RootFile.cc:1879
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:186

◆ RootFile() [2/4]

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 108 of file RootFile.h.

130  : RootFile(fileName,
131  processConfiguration,
132  logicalFileName,
133  filePtr,
134  nullptr,
135  false,
136  -1,
137  -1,
138  nStreams,
139  0U,
140  treeMaxVirtualSize,
142  runHelper,
143  false,
144  false,
145  productSelectorRules,
146  inputType,
148  nullptr,
149  thinnedAssociationsHelper,
150  associationsFromSecondary,
151  nullptr,
152  dropDescendantsOfDroppedProducts,
153  processHistoryRegistry,
154  indexesIntoFiles,
155  currentIndexIntoFile,
156  orderedProcessHistoryIDs,
157  bypassVersionCheck,
158  labelRawDataLikeMC,
159  false,
160  enablePrefetching,
161  enforceGUIDInFileName) {}
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:280
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 noRunLumiSort, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, ProcessBlockHelper *, 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:145

◆ RootFile() [3/4]

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 164 of file RootFile.h.

181  : RootFile(fileName,
182  processConfiguration,
183  logicalFileName,
184  filePtr,
185  nullptr,
186  false,
187  -1,
188  -1,
189  nStreams,
190  treeCacheSize,
191  treeMaxVirtualSize,
193  runHelper,
194  false,
195  false,
196  productSelectorRules,
197  inputType,
198  nullptr,
199  nullptr,
200  nullptr,
201  nullptr,
202  nullptr,
203  false,
204  processHistoryRegistry,
205  indexesIntoFiles,
206  currentIndexIntoFile,
207  orderedProcessHistoryIDs,
208  bypassVersionCheck,
209  false,
210  false,
211  enablePrefetching,
212  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 noRunLumiSort, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, ProcessBlockHelper *, 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:145

◆ ~RootFile()

edm::RootFile::~RootFile ( )

Definition at line 649 of file RootFile.cc.

649 {}

◆ RootFile() [4/4]

edm::RootFile::RootFile ( RootFile const &  )
delete

Member Function Documentation

◆ branchChildren() [1/2]

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

Definition at line 348 of file RootFile.h.

References branchChildren_, and edm::get_underlying_safe().

Referenced by createFileBlock().

constexpr 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:406

◆ branchChildren() [2/2]

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

Definition at line 349 of file RootFile.h.

References branchChildren_, and edm::get_underlying_safe().

constexpr 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:406

◆ branchIDListHelper() [1/2]

std::shared_ptr<BranchIDListHelper const> edm::RootFile::branchIDListHelper ( ) const
inline

Definition at line 280 of file RootFile.h.

References branchIDListHelper_, and edm::get_underlying_safe().

280  {
282  }
constexpr 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:394

◆ branchIDListHelper() [2/2]

std::shared_ptr<BranchIDListHelper>& edm::RootFile::branchIDListHelper ( )
inline

Definition at line 283 of file RootFile.h.

References branchIDListHelper_, and edm::get_underlying_safe().

constexpr 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:394

◆ branchListIndexesUnchanged()

bool edm::RootFile::branchListIndexesUnchanged ( ) const
inline

Definition at line 248 of file RootFile.h.

References branchListIndexesUnchanged_.

Referenced by createFileBlock().

248 { return branchListIndexesUnchanged_; }
bool branchListIndexesUnchanged_
Definition: RootFile.h:382

◆ close()

void edm::RootFile::close ( void  )

Definition at line 1294 of file RootFile.cc.

References eventHistoryTree_, filePtr_, and treePointers_.

Referenced by esMonitoring.AsyncLineReaderMixin::handle_close(), and esMonitoring.FDJsonServer::handle_close().

1294  {
1295  // Just to play it safe, zero all pointers to objects in the InputFile to be closed.
1296  eventHistoryTree_ = nullptr;
1297  for (auto& treePointer : treePointers_) {
1298  treePointer->close();
1299  treePointer = nullptr;
1300  }
1301  filePtr_->Close();
1302  filePtr_ = nullptr; // propagate_const<T> has no reset() function
1303  }
std::vector< edm::propagate_const< RootTree * > > treePointers_
Definition: RootFile.h:389
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:402

◆ containsItem()

bool edm::RootFile::containsItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 891 of file RootFile.cc.

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

891  {
893  }
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
Definition: event.py:1

◆ createFileBlock()

std::shared_ptr< FileBlock > edm::RootFile::createFileBlock ( )

Definition at line 777 of file RootFile.cc.

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

777  {
778  std::vector<TTree*> processBlockTrees;
779  std::vector<std::string> processesWithProcessBlockTrees;
780  processBlockTrees.reserve(processBlockTrees_.size());
781  processesWithProcessBlockTrees.reserve(processBlockTrees_.size());
782  for (auto& processBlockTree : processBlockTrees_) {
783  processBlockTrees.push_back(processBlockTree->tree());
784  processesWithProcessBlockTrees.push_back(processBlockTree->processName());
785  }
786  return std::make_shared<FileBlock>(fileFormatVersion(),
787  eventTree_.tree(),
789  lumiTree_.tree(),
791  runTree_.tree(),
792  runTree_.metaTree(),
793  std::move(processBlockTrees),
794  std::move(processesWithProcessBlockTrees),
797  file_,
799  modifiedIDs(),
800  branchChildren());
801  }
TTree const * tree() const
Definition: RootTree.h:169
TTree const * metaTree() const
Definition: RootTree.h:171
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:247
RootTree lumiTree_
Definition: RootFile.h:385
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:348
RootTree eventTree_
Definition: RootFile.h:384
RootTree runTree_
Definition: RootFile.h:386
int whyNotFastClonable() const
Definition: RootFile.h:246
bool modifiedIDs() const
Definition: RootFile.h:249
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
bool branchListIndexesUnchanged() const
Definition: RootFile.h:248
std::string const file_
Definition: RootFile.h:358
def move(src, dest)
Definition: eostools.py:511

◆ dropOnInputAndReorder()

void edm::RootFile::dropOnInputAndReorder ( ProductRegistry reg,
ProductSelectorRules const &  rules,
bool  dropDescendants,
InputType  inputType,
StoredProcessBlockHelper storedProcessBlockHelper,
ProcessBlockHelper const *  processBlockHelper 
)
private

Definition at line 1948 of file RootFile.cc.

References edm::ProductRegistry::allBranchDescriptions(), cms::cuda::assert(), HLT_2024v14_cff::distance, isotrackNtupler::drop, dropProcessesAndReorder(), edProductClass_, file_, fileThinnedAssociationsHelper_, spr::find(), edm::getWrapperBasePtr(), hasNewlyDroppedBranch_, edm::InEvent, edm::ProductSelector::initialize(), edm::InProcess, ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, markBranchToBeDropped(), newBranchToOldBranch(), HLT_IsoTrack_cff::offset, AlCaHLTBitMon_ParallelJobs::p, edm::Primary, processBlockTrees_, dqmiodatasetharvest::processes, edm::StoredProcessBlockHelper::processesWithProcessBlockProducts(), copyEcalPFRecHitThresholds_cfg::prod, edm::ProductRegistry::productListUpdator(), cmsCodeRulesChecker::rules, edm::SecondaryFile, edm::SecondarySource, edm::ProductSelector::selected(), groupFilesInBlocks::temp, and treePointers_.

Referenced by RootFile().

1953  {
1954  ProductRegistry::ProductList& prodList = reg.productListUpdator();
1955 
1956  // First fill in a map we will need to navigate to descendants
1957  // in the case of EDAliases.
1958  std::map<BranchID, BranchID> droppedToKeptAlias;
1959  for (auto const& product : prodList) {
1960  BranchDescription const& prod = product.second;
1961  if (prod.branchID() != prod.originalBranchID() && prod.present()) {
1962  droppedToKeptAlias[prod.originalBranchID()] = prod.branchID();
1963  }
1964  }
1965 
1966  // This object will select products based on the branchName and the
1967  // keep and drop statements which are in the source configuration.
1968  ProductSelector productSelector;
1969  productSelector.initialize(rules, reg.allBranchDescriptions());
1970 
1971  // In this pass, fill in a set of branches to be dropped.
1972  // Don't drop anything yet.
1973  std::set<BranchID> branchesToDrop;
1974  std::vector<BranchDescription const*> associationDescriptions;
1975  for (auto const& product : prodList) {
1976  BranchDescription const& prod = product.second;
1977  if (inputType != InputType::Primary && prod.branchType() == InProcess) {
1978  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1979  } else if (prod.unwrappedType() == typeid(ThinnedAssociation) && prod.present()) {
1980  // Special handling for ThinnedAssociations
1981  if (inputType != InputType::SecondarySource) {
1982  associationDescriptions.push_back(&prod);
1983  } else {
1984  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1985  }
1986  } else if (!productSelector.selected(prod)) {
1987  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1988  }
1989  }
1990 
1991  if (inputType != InputType::SecondarySource) {
1992  // Decide whether to keep the thinned associations and corresponding
1993  // entries in the helper. For secondary source they are all dropped,
1994  // but in other cases we look for thinned collections the associations
1995  // redirect a Ref or Ptr to when dereferencing them.
1996 
1997  // Need a list of kept products in order to determine which thinned associations
1998  // are kept.
1999  std::set<BranchID> keptProductsInEvent;
2000  for (auto const& product : prodList) {
2001  BranchDescription const& prod = product.second;
2002  if (branchesToDrop.find(prod.branchID()) == branchesToDrop.end() && prod.present() &&
2003  prod.branchType() == InEvent) {
2004  keptProductsInEvent.insert(prod.branchID());
2005  }
2006  }
2007 
2008  // Decide which ThinnedAssociations to keep and store the decision in keepAssociation
2009  std::map<BranchID, bool> keepAssociation;
2010  fileThinnedAssociationsHelper_->selectAssociationProducts(
2011  associationDescriptions, keptProductsInEvent, keepAssociation);
2012 
2013  for (auto association : associationDescriptions) {
2014  if (!keepAssociation[association->branchID()]) {
2015  markBranchToBeDropped(dropDescendants, *association, branchesToDrop, droppedToKeptAlias);
2016  }
2017  }
2018 
2019  // Also delete the dropped associations from the ThinnedAssociationsHelper
2020  auto temp = std::make_unique<ThinnedAssociationsHelper>();
2021  for (auto const& associationBranches : fileThinnedAssociationsHelper_->data()) {
2022  auto iter = keepAssociation.find(associationBranches.association());
2023  if (iter != keepAssociation.end() && iter->second) {
2024  temp->addAssociation(associationBranches);
2025  }
2026  }
2027  // propagate_const<T> has no reset() function
2028  fileThinnedAssociationsHelper_ = std::unique_ptr<ThinnedAssociationsHelper>(temp.release());
2029  }
2030 
2031  // On this pass, actually drop the branches.
2032  std::set<std::string> processesWithKeptProcessBlockProducts;
2033  std::set<BranchID>::const_iterator branchesToDropEnd = branchesToDrop.end();
2034  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
2035  BranchDescription const& prod = it->second;
2036  bool drop = branchesToDrop.find(prod.branchID()) != branchesToDropEnd;
2037  if (drop) {
2038  if (!prod.dropped()) {
2039  if (productSelector.selected(prod) && prod.unwrappedType() != typeid(ThinnedAssociation) &&
2040  prod.branchType() != InProcess) {
2041  LogWarning("RootFile") << "Branch '" << prod.branchName() << "' is being dropped from the input\n"
2042  << "of file '" << file_ << "' because it is dependent on a branch\n"
2043  << "that was explicitly dropped.\n";
2044  }
2045  if (prod.branchType() == InProcess) {
2046  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
2047  auto it = std::find(processes.begin(), processes.end(), prod.processName());
2048  assert(it != processes.end());
2049  auto index = std::distance(processes.begin(), it);
2050  processBlockTrees_[index]->dropBranch(newBranchToOldBranch(prod.branchName()));
2051  } else {
2052  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
2053  }
2054  hasNewlyDroppedBranch_[prod.branchType()] = true;
2055  }
2056  ProductRegistry::ProductList::iterator icopy = it;
2057  ++it;
2058  prodList.erase(icopy);
2059  } else {
2060  if (prod.branchType() == InProcess && prod.present()) {
2061  processesWithKeptProcessBlockProducts.insert(prod.processName());
2062  }
2063  ++it;
2064  }
2065  }
2066 
2067  dropProcessesAndReorder(storedProcessBlockHelper, processesWithKeptProcessBlockProducts, processBlockHelper);
2068 
2069  // Drop on input mergeable run and lumi products, this needs to be invoked for secondary file input
2070  if (inputType == InputType::SecondaryFile) {
2071  TString tString;
2072  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
2073  BranchDescription const& prod = it->second;
2074  if (prod.present() and prod.branchType() != InEvent and prod.branchType() != InProcess) {
2075  TClass* cp = prod.wrappedType().getClass();
2076  void* p = cp->New();
2077  int offset = cp->GetBaseClassOffset(edProductClass_);
2078  std::unique_ptr<WrapperBase> edp = getWrapperBasePtr(p, offset);
2079  if (edp->isMergeable()) {
2080  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
2081  ProductRegistry::ProductList::iterator icopy = it;
2082  ++it;
2083  prodList.erase(icopy);
2084  } else {
2085  ++it;
2086  }
2087  } else
2088  ++it;
2089  }
2090  }
2091  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
std::map< BranchKey, BranchDescription > ProductList
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:822
void dropProcessesAndReorder(StoredProcessBlockHelper &, std::set< std::string > const &processesWithKeptProcessBlockProducts, ProcessBlockHelper const *)
Definition: RootFile.cc:2093
void markBranchToBeDropped(bool dropDescendants, BranchDescription const &branch, std::set< BranchID > &branchesToDrop, std::map< BranchID, BranchID > const &droppedToKeptAlias) const
Definition: RootFile.cc:1937
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
assert(be >=bs)
std::tuple< layerClusterToCaloParticle, caloParticleToLayerCluster > association
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:413
std::vector< edm::propagate_const< RootTree * > > treePointers_
Definition: RootFile.h:389
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:381
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
std::unique_ptr< WrapperBase > getWrapperBasePtr(void *p, int offset)
Log< level::Warning, false > LogWarning
std::string const file_
Definition: RootFile.h:358

◆ dropProcessesAndReorder()

void edm::RootFile::dropProcessesAndReorder ( StoredProcessBlockHelper storedProcessBlockHelper,
std::set< std::string > const &  processesWithKeptProcessBlockProducts,
ProcessBlockHelper const *  processBlockHelper 
)
private

Definition at line 2093 of file RootFile.cc.

References edm::ProcessBlockHelper::dropProcessesAndReorderStored(), edm::ProcessBlockHelper::firstFileDropProcessesAndReorderStored(), edm::ProcessBlockHelper::initializedFromInput(), dqmiolumiharvest::j, eostools::move(), processBlockTrees_, edm::ProcessBlockHelperBase::processesWithProcessBlockProducts(), and edm::StoredProcessBlockHelper::processesWithProcessBlockProducts().

Referenced by dropOnInputAndReorder().

2095  {
2096  // Modify storedProcessBlockHelper and processBlockTrees_
2097  // This should account for dropOnInput and also make the
2098  // order of process blocks in input files after the first
2099  // be the same as the first. Processes with no ProcessBlock
2100  // products should be removed. After this executes,
2101  // the items in storedProcessBlockHelper
2102  // and processBlockTrees should be in exact one to one
2103  // correspondence and in the same order. For input files
2104  // after the first, these items should be either the same
2105  // as or a subset of the items in processBlockHelper and in
2106  // the same order.
2107 
2108  if (processBlockTrees_.empty()) {
2109  return;
2110  }
2111 
2112  std::vector<unsigned int> nEntries;
2113  nEntries.reserve(processBlockTrees_.size());
2114  for (auto const& processBlockTree : processBlockTrees_) {
2115  nEntries.push_back(processBlockTree->entries());
2116  }
2117 
2118  bool firstInputFile = !processBlockHelper->initializedFromInput();
2119  bool isModified = false;
2120  std::vector<unsigned int> finalIndexToStoredIndex;
2121 
2122  if (firstInputFile) {
2123  isModified = processBlockHelper->firstFileDropProcessesAndReorderStored(
2124  storedProcessBlockHelper, processesWithKeptProcessBlockProducts, nEntries, finalIndexToStoredIndex);
2125  } else {
2126  isModified =
2127  processBlockHelper->dropProcessesAndReorderStored(storedProcessBlockHelper,
2128  processesWithKeptProcessBlockProducts,
2129  nEntries,
2130  finalIndexToStoredIndex,
2131  processBlockHelper->processesWithProcessBlockProducts());
2132  }
2133 
2134  // At this point, any modifications to storedProcessBlockHelper are done.
2135  // Make consistent changes to processBlockTrees_ and this will cause
2136  // unneeded RootTrees to be deleted.
2137  if (isModified) {
2138  std::vector<edm::propagate_const<std::unique_ptr<RootTree>>> newProcessBlockTrees;
2139  unsigned int nFinalProducts = storedProcessBlockHelper.processesWithProcessBlockProducts().size();
2140  for (unsigned int j = 0; j < nFinalProducts; ++j) {
2141  unsigned int iStored = finalIndexToStoredIndex[j];
2142  newProcessBlockTrees.push_back(std::move(processBlockTrees_[iStored]));
2143  }
2144  processBlockTrees_.swap(newProcessBlockTrees);
2145  }
2146  }
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
def move(src, dest)
Definition: eostools.py:511

◆ endOfProcessBlocksReached()

bool edm::RootFile::endOfProcessBlocksReached ( ) const

Definition at line 1692 of file RootFile.cc.

References currentProcessBlockTree_, and processBlockTrees_.

Referenced by nextProcessBlock_().

1692 { return currentProcessBlockTree_ >= processBlockTrees_.size(); }
unsigned int currentProcessBlockTree_
Definition: RootFile.h:388
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387

◆ eventProductProvenanceRetriever() [1/2]

std::shared_ptr<ProductProvenanceRetriever const> edm::RootFile::eventProductProvenanceRetriever ( size_t  index) const
inlineprivate

Definition at line 351 of file RootFile.h.

References eventProductProvenanceRetrievers_, and edm::get_underlying_safe().

Referenced by makeProductProvenanceRetriever().

351  {
353  }
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:410

◆ eventProductProvenanceRetriever() [2/2]

std::shared_ptr<ProductProvenanceRetriever>& edm::RootFile::eventProductProvenanceRetriever ( size_t  index)
inlineprivate

Definition at line 354 of file RootFile.h.

References eventProductProvenanceRetrievers_, and edm::get_underlying_safe().

354  {
356  }
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:410

◆ eventTree()

RootTree const& edm::RootFile::eventTree ( ) const
inline

Definition at line 242 of file RootFile.h.

References eventTree_.

242 { return eventTree_; }
RootTree eventTree_
Definition: RootFile.h:384

◆ file()

std::string const& edm::RootFile::file ( ) const
inline

Definition at line 237 of file RootFile.h.

References file_.

Referenced by RootFile().

237 { return file_; }
std::string const file_
Definition: RootFile.h:358

◆ fileFormatVersion()

FileFormatVersion edm::RootFile::fileFormatVersion ( ) const
inline

◆ fillEventAuxiliary()

EventAuxiliary edm::RootFile::fillEventAuxiliary ( IndexIntoFile::EntryNumber_t  entry)
private

◆ fillEventHistory()

bool edm::RootFile::fillEventHistory ( EventAuxiliary evtAux,
EventSelectionIDVector eventSelectionIDs,
BranchListIndexes branchListIndexes,
bool  assertOnFailure = true 
)
private

Definition at line 1349 of file RootFile.cc.

References cms::cuda::assert(), branchIDListHelper_, edm::poolNames::branchListIndexesBranchName(), daqProvenanceHelper_, edm::RootTree::entryNumber(), edm::EventID::event(), edm::errors::EventCorruption, edm::poolNames::eventHistoryBranchName(), edm::FileFormatVersion::eventHistoryTree(), eventHistoryTree_, eventProcessHistoryIDs_, eventProcessHistoryIter_, edm::poolNames::eventSelectionsBranchName(), eventTree_, Exception, fileFormatVersion(), edm::RootTree::fillBranchEntry(), edm::roottree::getEntry(), history_, EcalPhiSymFlatTableProducers_cfi::id, edm::EventAuxiliary::id(), edm::lower_bound_all(), edm::FileFormatVersion::noMetaDataTrees(), edm::EventAuxiliary::processHistoryID(), provenanceAdaptor_, edm::EventID::run(), edm::EventAuxiliary::setProcessHistoryID(), edm::FileFormatVersion::splitProductIDs(), filterCSVwithJSON::target, and edm::RootTree::tree().

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

1352  {
1353  // We could consider doing delayed reading, but because we have to
1354  // store this History object in a different tree than the event
1355  // data tree, this is too hard to do in this first version.
1356  if (fileFormatVersion().eventHistoryBranch()) {
1357  // Lumi block number was not in EventID for the relevant releases.
1358  EventID id(evtAux.id().run(), 0, evtAux.id().event());
1359  if (eventProcessHistoryIter_->eventID() != id) {
1360  EventProcessHistoryID target(id, ProcessHistoryID());
1362  assert(eventProcessHistoryIter_->eventID() == id);
1363  }
1364  evtAux.setProcessHistoryID(eventProcessHistoryIter_->processHistoryID());
1366  } else if (fileFormatVersion().eventHistoryTree()) {
1367  // for backward compatibility.
1368  History* pHistory = history_.get();
1369  TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(poolNames::eventHistoryBranchName().c_str());
1370  if (!eventHistoryBranch) {
1371  throw Exception(errors::EventCorruption) << "Failed to find history branch in event history tree.\n";
1372  }
1373  eventHistoryBranch->SetAddress(&pHistory);
1375  evtAux.setProcessHistoryID(history_->processHistoryID());
1376  eventSelectionIDs.swap(history_->eventSelectionIDs());
1377  branchListIndexes.swap(history_->branchListIndexes());
1378  } else if (fileFormatVersion().noMetaDataTrees()) {
1379  // Current format
1380  EventSelectionIDVector* pESV = &eventSelectionIDs;
1381  TBranch* eventSelectionIDBranch = eventTree_.tree()->GetBranch(poolNames::eventSelectionsBranchName().c_str());
1382  assert(eventSelectionIDBranch != nullptr);
1383  eventTree_.fillBranchEntry(eventSelectionIDBranch, pESV);
1384  BranchListIndexes* pBLI = &branchListIndexes;
1385  TBranch* branchListIndexesBranch = eventTree_.tree()->GetBranch(poolNames::branchListIndexesBranchName().c_str());
1386  assert(branchListIndexesBranch != nullptr);
1387  eventTree_.fillBranchEntry(branchListIndexesBranch, pBLI);
1388  }
1389  if (provenanceAdaptor_) {
1390  evtAux.setProcessHistoryID(provenanceAdaptor_->convertID(evtAux.processHistoryID()));
1391  for (auto& esID : eventSelectionIDs) {
1392  esID = provenanceAdaptor_->convertID(esID);
1393  }
1394  }
1395  if (daqProvenanceHelper_) {
1396  evtAux.setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(evtAux.processHistoryID()));
1397  }
1399  // old format. branchListIndexes_ must be filled in from the ProvenanceAdaptor.
1400  provenanceAdaptor_->branchListIndexes(branchListIndexes);
1401  }
1402  if (branchIDListHelper_) {
1403  return branchIDListHelper_->fixBranchListIndexes(branchListIndexes, assertOnFailure);
1404  }
1405  return true;
1406  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
TTree const * tree() const
Definition: RootTree.h:169
ForwardSequence::const_iterator lower_bound_all(ForwardSequence const &s, Datum const &d)
wrappers for std::lower_bound
Definition: Algorithms.h:69
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
assert(be >=bs)
std::vector< EventSelectionID > EventSelectionIDVector
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:374
std::vector< BranchListIndex > BranchListIndexes
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:408
RootTree eventTree_
Definition: RootFile.h:384
Hash< ProcessHistoryType > ProcessHistoryID
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:405
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:210
void fillBranchEntry(TBranch *branch, T *&pbuf)
Definition: RootTree.h:147
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:207
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:402
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:212
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:394
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:373

◆ fillEventToProcessBlockIndexes()

void edm::RootFile::fillEventToProcessBlockIndexes ( )
private

Definition at line 1329 of file RootFile.cc.

References eventToProcessBlockIndexes_, eventToProcessBlockIndexesBranch_, eventTree_, edm::RootTree::fillBranchEntry(), edm::get_underlying_safe(), edm::EventToProcessBlockIndexes::index(), processBlockHelper_, and edm::EventToProcessBlockIndexes::setIndex().

Referenced by readCurrentEvent().

1329  {
1330  TBranch* eventToProcessBlockIndexesBranch = get_underlying_safe(eventToProcessBlockIndexesBranch_);
1331  if (eventToProcessBlockIndexesBranch == nullptr) {
1332  if (processBlockHelper_.get() == nullptr) {
1334  } else {
1336  }
1337  } else {
1338  if (processBlockHelper_->cacheIndexVectorsPerFile().back() == 1u) {
1340  } else {
1341  EventToProcessBlockIndexes* pEventToProcessBlockIndexes = &eventToProcessBlockIndexes_;
1342  eventTree_.fillBranchEntry(eventToProcessBlockIndexesBranch, pEventToProcessBlockIndexes);
1343  unsigned int updatedIndex = eventToProcessBlockIndexes_.index() + processBlockHelper_->outerOffset();
1344  eventToProcessBlockIndexes_.setIndex(updatedIndex);
1345  }
1346  }
1347  }
EventToProcessBlockIndexes eventToProcessBlockIndexes_
Definition: RootFile.h:403
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< ProcessBlockHelper * > processBlockHelper_
Definition: RootFile.h:395
edm::propagate_const< TBranch * > eventToProcessBlockIndexesBranch_
Definition: RootFile.h:404
RootTree eventTree_
Definition: RootFile.h:384
void fillBranchEntry(TBranch *branch, T *&pbuf)
Definition: RootTree.h:147

◆ fillIndexIntoFile()

void edm::RootFile::fillIndexIntoFile ( )
private

Definition at line 1007 of file RootFile.cc.

References cms::cuda::assert(), edm::RootTree::entries(), edm::RootTree::entryNumber(), eventTree_, fileFormatVersion(), fillEventHistory(), fillLumiAuxiliary(), fillRunAuxiliary(), fillThisEventAuxiliary(), edm::find_in_all(), indexIntoFile_, edm::IndexIntoFile::invalidEntry, edm::RootTree::isValid(), B2GTnPMonitor_cfi::item, lastEventEntryNumberRead_, edmLumisInFiles::lumis, lumiTree_, eostools::move(), edm::RootTree::next(), processHistoryRegistry_, writedatasetfile::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().

1007  {
1008  // This function is for backward compatibility.
1009  // If reading a current format file, indexIntoFile_ is read from the input
1010  // file and should always be there. Note that the algorithm below will work
1011  // sometimes but often fail with the new format introduced in release 3_8_0.
1012  // If it ever becomes necessary to rebuild IndexIntoFile from the new format,
1013  // probably a separate function should be written to deal with the task.
1014  // This is possible just not implemented yet.
1015  assert(!fileFormatVersion().hasIndexIntoFile());
1016 
1017  typedef std::list<LumiItem> LumiList;
1018  LumiList lumis; // (declare 1)
1019 
1020  typedef std::set<LuminosityBlockID> RunLumiSet;
1021  RunLumiSet runLumiSet; // (declare 2)
1022 
1023  typedef std::list<RunItem> RunList;
1024  RunList runs; // (declare 5)
1025 
1026  typedef std::set<RunNumber_t> RunSet;
1027  RunSet runSet; // (declare 4)
1028 
1029  typedef std::set<RunItem, RunItemSortByRunPhid> RunItemSet;
1030  RunItemSet runItemSet; // (declare 3)
1031 
1032  typedef std::map<RunNumber_t, ProcessHistoryID> PHIDMap;
1033  PHIDMap phidMap;
1034 
1035  RunNumber_t prevRun = 0;
1036  LuminosityBlockNumber_t prevLumi = 0;
1037  ProcessHistoryID prevPhid;
1038  bool iFirst = true;
1039 
1040  indexIntoFile_.unsortedEventNumbers().clear(); // should already be empty, just being careful
1042 
1043  // First, loop through the event tree.
1044  EventSelectionIDVector eventSelectionIDs;
1045  BranchListIndexes branchListIndexes;
1046  while (eventTree_.next()) {
1047  bool newRun = false;
1048  bool newLumi = false;
1049  auto evtAux = fillThisEventAuxiliary();
1050  fillEventHistory(evtAux, eventSelectionIDs, branchListIndexes);
1051 
1052  // Save the event numbers as we loop through the event auxiliary to avoid
1053  // having to read through the event auxiliary again later. These event numbers
1054  // are not actually used in this function, but could be needed elsewhere.
1055  indexIntoFile_.unsortedEventNumbers().push_back(evtAux.event());
1056 
1057  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(evtAux.processHistoryID());
1058 
1059  if (iFirst || prevPhid != reducedPHID || prevRun != evtAux.run()) {
1060  iFirst = false;
1061  newRun = newLumi = true;
1062  } else if (prevLumi != evtAux.luminosityBlock()) {
1063  newLumi = true;
1064  }
1065  prevPhid = reducedPHID;
1066  prevRun = evtAux.run();
1067  prevLumi = evtAux.luminosityBlock();
1068  if (newLumi) {
1069  lumis.emplace_back(
1070  reducedPHID, evtAux.run(), evtAux.luminosityBlock(), eventTree_.entryNumber()); // (insert 1)
1071  runLumiSet.insert(LuminosityBlockID(evtAux.run(), evtAux.luminosityBlock())); // (insert 2)
1072  } else {
1073  LumiItem& currentLumi = lumis.back();
1074  assert(currentLumi.lastEventEntry_ == eventTree_.entryNumber());
1075  ++currentLumi.lastEventEntry_;
1076  }
1077  if (newRun) {
1078  // Insert run in list if it is not already there.
1079  RunItem item(reducedPHID, evtAux.run());
1080  if (runItemSet.insert(item).second) { // (check 3, insert 3)
1081  runs.push_back(std::move(item)); // (insert 5)
1082  runSet.insert(evtAux.run()); // (insert 4)
1083  phidMap.insert(std::make_pair(evtAux.run(), reducedPHID));
1084  }
1085  }
1086  }
1087  // now clean up.
1090 
1091  // Loop over run entries and fill information.
1092 
1093  typedef std::map<RunNumber_t, IndexIntoFile::EntryNumber_t> RunMap;
1094  RunMap runMap; // (declare 11)
1095 
1096  typedef std::vector<RunItem> RunVector;
1097  RunVector emptyRuns; // (declare 12)
1098 
1099  if (runTree_.isValid()) {
1100  while (runTree_.next()) {
1101  // Note: adjacent duplicates will be skipped without an explicit check.
1102 
1103  std::shared_ptr<RunAuxiliary> runAux = fillRunAuxiliary();
1104  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(runAux->processHistoryID());
1105 
1106  if (runSet.insert(runAux->run()).second) { // (check 4, insert 4)
1107  // This run was not associated with any events.
1108  emptyRuns.emplace_back(reducedPHID, runAux->run()); // (insert 12)
1109  }
1110  runMap.insert(std::make_pair(runAux->run(), runTree_.entryNumber())); // (insert 11)
1111  phidMap.insert(std::make_pair(runAux->run(), reducedPHID));
1112  }
1113  // now clean up.
1115  }
1116 
1117  // Insert the ordered empty runs into the run list.
1118  RunItemSortByRun runItemSortByRun;
1119  stable_sort_all(emptyRuns, runItemSortByRun);
1120 
1121  RunList::iterator itRuns = runs.begin(), endRuns = runs.end();
1122  for (auto const& emptyRun : emptyRuns) {
1123  for (; itRuns != endRuns; ++itRuns) {
1124  if (runItemSortByRun(emptyRun, *itRuns)) {
1125  break;
1126  }
1127  }
1128  runs.insert(itRuns, emptyRun);
1129  }
1130 
1131  // Loop over luminosity block entries and fill information.
1132 
1133  typedef std::vector<LumiItem> LumiVector;
1134  LumiVector emptyLumis; // (declare 7)
1135 
1136  typedef std::map<LuminosityBlockID, IndexIntoFile::EntryNumber_t> RunLumiMap;
1137  RunLumiMap runLumiMap; // (declare 6)
1138 
1139  if (lumiTree_.isValid()) {
1140  while (lumiTree_.next()) {
1141  // Note: adjacent duplicates will be skipped without an explicit check.
1142  std::shared_ptr<LuminosityBlockAuxiliary> lumiAux = fillLumiAuxiliary();
1143  LuminosityBlockID lumiID = LuminosityBlockID(lumiAux->run(), lumiAux->luminosityBlock());
1144  if (runLumiSet.insert(lumiID).second) { // (check 2, insert 2)
1145  // This lumi was not associated with any events.
1146  // Use the process history ID from the corresponding run. In cases of practical
1147  // importance, this should be the correct process history ID, but it is possible
1148  // to construct files where this is not the correct process history ID ...
1149  PHIDMap::const_iterator iPhidMap = phidMap.find(lumiAux->run());
1150  assert(iPhidMap != phidMap.end());
1151  emptyLumis.emplace_back(
1152  iPhidMap->second, lumiAux->run(), lumiAux->luminosityBlock(), IndexIntoFile::invalidEntry); // (insert 7)
1153  }
1154  runLumiMap.insert(std::make_pair(lumiID, lumiTree_.entryNumber()));
1155  }
1156  // now clean up.
1158  }
1159 
1160  // Insert the ordered empty lumis into the lumi list.
1161  LumiItemSortByRunLumi lumiItemSortByRunLumi;
1162  stable_sort_all(emptyLumis, lumiItemSortByRunLumi);
1163 
1164  LumiList::iterator itLumis = lumis.begin(), endLumis = lumis.end();
1165  for (auto const& emptyLumi : emptyLumis) {
1166  for (; itLumis != endLumis; ++itLumis) {
1167  if (lumiItemSortByRunLumi(emptyLumi, *itLumis)) {
1168  break;
1169  }
1170  }
1171  lumis.insert(itLumis, emptyLumi);
1172  }
1173 
1174  // Create a map of RunItems that gives the order of first appearance in the list.
1175  // Also fill in the vector of process history IDs
1176  typedef std::map<RunItem, int, RunItemSortByRunPhid> RunCountMap;
1177  RunCountMap runCountMap; // Declare (17)
1178  std::vector<ProcessHistoryID>& phids = indexIntoFile_.setProcessHistoryIDs();
1179  assert(phids.empty());
1180  std::vector<IndexIntoFile::RunOrLumiEntry>& entries = indexIntoFile_.setRunOrLumiEntries();
1181  assert(entries.empty());
1182  int rcount = 0;
1183  for (auto& run : runs) {
1184  RunCountMap::const_iterator countMapItem = runCountMap.find(run);
1185  if (countMapItem == runCountMap.end()) {
1186  countMapItem = runCountMap.insert(std::make_pair(run, rcount)).first; // Insert (17)
1187  assert(countMapItem != runCountMap.end());
1188  ++rcount;
1189  }
1190  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, run.phid_);
1191  if (phidItem == phids.end()) {
1192  phids.push_back(run.phid_);
1193  phidItem = phids.end() - 1;
1194  }
1195  entries.emplace_back(countMapItem->second, // use (17)
1197  runMap[run.run_], // use (11)
1198  phidItem - phids.begin(),
1199  run.run_,
1200  0U,
1203  }
1204 
1205  // Create a map of LumiItems that gives the order of first appearance in the list.
1206  typedef std::map<LumiItem, int, LumiItemSortByRunLumiPhid> LumiCountMap;
1207  LumiCountMap lumiCountMap; // Declare (19)
1208  int lcount = 0;
1209  for (auto& lumi : lumis) {
1210  RunCountMap::const_iterator runCountMapItem = runCountMap.find(RunItem(lumi.phid_, lumi.run_));
1211  assert(runCountMapItem != runCountMap.end());
1212  LumiCountMap::const_iterator countMapItem = lumiCountMap.find(lumi);
1213  if (countMapItem == lumiCountMap.end()) {
1214  countMapItem = lumiCountMap.insert(std::make_pair(lumi, lcount)).first; // Insert (17)
1215  assert(countMapItem != lumiCountMap.end());
1216  ++lcount;
1217  }
1218  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, lumi.phid_);
1219  assert(phidItem != phids.end());
1220  entries.emplace_back(runCountMapItem->second,
1221  countMapItem->second,
1222  runLumiMap[LuminosityBlockID(lumi.run_, lumi.lumi_)],
1223  phidItem - phids.begin(),
1224  lumi.run_,
1225  lumi.lumi_,
1226  lumi.firstEventEntry_,
1227  lumi.lastEventEntry_);
1228  }
1229  stable_sort_all(entries);
1230  }
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1408
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
bool isValid() const
Definition: RootTree.cc:123
bool fillEventHistory(EventAuxiliary &evtAux, EventSelectionIDVector &eventSelectionIDs, BranchListIndexes &branchListIndexes, bool assertOnFailure=true)
Definition: RootFile.cc:1349
void stable_sort_all(RandomAccessSequence &s)
wrappers for std::stable_sort
Definition: Algorithms.h:103
assert(be >=bs)
unsigned int LuminosityBlockNumber_t
std::vector< EventSelectionID > EventSelectionIDVector
U second(std::pair< T, U > const &p)
std::vector< BranchListIndex > BranchListIndexes
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool next()
Definition: RootTree.h:124
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:391
EntryNumber const & entries() const
Definition: RootTree.h:134
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1431
RootTree eventTree_
Definition: RootFile.h:384
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1305
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
RootTree runTree_
Definition: RootFile.h:386
std::vector< RunOrLumiEntry > & setRunOrLumiEntries()
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
std::vector< EventNumber_t > & unsortedEventNumbers()
unsigned int RunNumber_t
def move(src, dest)
Definition: eostools.py:511
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ fillLumiAuxiliary()

std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::fillLumiAuxiliary ( )
private

Definition at line 1408 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_().

1408  {
1409  auto lumiAuxiliary = std::make_shared<LuminosityBlockAuxiliary>();
1410  if (fileFormatVersion().newAuxiliary()) {
1411  LuminosityBlockAuxiliary* pLumiAux = lumiAuxiliary.get();
1412  lumiTree_.fillAux<LuminosityBlockAuxiliary>(pLumiAux);
1413  } else {
1414  LuminosityBlockAux lumiAux;
1415  LuminosityBlockAux* pLumiAux = &lumiAux;
1416  lumiTree_.fillAux<LuminosityBlockAux>(pLumiAux);
1417  conversion(lumiAux, *lumiAuxiliary);
1418  }
1419  if (provenanceAdaptor_) {
1420  lumiAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(lumiAuxiliary->processHistoryID()));
1421  }
1422  if (daqProvenanceHelper_) {
1423  lumiAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(lumiAuxiliary->processHistoryID()));
1424  }
1425  if (lumiAuxiliary->luminosityBlock() == 0 && !fileFormatVersion().runsAndLumis()) {
1426  lumiAuxiliary->id() = LuminosityBlockID(RunNumber_t(1), LuminosityBlockNumber_t(1));
1427  }
1428  return lumiAuxiliary;
1429  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
unsigned int LuminosityBlockNumber_t
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:408
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
unsigned int RunNumber_t
void fillAux(T *&pAux)
Definition: RootTree.h:141

◆ fillProcessBlockHelper_()

void edm::RootFile::fillProcessBlockHelper_ ( )

Definition at line 1671 of file RootFile.cc.

References cms::cuda::assert(), inputType_, edm::Primary, processBlockHelper_, processBlockTrees_, and storedProcessBlockHelper_.

1671  {
1673  std::vector<unsigned int> nEntries;
1674  nEntries.reserve(processBlockTrees_.size());
1675  for (auto const& processBlockTree : processBlockTrees_) {
1676  nEntries.push_back(processBlockTree->entries());
1677  }
1678  processBlockHelper_->fillFromPrimaryInput(*storedProcessBlockHelper_, nEntries);
1680  std::make_unique<StoredProcessBlockHelper>(); // propagate_const<T> has no reset() function
1681  }
InputType inputType_
Definition: RootFile.h:414
assert(be >=bs)
edm::propagate_const< ProcessBlockHelper * > processBlockHelper_
Definition: RootFile.h:395
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
edm::propagate_const< std::unique_ptr< StoredProcessBlockHelper > > storedProcessBlockHelper_
Definition: RootFile.h:396

◆ fillRunAuxiliary()

std::shared_ptr< RunAuxiliary > edm::RootFile::fillRunAuxiliary ( )
private

Definition at line 1431 of file RootFile.cc.

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

Referenced by fillIndexIntoFile(), and readRunAuxiliary_().

1431  {
1432  auto runAuxiliary = std::make_shared<RunAuxiliary>();
1433  if (fileFormatVersion().newAuxiliary()) {
1434  RunAuxiliary* pRunAux = runAuxiliary.get();
1435  runTree_.fillAux<RunAuxiliary>(pRunAux);
1436  } else {
1437  RunAux runAux;
1438  RunAux* pRunAux = &runAux;
1439  runTree_.fillAux<RunAux>(pRunAux);
1440  conversion(runAux, *runAuxiliary);
1441  }
1442  if (provenanceAdaptor_) {
1443  runAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(runAuxiliary->processHistoryID()));
1444  }
1445  if (daqProvenanceHelper_) {
1446  runAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(runAuxiliary->processHistoryID()));
1447  }
1448  return runAuxiliary;
1449  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:408
RootTree runTree_
Definition: RootFile.h:386
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
void fillAux(T *&pAux)
Definition: RootTree.h:141

◆ fillThisEventAuxiliary()

EventAuxiliary const & edm::RootFile::fillThisEventAuxiliary ( )
private

Definition at line 1305 of file RootFile.cc.

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

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

1305  {
1307  // Already read.
1308  return eventAuxCache_;
1309  }
1310  if (fileFormatVersion().newAuxiliary()) {
1311  EventAuxiliary* pEvAux = &eventAuxCache_;
1312  eventTree_.fillAux<EventAuxiliary>(pEvAux);
1313  } else {
1314  // for backward compatibility.
1315  EventAux eventAux;
1316  EventAux* pEvAux = &eventAux;
1317  eventTree_.fillAux<EventAux>(pEvAux);
1318  conversion(eventAux, eventAuxCache_);
1319  }
1321  return eventAuxCache_;
1322  }
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
EventAuxiliary eventAuxCache_
Definition: RootFile.h:383
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:391
RootTree eventTree_
Definition: RootFile.h:384
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
void fillAux(T *&pAux)
Definition: RootTree.h:141

◆ getNextItemType()

IndexIntoFile::EntryType edm::RootFile::getNextItemType ( RunNumber_t run,
LuminosityBlockNumber_t lumi,
EventNumber_t event 
)

Definition at line 895 of file RootFile.cc.

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

897  {
898  // First, account for consecutive skipped entries.
899  while (skipThisEntry()) {
904  } else {
906  }
907  }
908  // OK, we have an entry that is not skipped.
910  if (entryType == IndexIntoFile::kEnd) {
911  return IndexIntoFile::kEnd;
912  }
913  if (entryType == IndexIntoFile::kRun) {
915  runHelper_->checkForNewRun(run, indexIntoFileIter_.peekAheadAtLumi());
916  return IndexIntoFile::kRun;
917  } else if (processingMode_ == InputSource::Runs) {
919  return getNextItemType(run, lumi, event);
920  }
921  if (entryType == IndexIntoFile::kLumi) {
924  return IndexIntoFile::kLumi;
927  return getNextItemType(run, lumi, event);
928  }
929  if (isDuplicateEvent()) {
931  return getNextItemType(run, lumi, event);
932  }
935  auto eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
936  event = eventAux.event();
937  return IndexIntoFile::kEvent;
938  }
EventNumber_t event() const
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:399
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
bool skipThisEntry()
Definition: RootFile.cc:841
IndexIntoFile::EntryType getNextItemType(RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
Definition: RootFile.cc:895
bool isDuplicateEvent()
Definition: RootFile.cc:878
LuminosityBlockNumber_t lumi() const
LuminosityBlockNumber_t peekAheadAtLumi() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
Definition: event.py:1

◆ goToEvent()

bool edm::RootFile::goToEvent ( EventID const &  eventID)

Definition at line 1507 of file RootFile.cc.

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

1507  {
1509 
1510  if (duplicateChecker_) {
1511  duplicateChecker_->disable();
1512  }
1513 
1515  if (noEventSort_)
1517  if (noRunLumiSort_) {
1518  sortOrder = IndexIntoFile::entryOrder;
1519  }
1520 
1521  IndexIntoFile::IndexIntoFileItr iter =
1522  indexIntoFile_.findPosition(sortOrder, eventID.run(), eventID.luminosityBlock(), eventID.event());
1523 
1524  if (iter == indexIntoFile_.end(sortOrder)) {
1525  return false;
1526  }
1527  indexIntoFileIter_ = iter;
1528  return true;
1529  }
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
bool noRunLumiSort_
Definition: RootFile.h:377
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
void fillEventNumbers() const
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
bool noEventSort_
Definition: RootFile.h:378
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const

◆ hasNewlyDroppedBranch()

std::array<bool, NumBranchTypes> const& edm::RootFile::hasNewlyDroppedBranch ( ) const
inline

Definition at line 247 of file RootFile.h.

References hasNewlyDroppedBranch_.

Referenced by createFileBlock().

247 { return hasNewlyDroppedBranch_; }
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:381

◆ indexIntoFileIter()

IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileIter ( ) const

Definition at line 830 of file RootFile.cc.

References indexIntoFileIter_.

830 { return indexIntoFileIter_; }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371

◆ indexIntoFileSharedPtr() [1/2]

std::shared_ptr<IndexIntoFile const> edm::RootFile::indexIntoFileSharedPtr ( ) const
inline

Definition at line 284 of file RootFile.h.

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

284  {
286  }
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:366
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)

◆ indexIntoFileSharedPtr() [2/2]

std::shared_ptr<IndexIntoFile>& edm::RootFile::indexIntoFileSharedPtr ( )
inline

Definition at line 287 of file RootFile.h.

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:366
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)

◆ initAssociationsFromSecondary()

void edm::RootFile::initAssociationsFromSecondary ( std::vector< BranchID > const &  associationsFromSecondary)

Definition at line 836 of file RootFile.cc.

References fileThinnedAssociationsHelper_, and thinnedAssociationsHelper_.

836  {
837  thinnedAssociationsHelper_->initAssociationsFromSecondary(associationsFromSecondary,
839  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:398

◆ initializeDuplicateChecker()

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 1890 of file RootFile.cc.

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

Referenced by RootFile().

1892  {
1893  if (duplicateChecker_ && !duplicateChecker_->checkDisabled()) {
1894  if (eventTree_.next()) {
1895  auto const evtAux = fillThisEventAuxiliary();
1896 
1897  duplicateChecker_->inputFileOpened(evtAux.isRealData(), indexIntoFile_, indexesIntoFiles, currentIndexIntoFile);
1898  }
1900  }
1901  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
bool next()
Definition: RootTree.h:124
RootTree eventTree_
Definition: RootFile.h:384
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1305
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
static constexpr EntryNumber_t invalidEntry
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ initializeFirstProcessBlockEntry()

bool edm::RootFile::initializeFirstProcessBlockEntry ( )

Definition at line 1683 of file RootFile.cc.

References cms::cuda::assert(), currentProcessBlockTree_, edm::IndexIntoFile::invalidEntry, and processBlockTrees_.

Referenced by nextProcessBlock_().

1683  {
1685  processBlockTrees_[currentProcessBlockTree_]->setEntryNumber(0);
1687  return true;
1688  }
1689  return false;
1690  }
assert(be >=bs)
unsigned int currentProcessBlockTree_
Definition: RootFile.h:388
static constexpr EntryNumber_t invalidEntry
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387

◆ isDuplicateEvent()

bool edm::RootFile::isDuplicateEvent ( )
private

Definition at line 878 of file RootFile.cc.

References cms::cuda::assert(), duplicateChecker_, edm::IndexIntoFile::IndexIntoFileItr::entry(), file_, fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileIter_, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::IndexIntoFile::IndexIntoFileItr::processHistoryIDIndex(), and edm::IndexIntoFile::IndexIntoFileItr::run().

Referenced by getNextItemType().

878  {
880  if (duplicateChecker_.get() == nullptr) {
881  return false;
882  }
883  auto const eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
884  return duplicateChecker_->isDuplicateAndCheckActive(indexIntoFileIter_.processHistoryIDIndex(),
887  eventAux.id().event(),
888  file_);
889  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
assert(be >=bs)
LuminosityBlockNumber_t lumi() const
std::string const file_
Definition: RootFile.h:358

◆ lumiTree()

RootTree const& edm::RootFile::lumiTree ( ) const
inline

Definition at line 243 of file RootFile.h.

References lumiTree_.

243 { return lumiTree_; }
RootTree lumiTree_
Definition: RootFile.h:385

◆ makeProcessBlockRootTrees()

void edm::RootFile::makeProcessBlockRootTrees ( std::shared_ptr< InputFile filePtr,
int  treeMaxVirtualSize,
bool  enablePrefetching,
InputType  inputType,
StoredProcessBlockHelper const &  storedProcessBlockHelper 
)
private

Definition at line 2154 of file RootFile.cc.

References edm::roottree::defaultNonEventCacheSize, edm::roottree::defaultNonEventLearningEntries, edm::InProcess, LaserDQM_cfg::process, processBlockTrees_, and edm::StoredProcessBlockHelper::processesWithProcessBlockProducts().

Referenced by RootFile().

2158  {
2159  // When this functions returns there will be exactly a 1-to-1 correspondence between the
2160  // processes listed in storedProcessBlockHelper and the RootTree objects created. processBlockTrees_
2161  // has pointers to the RootTree's and will be filled in the same order. The RootTree constructor
2162  // will throw an exception if one of these TTree's is not in the file and this should be all of
2163  // the ProcessBlock TTree's in the file. (later in the RootFile constructor, dropOnInput might
2164  // remove some and also reordering may occur).
2165  for (auto const& process : storedProcessBlockHelper.processesWithProcessBlockProducts()) {
2166  processBlockTrees_.emplace_back(std::make_unique<RootTree>(filePtr,
2167  InProcess,
2168  process,
2169  1,
2170  treeMaxVirtualSize,
2173  enablePrefetching,
2174  inputType));
2175  }
2176  }
unsigned int const defaultNonEventLearningEntries
Definition: RootTree.h:41
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
unsigned int const defaultNonEventCacheSize
Definition: RootTree.h:39

◆ makeProductProvenanceRetriever()

std::shared_ptr< ProductProvenanceRetriever > edm::RootFile::makeProductProvenanceRetriever ( unsigned int  iStreamIndex)
private

Definition at line 2194 of file RootFile.cc.

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

Referenced by readCurrentEvent().

2194  {
2195  if (eventProductProvenanceRetrievers_.size() <= iStreamID) {
2196  eventProductProvenanceRetrievers_.resize(iStreamID + 1);
2197  }
2198  if (!eventProductProvenanceRetrievers_[iStreamID]) {
2199  // propagate_const<T> has no reset() function
2200  eventProductProvenanceRetrievers_[iStreamID] = std::make_shared<ProductProvenanceRetriever>(
2202  }
2203  eventProductProvenanceRetrievers_[iStreamID]->reset();
2204  return eventProductProvenanceRetriever(iStreamID);
2205  }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever(size_t index) const
Definition: RootFile.h:351
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:410
RootTree eventTree_
Definition: RootFile.h:384
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:409

◆ makeProvenanceReaderMaker()

std::unique_ptr< MakeProvenanceReader > edm::RootFile::makeProvenanceReaderMaker ( InputType  inputType)
private

Definition at line 2178 of file RootFile.cc.

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

Referenced by RootFile().

2178  {
2180  readParentageTree(inputType);
2181  return std::make_unique<MakeReducedProvenanceReader>(parentageIDLookup_);
2182  } else if (fileFormatVersion_.splitProductIDs()) {
2183  readParentageTree(inputType);
2184  return std::make_unique<MakeFullProvenanceReader>();
2185  } else if (fileFormatVersion_.perEventProductIDs()) {
2186  auto entryDescriptionMap = std::make_unique<EntryDescriptionMap>();
2187  readEntryDescriptionTree(*entryDescriptionMap, inputType);
2188  return std::make_unique<MakeOldProvenanceReader>(std::move(entryDescriptionMap));
2189  } else {
2190  return std::make_unique<MakeDummyProvenanceReader>();
2191  }
2192  }
void readEntryDescriptionTree(EntryDescriptionMap &entryDescriptionMap, InputType inputType)
Definition: RootFile.cc:651
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:364
void readParentageTree(InputType inputType)
Definition: RootFile.cc:697
bool storedProductProvenanceUsed() const
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:411
def move(src, dest)
Definition: eostools.py:511

◆ markBranchToBeDropped()

void edm::RootFile::markBranchToBeDropped ( bool  dropDescendants,
BranchDescription const &  branch,
std::set< BranchID > &  branchesToDrop,
std::map< BranchID, BranchID > const &  droppedToKeptAlias 
) const
private

Definition at line 1937 of file RootFile.cc.

References MicroEventContent_cff::branch, and branchChildren_.

Referenced by dropOnInputAndReorder().

1940  {
1941  if (dropDescendants) {
1942  branchChildren_->appendToDescendants(branch, branchesToDrop, droppedToKeptAlias);
1943  } else {
1944  branchesToDrop.insert(branch.branchID());
1945  }
1946  }
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:406

◆ modifiedIDs()

bool edm::RootFile::modifiedIDs ( ) const
inline

Definition at line 249 of file RootFile.h.

References daqProvenanceHelper_.

Referenced by createFileBlock().

249 { return daqProvenanceHelper_.get() != nullptr; }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412

◆ newBranchToOldBranch()

std::string const & edm::RootFile::newBranchToOldBranch ( std::string const &  newBranch) const
private

Definition at line 822 of file RootFile.cc.

References ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, and newBranchToOldBranch_.

Referenced by dropOnInputAndReorder(), RootFile(), and setPresenceInProductRegistry().

822  {
823  std::map<std::string, std::string>::const_iterator it = newBranchToOldBranch_.find(newBranch);
824  if (it != newBranchToOldBranch_.end()) {
825  return it->second;
826  }
827  return newBranch;
828  }
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:401

◆ nextEventEntry()

bool edm::RootFile::nextEventEntry ( )
inline

Definition at line 278 of file RootFile.h.

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

278 { return eventTree_.nextWithCache(); }
RootTree eventTree_
Definition: RootFile.h:384
bool nextWithCache()
Definition: RootTree.cc:211

◆ nextProcessBlock_()

bool edm::RootFile::nextProcessBlock_ ( ProcessBlockPrincipal )

Definition at line 1694 of file RootFile.cc.

References cms::cuda::assert(), currentProcessBlockTree_, endOfProcessBlocksReached(), initializeFirstProcessBlockEntry(), inputType_, edm::Primary, and processBlockTrees_.

1694  {
1696  if (endOfProcessBlocksReached()) {
1697  return false;
1698  }
1700  return true;
1701  }
1702  // With the current design, the RootFile should always be
1703  // set to a valid ProcessBlock entry in one of the TTrees
1704  // if it not at the end.
1706  // Try for next entry in the same TTree
1707  if (processBlockTrees_[currentProcessBlockTree_]->nextWithCache()) {
1708  return true;
1709  }
1710  // Next ProcessBlock TTree
1712  if (endOfProcessBlocksReached()) {
1713  return false;
1714  }
1715  // With current design there should always be at least one entry.
1716  // Initialize for that entry.
1717  processBlockTrees_[currentProcessBlockTree_]->setEntryNumber(0);
1719  return true;
1720  }
InputType inputType_
Definition: RootFile.h:414
bool initializeFirstProcessBlockEntry()
Definition: RootFile.cc:1683
assert(be >=bs)
unsigned int currentProcessBlockTree_
Definition: RootFile.h:388
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
bool endOfProcessBlocksReached() const
Definition: RootFile.cc:1692

◆ operator=()

RootFile& edm::RootFile::operator= ( RootFile const &  )
delete

◆ productRegistry()

std::shared_ptr<ProductRegistry const> edm::RootFile::productRegistry ( ) const
inline

Definition at line 238 of file RootFile.h.

References productRegistry_.

Referenced by RootFile().

238 { return productRegistry_; }
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:392

◆ readCurrentEvent()

std::tuple< bool, bool > edm::RootFile::readCurrentEvent ( EventPrincipal cache,
bool  assertOnFailure = true 
)

Definition at line 1558 of file RootFile.cc.

References cms::cuda::assert(), edm::RootTree::current(), daqProvenanceHelper_, eventToProcessBlockIndexes_, eventTree_, fileFormatVersion(), filePtr_, fillEventHistory(), edm::EventPrincipal::fillEventPrincipal(), fillEventToProcessBlockIndexes(), fillThisEventAuxiliary(), newFWLiteAna::found, isotrackTrainRegressor::history, indexIntoFile_, indexIntoFileIter_, edm::RootTree::insertEntryForIndex(), makeProductProvenanceRetriever(), eostools::move(), edm::IndexIntoFile::processHistoryID(), edm::IndexIntoFile::IndexIntoFileItr::processHistoryIDIndex(), processHistoryRegistry_, edm::RootTree::resetAndGetRootDelayedReader(), runHelper_, edm::EventPrincipal::streamID(), summarizeEdmComparisonLogfiles::succeeded, edm::EDProductGetter::transitionIndex(), edm::FileFormatVersion::useReducedProcessHistoryID(), and edm::StreamID::value().

Referenced by readEvent().

1558  {
1559  bool found = true;
1560  bool succeeded = true;
1561  if (!eventTree_.current()) {
1562  found = false;
1563  return {found, succeeded};
1564  }
1565  auto evtAux = fillThisEventAuxiliary();
1566  if (!fileFormatVersion().lumiInEventID()) {
1567  //ugly, but will disappear when the backward compatibility is done with schema evolution.
1568  const_cast<EventID&>(evtAux.id()).setLuminosityBlockNumber(evtAux.oldLuminosityBlock());
1569  evtAux.resetObsoleteInfo();
1570  }
1572  EventSelectionIDVector eventSelectionIDs;
1573  BranchListIndexes branchListIndexes;
1574  if (!fillEventHistory(evtAux, eventSelectionIDs, branchListIndexes, assertOnFailure)) {
1575  succeeded = false;
1576  }
1577  runHelper_->overrideRunNumber(evtAux.id(), evtAux.isRealData());
1578 
1579  // We're not done ... so prepare the EventPrincipal
1580  eventTree_.insertEntryForIndex(principal.transitionIndex());
1581  auto history = processHistoryRegistry_->getMapped(evtAux.processHistoryID());
1582  principal.fillEventPrincipal(evtAux,
1583  history,
1584  std::move(eventSelectionIDs),
1585  std::move(branchListIndexes),
1587  *(makeProductProvenanceRetriever(principal.streamID().value())),
1589 
1590  // If this next assert shows up in performance profiling or significantly affects memory, then these three lines should be deleted.
1591  // The IndexIntoFile should guarantee that it never fails.
1593  ? *daqProvenanceHelper_->oldProcessHistoryID()
1594  : evtAux.processHistoryID());
1595  ProcessHistoryID const& reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(idToCheck);
1597 
1598  // report event read from file
1599  filePtr_->eventReadFromFile();
1600  return {found, succeeded};
1601  }
EventToProcessBlockIndexes eventToProcessBlockIndexes_
Definition: RootFile.h:403
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
bool fillEventHistory(EventAuxiliary &evtAux, EventSelectionIDVector &eventSelectionIDs, BranchListIndexes &branchListIndexes, bool assertOnFailure=true)
Definition: RootFile.cc:1349
assert(be >=bs)
std::vector< EventSelectionID > EventSelectionIDVector
void fillEventToProcessBlockIndexes()
Definition: RootFile.cc:1329
std::vector< BranchListIndex > BranchListIndexes
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:118
bool useReducedProcessHistoryID() const
RootTree eventTree_
Definition: RootFile.h:384
ProcessHistoryID const & processHistoryID(int i) const
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1305
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
bool current() const
Definition: RootTree.h:126
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
std::shared_ptr< ProductProvenanceRetriever > makeProductProvenanceRetriever(unsigned int iStreamIndex)
Definition: RootFile.cc:2194
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:142
def move(src, dest)
Definition: eostools.py:511

◆ readEntryDescriptionTree()

void edm::RootFile::readEntryDescriptionTree ( EntryDescriptionMap entryDescriptionMap,
InputType  inputType 
)
private

Definition at line 651 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::ParentageRegistry::insertMapped(), edm::ParentageRegistry::instance(), edm::numEntries(), parents, edm::EventEntryDescription::parents(), and edm::SecondarySource.

Referenced by makeProvenanceReaderMaker().

651  {
652  // Called only for old format files.
653  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
654  std::unique_ptr<TTree> entryDescriptionTree(
655  dynamic_cast<TTree*>(filePtr_->Get(poolNames::entryDescriptionTreeName().c_str())));
656  if (nullptr == entryDescriptionTree.get()) {
658  << "Could not find tree " << poolNames::entryDescriptionTreeName() << " in the input file.\n";
659  }
660 
661  EntryDescriptionID idBuffer;
662  EntryDescriptionID* pidBuffer = &idBuffer;
663  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), &pidBuffer);
664 
665  EventEntryDescription entryDescriptionBuffer;
666  EventEntryDescription* pEntryDescriptionBuffer = &entryDescriptionBuffer;
667  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), &pEntryDescriptionBuffer);
668 
669  // Fill in the parentage registry.
670  ParentageRegistry& registry = *ParentageRegistry::instance();
671 
672  for (Long64_t i = 0, numEntries = entryDescriptionTree->GetEntries(); i < numEntries; ++i) {
673  roottree::getEntry(entryDescriptionTree.get(), i);
674  if (idBuffer != entryDescriptionBuffer.id()) {
675  throw Exception(errors::EventCorruption) << "Corruption of EntryDescription tree detected.\n";
676  }
677  entryDescriptionMap.insert(std::make_pair(entryDescriptionBuffer.id(), entryDescriptionBuffer));
678  Parentage parents;
679  parents.setParents(entryDescriptionBuffer.parents());
680  if (daqProvenanceHelper_) {
681  ParentageID const oldID = parents.id();
682  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
683  ParentageID newID = parents.id();
684  if (newID != oldID) {
685  daqProvenanceHelper_->setOldParentageIDToNew(oldID, newID);
686  }
687  }
688  // For thread safety, don't update global registries when a secondary source opens a file.
689  if (inputType != InputType::SecondarySource) {
690  registry.insertMapped(parents);
691  }
692  }
693  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), nullptr);
694  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), nullptr);
695  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
TPRegexp parents
Definition: eve_filter.cc:21
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
Hash< EntryDescriptionType > EntryDescriptionID
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
std::string const & entryDescriptionBranchName()
Definition: BranchType.cc:151
std::string const & entryDescriptionIDBranchName()
Definition: BranchType.cc:149
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
std::string const & entryDescriptionTreeName()
Definition: BranchType.cc:147
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:8

◆ readEvent()

bool edm::RootFile::readEvent ( EventPrincipal cache)

Definition at line 1543 of file RootFile.cc.

References cms::cuda::assert(), edm::EventPrincipal::aux(), newFWLiteAna::found, edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::IndexIntoFileItr::lumi(), readCurrentEvent(), edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, and summarizeEdmComparisonLogfiles::succeeded.

1543  {
1546  // read the event
1547  auto [found, succeeded] = readCurrentEvent(principal, false);
1548  auto const& evtAux = principal.aux();
1549 
1550  runHelper_->checkRunConsistency(evtAux.run(), indexIntoFileIter_.run());
1551  runHelper_->checkLumiConsistency(evtAux.luminosityBlock(), indexIntoFileIter_.lumi());
1552 
1554  return succeeded;
1555  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
assert(be >=bs)
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
LuminosityBlockNumber_t lumi() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
std::tuple< bool, bool > readCurrentEvent(EventPrincipal &cache, bool assertOnFailure=true)
Definition: RootFile.cc:1558

◆ readEventHistoryTree()

void edm::RootFile::readEventHistoryTree ( )
private

Definition at line 1879 of file RootFile.cc.

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

Referenced by RootFile().

1879  {
1880  // Read in the event history tree, if we have one...
1881  if (fileFormatVersion().eventHistoryTree()) {
1882  history_ = std::make_unique<History>(); // propagate_const<T> has no reset() function
1883  eventHistoryTree_ = dynamic_cast<TTree*>(filePtr_->Get(poolNames::eventHistoryTreeName().c_str()));
1884  if (!eventHistoryTree_) {
1885  throw Exception(errors::EventCorruption) << "Failed to find the event history tree.\n";
1886  }
1887  }
1888  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:405
std::string const & eventHistoryTreeName()
Definition: BranchType.cc:224
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:402

◆ readFakeRun_()

void edm::RootFile::readFakeRun_ ( RunPrincipal runPrincipal)

◆ readFakeRunAuxiliary_()

std::shared_ptr<RunAuxiliary> edm::RootFile::readFakeRunAuxiliary_ ( )

◆ readLuminosityBlock_()

bool edm::RootFile::readLuminosityBlock_ ( LuminosityBlockPrincipal lumiPrincipal)

Definition at line 1808 of file RootFile.cc.

References cms::cuda::assert(), edm::LuminosityBlockPrincipal::aux(), edm::IndexIntoFile::IndexIntoFileItr::entry(), edm::LuminosityBlockPrincipal::fillLuminosityBlockPrincipal(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), isotrackTrainRegressor::history, indexIntoFileEnd_, indexIntoFileIter_, edm::RootTree::insertEntryForIndex(), edm::RootTree::isValid(), edm::IndexIntoFile::kLumi, edm::LuminosityBlockPrincipal::kNo, edm::LuminosityBlockPrincipal::kYes, lumiTree_, edm::LuminosityBlockAuxiliary::processHistoryID(), processHistoryRegistry_, edm::Principal::readAllFromSourceAndMergeImmediately(), edm::RootTree::resetAndGetRootDelayedReader(), edm::RootTree::setEntryNumber(), edm::LuminosityBlockPrincipal::setShouldWriteLumi(), edm::IndexIntoFile::IndexIntoFileItr::shouldProcessLumi(), and edm::LuminosityBlockPrincipal::shouldWriteLumi().

1808  {
1809  bool shouldProcessLumi = indexIntoFileIter_.shouldProcessLumi();
1812  // Begin code for backward compatibility before the existence of lumi trees.
1813  if (!lumiTree_.isValid()) {
1815  return shouldProcessLumi;
1816  }
1817  // End code for backward compatibility before the existence of lumi trees.
1818  if (shouldProcessLumi) {
1820  // NOTE: we use 0 for the index since do not do delayed reads for LuminosityBlockPrincipals
1822  auto history = processHistoryRegistry_->getMapped(lumiPrincipal.aux().processHistoryID());
1823  lumiPrincipal.fillLuminosityBlockPrincipal(history, lumiTree_.resetAndGetRootDelayedReader());
1824  // Read in all the products now.
1825  lumiPrincipal.readAllFromSourceAndMergeImmediately();
1826  lumiPrincipal.setShouldWriteLumi(LuminosityBlockPrincipal::kYes);
1827  } else {
1828  auto history = processHistoryRegistry_->getMapped(lumiPrincipal.aux().processHistoryID());
1829  lumiPrincipal.fillLuminosityBlockPrincipal(history, nullptr);
1830  if (lumiPrincipal.shouldWriteLumi() != LuminosityBlockPrincipal::kYes) {
1831  lumiPrincipal.setShouldWriteLumi(LuminosityBlockPrincipal::kNo);
1832  }
1833  }
1835  return shouldProcessLumi;
1836  }
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
bool isValid() const
Definition: RootTree.cc:123
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
assert(be >=bs)
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:118
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:142
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ readLuminosityBlockAuxiliary_()

std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::readLuminosityBlockAuxiliary_ ( )

Definition at line 1770 of file RootFile.cc.

References cms::cuda::assert(), edm::RootTree::current(), edm::IndexIntoFile::IndexIntoFileItr::entry(), 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(), lumiTree_, edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, savedRunAuxiliary_, and edm::RootTree::setEntryNumber().

1770  {
1773  // Begin code for backward compatibility before the existence of lumi trees.
1774  if (!lumiTree_.isValid()) {
1776  assert(eventEntry != IndexIntoFile::invalidEntry);
1777  assert(eventTree_.current(eventEntry));
1778  auto const evtAux = fillEventAuxiliary(eventEntry);
1779 
1780  LuminosityBlockID lumi = LuminosityBlockID(indexIntoFileIter_.run(), indexIntoFileIter_.lumi());
1781  runHelper_->overrideRunNumber(lumi);
1782  return std::make_shared<LuminosityBlockAuxiliary>(
1783  lumi.run(), lumi.luminosityBlock(), evtAux.time(), Timestamp::invalidTimestamp());
1784  }
1785  // End code for backward compatibility before the existence of lumi trees.
1787  std::shared_ptr<LuminosityBlockAuxiliary> lumiAuxiliary = fillLumiAuxiliary();
1788  assert(lumiAuxiliary->run() == indexIntoFileIter_.run());
1789  assert(lumiAuxiliary->luminosityBlock() == indexIntoFileIter_.lumi());
1790  runHelper_->overrideRunNumber(lumiAuxiliary->id());
1791  filePtr_->reportInputLumiSection(lumiAuxiliary->run(), lumiAuxiliary->luminosityBlock());
1792  if (lumiAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1794  if (eventEntry != IndexIntoFile::invalidEntry) {
1795  assert(eventTree_.current(eventEntry));
1796  auto const evtAux = fillEventAuxiliary(eventEntry);
1797 
1798  lumiAuxiliary->setBeginTime(evtAux.time());
1799  }
1800  lumiAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1801  }
1802  if (!fileFormatVersion().processHistorySameWithinRun() && savedRunAuxiliary_) {
1803  lumiAuxiliary->setProcessHistoryID(savedRunAuxiliary_->processHistoryID());
1804  }
1805  return lumiAuxiliary;
1806  }
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1408
static Timestamp invalidTimestamp()
Definition: Timestamp.h:75
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
bool isValid() const
Definition: RootTree.cc:123
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
assert(be >=bs)
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
RootTree eventTree_
Definition: RootFile.h:384
LuminosityBlockNumber_t lumi() const
bool current() const
Definition: RootTree.h:126
static constexpr EntryNumber_t invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ readParentageTree()

void edm::RootFile::readParentageTree ( InputType  inputType)
private

Definition at line 697 of file RootFile.cc.

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

Referenced by makeProvenanceReaderMaker().

697  {
698  // New format file
699  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
700  std::unique_ptr<TTree> parentageTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parentageTreeName().c_str())));
701  if (nullptr == parentageTree.get()) {
703  << "Could not find tree " << poolNames::parentageTreeName() << " in the input file.\n";
704  }
705 
706  Parentage parents;
707  Parentage* pParentageBuffer = &parents;
708  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), &pParentageBuffer);
709 
710  ParentageRegistry& registry = *ParentageRegistry::instance();
711 
712  parentageIDLookup_.reserve(parentageTree->GetEntries());
713  for (Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
714  roottree::getEntry(parentageTree.get(), i);
715  if (daqProvenanceHelper_) {
716  ParentageID const oldID = parents.id();
717  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
718  ParentageID newID = parents.id();
719  if (newID != oldID) {
720  daqProvenanceHelper_->setOldParentageIDToNew(oldID, newID);
721  }
722  }
723  // For thread safety, don't update global registries when a secondary source opens a file.
724  if (inputType != InputType::SecondarySource) {
725  registry.insertMapped(parents);
726  }
727  parentageIDLookup_.push_back(parents.id());
728  }
729  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), nullptr);
730  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
TPRegexp parents
Definition: eve_filter.cc:21
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
std::string const & parentageBranchName()
Definition: BranchType.cc:156
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
std::string const & parentageTreeName()
Definition: BranchType.cc:154
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:411
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:8

◆ readProcessBlock_()

void edm::RootFile::readProcessBlock_ ( ProcessBlockPrincipal processBlockPrincipal)

Definition at line 1722 of file RootFile.cc.

References cms::cuda::assert(), currentProcessBlockTree_, edm::ProcessBlockPrincipal::fillProcessBlockPrincipal(), inputType_, edm::RootTree::insertEntryForIndex(), edm::Primary, processBlockTrees_, edm::RootTree::processName(), and edm::RootTree::resetAndGetRootDelayedReader().

1722  {
1724  RootTree* rootTree = processBlockTrees_[currentProcessBlockTree_].get();
1725  rootTree->insertEntryForIndex(0);
1726  assert(!rootTree->processName().empty());
1727  processBlockPrincipal.fillProcessBlockPrincipal(rootTree->processName(), rootTree->resetAndGetRootDelayedReader());
1728  }
InputType inputType_
Definition: RootFile.h:414
assert(be >=bs)
unsigned int currentProcessBlockTree_
Definition: RootFile.h:388
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387

◆ readRun_()

bool edm::RootFile::readRun_ ( RunPrincipal runPrincipal)

Definition at line 1730 of file RootFile.cc.

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

1730  {
1731  bool shouldProcessRun = indexIntoFileIter_.shouldProcessRun();
1732 
1733  MergeableRunProductMetadata* mergeableRunProductMetadata = nullptr;
1734  if (shouldProcessRun) {
1735  if (inputType_ == InputType::Primary) {
1736  mergeableRunProductMetadata = runPrincipal.mergeableRunProductMetadata();
1737  RootTree::EntryNumber const& entryNumber = runTree_.entryNumber();
1738  assert(entryNumber >= 0);
1739  mergeableRunProductMetadata->readRun(
1740  entryNumber, *storedMergeableRunProductMetadata_, IndexIntoFileItrHolder(indexIntoFileIter_));
1741  }
1742  }
1743 
1744  if (!runHelper_->fakeNewRun()) {
1748  }
1749  // Begin code for backward compatibility before the existence of run trees.
1750  if (!runTree_.isValid()) {
1751  return shouldProcessRun;
1752  }
1753  // End code for backward compatibility before the existence of run trees.
1754  if (shouldProcessRun) {
1755  // NOTE: we use 0 for the index since do not do delayed reads for RunPrincipals
1757  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, runTree_.resetAndGetRootDelayedReader());
1758  // Read in all the products now.
1759  runPrincipal.readAllFromSourceAndMergeImmediately(mergeableRunProductMetadata);
1760  runPrincipal.setShouldWriteRun(RunPrincipal::kYes);
1761  } else {
1762  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, nullptr);
1763  if (runPrincipal.shouldWriteRun() != RunPrincipal::kYes) {
1764  runPrincipal.setShouldWriteRun(RunPrincipal::kNo);
1765  }
1766  }
1767  return shouldProcessRun;
1768  }
roottree::EntryNumber EntryNumber
Definition: RootTree.h:82
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
InputType inputType_
Definition: RootFile.h:414
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
bool isValid() const
Definition: RootTree.cc:123
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
assert(be >=bs)
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
edm::propagate_const< std::unique_ptr< StoredMergeableRunProductMetadata > > storedMergeableRunProductMetadata_
Definition: RootFile.h:372
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:118
RootTree runTree_
Definition: RootFile.h:386
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:142

◆ readRunAuxiliary_()

std::shared_ptr< RunAuxiliary > edm::RootFile::readRunAuxiliary_ ( )

Definition at line 1605 of file RootFile.cc.

References cms::cuda::assert(), edm::RootTree::current(), edm::IndexIntoFile::IndexIntoFileItr::entry(), 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::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, runTree_, savedRunAuxiliary(), savedRunAuxiliary_, and edm::RootTree::setEntryNumber().

1605  {
1606  if (runHelper_->fakeNewRun()) {
1607  auto runAuxiliary = std::make_shared<RunAuxiliary>(*savedRunAuxiliary());
1608  runHelper_->overrideRunNumber(runAuxiliary->id());
1609  return runAuxiliary;
1610  }
1613 
1614  // Begin code for backward compatibility before the existence of run trees.
1615  if (!runTree_.isValid()) {
1616  // prior to the support of run trees.
1617  // RunAuxiliary did not contain a valid timestamp. Take it from the next event.
1619  assert(eventEntry != IndexIntoFile::invalidEntry);
1620  assert(eventTree_.current(eventEntry));
1621  auto const evtAux = fillEventAuxiliary(eventEntry);
1622 
1623  RunID run = RunID(indexIntoFileIter_.run());
1624  runHelper_->overrideRunNumber(run);
1625  savedRunAuxiliary_ = std::make_shared<RunAuxiliary>(run.run(), evtAux.time(), Timestamp::invalidTimestamp());
1626  return savedRunAuxiliary();
1627  }
1628  // End code for backward compatibility before the existence of run trees.
1630  std::shared_ptr<RunAuxiliary> runAuxiliary = fillRunAuxiliary();
1631  assert(runAuxiliary->run() == indexIntoFileIter_.run());
1632  runHelper_->overrideRunNumber(runAuxiliary->id());
1633  filePtr_->reportInputRunNumber(runAuxiliary->run());
1634  // If RunAuxiliary did not contain a valid begin timestamp, invalidate any end timestamp.
1635  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1636  runAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1637  }
1638 
1639  // If RunAuxiliary did not contain a valid timestamp, or if this an old format file from
1640  // when the Run's ProcessHistory included only processes where products were added to the Run itself,
1641  // we attempt to read the first event in the run to get appropriate info.
1642  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp() ||
1645  // If we have a valid event, use its information.
1646  if (eventEntry != IndexIntoFile::invalidEntry) {
1647  assert(eventTree_.current(eventEntry));
1648  auto evtAux = fillEventAuxiliary(eventEntry);
1649 
1650  // RunAuxiliary did not contain a valid timestamp. Take it from the next event in this run if there is one.
1651  if (runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1652  runAuxiliary->setBeginTime(evtAux.time());
1653  }
1654 
1655  // For backwards compatibility when the Run's ProcessHistory included only processes where products were added to the
1656  // Run, and then the Run and Event auxiliaries could be different. Use the event ProcessHistoryID if there is one. It should
1657  // almost always be correct by the current definition (processes included if any products are added. This makes the run, lumi,
1658  // and event ProcessHistory's always be the same if no file merging occurs).
1660  EventSelectionIDVector eventSelectionIDs;
1661  BranchListIndexes branchListIndexes;
1662  fillEventHistory(evtAux, eventSelectionIDs, branchListIndexes);
1663  runAuxiliary->setProcessHistoryID(evtAux.processHistoryID());
1664  }
1665  }
1666  }
1667  savedRunAuxiliary_ = runAuxiliary;
1668  return runAuxiliary;
1669  }
static Timestamp invalidTimestamp()
Definition: Timestamp.h:75
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary() const
Definition: RootFile.h:345
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
bool isValid() const
Definition: RootTree.cc:123
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
bool fillEventHistory(EventAuxiliary &evtAux, EventSelectionIDVector &eventSelectionIDs, BranchListIndexes &branchListIndexes, bool assertOnFailure=true)
Definition: RootFile.cc:1349
assert(be >=bs)
std::vector< EventSelectionID > EventSelectionIDVector
long long EntryNumber_t
std::vector< BranchListIndex > BranchListIndexes
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
bool processHistorySameWithinRun() const
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1431
RootTree eventTree_
Definition: RootFile.h:384
RootTree runTree_
Definition: RootFile.h:386
bool current() const
Definition: RootTree.h:126
static constexpr EntryNumber_t invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ reportOpened()

void edm::RootFile::reportOpened ( std::string const &  inputType)

Definition at line 1287 of file RootFile.cc.

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

1287  {
1288  // Report file opened.
1289  std::string const label = "source";
1290  std::string moduleName = "PoolSource";
1291  filePtr_->inputFileOpened(logicalFile_, inputType, moduleName, label, fid_.fid(), eventTree_.branchNames());
1292  }
std::string const & fid() const
Definition: FileID.h:19
char const * label
FileID fid_
Definition: RootFile.h:365
std::string const logicalFile_
Definition: RootFile.h:359
RootTree eventTree_
Definition: RootFile.h:384
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
std::string moduleName(StableProvenance const &provenance, ProcessHistory const &history)
Definition: Provenance.cc:27
std::vector< std::string > const & branchNames() const
Definition: RootTree.h:137

◆ rewind()

void edm::RootFile::rewind ( )
inline

Definition at line 263 of file RootFile.h.

References currentProcessBlockTree_, eventTree_, indexIntoFileBegin_, indexIntoFileIter_, lumiTree_, processBlockTrees_, edm::RootTree::rewind(), and runTree_.

263  {
265  eventTree_.rewind();
266  lumiTree_.rewind();
267  runTree_.rewind();
269  for (auto& processBlockTree : processBlockTrees_) {
270  processBlockTree->rewindToInvalid();
271  }
272  }
RootTree lumiTree_
Definition: RootFile.h:385
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
unsigned int currentProcessBlockTree_
Definition: RootFile.h:388
RootTree eventTree_
Definition: RootFile.h:384
RootTree runTree_
Definition: RootFile.h:386
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:369
void rewind()
Definition: RootTree.h:128

◆ runTree()

RootTree const& edm::RootFile::runTree ( ) const
inline

Definition at line 244 of file RootFile.h.

References runTree_.

Referenced by validateFile().

244 { return runTree_; }
RootTree runTree_
Definition: RootFile.h:386

◆ savedRunAuxiliary() [1/2]

std::shared_ptr<RunAuxiliary const> edm::RootFile::savedRunAuxiliary ( ) const
inlineprivate

Definition at line 345 of file RootFile.h.

References edm::get_underlying_safe(), and savedRunAuxiliary_.

Referenced by readRunAuxiliary_().

edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)

◆ savedRunAuxiliary() [2/2]

std::shared_ptr<RunAuxiliary>& edm::RootFile::savedRunAuxiliary ( )
inlineprivate

Definition at line 346 of file RootFile.h.

References edm::get_underlying_safe(), and savedRunAuxiliary_.

edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
constexpr std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)

◆ setAtEventEntry()

void edm::RootFile::setAtEventEntry ( IndexIntoFile::EntryNumber_t  entry)

Definition at line 1603 of file RootFile.cc.

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

RootTree eventTree_
Definition: RootFile.h:384
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ setEntryAtEvent()

bool edm::RootFile::setEntryAtEvent ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 1838 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1838  {
1841  return false;
1843  return true;
1844  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
RootTree eventTree_
Definition: RootFile.h:384
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
Definition: event.py:1
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ setEntryAtItem()

bool edm::RootFile::setEntryAtItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)
inline

Definition at line 253 of file RootFile.h.

References writedatasetfile::run, setEntryAtEvent(), setEntryAtLumi(), and setEntryAtRun().

253  {
255  }
bool setEntryAtRun(RunNumber_t run)
Definition: RootFile.cc:1854
bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi)
Definition: RootFile.cc:1846
bool setEntryAtEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
Definition: RootFile.cc:1838
Definition: event.py:1

◆ setEntryAtLumi()

bool edm::RootFile::setEntryAtLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1846 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1846  {
1849  return false;
1851  return true;
1852  }
IndexIntoFileItr findLumiPosition(RunNumber_t run, LuminosityBlockNumber_t lumi) const
RootTree lumiTree_
Definition: RootFile.h:385
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ setEntryAtNextEventInLumi()

bool edm::RootFile::setEntryAtNextEventInLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1862 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(), writedatasetfile::run, and edm::IndexIntoFile::IndexIntoFileItr::run().

1862  {
1865  }
1868  return false;
1869  if (run != indexIntoFileIter_.run())
1870  return false;
1871  if (lumi != indexIntoFileIter_.lumi())
1872  return false;
1873  //The following is used for its side effect of advancing the
1874  // eventTree entry.
1876  return true;
1877  }
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const

◆ setEntryAtRun()

bool edm::RootFile::setEntryAtRun ( RunNumber_t  run)

Definition at line 1854 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1854  {
1857  return false;
1859  return true;
1860  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
RootTree runTree_
Definition: RootFile.h:386
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219

◆ setIfFastClonable()

void edm::RootFile::setIfFastClonable ( int  remainingEvents,
int  remainingLumis 
)
private

Definition at line 732 of file RootFile.cc.

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

Referenced by RootFile().

732  {
733  if (fileFormatVersion().noMetaDataTrees() and !fileFormatVersion().storedProductProvenanceUsed()) {
734  //we must avoid copying the old branch which stored the per product per event provenance
736  return;
737  }
738  if (!fileFormatVersion().splitProductIDs()) {
740  return;
741  }
744  return;
745  }
746  // Find entry for first event in file
747  IndexIntoFile::IndexIntoFileItr it = indexIntoFileBegin_;
748  while (it != indexIntoFileEnd_ && it.getEntryType() != IndexIntoFile::kEvent) {
749  ++it;
750  }
751  if (it == indexIntoFileEnd_) {
753  return;
754  }
755 
756  // From here on, record all reasons we can't fast clone.
757  IndexIntoFile::SortOrder sortOrder =
762  }
763  if (skipAnyEvents_) {
765  }
766  if (remainingEvents >= 0 && eventTree_.entries() > remainingEvents) {
768  }
769  if (remainingLumis >= 0 && lumiTree_.entries() > remainingLumis) {
771  }
772  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
774  }
775  }
bool noRunLumiSort_
Definition: RootFile.h:377
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
int whyNotFastClonable_
Definition: RootFile.h:380
RootTree lumiTree_
Definition: RootFile.h:385
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:399
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
bool noEventSort_
Definition: RootFile.h:378
EntryNumber const & entries() const
Definition: RootTree.h:134
bool skipAnyEvents_
Definition: RootFile.h:376
RootTree eventTree_
Definition: RootFile.h:384
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:369

◆ setPosition()

void edm::RootFile::setPosition ( IndexIntoFile::IndexIntoFileItr const &  position)

Definition at line 832 of file RootFile.cc.

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

832  {
834  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
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

◆ setPresenceInProductRegistry()

void edm::RootFile::setPresenceInProductRegistry ( ProductRegistry inputProdDescReg,
StoredProcessBlockHelper const &  storedProcessBlockHelper 
)
private

Definition at line 1903 of file RootFile.cc.

References HLT_2024v14_cff::distance, spr::find(), edm::InProcess, ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, newBranchToOldBranch(), processBlockTrees_, dqmiodatasetharvest::processes, edm::StoredProcessBlockHelper::processesWithProcessBlockProducts(), copyEcalPFRecHitThresholds_cfg::prod, edm::ProductRegistry::productListUpdator(), and treePointers_.

Referenced by RootFile().

1904  {
1905  // Set product presence information in the product registry.
1906  // "Presence" is a boolean that is true if and only if the TBranch exists
1907  // in the TTree (except it will be false for ProcessBlock products in non-Primary
1908  // input files).
1909  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
1910  for (auto& product : pList) {
1911  BranchDescription& prod = product.second;
1912  // Initialize BranchDescription from dictionary only if the
1913  // branch is present. This allows a subsequent job to process
1914  // data where a dictionary of a transient parent branch has been
1915  // removed from the release after the file has been written.
1916  prod.initBranchName();
1917  if (prod.branchType() == InProcess) {
1918  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
1919  auto it = std::find(processes.begin(), processes.end(), prod.processName());
1920  if (it != processes.end()) {
1921  auto index = std::distance(processes.begin(), it);
1922  processBlockTrees_[index]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
1923  } else {
1924  // Given current rules for saving BranchDescriptions, this case should only occur
1925  // in non-Primary sequences.
1926  prod.setDropped(true);
1927  }
1928  } else {
1929  treePointers_[prod.branchType()]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
1930  }
1931  if (prod.present()) {
1932  prod.initFromDictionary();
1933  }
1934  }
1935  }
std::map< BranchKey, BranchDescription > ProductList
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:822
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
std::vector< edm::propagate_const< RootTree * > > treePointers_
Definition: RootFile.h:389
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387

◆ setSignals()

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 2148 of file RootFile.cc.

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

2150  {
2151  eventTree_.setSignals(preEventReadSource, postEventReadSource);
2152  }
void setSignals(signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
Definition: RootTree.cc:520
RootTree eventTree_
Definition: RootFile.h:384

◆ setToLastEntry()

void edm::RootFile::setToLastEntry ( )
inline

Definition at line 273 of file RootFile.h.

References indexIntoFileEnd_, and indexIntoFileIter_.

IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370

◆ skipEntries()

bool edm::RootFile::skipEntries ( unsigned int &  offset)
inline

Definition at line 275 of file RootFile.h.

References eventTree_, HLT_IsoTrack_cff::offset, and edm::RootTree::skipEntries().

275 { return eventTree_.skipEntries(offset); }
RootTree eventTree_
Definition: RootFile.h:384
bool skipEntries(unsigned int &offset)
Definition: RootTree.cc:410

◆ skipEvents()

bool edm::RootFile::skipEvents ( int &  offset)

Definition at line 1451 of file RootFile.cc.

References duplicateChecker_, eventSkipperByID_, file_, fillEventAuxiliary(), indexIntoFileEnd_, indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, edm::IndexIntoFile::invalidIndex, edm::IndexIntoFile::invalidLumi, edm::IndexIntoFile::invalidRun, HLT_IsoTrack_cff::offset, edm::IndexIntoFile::IndexIntoFileItr::skipEventBackward(), and edm::IndexIntoFile::IndexIntoFileItr::skipEventForward().

1451  {
1452  while (offset > 0 && indexIntoFileIter_ != indexIntoFileEnd_) {
1453  int phIndexOfSkippedEvent = IndexIntoFile::invalidIndex;
1454  RunNumber_t runOfSkippedEvent = IndexIntoFile::invalidRun;
1457 
1459  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1460 
1461  // At the end of the file and there were no more events to skip
1462  if (skippedEventEntry == IndexIntoFile::invalidEntry)
1463  break;
1464 
1465  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1466  auto const evtAux = fillEventAuxiliary(skippedEventEntry);
1467  if (eventSkipperByID_->skipIt(runOfSkippedEvent, lumiOfSkippedEvent, evtAux.id().event())) {
1468  continue;
1469  }
1470  }
1471  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
1472  auto const evtAux = fillEventAuxiliary(skippedEventEntry);
1473  if (duplicateChecker_->isDuplicateAndCheckActive(
1474  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, evtAux.id().event(), file_)) {
1475  continue;
1476  }
1477  }
1478  --offset;
1479  }
1480 
1481  while (offset < 0) {
1482  if (duplicateChecker_) {
1483  duplicateChecker_->disable();
1484  }
1485 
1486  int phIndexOfEvent = IndexIntoFile::invalidIndex;
1490 
1491  indexIntoFileIter_.skipEventBackward(phIndexOfEvent, runOfEvent, lumiOfEvent, eventEntry);
1492 
1493  if (eventEntry == IndexIntoFile::invalidEntry)
1494  break;
1495 
1496  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1497  auto const evtAux = fillEventAuxiliary(eventEntry);
1498  if (eventSkipperByID_->skipIt(runOfEvent, lumiOfEvent, evtAux.id().event())) {
1499  continue;
1500  }
1501  }
1502  ++offset;
1503  }
1505  }
static constexpr int invalidIndex
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:363
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
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
unsigned int RunNumber_t
std::string const file_
Definition: RootFile.h:358
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)

◆ skipThisEntry()

bool edm::RootFile::skipThisEntry ( )
private

Definition at line 841 of file RootFile.cc.

References edm::IndexIntoFile::IndexIntoFileItr::entry(), eventSkipperByID_, fillEventAuxiliary(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), 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().

841  {
843  return false;
844  }
845 
846  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
847  // See first if the entire lumi or run is skipped, so we won't have to read the event Auxiliary in that case.
849  return true;
850  }
851 
852  // The Lumi is not skipped. If this is an event, see if the event is skipped.
854  auto eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
855  if (eventSkipperByID_->skipIt(indexIntoFileIter_.run(), indexIntoFileIter_.lumi(), eventAux.id().event())) {
856  return true;
857  }
858  }
859 
860  // Skip runs with no lumis if either lumisToSkip or lumisToProcess have been set to select lumis
862  // There are no lumis in this run, not even ones we will skip
864  return true;
865  }
866  // If we get here there are lumis in the run, check to see if we are skipping all of them
867  do {
869  return false;
870  }
871  } while (indexIntoFileIter_.skipLumiInRun());
872  return true;
873  }
874  }
875  return false;
876  }
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1324
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:363
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
LuminosityBlockNumber_t lumi() const
LuminosityBlockNumber_t peekAheadAtLumi() const
static constexpr LuminosityBlockNumber_t invalidLumi

◆ updateFileBlock()

void edm::RootFile::updateFileBlock ( FileBlock fileBlock)

Definition at line 803 of file RootFile.cc.

References eventTree_, lumiTree_, edm::RootTree::metaTree(), eostools::move(), processBlockTrees_, runTree_, edm::RootTree::tree(), and edm::FileBlock::updateTTreePointers().

803  {
804  std::vector<TTree*> processBlockTrees;
805  std::vector<std::string> processesWithProcessBlockTrees;
806  processBlockTrees.reserve(processBlockTrees_.size());
807  processesWithProcessBlockTrees.reserve(processBlockTrees_.size());
808  for (auto& processBlockTree : processBlockTrees_) {
809  processBlockTrees.push_back(processBlockTree->tree());
810  processesWithProcessBlockTrees.push_back(processBlockTree->processName());
811  }
812  fileBlock.updateTTreePointers(eventTree_.tree(),
814  lumiTree_.tree(),
816  runTree_.tree(),
817  runTree_.metaTree(),
818  std::move(processBlockTrees),
819  std::move(processesWithProcessBlockTrees));
820  }
TTree const * tree() const
Definition: RootTree.h:169
TTree const * metaTree() const
Definition: RootTree.h:171
RootTree lumiTree_
Definition: RootFile.h:385
RootTree eventTree_
Definition: RootFile.h:384
RootTree runTree_
Definition: RootFile.h:386
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
def move(src, dest)
Definition: eostools.py:511

◆ validateFile()

void edm::RootFile::validateFile ( InputType  inputType,
bool  usingGoToEvent 
)
private

Definition at line 1232 of file RootFile.cc.

References cms::cuda::assert(), 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().

1232  {
1233  if (!fid_.isValid()) {
1234  fid_ = FileID(createGlobalIdentifier());
1235  }
1236  if (!eventTree_.isValid()) {
1237  throw Exception(errors::EventCorruption) << "'Events' tree is corrupted or not present\n"
1238  << "in the input file.\n";
1239  }
1240  if (enforceGUIDInFileName_) {
1241  auto guidFromName = stemFromPath(file_);
1242  if (guidFromName != fid_.fid()) {
1244  << "GUID " << guidFromName << " extracted from file name " << file_
1245  << " is inconsistent with the GUID read from the file " << fid_.fid();
1246  }
1247  }
1248 
1249  if (fileFormatVersion().hasIndexIntoFile()) {
1250  if (runTree().entries() > 0) {
1252  }
1254  if (daqProvenanceHelper_) {
1255  std::vector<ProcessHistoryID>& phidVec = indexIntoFile_.setProcessHistoryIDs();
1256  for (auto& phid : phidVec) {
1257  phid = daqProvenanceHelper_->mapProcessHistoryID(phid);
1258  }
1259  }
1261  }
1262  } else {
1265  }
1266 
1270  std::shared_ptr<IndexIntoFile::EventFinder>(std::make_shared<RootFileEventFinder>(eventTree_)));
1271  // We fill the event numbers explicitly if we need to find events in closed files,
1272  // such as for secondary files (or secondary sources) or if duplicate checking across files.
1273  bool needEventNumbers = false;
1274  bool needIndexesForDuplicateChecker =
1275  duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
1276  if (inputType != InputType::Primary || needIndexesForDuplicateChecker || usingGoToEvent) {
1277  needEventNumbers = true;
1278  }
1279  bool needEventEntries = false;
1280  if (inputType != InputType::Primary || !noEventSort_) {
1281  // We need event entries for sorting or for secondary files or sources.
1282  needEventEntries = true;
1283  }
1284  indexIntoFile_.fillEventNumbersOrEntries(needEventNumbers, needEventEntries);
1285  }
std::string const & fid() const
Definition: FileID.h:19
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
bool enforceGUIDInFileName_
Definition: RootFile.h:379
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
std::string_view stemFromPath(std::string_view path)
Definition: stemFromPath.cc:4
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
bool isValid() const
Definition: RootTree.cc:123
assert(be >=bs)
void setNumberOfEvents(EntryNumber_t nevents)
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
FileID fid_
Definition: RootFile.h:365
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool noEventSort_
Definition: RootFile.h:378
bool useReducedProcessHistoryID() const
EntryNumber const & entries() const
Definition: RootTree.h:134
bool empty() const
True if no runs, lumis, or events are in the file.
RootTree eventTree_
Definition: RootFile.h:384
bool isValid() const
Definition: FileID.h:18
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
std::string createGlobalIdentifier(bool binary=false)
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
void fillIndexIntoFile()
Definition: RootFile.cc:1007
RootTree const & runTree() const
Definition: RootFile.h:244
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:368
void setEventFinder(std::shared_ptr< EventFinder > ptr)
void fillEventNumbersOrEntries(bool needEventNumbers, bool needEventEntries) const
std::string const file_
Definition: RootFile.h:358

◆ wasFirstEventJustRead()

bool edm::RootFile::wasFirstEventJustRead ( ) const

Definition at line 946 of file RootFile.cc.

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

946  {
947  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
948  int phIndex;
951  IndexIntoFile::EntryNumber_t eventEntry;
952  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
953  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
954  return eventEntry == IndexIntoFile::invalidEntry;
955  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
static constexpr EntryNumber_t invalidEntry
unsigned int RunNumber_t

◆ wasLastEventJustRead()

bool edm::RootFile::wasLastEventJustRead ( ) const

Definition at line 940 of file RootFile.cc.

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

940  {
941  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
942  itr.advanceToEvent();
943  return itr.getEntryType() == IndexIntoFile::kEnd;
944  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371

◆ whyNotFastClonable()

int edm::RootFile::whyNotFastClonable ( ) const
inline

Definition at line 246 of file RootFile.h.

References whyNotFastClonable_.

Referenced by createFileBlock().

246 { return whyNotFastClonable_; }
int whyNotFastClonable_
Definition: RootFile.h:380

Member Data Documentation

◆ branchChildren_

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

Definition at line 406 of file RootFile.h.

Referenced by branchChildren(), markBranchToBeDropped(), and RootFile().

◆ branchIDListHelper_

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

Definition at line 394 of file RootFile.h.

Referenced by branchIDListHelper(), fillEventHistory(), and RootFile().

◆ branchIDLists_

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

Definition at line 393 of file RootFile.h.

Referenced by RootFile().

◆ branchListIndexesUnchanged_

bool edm::RootFile::branchListIndexesUnchanged_
private

Definition at line 382 of file RootFile.h.

Referenced by branchListIndexesUnchanged(), and RootFile().

◆ currentProcessBlockTree_

unsigned int edm::RootFile::currentProcessBlockTree_ = 0
private

◆ daqProvenanceHelper_

edm::propagate_const<std::unique_ptr<DaqProvenanceHelper> > edm::RootFile::daqProvenanceHelper_
private

◆ duplicateChecker_

edm::propagate_const<std::shared_ptr<DuplicateChecker> > edm::RootFile::duplicateChecker_
private

◆ edProductClass_

edm::propagate_const<TClass*> edm::RootFile::edProductClass_
private

Definition at line 413 of file RootFile.h.

Referenced by dropOnInputAndReorder().

◆ enforceGUIDInFileName_

bool edm::RootFile::enforceGUIDInFileName_
private

Definition at line 379 of file RootFile.h.

Referenced by validateFile().

◆ eventAuxCache_

EventAuxiliary edm::RootFile::eventAuxCache_
private

Definition at line 383 of file RootFile.h.

Referenced by fillThisEventAuxiliary().

◆ eventHistoryTree_

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

Definition at line 402 of file RootFile.h.

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

◆ eventProcessHistoryIDs_

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

Definition at line 373 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

◆ eventProcessHistoryIter_

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

Definition at line 374 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

◆ eventProductProvenanceRetrievers_

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

Definition at line 410 of file RootFile.h.

Referenced by eventProductProvenanceRetriever(), and makeProductProvenanceRetriever().

◆ eventSkipperByID_

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

Definition at line 363 of file RootFile.h.

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

◆ eventToProcessBlockIndexes_

EventToProcessBlockIndexes edm::RootFile::eventToProcessBlockIndexes_
private

Definition at line 403 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes(), and readCurrentEvent().

◆ eventToProcessBlockIndexesBranch_

edm::propagate_const<TBranch*> edm::RootFile::eventToProcessBlockIndexesBranch_
private

Definition at line 404 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes().

◆ eventTree_

RootTree edm::RootFile::eventTree_
private

◆ fid_

FileID edm::RootFile::fid_
private

Definition at line 365 of file RootFile.h.

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

◆ file_

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

◆ fileFormatVersion_

FileFormatVersion edm::RootFile::fileFormatVersion_
private

Definition at line 364 of file RootFile.h.

Referenced by fileFormatVersion(), makeProvenanceReaderMaker(), and RootFile().

◆ filePtr_

edm::propagate_const<std::shared_ptr<InputFile> > edm::RootFile::filePtr_
private

◆ fileThinnedAssociationsHelper_

edm::propagate_const<std::unique_ptr<ThinnedAssociationsHelper> > edm::RootFile::fileThinnedAssociationsHelper_
private

Definition at line 397 of file RootFile.h.

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

◆ hasNewlyDroppedBranch_

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

Definition at line 381 of file RootFile.h.

Referenced by dropOnInputAndReorder(), hasNewlyDroppedBranch(), and RootFile().

◆ history_

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

Definition at line 405 of file RootFile.h.

Referenced by fillEventHistory(), and readEventHistoryTree().

◆ indexIntoFile_

IndexIntoFile& edm::RootFile::indexIntoFile_
private

◆ indexIntoFileBegin_

IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileBegin_
private

Definition at line 369 of file RootFile.h.

Referenced by rewind(), RootFile(), and setIfFastClonable().

◆ indexIntoFileEnd_

IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileEnd_
private

◆ indexIntoFileIter_

IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileIter_
private

◆ indexIntoFileSharedPtr_

edm::propagate_const<std::shared_ptr<IndexIntoFile> > edm::RootFile::indexIntoFileSharedPtr_
private

Definition at line 366 of file RootFile.h.

Referenced by indexIntoFileSharedPtr().

◆ inputType_

InputType edm::RootFile::inputType_
private

◆ lastEventEntryNumberRead_

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

Definition at line 391 of file RootFile.h.

Referenced by fillIndexIntoFile(), and fillThisEventAuxiliary().

◆ logicalFile_

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

Definition at line 359 of file RootFile.h.

Referenced by reportOpened().

◆ lumiTree_

RootTree edm::RootFile::lumiTree_
private

◆ newBranchToOldBranch_

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

Definition at line 401 of file RootFile.h.

Referenced by newBranchToOldBranch(), and RootFile().

◆ noEventSort_

bool edm::RootFile::noEventSort_
private

Definition at line 378 of file RootFile.h.

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

◆ noRunLumiSort_

bool edm::RootFile::noRunLumiSort_
private

Definition at line 377 of file RootFile.h.

Referenced by goToEvent(), and setIfFastClonable().

◆ orderedProcessHistoryIDs_

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

Definition at line 368 of file RootFile.h.

Referenced by validateFile().

◆ parentageIDLookup_

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

Definition at line 411 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and readParentageTree().

◆ processBlockHelper_

edm::propagate_const<ProcessBlockHelper*> edm::RootFile::processBlockHelper_
private

Definition at line 395 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes(), and fillProcessBlockHelper_().

◆ processBlockTrees_

std::vector<edm::propagate_const<std::unique_ptr<RootTree> > > edm::RootFile::processBlockTrees_
private

◆ processConfiguration_

ProcessConfiguration const& edm::RootFile::processConfiguration_
private

Definition at line 360 of file RootFile.h.

◆ processHistoryRegistry_

edm::propagate_const<ProcessHistoryRegistry*> edm::RootFile::processHistoryRegistry_
private

◆ processingMode_

InputSource::ProcessingMode edm::RootFile::processingMode_
private

Definition at line 399 of file RootFile.h.

Referenced by getNextItemType(), and setIfFastClonable().

◆ productRegistry_

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

Definition at line 392 of file RootFile.h.

Referenced by productRegistry(), and RootFile().

◆ provenanceAdaptor_

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

Definition at line 408 of file RootFile.h.

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

◆ provenanceReaderMaker_

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

Definition at line 409 of file RootFile.h.

Referenced by makeProductProvenanceRetriever(), and RootFile().

◆ runHelper_

edm::propagate_const<RunHelperBase*> edm::RootFile::runHelper_
private

◆ runTree_

RootTree edm::RootFile::runTree_
private

◆ savedRunAuxiliary_

edm::propagate_const<std::shared_ptr<RunAuxiliary> > edm::RootFile::savedRunAuxiliary_
private

Definition at line 375 of file RootFile.h.

Referenced by readLuminosityBlockAuxiliary_(), readRunAuxiliary_(), and savedRunAuxiliary().

◆ skipAnyEvents_

bool edm::RootFile::skipAnyEvents_
private

Definition at line 376 of file RootFile.h.

Referenced by setIfFastClonable().

◆ storedMergeableRunProductMetadata_

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

Definition at line 372 of file RootFile.h.

Referenced by readRun_(), and RootFile().

◆ storedProcessBlockHelper_

edm::propagate_const<std::unique_ptr<StoredProcessBlockHelper> > edm::RootFile::storedProcessBlockHelper_
private

Definition at line 396 of file RootFile.h.

Referenced by fillProcessBlockHelper_(), and RootFile().

◆ thinnedAssociationsHelper_

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

Definition at line 398 of file RootFile.h.

Referenced by initAssociationsFromSecondary().

◆ treePointers_

std::vector<edm::propagate_const<RootTree*> > edm::RootFile::treePointers_
private

Definition at line 389 of file RootFile.h.

Referenced by close(), dropOnInputAndReorder(), RootFile(), and setPresenceInProductRegistry().

◆ whyNotFastClonable_

int edm::RootFile::whyNotFastClonable_
private

Definition at line 380 of file RootFile.h.

Referenced by RootFile(), setIfFastClonable(), and whyNotFastClonable().