CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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_ ()
 
void readLuminosityBlock_ (LuminosityBlockPrincipal &lumiPrincipal)
 
std::shared_ptr
< LuminosityBlockAuxiliary
readLuminosityBlockAuxiliary_ ()
 
void readProcessBlock_ (ProcessBlockPrincipal &)
 
void readRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadRunAuxiliary_ ()
 
void reportOpened (std::string const &inputType)
 
void rewind ()
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool 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
< LuminosityBlockAuxiliary
fillLumiAuxiliary ()
 
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
< ProductProvenanceRetriever
makeProductProvenanceRetriever (unsigned int iStreamIndex)
 
std::unique_ptr
< MakeProvenanceReader
makeProvenanceReaderMaker (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
< EventProcessHistoryID
eventProcessHistoryIDs_
 
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

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::BranchDescription::branchType(), edm::BranchTypeToAuxiliaryBranchName(), edm::BranchDescription::className(), edm::ProductRegistry::copyProduct(), daqProvenanceHelper_, edm::roottree::defaultNonEventCacheSize, HLT_FULL_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_, Exception, fid_, file(), fileFormatVersion(), fileFormatVersion_, edm::poolNames::fileFormatVersionBranchName(), edm::poolNames::fileIdentifierBranchName(), filePtr_, edm::errors::FileReadError, fileThinnedAssociationsHelper_, spr::find(), edm::IndexIntoFile::firstAppearanceOrder, edm::BranchDescription::friendlyClassName(), 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(), lumiTree_, makeProcessBlockRootTrees(), makeProvenanceReaderMaker(), edm::poolNames::mergeableRunProductMetadataBranchName(), 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(), parallelization::processes, edm::poolNames::processHistoryBranchName(), edm::poolNames::processHistoryMapBranchName(), edm::BranchDescription::processName(), edm::poolNames::productDependenciesBranchName(), edm::poolNames::productDescriptionBranchName(), edm::ProductRegistry::productList(), edm::ProductRegistry::productListUpdator(), productRegistry(), productRegistry_, provenanceAdaptor_, provenanceReaderMaker_, TrackValidation_cff::pset, 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),
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  if (inputType != InputType::SecondarySource) {
375  std::make_unique<ThinnedAssociationsHelper>(); // propagate_const<T> has no reset() function
376  ThinnedAssociationsHelper* thinnedAssociationsHelperPtr = fileThinnedAssociationsHelper_.get();
377  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) != nullptr) {
378  metaDataTree->SetBranchAddress(poolNames::thinnedAssociationsHelperBranchName().c_str(),
379  &thinnedAssociationsHelperPtr);
380  }
381  }
382 
383  BranchChildren* branchChildrenBuffer = branchChildren_.get();
384  if (metaDataTree->FindBranch(poolNames::productDependenciesBranchName().c_str()) != nullptr) {
385  metaDataTree->SetBranchAddress(poolNames::productDependenciesBranchName().c_str(), &branchChildrenBuffer);
386  }
387 
388  // backward compatibility
389  std::vector<EventProcessHistoryID>* eventHistoryIDsPtr = &eventProcessHistoryIDs_;
390  if (metaDataTree->FindBranch(poolNames::eventHistoryBranchName().c_str()) != nullptr) {
391  metaDataTree->SetBranchAddress(poolNames::eventHistoryBranchName().c_str(), &eventHistoryIDsPtr);
392  }
393 
394  if (metaDataTree->FindBranch(poolNames::moduleDescriptionMapBranchName().c_str()) != nullptr) {
395  if (metaDataTree->GetBranch(poolNames::moduleDescriptionMapBranchName().c_str())->GetSplitLevel() != 0) {
396  metaDataTree->SetBranchStatus((poolNames::moduleDescriptionMapBranchName() + ".*").c_str(), false);
397  } else {
398  metaDataTree->SetBranchStatus(poolNames::moduleDescriptionMapBranchName().c_str(), false);
399  }
400  }
401 
402  // Here we read the metadata tree
403  roottree::getEntry(metaDataTree.get(), 0);
404 
406 
407  // Here we read the event history tree, if we have one.
409 
411  if (!fileFormatVersion().triggerPathsTracked()) {
412  ParameterSetConverter converter(psetMap, psetIdConverter, fileFormatVersion().parameterSetsByReference());
413  } else {
414  // Merge into the parameter set registry.
415  pset::Registry& psetRegistry = *pset::Registry::instance();
416  for (auto const& psetEntry : psetMap) {
417  ParameterSet pset(psetEntry.second.pset());
418  pset.setID(psetEntry.first);
419  // For thread safety, don't update global registries when a secondary source opens a file.
420  if (inputType != InputType::SecondarySource) {
421  psetRegistry.insertMapped(pset);
422  }
423  }
424  }
425  if (!fileFormatVersion().splitProductIDs()) {
426  // Old provenance format input file. Create a provenance adaptor.
427  // propagate_const<T> has no reset() function
428  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
429  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, true);
430  // Fill in the branchIDLists branch from the provenance adaptor
431  branchIDLists_ = provenanceAdaptor_->branchIDLists();
432  } else {
433  if (!fileFormatVersion().triggerPathsTracked()) {
434  // New provenance format, but change in ParameterSet Format. Create a provenance adaptor.
435  // propagate_const<T> has no reset() function
436  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
437  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, false);
438  }
439  // New provenance format input file. The branchIDLists branch was read directly from the input file.
440  if (metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) == nullptr) {
441  throw Exception(errors::EventCorruption) << "Failed to find branchIDLists branch in metaData tree.\n";
442  }
443  branchIDLists_.reset(branchIDListsAPtr.release());
444  }
445 
447  if (metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) == nullptr) {
449  << "Failed to find thinnedAssociationsHelper branch in metaData tree.\n";
450  }
451  }
452 
453  if (!bypassVersionCheck) {
454  checkReleaseVersion(pHistVector, file());
455  }
456 
457  if (labelRawDataLikeMC) {
458  std::string const rawData("FEDRawDataCollection");
459  std::string const source("source");
460  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
461  BranchKey finder(rawData, source, "", "");
462  ProductRegistry::ProductList::iterator it = pList.lower_bound(finder);
463  if (it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source) {
464  // We found raw data with a module label of source.
465  // We need to change the module label and process name.
466  // Create helper.
467  it->second.init();
468  // propagate_const<T> has no reset() function
469  daqProvenanceHelper_ = std::make_unique<DaqProvenanceHelper>(it->second.unwrappedTypeID());
470  // Create the new branch description
471  BranchDescription const& newBD = daqProvenanceHelper_->branchDescription();
472  // Save info from the old and new branch descriptions
473  daqProvenanceHelper_->saveInfo(it->second, newBD);
474  // Map the new branch name to the old branch name.
475  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), it->second.branchName()));
476  // Remove the old branch description from the product Registry.
477  pList.erase(it);
478  // Check that there was only one.
479  it = pList.lower_bound(finder);
480  assert(!(it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source));
481  // Insert the new branch description into the product registry.
482  inputProdDescReg.copyProduct(newBD);
483  // Fix up other per file metadata.
484  daqProvenanceHelper_->fixMetaData(processConfigurations, pHistVector);
485  daqProvenanceHelper_->fixMetaData(*branchIDLists_);
486  daqProvenanceHelper_->fixMetaData(*branchChildren_);
487  }
488  }
489 
490  for (auto const& history : pHistVector) {
491  processHistoryRegistry.registerProcessHistory(history);
492  }
493 
495 
496  // Update the branch id info. This has to be done before validateFile since
497  // depending on the file format, the branchIDListHelper_ may have its fixBranchListIndexes call made
498  if (inputType == InputType::Primary) {
499  branchListIndexesUnchanged_ = branchIDListHelper_->updateFromInput(*branchIDLists_);
500  }
501 
502  validateFile(inputType, usingGoToEvent);
503 
504  // Here, we make the class that will make the ProvenanceReader
505  // It reads whatever trees it needs.
506  // propagate_const<T> has no reset() function
507  provenanceReaderMaker_ = std::unique_ptr<MakeProvenanceReader>(makeProvenanceReaderMaker(inputType).release());
508 
509  // Merge into the hashed registries.
510  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
512  }
513 
514  initializeDuplicateChecker(indexesIntoFiles, currentIndexIntoFile);
516  noRunLumiSort ? IndexIntoFile::entryOrder
517  : (noEventSort ? IndexIntoFile::firstAppearanceOrder : IndexIntoFile::numericalOrder));
519  noRunLumiSort ? IndexIntoFile::entryOrder
520  : (noEventSort ? IndexIntoFile::firstAppearanceOrder : IndexIntoFile::numericalOrder));
522  eventProcessHistoryIter_ = eventProcessHistoryIDs_.begin();
523 
524  makeProcessBlockRootTrees(filePtr, treeMaxVirtualSize, enablePrefetching, inputType, storedProcessBlockHelper);
525 
526  setPresenceInProductRegistry(inputProdDescReg, storedProcessBlockHelper);
527 
528  auto newReg = std::make_unique<ProductRegistry>();
529 
530  // Do the translation from the old registry to the new one
531  {
532  ProductRegistry::ProductList const& prodList = inputProdDescReg.productList();
533  for (auto const& product : prodList) {
534  BranchDescription const& prod = product.second;
535  std::string newFriendlyName = friendlyname::friendlyName(prod.className());
536  if (newFriendlyName == prod.friendlyClassName()) {
537  newReg->copyProduct(prod);
538  } else {
539  if (fileFormatVersion().splitProductIDs()) {
541  << "Cannot change friendly class name algorithm without more development work\n"
542  << "to update BranchIDLists and ThinnedAssociationsHelper. Contact the framework group.\n";
543  }
544  BranchDescription newBD(prod);
545  newBD.updateFriendlyClassName();
546  newReg->copyProduct(newBD);
547  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), prod.branchName()));
548  }
549  }
550 
552  *newReg, productSelectorRules, dropDescendants, inputType, storedProcessBlockHelper, processBlockHelper);
553 
554  if (inputType == InputType::SecondaryFile) {
555  thinnedAssociationsHelper->updateFromSecondaryInput(*fileThinnedAssociationsHelper_,
556  *associationsFromSecondary);
557  } else if (inputType == InputType::Primary) {
558  processBlockHelper->initializeFromPrimaryInput(storedProcessBlockHelper);
559  thinnedAssociationsHelper->updateFromPrimaryInput(*fileThinnedAssociationsHelper_);
560  }
561 
562  if (inputType == InputType::Primary) {
563  for (auto& product : newReg->productListUpdator()) {
564  setIsMergeable(product.second);
565  }
566  }
567  //inform system we want to use DelayedReader
568  for (auto& product : newReg->productListUpdator()) {
569  product.second.setOnDemand(true);
570  }
571 
572  for (auto& processBlockTree : processBlockTrees_) {
573  treePointers_.push_back(processBlockTree.get());
574  }
575 
576  // freeze the product registry
577  newReg->setFrozen(inputType != InputType::Primary);
578  productRegistry_.reset(newReg.release());
579  }
580 
581  // Set up information from the product registry.
582  ProductRegistry::ProductList const& prodList = productRegistry()->productList();
583 
584  {
585  std::vector<size_t> nBranches(treePointers_.size(), 0);
586  for (auto const& product : prodList) {
587  if (product.second.branchType() == InProcess) {
588  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
589  auto it = std::find(processes.begin(), processes.end(), product.second.processName());
590  if (it != processes.end()) {
591  auto index = std::distance(processes.begin(), it);
593  }
594  } else {
595  ++nBranches[product.second.branchType()];
596  }
597  }
598 
599  int i = 0;
600  for (auto& t : treePointers_) {
601  t->numberOfBranchesToAdd(nBranches[i]);
602  ++i;
603  }
604  }
605  for (auto const& product : prodList) {
606  BranchDescription const& prod = product.second;
607  if (prod.branchType() == InProcess) {
608  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
609  auto it = std::find(processes.begin(), processes.end(), prod.processName());
610  if (it != processes.end()) {
611  auto index = std::distance(processes.begin(), it);
612  treePointers_[numberOfRunLumiEventProductTrees + index]->addBranch(prod,
613  newBranchToOldBranch(prod.branchName()));
614  }
615  } else {
616  treePointers_[prod.branchType()]->addBranch(prod, newBranchToOldBranch(prod.branchName()));
617  }
618  }
619 
620  // Determine if this file is fast clonable.
621  setIfFastClonable(remainingEvents, remainingLumis);
622 
623  // We are done with our initial reading of EventAuxiliary.
625 
626  // Tell the event tree to begin training at the next read.
628 
629  // Train the run and lumi trees.
630  runTree_.trainCache("*");
631  lumiTree_.trainCache("*");
632  for (auto& processBlockTree : processBlockTrees_) {
633  processBlockTree->trainCache("*");
634  }
635  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:515
list processes
Run mode ##.
bool noRunLumiSort_
Definition: RootFile.h:377
std::string const & idToParameterSetBlobsBranchName()
Definition: BranchType.cc:218
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
std::vector< ProcessConfiguration > ProcessConfigurationVector
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:116
unsigned int const defaultNonEventLearningEntries
Definition: RootTree.h:41
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
std::shared_ptr< BranchIDLists const > branchIDLists_
Definition: RootFile.h:393
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:280
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
static std::string const source("source")
bool enforceGUIDInFileName_
Definition: RootFile.h:379
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::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
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
processConfiguration
Definition: Schedule.cc:687
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:189
IndexIntoFileItr begin(SortOrder sortOrder) const
EventAuxiliary eventAuxCache_
Definition: RootFile.h:383
void initializeDuplicateChecker(std::vector< std::shared_ptr< IndexIntoFile >> const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile >>::size_type currentIndexIntoFile)
Definition: RootFile.cc:1860
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
assert(be >=bs)
void trainCache(char const *branchNames)
Definition: RootTree.cc:478
std::shared_ptr< ProductRegistry const > productRegistry() const
Definition: RootFile.h:238
edm::propagate_const< ProcessBlockHelper * > processBlockHelper_
Definition: RootFile.h:395
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:413
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:364
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:216
static TypeWithDict byName(std::string const &name)
Definition: TypeWithDict.cc:74
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:410
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:374
TTree const * tree() const
Definition: RootTree.h:169
FileID fid_
Definition: RootFile.h:365
std::string const logicalFile_
Definition: RootFile.h:359
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
std::string const & processHistoryMapBranchName()
Definition: BranchType.cc:174
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:1873
std::string friendlyName(std::string const &iFullName)
std::string const & mergeableRunProductMetadataBranchName()
Definition: BranchType.cc:201
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:391
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:198
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:207
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 & metaDataTreeName()
Definition: BranchType.cc:159
std::string const & parameterSetMapBranchName()
Definition: BranchType.cc:168
std::string const & eventToProcessBlockIndexesBranchName()
Definition: BranchType.cc:214
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:405
std::string const & processHistoryBranchName()
Definition: BranchType.cc:177
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::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:720
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:1911
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
std::string const & file() const
Definition: RootFile.h:237
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:162
std::string const & processConfigurationBranchName()
Definition: BranchType.cc:180
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:369
void doneFileInitialization()
Clears the temporary vector of event numbers to reduce memory usage.
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
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:165
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:186
void makeProcessBlockRootTrees(std::shared_ptr< InputFile > filePtr, int treeMaxVirtualSize, bool enablePrefetching, InputType inputType, StoredProcessBlockHelper const &storedProcessBlockHelper)
Definition: RootFile.cc:2117
std::unique_ptr< MakeProvenanceReader > makeProvenanceReaderMaker(InputType inputType)
Definition: RootFile.cc:2141
std::string const & branchIDListBranchName()
Definition: BranchType.cc:183
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
void validateFile(InputType inputType, bool usingGoToEvent)
Definition: RootFile.cc:1220
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:810
std::unique_ptr< TTreeCache > trainCache(TTree *tree, InputFile &file, unsigned int cacheSize, char const *branchNames)
Definition: RootTree.cc:535
unsigned int const defaultLearningEntries
Definition: RootTree.h:40
edm::propagate_const< std::unique_ptr< StoredProcessBlockHelper > > storedProcessBlockHelper_
Definition: RootFile.h:396
bool hasThinnedAssociations() const
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:192
void setIsMergeable(BranchDescription &)
std::string const & processBlockHelperBranchName()
Definition: BranchType.cc:204
std::string const & moduleDescriptionMapBranchName()
Definition: BranchType.cc:171
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:1849
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,
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
processConfiguration
Definition: Schedule.cc:687
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
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,
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) {}
processConfiguration
Definition: Schedule.cc:687
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
edm::RootFile::~RootFile ( )

Definition at line 637 of file RootFile.cc.

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

Member Function Documentation

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
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
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
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
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
void edm::RootFile::close ( void  )

Definition at line 1282 of file RootFile.cc.

References eventHistoryTree_, filePtr_, and treePointers_.

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

1282  {
1283  // Just to play it safe, zero all pointers to objects in the InputFile to be closed.
1284  eventHistoryTree_ = nullptr;
1285  for (auto& treePointer : treePointers_) {
1286  treePointer->close();
1287  treePointer = nullptr;
1288  }
1289  filePtr_->Close();
1290  filePtr_ = nullptr; // propagate_const<T> has no reset() function
1291  }
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
bool edm::RootFile::containsItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 879 of file RootFile.cc.

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

879  {
881  }
list lumi
Definition: dqmdumpme.py:53
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
std::shared_ptr< FileBlock > edm::RootFile::createFileBlock ( )

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

765  {
766  std::vector<TTree*> processBlockTrees;
767  std::vector<std::string> processesWithProcessBlockTrees;
768  processBlockTrees.reserve(processBlockTrees_.size());
769  processesWithProcessBlockTrees.reserve(processBlockTrees_.size());
770  for (auto& processBlockTree : processBlockTrees_) {
771  processBlockTrees.push_back(processBlockTree->tree());
772  processesWithProcessBlockTrees.push_back(processBlockTree->processName());
773  }
774  return std::make_shared<FileBlock>(fileFormatVersion(),
775  eventTree_.tree(),
777  lumiTree_.tree(),
779  runTree_.tree(),
780  runTree_.metaTree(),
781  std::move(processBlockTrees),
782  std::move(processesWithProcessBlockTrees),
785  file_,
787  modifiedIDs(),
788  branchChildren());
789  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
bool branchListIndexesUnchanged() const
Definition: RootFile.h:248
RootTree lumiTree_
Definition: RootFile.h:385
TTree const * metaTree() const
Definition: RootTree.h:171
TTree const * tree() const
Definition: RootTree.h:169
bool modifiedIDs() const
Definition: RootFile.h:249
def move
Definition: eostools.py:511
int whyNotFastClonable() const
Definition: RootFile.h:246
RootTree eventTree_
Definition: RootFile.h:384
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:247
RootTree runTree_
Definition: RootFile.h:386
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:348
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
std::string const file_
Definition: RootFile.h:358
void edm::RootFile::dropOnInputAndReorder ( ProductRegistry reg,
ProductSelectorRules const &  rules,
bool  dropDescendants,
InputType  inputType,
StoredProcessBlockHelper storedProcessBlockHelper,
ProcessBlockHelper const *  processBlockHelper 
)
private

Definition at line 1911 of file RootFile.cc.

References edm::ProductRegistry::allBranchDescriptions(), cms::cuda::assert(), edm::BranchDescription::branchID(), edm::BranchDescription::branchName(), edm::BranchDescription::branchType(), CommonMethods::cp(), HLT_FULL_cff::distance, drop, edm::BranchDescription::dropped(), dropProcessesAndReorder(), edProductClass_, file_, fileThinnedAssociationsHelper_, spr::find(), edm::TypeWithDict::getClass(), edm::getWrapperBasePtr(), hasNewlyDroppedBranch_, edm::InEvent, edm::ProductSelector::initialize(), edm::InProcess, markBranchToBeDropped(), newBranchToOldBranch(), hltrates_dqm_sourceclient-live_cfg::offset, edm::BranchDescription::originalBranchID(), AlCaHLTBitMon_ParallelJobs::p, edm::BranchDescription::present(), edm::Primary, processBlockTrees_, parallelization::processes, edm::StoredProcessBlockHelper::processesWithProcessBlockProducts(), edm::BranchDescription::processName(), edm::ProductRegistry::productListUpdator(), edm::SecondaryFile, edm::SecondarySource, edm::ProductSelector::selected(), groupFilesInBlocks::temp, treePointers_, edm::BranchDescription::unwrappedType(), and edm::BranchDescription::wrappedType().

Referenced by RootFile().

1916  {
1917  ProductRegistry::ProductList& prodList = reg.productListUpdator();
1918 
1919  // First fill in a map we will need to navigate to descendants
1920  // in the case of EDAliases.
1921  std::map<BranchID, BranchID> droppedToKeptAlias;
1922  for (auto const& product : prodList) {
1923  BranchDescription const& prod = product.second;
1924  if (prod.branchID() != prod.originalBranchID() && prod.present()) {
1925  droppedToKeptAlias[prod.originalBranchID()] = prod.branchID();
1926  }
1927  }
1928 
1929  // This object will select products based on the branchName and the
1930  // keep and drop statements which are in the source configuration.
1931  ProductSelector productSelector;
1932  productSelector.initialize(rules, reg.allBranchDescriptions());
1933 
1934  // In this pass, fill in a set of branches to be dropped.
1935  // Don't drop anything yet.
1936  std::set<BranchID> branchesToDrop;
1937  std::vector<BranchDescription const*> associationDescriptions;
1938  for (auto const& product : prodList) {
1939  BranchDescription const& prod = product.second;
1940  if (inputType != InputType::Primary && prod.branchType() == InProcess) {
1941  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1942  } else if (prod.unwrappedType() == typeid(ThinnedAssociation) && prod.present()) {
1943  // Special handling for ThinnedAssociations
1944  if (inputType != InputType::SecondarySource) {
1945  associationDescriptions.push_back(&prod);
1946  } else {
1947  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1948  }
1949  } else if (!productSelector.selected(prod)) {
1950  markBranchToBeDropped(dropDescendants, prod, branchesToDrop, droppedToKeptAlias);
1951  }
1952  }
1953 
1954  if (inputType != InputType::SecondarySource) {
1955  // Decide whether to keep the thinned associations and corresponding
1956  // entries in the helper. For secondary source they are all dropped,
1957  // but in other cases we look for thinned collections the associations
1958  // redirect a Ref or Ptr to when dereferencing them.
1959 
1960  // Need a list of kept products in order to determine which thinned associations
1961  // are kept.
1962  std::set<BranchID> keptProductsInEvent;
1963  for (auto const& product : prodList) {
1964  BranchDescription const& prod = product.second;
1965  if (branchesToDrop.find(prod.branchID()) == branchesToDrop.end() && prod.present() &&
1966  prod.branchType() == InEvent) {
1967  keptProductsInEvent.insert(prod.branchID());
1968  }
1969  }
1970 
1971  // Decide which ThinnedAssociations to keep and store the decision in keepAssociation
1972  std::map<BranchID, bool> keepAssociation;
1973  fileThinnedAssociationsHelper_->selectAssociationProducts(
1974  associationDescriptions, keptProductsInEvent, keepAssociation);
1975 
1976  for (auto association : associationDescriptions) {
1977  if (!keepAssociation[association->branchID()]) {
1978  markBranchToBeDropped(dropDescendants, *association, branchesToDrop, droppedToKeptAlias);
1979  }
1980  }
1981 
1982  // Also delete the dropped associations from the ThinnedAssociationsHelper
1983  auto temp = std::make_unique<ThinnedAssociationsHelper>();
1984  for (auto const& associationBranches : fileThinnedAssociationsHelper_->data()) {
1985  auto iter = keepAssociation.find(associationBranches.association());
1986  if (iter != keepAssociation.end() && iter->second) {
1987  temp->addAssociation(associationBranches);
1988  }
1989  }
1990  // propagate_const<T> has no reset() function
1991  fileThinnedAssociationsHelper_ = std::unique_ptr<ThinnedAssociationsHelper>(temp.release());
1992  }
1993 
1994  // On this pass, actually drop the branches.
1995  std::set<std::string> processesWithKeptProcessBlockProducts;
1996  std::set<BranchID>::const_iterator branchesToDropEnd = branchesToDrop.end();
1997  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
1998  BranchDescription const& prod = it->second;
1999  bool drop = branchesToDrop.find(prod.branchID()) != branchesToDropEnd;
2000  if (drop) {
2001  if (!prod.dropped()) {
2002  if (productSelector.selected(prod) && prod.unwrappedType() != typeid(ThinnedAssociation) &&
2003  prod.branchType() != InProcess) {
2004  LogWarning("RootFile") << "Branch '" << prod.branchName() << "' is being dropped from the input\n"
2005  << "of file '" << file_ << "' because it is dependent on a branch\n"
2006  << "that was explicitly dropped.\n";
2007  }
2008  if (prod.branchType() == InProcess) {
2009  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
2010  auto it = std::find(processes.begin(), processes.end(), prod.processName());
2011  assert(it != processes.end());
2012  auto index = std::distance(processes.begin(), it);
2013  processBlockTrees_[index]->dropBranch(newBranchToOldBranch(prod.branchName()));
2014  } else {
2015  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
2016  }
2017  hasNewlyDroppedBranch_[prod.branchType()] = true;
2018  }
2019  ProductRegistry::ProductList::iterator icopy = it;
2020  ++it;
2021  prodList.erase(icopy);
2022  } else {
2023  if (prod.branchType() == InProcess && prod.present()) {
2024  processesWithKeptProcessBlockProducts.insert(prod.processName());
2025  }
2026  ++it;
2027  }
2028  }
2029 
2030  dropProcessesAndReorder(storedProcessBlockHelper, processesWithKeptProcessBlockProducts, processBlockHelper);
2031 
2032  // Drop on input mergeable run and lumi products, this needs to be invoked for secondary file input
2033  if (inputType == InputType::SecondaryFile) {
2034  TString tString;
2035  for (ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
2036  BranchDescription const& prod = it->second;
2037  if (prod.branchType() != InEvent && prod.branchType() != InProcess) {
2038  TClass* cp = prod.wrappedType().getClass();
2039  void* p = cp->New();
2040  int offset = cp->GetBaseClassOffset(edProductClass_);
2041  std::unique_ptr<WrapperBase> edp = getWrapperBasePtr(p, offset);
2042  if (edp->isMergeable()) {
2043  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
2044  ProductRegistry::ProductList::iterator icopy = it;
2045  ++it;
2046  prodList.erase(icopy);
2047  } else {
2048  ++it;
2049  }
2050  } else
2051  ++it;
2052  }
2053  }
2054  }
list processes
Run mode ##.
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
std::map< BranchKey, BranchDescription > ProductList
void dropProcessesAndReorder(StoredProcessBlockHelper &, std::set< std::string > const &processesWithKeptProcessBlockProducts, ProcessBlockHelper const *)
Definition: RootFile.cc:2056
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
assert(be >=bs)
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:413
std::tuple< layerClusterToCaloParticle, caloParticleToLayerCluster > association
std::vector< edm::propagate_const< RootTree * > > treePointers_
Definition: RootFile.h:389
const int drop
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 & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:810
void markBranchToBeDropped(bool dropDescendants, BranchDescription const &branch, std::set< BranchID > &branchesToDrop, std::map< BranchID, BranchID > const &droppedToKeptAlias) const
Definition: RootFile.cc:1900
std::string const file_
Definition: RootFile.h:358
void edm::RootFile::dropProcessesAndReorder ( StoredProcessBlockHelper storedProcessBlockHelper,
std::set< std::string > const &  processesWithKeptProcessBlockProducts,
ProcessBlockHelper const *  processBlockHelper 
)
private

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

2058  {
2059  // Modify storedProcessBlockHelper and processBlockTrees_
2060  // This should account for dropOnInput and also make the
2061  // order of process blocks in input files after the first
2062  // be the same as the first. Processes with no ProcessBlock
2063  // products should be removed. After this executes,
2064  // the items in storedProcessBlockHelper
2065  // and processBlockTrees should be in exact one to one
2066  // correspondence and in the same order. For input files
2067  // after the first, these items should be either the same
2068  // as or a subset of the items in processBlockHelper and in
2069  // the same order.
2070 
2071  if (processBlockTrees_.empty()) {
2072  return;
2073  }
2074 
2075  std::vector<unsigned int> nEntries;
2076  nEntries.reserve(processBlockTrees_.size());
2077  for (auto const& processBlockTree : processBlockTrees_) {
2078  nEntries.push_back(processBlockTree->entries());
2079  }
2080 
2081  bool firstInputFile = !processBlockHelper->initializedFromInput();
2082  bool isModified = false;
2083  std::vector<unsigned int> finalIndexToStoredIndex;
2084 
2085  if (firstInputFile) {
2086  isModified = processBlockHelper->firstFileDropProcessesAndReorderStored(
2087  storedProcessBlockHelper, processesWithKeptProcessBlockProducts, nEntries, finalIndexToStoredIndex);
2088  } else {
2089  isModified =
2090  processBlockHelper->dropProcessesAndReorderStored(storedProcessBlockHelper,
2091  processesWithKeptProcessBlockProducts,
2092  nEntries,
2093  finalIndexToStoredIndex,
2094  processBlockHelper->processesWithProcessBlockProducts());
2095  }
2096 
2097  // At this point, any modifications to storedProcessBlockHelper are done.
2098  // Make consistent changes to processBlockTrees_ and this will cause
2099  // unneeded RootTrees to be deleted.
2100  if (isModified) {
2101  std::vector<edm::propagate_const<std::unique_ptr<RootTree>>> newProcessBlockTrees;
2102  unsigned int nFinalProducts = storedProcessBlockHelper.processesWithProcessBlockProducts().size();
2103  for (unsigned int j = 0; j < nFinalProducts; ++j) {
2104  unsigned int iStored = finalIndexToStoredIndex[j];
2105  newProcessBlockTrees.push_back(std::move(processBlockTrees_[iStored]));
2106  }
2107  processBlockTrees_.swap(newProcessBlockTrees);
2108  }
2109  }
def move
Definition: eostools.py:511
std::vector< edm::propagate_const< std::unique_ptr< RootTree > > > processBlockTrees_
Definition: RootFile.h:387
bool edm::RootFile::endOfProcessBlocksReached ( ) const

Definition at line 1680 of file RootFile.cc.

References currentProcessBlockTree_, and processBlockTrees_.

Referenced by nextProcessBlock_().

1680 { 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
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
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
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
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 edm::RootFile::fileFormatVersion ( ) const
inline
EventAuxiliary edm::RootFile::fillEventAuxiliary ( IndexIntoFile::EntryNumber_t  entry)
private

Definition at line 1312 of file RootFile.cc.

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

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

1312  {
1314  return fillThisEventAuxiliary();
1315  }
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1293
RootTree eventTree_
Definition: RootFile.h:384
list entry
Definition: mps_splice.py:68
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
bool edm::RootFile::fillEventHistory ( EventAuxiliary evtAux,
EventSelectionIDVector eventSelectionIDs,
BranchListIndexes branchListIndexes,
bool  assertOnFailure = true 
)
private

Definition at line 1337 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_, gpuClustering::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_().

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

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

1317  {
1318  TBranch* eventToProcessBlockIndexesBranch = get_underlying_safe(eventToProcessBlockIndexesBranch_);
1319  if (eventToProcessBlockIndexesBranch == nullptr) {
1320  if (processBlockHelper_.get() == nullptr) {
1322  } else {
1324  }
1325  } else {
1326  if (processBlockHelper_->cacheIndexVectorsPerFile().back() == 1u) {
1328  } else {
1329  EventToProcessBlockIndexes* pEventToProcessBlockIndexes = &eventToProcessBlockIndexes_;
1330  eventTree_.fillBranchEntry(eventToProcessBlockIndexesBranch, pEventToProcessBlockIndexes);
1331  unsigned int updatedIndex = eventToProcessBlockIndexes_.index() + processBlockHelper_->outerOffset();
1332  eventToProcessBlockIndexes_.setIndex(updatedIndex);
1333  }
1334  }
1335  }
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
void edm::RootFile::fillIndexIntoFile ( )
private

Definition at line 995 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_, dqmdumpme::lumi, edmLumisInFiles::lumis, lumiTree_, eostools::move(), edm::RootTree::next(), processHistoryRegistry_, submitPVValidationJobs::run, gather_cfg::runs, runTree_, edm::second(), edm::RootTree::setEntryNumber(), edm::IndexIntoFile::setProcessHistoryIDs(), edm::IndexIntoFile::setRunOrLumiEntries(), edm::stable_sort_all(), and edm::IndexIntoFile::unsortedEventNumbers().

Referenced by validateFile().

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

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

1396  {
1397  auto lumiAuxiliary = std::make_shared<LuminosityBlockAuxiliary>();
1398  if (fileFormatVersion().newAuxiliary()) {
1399  LuminosityBlockAuxiliary* pLumiAux = lumiAuxiliary.get();
1400  lumiTree_.fillAux<LuminosityBlockAuxiliary>(pLumiAux);
1401  } else {
1402  LuminosityBlockAux lumiAux;
1403  LuminosityBlockAux* pLumiAux = &lumiAux;
1404  lumiTree_.fillAux<LuminosityBlockAux>(pLumiAux);
1405  conversion(lumiAux, *lumiAuxiliary);
1406  }
1407  if (provenanceAdaptor_) {
1408  lumiAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(lumiAuxiliary->processHistoryID()));
1409  }
1410  if (daqProvenanceHelper_) {
1411  lumiAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(lumiAuxiliary->processHistoryID()));
1412  }
1413  if (lumiAuxiliary->luminosityBlock() == 0 && !fileFormatVersion().runsAndLumis()) {
1414  lumiAuxiliary->id() = LuminosityBlockID(RunNumber_t(1), LuminosityBlockNumber_t(1));
1415  }
1416  return lumiAuxiliary;
1417  }
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
void edm::RootFile::fillProcessBlockHelper_ ( )

Definition at line 1659 of file RootFile.cc.

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

1659  {
1661  std::vector<unsigned int> nEntries;
1662  nEntries.reserve(processBlockTrees_.size());
1663  for (auto const& processBlockTree : processBlockTrees_) {
1664  nEntries.push_back(processBlockTree->entries());
1665  }
1666  processBlockHelper_->fillFromPrimaryInput(*storedProcessBlockHelper_, nEntries);
1668  std::make_unique<StoredProcessBlockHelper>(); // propagate_const<T> has no reset() function
1669  }
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
std::shared_ptr< RunAuxiliary > edm::RootFile::fillRunAuxiliary ( )
private

Definition at line 1419 of file RootFile.cc.

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

Referenced by fillIndexIntoFile(), and readRunAuxiliary_().

1419  {
1420  auto runAuxiliary = std::make_shared<RunAuxiliary>();
1421  if (fileFormatVersion().newAuxiliary()) {
1422  RunAuxiliary* pRunAux = runAuxiliary.get();
1423  runTree_.fillAux<RunAuxiliary>(pRunAux);
1424  } else {
1425  RunAux runAux;
1426  RunAux* pRunAux = &runAux;
1427  runTree_.fillAux<RunAux>(pRunAux);
1428  conversion(runAux, *runAuxiliary);
1429  }
1430  if (provenanceAdaptor_) {
1431  runAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(runAuxiliary->processHistoryID()));
1432  }
1433  if (daqProvenanceHelper_) {
1434  runAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(runAuxiliary->processHistoryID()));
1435  }
1436  return runAuxiliary;
1437  }
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
EventAuxiliary const & edm::RootFile::fillThisEventAuxiliary ( )
private

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

1293  {
1295  // Already read.
1296  return eventAuxCache_;
1297  }
1298  if (fileFormatVersion().newAuxiliary()) {
1299  EventAuxiliary* pEvAux = &eventAuxCache_;
1300  eventTree_.fillAux<EventAuxiliary>(pEvAux);
1301  } else {
1302  // for backward compatibility.
1303  EventAux eventAux;
1304  EventAux* pEvAux = &eventAux;
1305  eventTree_.fillAux<EventAux>(pEvAux);
1306  conversion(eventAux, eventAuxCache_);
1307  }
1309  return eventAuxCache_;
1310  }
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
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
void fillAux(T *&pAux)
Definition: RootTree.h:141
IndexIntoFile::EntryType edm::RootFile::getNextItemType ( RunNumber_t run,
LuminosityBlockNumber_t lumi,
EventNumber_t event 
)

Definition at line 883 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_, edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, edm::InputSource::Runs, edm::InputSource::RunsAndLumis, and skipThisEntry().

885  {
886  // First, account for consecutive skipped entries.
887  while (skipThisEntry()) {
892  } else {
894  }
895  }
896  // OK, we have an entry that is not skipped.
898  if (entryType == IndexIntoFile::kEnd) {
899  return IndexIntoFile::kEnd;
900  }
901  if (entryType == IndexIntoFile::kRun) {
903  runHelper_->checkForNewRun(run, indexIntoFileIter_.peekAheadAtLumi());
904  return IndexIntoFile::kRun;
905  } else if (processingMode_ == InputSource::Runs) {
907  return getNextItemType(run, lumi, event);
908  }
909  if (entryType == IndexIntoFile::kLumi) {
912  return IndexIntoFile::kLumi;
915  return getNextItemType(run, lumi, event);
916  }
917  if (isDuplicateEvent()) {
919  return getNextItemType(run, lumi, event);
920  }
923  auto eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
924  event = eventAux.event();
925  return IndexIntoFile::kEvent;
926  }
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1312
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:399
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const
bool skipThisEntry()
Definition: RootFile.cc:829
IndexIntoFile::EntryType getNextItemType(RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
Definition: RootFile.cc:883
bool isDuplicateEvent()
Definition: RootFile.cc:866
list lumi
Definition: dqmdumpme.py:53
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
LuminosityBlockNumber_t peekAheadAtLumi() const
EventNumber_t event() const
bool edm::RootFile::goToEvent ( EventID const &  eventID)

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

1495  {
1497 
1498  if (duplicateChecker_) {
1499  duplicateChecker_->disable();
1500  }
1501 
1503  if (noEventSort_)
1505  if (noRunLumiSort_) {
1506  sortOrder = IndexIntoFile::entryOrder;
1507  }
1508 
1509  IndexIntoFile::IndexIntoFileItr iter =
1510  indexIntoFile_.findPosition(sortOrder, eventID.run(), eventID.luminosityBlock(), eventID.event());
1511 
1512  if (iter == indexIntoFile_.end(sortOrder)) {
1513  return false;
1514  }
1515  indexIntoFileIter_ = iter;
1516  return true;
1517  }
bool noRunLumiSort_
Definition: RootFile.h:377
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
bool noEventSort_
Definition: RootFile.h:378
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
void fillEventNumbers() const
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
IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileIter ( ) const

Definition at line 818 of file RootFile.cc.

References indexIntoFileIter_.

818 { return indexIntoFileIter_; }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
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)
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)
void edm::RootFile::initAssociationsFromSecondary ( std::vector< BranchID > const &  associationsFromSecondary)

Definition at line 824 of file RootFile.cc.

References fileThinnedAssociationsHelper_, and thinnedAssociationsHelper_.

824  {
825  thinnedAssociationsHelper_->initAssociationsFromSecondary(associationsFromSecondary,
827  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:397
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:398
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 1860 of file RootFile.cc.

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

Referenced by RootFile().

1862  {
1863  if (duplicateChecker_ && !duplicateChecker_->checkDisabled()) {
1864  if (eventTree_.next()) {
1865  auto const evtAux = fillThisEventAuxiliary();
1866 
1867  duplicateChecker_->inputFileOpened(evtAux.isRealData(), indexIntoFile_, indexesIntoFiles, currentIndexIntoFile);
1868  }
1870  }
1871  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1293
bool next()
Definition: RootTree.h:124
RootTree eventTree_
Definition: RootFile.h:384
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
static constexpr EntryNumber_t invalidEntry
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
bool edm::RootFile::initializeFirstProcessBlockEntry ( )

Definition at line 1671 of file RootFile.cc.

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

Referenced by nextProcessBlock_().

1671  {
1673  processBlockTrees_[currentProcessBlockTree_]->setEntryNumber(0);
1675  return true;
1676  }
1677  return false;
1678  }
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
bool edm::RootFile::isDuplicateEvent ( )
private

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

866  {
868  if (duplicateChecker_.get() == nullptr) {
869  return false;
870  }
871  auto const eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
872  return duplicateChecker_->isDuplicateAndCheckActive(indexIntoFileIter_.processHistoryIDIndex(),
875  eventAux.id().event(),
876  file_);
877  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1312
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const
assert(be >=bs)
std::string const file_
Definition: RootFile.h:358
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
void edm::RootFile::makeProcessBlockRootTrees ( std::shared_ptr< InputFile filePtr,
int  treeMaxVirtualSize,
bool  enablePrefetching,
InputType  inputType,
StoredProcessBlockHelper const &  storedProcessBlockHelper 
)
private

Definition at line 2117 of file RootFile.cc.

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

Referenced by RootFile().

2121  {
2122  // When this functions returns there will be exactly a 1-to-1 correspondence between the
2123  // processes listed in storedProcessBlockHelper and the RootTree objects created. processBlockTrees_
2124  // has pointers to the RootTree's and will be filled in the same order. The RootTree constructor
2125  // will throw an exception if one of these TTree's is not in the file and this should be all of
2126  // the ProcessBlock TTree's in the file. (later in the RootFile constructor, dropOnInput might
2127  // remove some and also reordering may occur).
2128  for (auto const& process : storedProcessBlockHelper.processesWithProcessBlockProducts()) {
2129  processBlockTrees_.emplace_back(std::make_unique<RootTree>(filePtr,
2130  InProcess,
2131  process,
2132  1,
2133  treeMaxVirtualSize,
2136  enablePrefetching,
2137  inputType));
2138  }
2139  }
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
tuple process
Definition: LaserDQM_cfg.py:3
std::shared_ptr< ProductProvenanceRetriever > edm::RootFile::makeProductProvenanceRetriever ( unsigned int  iStreamIndex)
private

Definition at line 2157 of file RootFile.cc.

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

Referenced by readCurrentEvent().

2157  {
2158  if (eventProductProvenanceRetrievers_.size() <= iStreamID) {
2159  eventProductProvenanceRetrievers_.resize(iStreamID + 1);
2160  }
2161  if (!eventProductProvenanceRetrievers_[iStreamID]) {
2162  // propagate_const<T> has no reset() function
2163  eventProductProvenanceRetrievers_[iStreamID] = std::make_shared<ProductProvenanceRetriever>(
2165  }
2166  eventProductProvenanceRetrievers_[iStreamID]->reset();
2167  return eventProductProvenanceRetriever(iStreamID);
2168  }
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
std::unique_ptr< MakeProvenanceReader > edm::RootFile::makeProvenanceReaderMaker ( InputType  inputType)
private

Definition at line 2141 of file RootFile.cc.

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

Referenced by RootFile().

2141  {
2143  readParentageTree(inputType);
2144  return std::make_unique<MakeReducedProvenanceReader>(parentageIDLookup_);
2145  } else if (fileFormatVersion_.splitProductIDs()) {
2146  readParentageTree(inputType);
2147  return std::make_unique<MakeFullProvenanceReader>();
2148  } else if (fileFormatVersion_.perEventProductIDs()) {
2149  auto entryDescriptionMap = std::make_unique<EntryDescriptionMap>();
2150  readEntryDescriptionTree(*entryDescriptionMap, inputType);
2151  return std::make_unique<MakeOldProvenanceReader>(std::move(entryDescriptionMap));
2152  } else {
2153  return std::make_unique<MakeDummyProvenanceReader>();
2154  }
2155  }
void readEntryDescriptionTree(EntryDescriptionMap &entryDescriptionMap, InputType inputType)
Definition: RootFile.cc:639
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:364
void readParentageTree(InputType inputType)
Definition: RootFile.cc:685
def move
Definition: eostools.py:511
bool storedProductProvenanceUsed() const
bool perEventProductIDs() const
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:411
void edm::RootFile::markBranchToBeDropped ( bool  dropDescendants,
BranchDescription const &  branch,
std::set< BranchID > &  branchesToDrop,
std::map< BranchID, BranchID > const &  droppedToKeptAlias 
) const
private

Definition at line 1900 of file RootFile.cc.

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

Referenced by dropOnInputAndReorder().

1903  {
1904  if (dropDescendants) {
1905  branchChildren_->appendToDescendants(branch, branchesToDrop, droppedToKeptAlias);
1906  } else {
1907  branchesToDrop.insert(branch.branchID());
1908  }
1909  }
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:406
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
std::string const & edm::RootFile::newBranchToOldBranch ( std::string const &  newBranch) const
private

Definition at line 810 of file RootFile.cc.

References newBranchToOldBranch_.

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

810  {
811  std::map<std::string, std::string>::const_iterator it = newBranchToOldBranch_.find(newBranch);
812  if (it != newBranchToOldBranch_.end()) {
813  return it->second;
814  }
815  return newBranch;
816  }
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:401
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
bool edm::RootFile::nextProcessBlock_ ( ProcessBlockPrincipal )

Definition at line 1682 of file RootFile.cc.

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

1682  {
1684  if (endOfProcessBlocksReached()) {
1685  return false;
1686  }
1688  return true;
1689  }
1690  // With the current design, the RootFile should always be
1691  // set to a valid ProcessBlock entry in one of the TTrees
1692  // if it not at the end.
1694  // Try for next entry in the same TTree
1695  if (processBlockTrees_[currentProcessBlockTree_]->nextWithCache()) {
1696  return true;
1697  }
1698  // Next ProcessBlock TTree
1700  if (endOfProcessBlocksReached()) {
1701  return false;
1702  }
1703  // With current design there should always be at least one entry.
1704  // Initialize for that entry.
1705  processBlockTrees_[currentProcessBlockTree_]->setEntryNumber(0);
1707  return true;
1708  }
InputType inputType_
Definition: RootFile.h:414
bool initializeFirstProcessBlockEntry()
Definition: RootFile.cc:1671
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:1680
RootFile& edm::RootFile::operator= ( RootFile const &  )
delete
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
std::tuple< bool, bool > edm::RootFile::readCurrentEvent ( EventPrincipal cache,
bool  assertOnFailure = true 
)

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

1546  {
1547  bool found = true;
1548  bool succeeded = true;
1549  if (!eventTree_.current()) {
1550  found = false;
1551  return {found, succeeded};
1552  }
1553  auto evtAux = fillThisEventAuxiliary();
1554  if (!fileFormatVersion().lumiInEventID()) {
1555  //ugly, but will disappear when the backward compatibility is done with schema evolution.
1556  const_cast<EventID&>(evtAux.id()).setLuminosityBlockNumber(evtAux.oldLuminosityBlock());
1557  evtAux.resetObsoleteInfo();
1558  }
1560  EventSelectionIDVector eventSelectionIDs;
1561  BranchListIndexes branchListIndexes;
1562  if (!fillEventHistory(evtAux, eventSelectionIDs, branchListIndexes, assertOnFailure)) {
1563  succeeded = false;
1564  }
1565  runHelper_->overrideRunNumber(evtAux.id(), evtAux.isRealData());
1566 
1567  // We're not done ... so prepare the EventPrincipal
1568  eventTree_.insertEntryForIndex(principal.transitionIndex());
1569  auto history = processHistoryRegistry_->getMapped(evtAux.processHistoryID());
1570  principal.fillEventPrincipal(evtAux,
1571  history,
1572  std::move(eventSelectionIDs),
1573  std::move(branchListIndexes),
1575  *(makeProductProvenanceRetriever(principal.streamID().value())),
1577 
1578  // If this next assert shows up in performance profiling or significantly affects memory, then these three lines should be deleted.
1579  // The IndexIntoFile should guarantee that it never fails.
1581  ? *daqProvenanceHelper_->oldProcessHistoryID()
1582  : evtAux.processHistoryID());
1583  ProcessHistoryID const& reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(idToCheck);
1585 
1586  // report event read from file
1587  filePtr_->eventReadFromFile();
1588  return {found, succeeded};
1589  }
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 current() const
Definition: RootTree.h:126
bool fillEventHistory(EventAuxiliary &evtAux, EventSelectionIDVector &eventSelectionIDs, BranchListIndexes &branchListIndexes, bool assertOnFailure=true)
Definition: RootFile.cc:1337
EventAuxiliary const & fillThisEventAuxiliary()
Definition: RootFile.cc:1293
assert(be >=bs)
std::vector< EventSelectionID > EventSelectionIDVector
void fillEventToProcessBlockIndexes()
Definition: RootFile.cc:1317
std::vector< BranchListIndex > BranchListIndexes
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:118
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:142
def move
Definition: eostools.py:511
RootTree eventTree_
Definition: RootFile.h:384
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
ProcessHistoryID const & processHistoryID(int i) const
std::shared_ptr< ProductProvenanceRetriever > makeProductProvenanceRetriever(unsigned int iStreamIndex)
Definition: RootFile.cc:2157
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
bool useReducedProcessHistoryID() const
void edm::RootFile::readEntryDescriptionTree ( EntryDescriptionMap entryDescriptionMap,
InputType  inputType 
)
private

Definition at line 639 of file RootFile.cc.

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

Referenced by makeProvenanceReaderMaker().

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

Definition at line 1531 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.

1531  {
1534  // read the event
1535  auto [found, succeeded] = readCurrentEvent(principal, false);
1536  auto const& evtAux = principal.aux();
1537 
1538  runHelper_->checkRunConsistency(evtAux.run(), indexIntoFileIter_.run());
1539  runHelper_->checkLumiConsistency(evtAux.luminosityBlock(), indexIntoFileIter_.lumi());
1540 
1542  return succeeded;
1543  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const
assert(be >=bs)
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
std::tuple< bool, bool > readCurrentEvent(EventPrincipal &cache, bool assertOnFailure=true)
Definition: RootFile.cc:1546
void edm::RootFile::readEventHistoryTree ( )
private

Definition at line 1849 of file RootFile.cc.

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

Referenced by RootFile().

1849  {
1850  // Read in the event history tree, if we have one...
1851  if (fileFormatVersion().eventHistoryTree()) {
1852  history_ = std::make_unique<History>(); // propagate_const<T> has no reset() function
1853  eventHistoryTree_ = dynamic_cast<TTree*>(filePtr_->Get(poolNames::eventHistoryTreeName().c_str()));
1854  if (!eventHistoryTree_) {
1855  throw Exception(errors::EventCorruption) << "Failed to find the event history tree.\n";
1856  }
1857  }
1858  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:405
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:402
std::string const & eventHistoryTreeName()
Definition: BranchType.cc:224
void edm::RootFile::readFakeRun_ ( RunPrincipal runPrincipal)
std::shared_ptr<RunAuxiliary> edm::RootFile::readFakeRunAuxiliary_ ( )
void edm::RootFile::readLuminosityBlock_ ( LuminosityBlockPrincipal lumiPrincipal)

Definition at line 1783 of file RootFile.cc.

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

1783  {
1786  // Begin code for backward compatibility before the existence of lumi trees.
1787  if (!lumiTree_.isValid()) {
1789  return;
1790  }
1791  // End code for backward compatibility before the existence of lumi trees.
1792  if (not indexIntoFileIter_.entryContinues()) {
1794  // NOTE: we use 0 for the index since do not do delayed reads for LuminosityBlockPrincipals
1796  auto history = processHistoryRegistry_->getMapped(lumiPrincipal.aux().processHistoryID());
1797  lumiPrincipal.fillLuminosityBlockPrincipal(history, lumiTree_.resetAndGetRootDelayedReader());
1798  // Read in all the products now.
1799  lumiPrincipal.readAllFromSourceAndMergeImmediately();
1800  } else {
1801  auto history = processHistoryRegistry_->getMapped(lumiPrincipal.aux().processHistoryID());
1802  lumiPrincipal.fillLuminosityBlockPrincipal(history, nullptr);
1803  lumiPrincipal.setWillBeContinued(true);
1804  }
1806  }
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
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
bool isValid() const
Definition: RootTree.cc:123
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::readLuminosityBlockAuxiliary_ ( )

Definition at line 1745 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, dqmdumpme::lumi, edm::IndexIntoFile::IndexIntoFileItr::lumi(), edm::LuminosityBlockID::luminosityBlock(), lumiTree_, edm::LuminosityBlockID::run(), edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, savedRunAuxiliary_, and edm::RootTree::setEntryNumber().

1745  {
1748  // Begin code for backward compatibility before the existence of lumi trees.
1749  if (!lumiTree_.isValid()) {
1751  assert(eventEntry != IndexIntoFile::invalidEntry);
1752  assert(eventTree_.current(eventEntry));
1753  auto const evtAux = fillEventAuxiliary(eventEntry);
1754 
1755  LuminosityBlockID lumi = LuminosityBlockID(indexIntoFileIter_.run(), indexIntoFileIter_.lumi());
1756  runHelper_->overrideRunNumber(lumi);
1757  return std::make_shared<LuminosityBlockAuxiliary>(
1758  lumi.run(), lumi.luminosityBlock(), evtAux.time(), Timestamp::invalidTimestamp());
1759  }
1760  // End code for backward compatibility before the existence of lumi trees.
1762  std::shared_ptr<LuminosityBlockAuxiliary> lumiAuxiliary = fillLumiAuxiliary();
1763  assert(lumiAuxiliary->run() == indexIntoFileIter_.run());
1764  assert(lumiAuxiliary->luminosityBlock() == indexIntoFileIter_.lumi());
1765  runHelper_->overrideRunNumber(lumiAuxiliary->id());
1766  filePtr_->reportInputLumiSection(lumiAuxiliary->run(), lumiAuxiliary->luminosityBlock());
1767  if (lumiAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1769  if (eventEntry != IndexIntoFile::invalidEntry) {
1770  assert(eventTree_.current(eventEntry));
1771  auto const evtAux = fillEventAuxiliary(eventEntry);
1772 
1773  lumiAuxiliary->setBeginTime(evtAux.time());
1774  }
1775  lumiAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1776  }
1777  if (!fileFormatVersion().processHistorySameWithinRun() && savedRunAuxiliary_) {
1778  lumiAuxiliary->setProcessHistoryID(savedRunAuxiliary_->processHistoryID());
1779  }
1780  return lumiAuxiliary;
1781  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1396
static Timestamp invalidTimestamp()
Definition: Timestamp.h:82
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1312
RootTree lumiTree_
Definition: RootFile.h:385
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:375
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
bool current() const
Definition: RootTree.h:126
LuminosityBlockNumber_t lumi() const
assert(be >=bs)
long long EntryNumber_t
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
RootTree eventTree_
Definition: RootFile.h:384
list lumi
Definition: dqmdumpme.py:53
static constexpr EntryNumber_t invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:362
bool isValid() const
Definition: RootTree.cc:123
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
void edm::RootFile::readParentageTree ( InputType  inputType)
private

Definition at line 685 of file RootFile.cc.

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

Referenced by makeProvenanceReaderMaker().

685  {
686  // New format file
687  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
688  std::unique_ptr<TTree> parentageTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parentageTreeName().c_str())));
689  if (nullptr == parentageTree.get()) {
691  << "Could not find tree " << poolNames::parentageTreeName() << " in the input file.\n";
692  }
693 
694  Parentage parents;
695  Parentage* pParentageBuffer = &parents;
696  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), &pParentageBuffer);
697 
698  ParentageRegistry& registry = *ParentageRegistry::instance();
699 
700  parentageIDLookup_.reserve(parentageTree->GetEntries());
701  for (Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
702  roottree::getEntry(parentageTree.get(), i);
703  if (daqProvenanceHelper_) {
704  ParentageID const oldID = parents.id();
705  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
706  ParentageID newID = parents.id();
707  if (newID != oldID) {
708  daqProvenanceHelper_->setOldParentageIDToNew(oldID, newID);
709  }
710  }
711  // For thread safety, don't update global registries when a secondary source opens a file.
712  if (inputType != InputType::SecondarySource) {
713  registry.insertMapped(parents);
714  }
715  parentageIDLookup_.push_back(parents.id());
716  }
717  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), nullptr);
718  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:515
TPRegexp parents
Definition: eve_filter.cc:21
std::string const & parentageTreeName()
Definition: BranchType.cc:154
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::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:411
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:8
void edm::RootFile::readProcessBlock_ ( ProcessBlockPrincipal processBlockPrincipal)

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

1710  {
1712  RootTree* rootTree = processBlockTrees_[currentProcessBlockTree_].get();
1713  rootTree->insertEntryForIndex(0);
1714  assert(!rootTree->processName().empty());
1715  processBlockPrincipal.fillProcessBlockPrincipal(rootTree->processName(), rootTree->resetAndGetRootDelayedReader());
1716  }
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
void edm::RootFile::readRun_ ( RunPrincipal runPrincipal)

Definition at line 1718 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::IndexIntoFile::kRun, edm::RunPrincipal::mergeableRunProductMetadata(), edm::Primary, processHistoryRegistry_, edm::Principal::readAllFromSourceAndMergeImmediately(), edm::MergeableRunProductMetadata::readRun(), edm::RootTree::resetAndGetRootDelayedReader(), runHelper_, runTree_, and storedMergeableRunProductMetadata_.

1718  {
1719  MergeableRunProductMetadata* mergeableRunProductMetadata = nullptr;
1720  if (inputType_ == InputType::Primary) {
1721  mergeableRunProductMetadata = runPrincipal.mergeableRunProductMetadata();
1722  RootTree::EntryNumber const& entryNumber = runTree_.entryNumber();
1723  assert(entryNumber >= 0);
1724  mergeableRunProductMetadata->readRun(
1725  entryNumber, *storedMergeableRunProductMetadata_, IndexIntoFileItrHolder(indexIntoFileIter_));
1726  }
1727 
1728  if (!runHelper_->fakeNewRun()) {
1732  }
1733  // Begin code for backward compatibility before the existence of run trees.
1734  if (!runTree_.isValid()) {
1735  return;
1736  }
1737  // End code for backward compatibility before the existence of run trees.
1738  // NOTE: we use 0 for the index since do not do delayed reads for RunPrincipals
1740  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, runTree_.resetAndGetRootDelayedReader());
1741  // Read in all the products now.
1742  runPrincipal.readAllFromSourceAndMergeImmediately(mergeableRunProductMetadata);
1743  }
roottree::EntryNumber EntryNumber
Definition: RootTree.h:82
InputType inputType_
Definition: RootFile.h:414
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
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
DelayedReader * resetAndGetRootDelayedReader() const
Definition: RootTree.cc:142
RootTree runTree_
Definition: RootFile.h:386
EntryNumber const & entryNumber() const
Definition: RootTree.h:132
bool isValid() const
Definition: RootTree.cc:123
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:400
std::shared_ptr< RunAuxiliary > edm::RootFile::readRunAuxiliary_ ( )

Definition at line 1593 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(), edm::RunID::run(), submitPVValidationJobs::run, edm::IndexIntoFile::IndexIntoFileItr::run(), runHelper_, runTree_, savedRunAuxiliary(), savedRunAuxiliary_, and edm::RootTree::setEntryNumber().

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

Definition at line 1275 of file RootFile.cc.

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

1275  {
1276  // Report file opened.
1277  std::string const label = "source";
1278  std::string moduleName = "PoolSource";
1279  filePtr_->inputFileOpened(logicalFile_, inputType, moduleName, label, fid_.fid(), eventTree_.branchNames());
1280  }
std::vector< std::string > const & branchNames() const
Definition: RootTree.h:137
char const * label
FileID fid_
Definition: RootFile.h:365
std::string const logicalFile_
Definition: RootFile.h:359
std::string const & fid() const
Definition: FileID.h:19
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
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
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
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)
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)
void edm::RootFile::setAtEventEntry ( IndexIntoFile::EntryNumber_t  entry)

Definition at line 1591 of file RootFile.cc.

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

RootTree eventTree_
Definition: RootFile.h:384
list entry
Definition: mps_splice.py:68
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
bool edm::RootFile::setEntryAtEvent ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 1808 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1808  {
1811  return false;
1813  return true;
1814  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
RootTree eventTree_
Definition: RootFile.h:384
list lumi
Definition: dqmdumpme.py:53
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
bool edm::RootFile::setEntryAtItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)
inline

Definition at line 253 of file RootFile.h.

References setEntryAtEvent(), setEntryAtLumi(), and setEntryAtRun().

253  {
255  }
bool setEntryAtRun(RunNumber_t run)
Definition: RootFile.cc:1824
bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi)
Definition: RootFile.cc:1816
list lumi
Definition: dqmdumpme.py:53
bool setEntryAtEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
Definition: RootFile.cc:1808
bool edm::RootFile::setEntryAtLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1816 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1816  {
1819  return false;
1821  return true;
1822  }
RootTree lumiTree_
Definition: RootFile.h:385
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
list lumi
Definition: dqmdumpme.py:53
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
IndexIntoFileItr findLumiPosition(RunNumber_t run, LuminosityBlockNumber_t lumi) const
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
bool edm::RootFile::setEntryAtNextEventInLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1832 of file RootFile.cc.

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

1832  {
1835  }
1838  return false;
1839  if (run != indexIntoFileIter_.run())
1840  return false;
1841  if (lumi != indexIntoFileIter_.lumi())
1842  return false;
1843  //The following is used for its side effect of advancing the
1844  // eventTree entry.
1846  return true;
1847  }
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1312
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const
list lumi
Definition: dqmdumpme.py:53
bool edm::RootFile::setEntryAtRun ( RunNumber_t  run)

Definition at line 1824 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1824  {
1827  return false;
1829  return true;
1830  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
RootTree runTree_
Definition: RootFile.h:386
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:219
void edm::RootFile::setIfFastClonable ( int  remainingEvents,
int  remainingLumis 
)
private

Definition at line 720 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, edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFile_, indexIntoFileBegin_, indexIntoFileEnd_, edm::FileBlock::InitialEventsSkipped, edm::IndexIntoFile::iterationWillBeInEntryOrder(), edm::IndexIntoFile::kEvent, lumiTree_, edm::FileBlock::MaxEventsTooSmall, edm::FileBlock::MaxLumisTooSmall, edm::FileBlock::NoEventsInFile, noEventSort_, noRunLumiSort_, edm::FileBlock::NotProcessingEvents, edm::IndexIntoFile::numericalOrder, processingMode_, edm::FileBlock::RunOrLumiNotContiguous, edm::InputSource::RunsLumisAndEvents, skipAnyEvents_, and whyNotFastClonable_.

Referenced by RootFile().

720  {
721  if (fileFormatVersion().noMetaDataTrees() and !fileFormatVersion().storedProductProvenanceUsed()) {
722  //we must avoid copying the old branch which stored the per product per event provenance
724  return;
725  }
726  if (!fileFormatVersion().splitProductIDs()) {
728  return;
729  }
732  return;
733  }
734  // Find entry for first event in file
735  IndexIntoFile::IndexIntoFileItr it = indexIntoFileBegin_;
736  while (it != indexIntoFileEnd_ && it.getEntryType() != IndexIntoFile::kEvent) {
737  ++it;
738  }
739  if (it == indexIntoFileEnd_) {
741  return;
742  }
743 
744  // From here on, record all reasons we can't fast clone.
745  IndexIntoFile::SortOrder sortOrder =
750  }
751  if (skipAnyEvents_) {
753  }
754  if (remainingEvents >= 0 && eventTree_.entries() > remainingEvents) {
756  }
757  if (remainingLumis >= 0 && lumiTree_.entries() > remainingLumis) {
759  }
760  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
762  }
763  }
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
EntryNumber const & entries() const
Definition: RootTree.h:134
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:399
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
bool noEventSort_
Definition: RootFile.h:378
bool skipAnyEvents_
Definition: RootFile.h:376
RootTree eventTree_
Definition: RootFile.h:384
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:367
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:369
void edm::RootFile::setPosition ( IndexIntoFile::IndexIntoFileItr const &  position)

Definition at line 820 of file RootFile.cc.

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

820  {
822  }
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
void edm::RootFile::setPresenceInProductRegistry ( ProductRegistry inputProdDescReg,
StoredProcessBlockHelper const &  storedProcessBlockHelper 
)
private

Definition at line 1873 of file RootFile.cc.

References edm::BranchDescription::branchName(), edm::BranchDescription::branchType(), HLT_FULL_cff::distance, spr::find(), edm::BranchDescription::init(), edm::InProcess, newBranchToOldBranch(), processBlockTrees_, parallelization::processes, edm::StoredProcessBlockHelper::processesWithProcessBlockProducts(), edm::BranchDescription::processName(), edm::ProductRegistry::productListUpdator(), edm::BranchDescription::setDropped(), and treePointers_.

Referenced by RootFile().

1874  {
1875  // Set product presence information in the product registry.
1876  // "Presence" is a boolean that is true if and only if the TBranch exists
1877  // in the TTree (except it will be false for ProcessBlock products in non-Primary
1878  // input files).
1879  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
1880  for (auto& product : pList) {
1881  BranchDescription& prod = product.second;
1882  prod.init();
1883  if (prod.branchType() == InProcess) {
1884  std::vector<std::string> const& processes = storedProcessBlockHelper.processesWithProcessBlockProducts();
1885  auto it = std::find(processes.begin(), processes.end(), prod.processName());
1886  if (it != processes.end()) {
1887  auto index = std::distance(processes.begin(), it);
1888  processBlockTrees_[index]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
1889  } else {
1890  // Given current rules for saving BranchDescriptions, this case should only occur
1891  // in non-Primary sequences.
1892  prod.setDropped(true);
1893  }
1894  } else {
1895  treePointers_[prod.branchType()]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
1896  }
1897  }
1898  }
list processes
Run mode ##.
std::map< BranchKey, BranchDescription > ProductList
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
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:810
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 2111 of file RootFile.cc.

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

2113  {
2114  eventTree_.setSignals(preEventReadSource, postEventReadSource);
2115  }
void setSignals(signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *preEventReadSource, signalslot::Signal< void(StreamContext const &, ModuleCallingContext const &)> const *postEventReadSource)
Definition: RootTree.cc:508
RootTree eventTree_
Definition: RootFile.h:384
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
bool edm::RootFile::skipEntries ( unsigned int &  offset)
inline

Definition at line 275 of file RootFile.h.

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

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

Definition at line 1439 of file RootFile.cc.

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

1439  {
1440  while (offset > 0 && indexIntoFileIter_ != indexIntoFileEnd_) {
1441  int phIndexOfSkippedEvent = IndexIntoFile::invalidIndex;
1442  RunNumber_t runOfSkippedEvent = IndexIntoFile::invalidRun;
1445 
1447  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1448 
1449  // At the end of the file and there were no more events to skip
1450  if (skippedEventEntry == IndexIntoFile::invalidEntry)
1451  break;
1452 
1453  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1454  auto const evtAux = fillEventAuxiliary(skippedEventEntry);
1455  if (eventSkipperByID_->skipIt(runOfSkippedEvent, lumiOfSkippedEvent, evtAux.id().event())) {
1456  continue;
1457  }
1458  }
1459  if (duplicateChecker_ && !duplicateChecker_->checkDisabled() && !duplicateChecker_->noDuplicatesInFile()) {
1460  auto const evtAux = fillEventAuxiliary(skippedEventEntry);
1461  if (duplicateChecker_->isDuplicateAndCheckActive(
1462  phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, evtAux.id().event(), file_)) {
1463  continue;
1464  }
1465  }
1466  --offset;
1467  }
1468 
1469  while (offset < 0) {
1470  if (duplicateChecker_) {
1471  duplicateChecker_->disable();
1472  }
1473 
1474  int phIndexOfEvent = IndexIntoFile::invalidIndex;
1478 
1479  indexIntoFileIter_.skipEventBackward(phIndexOfEvent, runOfEvent, lumiOfEvent, eventEntry);
1480 
1481  if (eventEntry == IndexIntoFile::invalidEntry)
1482  break;
1483 
1484  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1485  auto const evtAux = fillEventAuxiliary(eventEntry);
1486  if (eventSkipperByID_->skipIt(runOfEvent, lumiOfEvent, evtAux.id().event())) {
1487  continue;
1488  }
1489  }
1490  ++offset;
1491  }
1493  }
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:1312
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)
bool edm::RootFile::skipThisEntry ( )
private

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

Referenced by getNextItemType().

829  {
831  return false;
832  }
833 
834  if (eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
835  // See first if the entire lumi or run is skipped, so we won't have to read the event Auxiliary in that case.
837  return true;
838  }
839 
840  // The Lumi is not skipped. If this is an event, see if the event is skipped.
842  auto eventAux = fillEventAuxiliary(indexIntoFileIter_.entry());
843  if (eventSkipperByID_->skipIt(indexIntoFileIter_.run(), indexIntoFileIter_.lumi(), eventAux.id().event())) {
844  return true;
845  }
846  }
847 
848  // Skip runs with no lumis if either lumisToSkip or lumisToProcess have been set to select lumis
850  // There are no lumis in this run, not even ones we will skip
852  return true;
853  }
854  // If we get here there are lumis in the run, check to see if we are skipping all of them
855  do {
857  return false;
858  }
859  } while (indexIntoFileIter_.skipLumiInRun());
860  return true;
861  }
862  }
863  return false;
864  }
EventAuxiliary fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1312
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:363
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
LuminosityBlockNumber_t lumi() const
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:370
static constexpr LuminosityBlockNumber_t invalidLumi
LuminosityBlockNumber_t peekAheadAtLumi() const
void edm::RootFile::updateFileBlock ( FileBlock fileBlock)

Definition at line 791 of file RootFile.cc.

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

791  {
792  std::vector<TTree*> processBlockTrees;
793  std::vector<std::string> processesWithProcessBlockTrees;
794  processBlockTrees.reserve(processBlockTrees_.size());
795  processesWithProcessBlockTrees.reserve(processBlockTrees_.size());
796  for (auto& processBlockTree : processBlockTrees_) {
797  processBlockTrees.push_back(processBlockTree->tree());
798  processesWithProcessBlockTrees.push_back(processBlockTree->processName());
799  }
800  fileBlock.updateTTreePointers(eventTree_.tree(),
802  lumiTree_.tree(),
804  runTree_.tree(),
805  runTree_.metaTree(),
806  std::move(processBlockTrees),
807  std::move(processesWithProcessBlockTrees));
808  }
RootTree lumiTree_
Definition: RootFile.h:385
TTree const * metaTree() const
Definition: RootTree.h:171
TTree const * tree() const
Definition: RootTree.h:169
def move
Definition: eostools.py:511
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
void edm::RootFile::validateFile ( InputType  inputType,
bool  usingGoToEvent 
)
private

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

1220  {
1221  if (!fid_.isValid()) {
1222  fid_ = FileID(createGlobalIdentifier());
1223  }
1224  if (!eventTree_.isValid()) {
1225  throw Exception(errors::EventCorruption) << "'Events' tree is corrupted or not present\n"
1226  << "in the input file.\n";
1227  }
1228  if (enforceGUIDInFileName_) {
1229  auto guidFromName = stemFromPath(file_);
1230  if (guidFromName != fid_.fid()) {
1232  << "GUID " << guidFromName << " extracted from file name " << file_
1233  << " is inconsistent with the GUID read from the file " << fid_.fid();
1234  }
1235  }
1236 
1237  if (fileFormatVersion().hasIndexIntoFile()) {
1238  if (runTree().entries() > 0) {
1240  }
1242  if (daqProvenanceHelper_) {
1243  std::vector<ProcessHistoryID>& phidVec = indexIntoFile_.setProcessHistoryIDs();
1244  for (auto& phid : phidVec) {
1245  phid = daqProvenanceHelper_->mapProcessHistoryID(phid);
1246  }
1247  }
1249  }
1250  } else {
1253  }
1254 
1258  std::shared_ptr<IndexIntoFile::EventFinder>(std::make_shared<RootFileEventFinder>(eventTree_)));
1259  // We fill the event numbers explicitly if we need to find events in closed files,
1260  // such as for secondary files (or secondary sources) or if duplicate checking across files.
1261  bool needEventNumbers = false;
1262  bool needIndexesForDuplicateChecker =
1263  duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
1264  if (inputType != InputType::Primary || needIndexesForDuplicateChecker || usingGoToEvent) {
1265  needEventNumbers = true;
1266  }
1267  bool needEventEntries = false;
1268  if (inputType != InputType::Primary || !noEventSort_) {
1269  // We need event entries for sorting or for secondary files or sources.
1270  needEventEntries = true;
1271  }
1272  indexIntoFile_.fillEventNumbersOrEntries(needEventNumbers, needEventEntries);
1273  }
void fillEventNumbersOrEntries(bool needEventNumbers, bool needEventEntries) const
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:407
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:245
bool enforceGUIDInFileName_
Definition: RootFile.h:379
bool empty() const
True if no runs, lumis, or events are in the file.
std::string_view stemFromPath(std::string_view path)
Definition: stemFromPath.cc:4
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:361
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:412
EntryNumber const & entries() const
Definition: RootTree.h:134
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
std::string const & fid() const
Definition: FileID.h:19
RootTree const & runTree() const
Definition: RootFile.h:244
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)
bool isValid() const
Definition: RootTree.cc:123
void fillIndexIntoFile()
Definition: RootFile.cc:995
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:368
bool useReducedProcessHistoryID() const
void setEventFinder(std::shared_ptr< EventFinder > ptr)
std::string const file_
Definition: RootFile.h:358
bool edm::RootFile::wasFirstEventJustRead ( ) const

Definition at line 934 of file RootFile.cc.

References indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, dqmdumpme::lumi, submitPVValidationJobs::run, and edm::IndexIntoFile::IndexIntoFileItr::skipEventBackward().

934  {
935  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
936  int phIndex;
939  IndexIntoFile::EntryNumber_t eventEntry;
940  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
941  itr.skipEventBackward(phIndex, run, lumi, eventEntry);
942  return eventEntry == IndexIntoFile::invalidEntry;
943  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
list lumi
Definition: dqmdumpme.py:53
static constexpr EntryNumber_t invalidEntry
unsigned int RunNumber_t
bool edm::RootFile::wasLastEventJustRead ( ) const

Definition at line 928 of file RootFile.cc.

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

928  {
929  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
930  itr.advanceToEvent();
931  return itr.getEntryType() == IndexIntoFile::kEnd;
932  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:371
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

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().

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().

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

Definition at line 393 of file RootFile.h.

Referenced by RootFile().

bool edm::RootFile::branchListIndexesUnchanged_
private

Definition at line 382 of file RootFile.h.

Referenced by branchListIndexesUnchanged(), and RootFile().

unsigned int edm::RootFile::currentProcessBlockTree_ = 0
private
edm::propagate_const<std::unique_ptr<DaqProvenanceHelper> > edm::RootFile::daqProvenanceHelper_
private
edm::propagate_const<std::shared_ptr<DuplicateChecker> > edm::RootFile::duplicateChecker_
private
edm::propagate_const<TClass*> edm::RootFile::edProductClass_
private

Definition at line 413 of file RootFile.h.

Referenced by dropOnInputAndReorder().

bool edm::RootFile::enforceGUIDInFileName_
private

Definition at line 379 of file RootFile.h.

Referenced by validateFile().

EventAuxiliary edm::RootFile::eventAuxCache_
private

Definition at line 383 of file RootFile.h.

Referenced by fillThisEventAuxiliary().

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

Definition at line 402 of file RootFile.h.

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

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

Definition at line 373 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

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

Definition at line 374 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

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

Definition at line 410 of file RootFile.h.

Referenced by eventProductProvenanceRetriever(), and makeProductProvenanceRetriever().

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 edm::RootFile::eventToProcessBlockIndexes_
private

Definition at line 403 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes(), and readCurrentEvent().

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

Definition at line 404 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes().

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

Definition at line 365 of file RootFile.h.

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

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

Definition at line 364 of file RootFile.h.

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

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

Definition at line 397 of file RootFile.h.

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

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

Definition at line 381 of file RootFile.h.

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

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& edm::RootFile::indexIntoFile_
private
IndexIntoFile::IndexIntoFileItr edm::RootFile::indexIntoFileBegin_
private

Definition at line 369 of file RootFile.h.

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

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

Definition at line 366 of file RootFile.h.

Referenced by indexIntoFileSharedPtr().

InputType edm::RootFile::inputType_
private
IndexIntoFile::EntryNumber_t edm::RootFile::lastEventEntryNumberRead_
private

Definition at line 391 of file RootFile.h.

Referenced by fillIndexIntoFile(), and fillThisEventAuxiliary().

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

Definition at line 359 of file RootFile.h.

Referenced by reportOpened().

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

Definition at line 401 of file RootFile.h.

Referenced by newBranchToOldBranch(), and RootFile().

bool edm::RootFile::noEventSort_
private

Definition at line 378 of file RootFile.h.

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

bool edm::RootFile::noRunLumiSort_
private

Definition at line 377 of file RootFile.h.

Referenced by goToEvent(), and setIfFastClonable().

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

Definition at line 368 of file RootFile.h.

Referenced by validateFile().

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

Definition at line 411 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and readParentageTree().

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

Definition at line 395 of file RootFile.h.

Referenced by fillEventToProcessBlockIndexes(), and fillProcessBlockHelper_().

std::vector<edm::propagate_const<std::unique_ptr<RootTree> > > edm::RootFile::processBlockTrees_
private
ProcessConfiguration const& edm::RootFile::processConfiguration_
private

Definition at line 360 of file RootFile.h.

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

Definition at line 399 of file RootFile.h.

Referenced by getNextItemType(), and setIfFastClonable().

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

Definition at line 392 of file RootFile.h.

Referenced by productRegistry(), and RootFile().

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().

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

Definition at line 409 of file RootFile.h.

Referenced by makeProductProvenanceRetriever(), and RootFile().

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

Definition at line 375 of file RootFile.h.

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

bool edm::RootFile::skipAnyEvents_
private

Definition at line 376 of file RootFile.h.

Referenced by setIfFastClonable().

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

Definition at line 372 of file RootFile.h.

Referenced by readRun_(), and RootFile().

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

Definition at line 396 of file RootFile.h.

Referenced by fillProcessBlockHelper_(), and RootFile().

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

Definition at line 398 of file RootFile.h.

Referenced by initAssociationsFromSecondary().

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().

int edm::RootFile::whyNotFastClonable_
private

Definition at line 380 of file RootFile.h.

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