CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::RootFile Class Reference

#include <RootFile.h>

Public Types

typedef std::array< RootTree
*, NumBranchTypes
RootTreePtrArray
 

Public Member Functions

std::shared_ptr
< BranchIDListHelper const > 
branchIDListHelper () const
 
std::shared_ptr
< BranchIDListHelper > & 
branchIDListHelper ()
 
bool branchListIndexesUnchanged () const
 
void close ()
 
bool containsItem (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
 
std::unique_ptr< FileBlockcreateFileBlock () const
 
EventAuxiliary const & eventAux () const
 
EventID const & eventID () const
 
RootTree const & eventTree () const
 
std::string const & file () const
 
FileFormatVersion fileFormatVersion () const
 
IndexIntoFile::EntryType getNextItemType (RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
 
bool goToEvent (EventID const &eventID)
 
std::array< bool,
NumBranchTypes > const & 
hasNewlyDroppedBranch () const
 
IndexIntoFile::IndexIntoFileItr indexIntoFileIter () const
 
std::shared_ptr< IndexIntoFile
const > 
indexIntoFileSharedPtr () const
 
std::shared_ptr< IndexIntoFile > & indexIntoFileSharedPtr ()
 
void initAssociationsFromSecondary (std::vector< BranchID > const &)
 
RootTree const & lumiTree () const
 
bool modifiedIDs () const
 
bool nextEventEntry ()
 
RootFileoperator= (RootFile const &)=delete
 
std::shared_ptr
< ProductRegistry const > 
productRegistry () const
 
bool readCurrentEvent (EventPrincipal &cache)
 
void readEvent (EventPrincipal &cache)
 
void readFakeRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadFakeRunAuxiliary_ ()
 
void readLuminosityBlock_ (LuminosityBlockPrincipal &lumiPrincipal)
 
std::shared_ptr
< LuminosityBlockAuxiliary
readLuminosityBlockAuxiliary_ ()
 
void readRun_ (RunPrincipal &runPrincipal)
 
std::shared_ptr< RunAuxiliaryreadRunAuxiliary_ ()
 
void reportOpened (std::string const &inputType)
 
void rewind ()
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, bool dropDescendantsOfDroppedProducts, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool labelRawDataLikeMC, bool usingGoToEvent, bool enablePrefetching)
 
 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)
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, unsigned int nStreams, 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)
 
 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 setToLastEntry ()
 
bool skipEntries (unsigned int &offset)
 
bool skipEvents (int &offset)
 
bool wasFirstEventJustRead () const
 
bool wasLastEventJustRead () const
 
int whyNotFastClonable () const
 
 ~RootFile ()
 

Private Member Functions

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

Private Attributes

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

Detailed Description

Definition at line 60 of file RootFile.h.

Member Typedef Documentation

Definition at line 62 of file RootFile.h.

Constructor & Destructor Documentation

edm::RootFile::RootFile ( std::string const &  fileName,
ProcessConfiguration const &  processConfiguration,
std::string const &  logicalFileName,
std::shared_ptr< InputFile filePtr,
std::shared_ptr< EventSkipperByID eventSkipperByID,
bool  skipAnyEvents,
int  remainingEvents,
int  remainingLumis,
unsigned int  nStreams,
unsigned int  treeCacheSize,
int  treeMaxVirtualSize,
InputSource::ProcessingMode  processingMode,
RunHelperBase runHelper,
bool  noEventSort,
ProductSelectorRules const &  productSelectorRules,
InputType  inputType,
std::shared_ptr< BranchIDListHelper branchIDListHelper,
std::shared_ptr< ThinnedAssociationsHelper thinnedAssociationsHelper,
std::vector< BranchID > const *  associationsFromSecondary,
std::shared_ptr< DuplicateChecker duplicateChecker,
bool  dropDescendantsOfDroppedProducts,
ProcessHistoryRegistry processHistoryRegistry,
std::vector< std::shared_ptr< IndexIntoFile > > const &  indexesIntoFiles,
std::vector< std::shared_ptr< IndexIntoFile > >::size_type  currentIndexIntoFile,
std::vector< ProcessHistoryID > &  orderedProcessHistoryIDs,
bool  bypassVersionCheck,
bool  labelRawDataLikeMC,
bool  usingGoToEvent,
bool  enablePrefetching 
)

Definition at line 125 of file RootFile.cc.

References 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, edm::IndexIntoFile::doneFileInitialization(), dropOnInput(), edm::IndexIntoFile::end(), edm::errors::EventCorruption, edm::poolNames::eventHistoryBranchName(), eventProcessHistoryIDs_, eventProcessHistoryIter_, eventSkipperByID_, edm::FileBlock::EventsOrLumisSelectedByID, eventTree_, Exception, fid_, file(), fileFormatVersion(), fileFormatVersion_, edm::poolNames::fileFormatVersionBranchName(), edm::poolNames::fileIdentifierBranchName(), filePtr_, edm::errors::FileReadError, fileThinnedAssociationsHelper_, edm::IndexIntoFile::firstAppearanceOrder, edm::BranchDescription::friendlyClassName(), edm::friendlyname::friendlyName(), edm::roottree::getEntry(), hasNewlyDroppedBranch_, edm::FileFormatVersion::hasThinnedAssociations(), i, edm::poolNames::idToParameterSetBlobsBranchName(), indexIntoFile_, indexIntoFileBegin_, edm::poolNames::indexIntoFileBranchName(), indexIntoFileEnd_, indexIntoFileIter_, edm::InEvent, edm::BranchDescription::init(), initializeDuplicateChecker(), edm::InLumi, edm::InRun, edm::pset::Registry::insertMapped(), edm::pset::Registry::instance(), lumiTree_, makeProvenanceReaderMaker(), edm::poolNames::metaDataTreeName(), edm::poolNames::moduleDescriptionMapBranchName(), newBranchToOldBranch(), newBranchToOldBranch_, edm::IndexIntoFile::numericalOrder, edm::poolNames::parameterSetMapBranchName(), edm::poolNames::parameterSetsTreeName(), edm::Primary, edm::poolNames::processConfigurationBranchName(), edm::poolNames::processHistoryBranchName(), edm::poolNames::processHistoryMapBranchName(), parseEventContent::prod, 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::setRefCoreStreamer(), edm::source(), AlCaHLTBitMon_QueryRunRegistry::string, edm::poolNames::thinnedAssociationsHelperBranchName(), edm::RootTree::trainCache(), edm::roottree::trainCache(), treePointers_, edm::errors::UnimplementedFeature, edm::BranchDescription::updateFriendlyClassName(), validateFile(), and whyNotFastClonable_.

153  :
154  file_(fileName),
155  logicalFile_(logicalFileName),
157  processHistoryRegistry_(&processHistoryRegistry),
158  filePtr_(filePtr),
159  eventSkipperByID_(eventSkipperByID),
161  fid_(),
162  indexIntoFileSharedPtr_(new IndexIntoFile),
164  orderedProcessHistoryIDs_(orderedProcessHistoryIDs),
171  skipAnyEvents_(skipAnyEvents),
176  eventAux_(),
177  eventTree_(filePtr, InEvent, nStreams, treeMaxVirtualSize, treeCacheSize, roottree::defaultLearningEntries, enablePrefetching, inputType),
178  lumiTree_(filePtr, InLumi, 1, treeMaxVirtualSize, roottree::defaultNonEventCacheSize, roottree::defaultNonEventLearningEntries, enablePrefetching, inputType),
179  runTree_(filePtr, InRun, 1, treeMaxVirtualSize, roottree::defaultNonEventCacheSize, roottree::defaultNonEventLearningEntries, enablePrefetching, inputType),
180  treePointers_(),
183  branchIDLists_(),
186  thinnedAssociationsHelper_(thinnedAssociationsHelper),
188  runHelper_(runHelper),
190  eventHistoryTree_(nullptr),
193  history_(),
194  branchChildren_(new BranchChildren),
195  duplicateChecker_(duplicateChecker),
201  edProductClass_(TClass::GetClass("edm::WrapperBase")) {
202 
203  hasNewlyDroppedBranch_.fill(false);
204 
208 
209  // Read the metadata tree.
210  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
211  std::unique_ptr<TTree> metaDataTree(dynamic_cast<TTree *>(filePtr_->Get(poolNames::metaDataTreeName().c_str())));
212  if(nullptr == metaDataTree.get()) {
213  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::metaDataTreeName()
214  << " in the input file.\n";
215  }
216 
217  // To keep things simple, we just read in every possible branch that exists.
218  // We don't pay attention to which branches exist in which file format versions
219 
220  FileFormatVersion *fftPtr = &fileFormatVersion_;
221  if(metaDataTree->FindBranch(poolNames::fileFormatVersionBranchName().c_str()) != nullptr) {
222  TBranch *fft = metaDataTree->GetBranch(poolNames::fileFormatVersionBranchName().c_str());
223  fft->SetAddress(&fftPtr);
224  roottree::getEntry(fft, 0);
225  metaDataTree->SetBranchAddress(poolNames::fileFormatVersionBranchName().c_str(), &fftPtr);
226  }
227 
228  FileID *fidPtr = &fid_;
229  if(metaDataTree->FindBranch(poolNames::fileIdentifierBranchName().c_str()) != nullptr) {
230  metaDataTree->SetBranchAddress(poolNames::fileIdentifierBranchName().c_str(), &fidPtr);
231  }
232 
233  IndexIntoFile *iifPtr = &indexIntoFile_;
234  if(metaDataTree->FindBranch(poolNames::indexIntoFileBranchName().c_str()) != nullptr) {
235  metaDataTree->SetBranchAddress(poolNames::indexIntoFileBranchName().c_str(), &iifPtr);
236  }
237 
238  // Need to read to a temporary registry so we can do a translation of the BranchKeys.
239  // This preserves backward compatibility against friendly class name algorithm changes.
240  ProductRegistry inputProdDescReg;
241  ProductRegistry *ppReg = &inputProdDescReg;
242  metaDataTree->SetBranchAddress(poolNames::productDescriptionBranchName().c_str(), (&ppReg));
243 
244  typedef std::map<ParameterSetID, ParameterSetBlob> PsetMap;
245  PsetMap psetMap;
246  PsetMap *psetMapPtr = &psetMap;
247  if(metaDataTree->FindBranch(poolNames::parameterSetMapBranchName().c_str()) != nullptr) {
248  //backward compatibility
249  assert(!fileFormatVersion().parameterSetsTree());
250  metaDataTree->SetBranchAddress(poolNames::parameterSetMapBranchName().c_str(), &psetMapPtr);
251  } else {
252  assert(fileFormatVersion().parameterSetsTree());
253  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
254  std::unique_ptr<TTree> psetTree(dynamic_cast<TTree *>(filePtr_->Get(poolNames::parameterSetsTreeName().c_str())));
255  if(nullptr == psetTree.get()) {
256  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::parameterSetsTreeName()
257  << " in the input file.\n";
258  }
259 
260  typedef std::pair<ParameterSetID, ParameterSetBlob> IdToBlobs;
261  IdToBlobs idToBlob;
262  IdToBlobs* pIdToBlob = &idToBlob;
263  psetTree->SetBranchAddress(poolNames::idToParameterSetBlobsBranchName().c_str(), &pIdToBlob);
264 
265  std::unique_ptr<TTreeCache> psetTreeCache = roottree::trainCache(psetTree.get(), *filePtr_, roottree::defaultNonEventCacheSize, "*");
266  psetTreeCache->SetEnablePrefetching(false);
267  filePtr_->SetCacheRead(psetTreeCache.get());
268  for(Long64_t i = 0; i != psetTree->GetEntries(); ++i) {
269  psetTree->GetEntry(i);
270  psetMap.insert(idToBlob);
271  }
272  filePtr_->SetCacheRead(0);
273  }
274 
275  // backward compatibility
277  ProcessHistoryRegistry::collection_type *pHistMapPtr = &pHistMap;
278  if(metaDataTree->FindBranch(poolNames::processHistoryMapBranchName().c_str()) != nullptr) {
279  metaDataTree->SetBranchAddress(poolNames::processHistoryMapBranchName().c_str(), &pHistMapPtr);
280  }
281 
283  ProcessHistoryRegistry::vector_type *pHistVectorPtr = &pHistVector;
284  if(metaDataTree->FindBranch(poolNames::processHistoryBranchName().c_str()) != nullptr) {
285  metaDataTree->SetBranchAddress(poolNames::processHistoryBranchName().c_str(), &pHistVectorPtr);
286  }
287 
288  // backward compatibility
289  ProcessConfigurationVector processConfigurations;
290  ProcessConfigurationVector* procConfigVectorPtr = &processConfigurations;
291  if(metaDataTree->FindBranch(poolNames::processConfigurationBranchName().c_str()) != nullptr) {
292  metaDataTree->SetBranchAddress(poolNames::processConfigurationBranchName().c_str(), &procConfigVectorPtr);
293  }
294 
295  std::unique_ptr<BranchIDLists> branchIDListsAPtr(new BranchIDLists);
296  BranchIDLists* branchIDListsPtr = branchIDListsAPtr.get();
297  if(metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) != nullptr) {
298  metaDataTree->SetBranchAddress(poolNames::branchIDListBranchName().c_str(), &branchIDListsPtr);
299  }
300 
301  if(inputType != InputType::SecondarySource) {
302  fileThinnedAssociationsHelper_ = std::make_unique<ThinnedAssociationsHelper>(); // propagate_const<T> has no reset() function
303  ThinnedAssociationsHelper* thinnedAssociationsHelperPtr = fileThinnedAssociationsHelper_.get();
304  if(metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) != nullptr) {
305  metaDataTree->SetBranchAddress(poolNames::thinnedAssociationsHelperBranchName().c_str(), &thinnedAssociationsHelperPtr);
306  }
307  }
308 
309  BranchChildren* branchChildrenBuffer = branchChildren_.get();
310  if(metaDataTree->FindBranch(poolNames::productDependenciesBranchName().c_str()) != nullptr) {
311  metaDataTree->SetBranchAddress(poolNames::productDependenciesBranchName().c_str(), &branchChildrenBuffer);
312  }
313 
314  // backward compatibility
315  std::vector<EventProcessHistoryID> *eventHistoryIDsPtr = &eventProcessHistoryIDs_;
316  if(metaDataTree->FindBranch(poolNames::eventHistoryBranchName().c_str()) != nullptr) {
317  metaDataTree->SetBranchAddress(poolNames::eventHistoryBranchName().c_str(), &eventHistoryIDsPtr);
318  }
319 
320  if(metaDataTree->FindBranch(poolNames::moduleDescriptionMapBranchName().c_str()) != nullptr) {
321  if(metaDataTree->GetBranch(poolNames::moduleDescriptionMapBranchName().c_str())->GetSplitLevel() != 0) {
322  metaDataTree->SetBranchStatus((poolNames::moduleDescriptionMapBranchName() + ".*").c_str(), 0);
323  } else {
324  metaDataTree->SetBranchStatus(poolNames::moduleDescriptionMapBranchName().c_str(), 0);
325  }
326  }
327 
328  // Here we read the metadata tree
329  roottree::getEntry(metaDataTree.get(), 0);
330 
332 
333  // Here we read the event history tree, if we have one.
335 
337  if(!fileFormatVersion().triggerPathsTracked()) {
338  ParameterSetConverter converter(psetMap, psetIdConverter, fileFormatVersion().parameterSetsByReference());
339  } else {
340  // Merge into the parameter set registry.
341  pset::Registry& psetRegistry = *pset::Registry::instance();
342  for(auto const& psetEntry : psetMap) {
343  ParameterSet pset(psetEntry.second.pset());
344  pset.setID(psetEntry.first);
345  // For thread safety, don't update global registries when a secondary source opens a file.
346  if(inputType != InputType::SecondarySource) {
347  psetRegistry.insertMapped(pset);
348  }
349  }
350  }
351  if(!fileFormatVersion().splitProductIDs()) {
352  // Old provenance format input file. Create a provenance adaptor.
353  // propagate_const<T> has no reset() function
354  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
355  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, true);
356  // Fill in the branchIDLists branch from the provenance adaptor
357  branchIDLists_ = provenanceAdaptor_->branchIDLists();
358  } else {
359  if(!fileFormatVersion().triggerPathsTracked()) {
360  // New provenance format, but change in ParameterSet Format. Create a provenance adaptor.
361  // propagate_const<T> has no reset() function
362  provenanceAdaptor_ = std::make_unique<ProvenanceAdaptor>(
363  inputProdDescReg, pHistMap, pHistVector, processConfigurations, psetIdConverter, false);
364  }
365  // New provenance format input file. The branchIDLists branch was read directly from the input file.
366  if(metaDataTree->FindBranch(poolNames::branchIDListBranchName().c_str()) == nullptr) {
368  << "Failed to find branchIDLists branch in metaData tree.\n";
369  }
370  branchIDLists_.reset(branchIDListsAPtr.release());
371  }
372 
374  if(metaDataTree->FindBranch(poolNames::thinnedAssociationsHelperBranchName().c_str()) == nullptr) {
376  << "Failed to find thinnedAssociationsHelper branch in metaData tree.\n";
377  }
378  }
379 
380  if(!bypassVersionCheck) {
381  checkReleaseVersion(pHistVector, file());
382  }
383 
384  if(labelRawDataLikeMC) {
385  std::string const rawData("FEDRawDataCollection");
386  std::string const source("source");
387  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
388  BranchKey finder(rawData, source, "", "");
389  ProductRegistry::ProductList::iterator it = pList.lower_bound(finder);
390  if(it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source) {
391  // We found raw data with a module label of source.
392  // We need to change the module label and process name.
393  // Create helper.
394  it->second.init();
395  // propagate_const<T> has no reset() function
396  daqProvenanceHelper_ = std::make_unique<DaqProvenanceHelper>(it->second.unwrappedTypeID());
397  // Create the new branch description
398  BranchDescription const& newBD = daqProvenanceHelper_->branchDescription();
399  // Save info from the old and new branch descriptions
400  daqProvenanceHelper_->saveInfo(it->second, newBD);
401  // Map the new branch name to the old branch name.
402  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), it->second.branchName()));
403  // Remove the old branch description from the product Registry.
404  pList.erase(it);
405  // Check that there was only one.
406  it = pList.lower_bound(finder);
407  assert(!(it != pList.end() && it->first.friendlyClassName() == rawData && it->first.moduleLabel() == source));
408  // Insert the new branch description into the product registry.
409  inputProdDescReg.copyProduct(newBD);
410  // Fix up other per file metadata.
411  daqProvenanceHelper_->fixMetaData(processConfigurations, pHistVector);
412  daqProvenanceHelper_->fixMetaData(*branchIDLists_);
413  daqProvenanceHelper_->fixMetaData(*branchChildren_);
414  }
415  }
416 
417  for(auto const& history : pHistVector) {
418  processHistoryRegistry.registerProcessHistory(history);
419  }
420 
422 
423  // Update the branch id info. This has to be done before validateFile since
424  // depending on the file format, the branchIDListHelper_ may have its fixBranchListIndexes call made
425  if(inputType == InputType::Primary) {
426  branchListIndexesUnchanged_ = branchIDListHelper_->updateFromInput(*branchIDLists_);
427  }
428 
429  validateFile(inputType, usingGoToEvent);
430 
431  // Here, we make the class that will make the ProvenanceReader
432  // It reads whatever trees it needs.
433  // propagate_const<T> has no reset() function
434  provenanceReaderMaker_ = std::unique_ptr<MakeProvenanceReader>(makeProvenanceReaderMaker(inputType).release());
435 
436  // Merge into the hashed registries.
437  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
439  }
440 
441  initializeDuplicateChecker(indexesIntoFiles, currentIndexIntoFile);
445  eventProcessHistoryIter_ = eventProcessHistoryIDs_.begin();
446 
447  // Set product presence information in the product registry.
448  ProductRegistry::ProductList& pList = inputProdDescReg.productListUpdator();
449  for(auto& product : pList) {
450  BranchDescription& prod = product.second;
451  prod.init();
452  treePointers_[prod.branchType()]->setPresence(prod, newBranchToOldBranch(prod.branchName()));
453  }
454 
455  std::unique_ptr<ProductRegistry> newReg(new ProductRegistry);
456 
457  // Do the translation from the old registry to the new one
458  {
459  ProductRegistry::ProductList const& prodList = inputProdDescReg.productList();
460  for(auto const& product : prodList) {
461  BranchDescription const& prod = product.second;
462  std::string newFriendlyName = friendlyname::friendlyName(prod.className());
463  if(newFriendlyName == prod.friendlyClassName()) {
464  newReg->copyProduct(prod);
465  } else {
466  if(fileFormatVersion().splitProductIDs()) {
468  << "Cannot change friendly class name algorithm without more development work\n"
469  << "to update BranchIDLists and ThinnedAssociationsHelper. Contact the framework group.\n";
470  }
471  BranchDescription newBD(prod);
472  newBD.updateFriendlyClassName();
473  newReg->copyProduct(newBD);
474  newBranchToOldBranch_.insert(std::make_pair(newBD.branchName(), prod.branchName()));
475  }
476  }
477  dropOnInput(*newReg, productSelectorRules, dropDescendants, inputType);
478  if(inputType == InputType::SecondaryFile) {
479  thinnedAssociationsHelper->updateFromSecondaryInput(*fileThinnedAssociationsHelper_,
480  *associationsFromSecondary);
481  } else if (inputType == InputType::Primary) {
482  thinnedAssociationsHelper->updateFromPrimaryInput(*fileThinnedAssociationsHelper_);
483  }
484  // freeze the product registry
485  newReg->setFrozen(inputType != InputType::Primary);
486  productRegistry_.reset(newReg.release());
487  }
488 
489  // Set up information from the product registry.
490  ProductRegistry::ProductList const& prodList = productRegistry()->productList();
491  for(auto const& product : prodList) {
492  BranchDescription const& prod = product.second;
493  treePointers_[prod.branchType()]->addBranch(product.first, prod,
494  newBranchToOldBranch(prod.branchName()));
495  }
496 
497  // Determine if this file is fast clonable.
498  setIfFastClonable(remainingEvents, remainingLumis);
499 
500  setRefCoreStreamer(true); // backward compatibility
501 
502  // We are done with our initial reading of EventAuxiliary.
504 
505  // Tell the event tree to begin training at the next read.
507 
508  // Train the run and lumi trees.
509  runTree_.trainCache("*");
510  lumiTree_.trainCache("*");
511  }
void dropOnInput(ProductRegistry &reg, ProductSelectorRules const &rules, bool dropDescendants, InputType inputType)
Definition: RootFile.cc:1666
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:480
std::string const & idToParameterSetBlobsBranchName()
Definition: BranchType.cc:255
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:280
std::vector< ProcessConfiguration > ProcessConfigurationVector
int i
Definition: DBlmapReader.cc:9
std::string const & BranchTypeToAuxiliaryBranchName(BranchType const &branchType)
Definition: BranchType.cc:115
unsigned int const defaultNonEventLearningEntries
Definition: RootTree.h:40
void doneFileInitialization() const
Clears the temporary vector of event numbers to reduce memory usage.
std::vector< BranchIDList > BranchIDLists
Definition: BranchIDList.h:19
std::shared_ptr< BranchIDLists const > branchIDLists_
Definition: RootFile.h:278
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:205
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
static std::string const source("source")
int whyNotFastClonable_
Definition: RootFile.h:268
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:254
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:281
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:284
std::map< BranchKey, BranchDescription > ProductList
assert(m_qm.get())
edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:257
RootTree lumiTree_
Definition: RootFile.h:273
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:265
void setRefCoreStreamer(bool resetAll=false)
processConfiguration
Definition: Schedule.cc:374
std::string const & fileFormatVersionBranchName()
Definition: BranchType.cc:218
IndexIntoFileItr begin(SortOrder sortOrder) const
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:282
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
void trainCache(char const *branchNames)
Definition: RootTree.cc:449
std::shared_ptr< ProductRegistry const > productRegistry() const
Definition: RootFile.h:165
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:296
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:255
std::string const & parameterSetsTreeName()
Definition: BranchType.cc:251
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:293
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:264
FileID fid_
Definition: RootFile.h:256
std::string const logicalFile_
Definition: RootFile.h:250
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
std::string const & processHistoryMapBranchName()
Definition: BranchType.cc:193
bool noEventSort_
Definition: RootFile.h:267
std::string friendlyName(std::string const &iFullName)
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:276
std::string const & indexIntoFileBranchName()
Definition: BranchType.cc:233
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:238
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:286
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:291
bool skipAnyEvents_
Definition: RootFile.h:266
RootTree eventTree_
Definition: RootFile.h:272
std::map< ParameterSetID, ParameterSetID > ParameterSetIdConverter
BranchListIndexes branchListIndexes_
Definition: RootFile.h:287
std::string const & metaDataTreeName()
Definition: BranchType.cc:168
std::string const & parameterSetMapBranchName()
Definition: BranchType.cc:183
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:288
std::string const & processHistoryBranchName()
Definition: BranchType.cc:198
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
RootTree runTree_
Definition: RootFile.h:274
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:292
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:269
static EntryNumber_t const invalidEntry
ProcessConfiguration const & processConfiguration_
Definition: RootFile.h:251
std::shared_ptr< ProductRegistry const > productRegistry_
Definition: RootFile.h:277
void setIfFastClonable(int remainingEvents, int remainingLumis)
Definition: RootFile.cc:599
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:289
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
std::string const & file() const
Definition: RootFile.h:164
std::string const & productDescriptionBranchName()
Definition: BranchType.cc:173
std::string const & processConfigurationBranchName()
Definition: BranchType.cc:203
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:260
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
bool branchListIndexesUnchanged_
Definition: RootFile.h:270
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:285
unsigned int const defaultNonEventCacheSize
Definition: RootTree.h:38
RootTreePtrArray treePointers_
Definition: RootFile.h:275
void initializeDuplicateChecker(std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile)
Definition: RootFile.cc:1641
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:259
std::string const & productDependenciesBranchName()
Definition: BranchType.cc:178
std::string const & thinnedAssociationsHelperBranchName()
Definition: BranchType.cc:213
std::unique_ptr< MakeProvenanceReader > makeProvenanceReaderMaker(InputType inputType)
Definition: RootFile.cc:1781
std::string const & branchIDListBranchName()
Definition: BranchType.cc:208
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:294
EventAuxiliary eventAux_
Definition: RootFile.h:271
void resetTraining()
Definition: RootTree.h:152
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:279
void validateFile(InputType inputType, bool usingGoToEvent)
Definition: RootFile.cc:1087
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:662
std::unique_ptr< TTreeCache > trainCache(TTree *tree, InputFile &file, unsigned int cacheSize, char const *branchNames)
Definition: RootTree.cc:504
unsigned int const defaultLearningEntries
Definition: RootTree.h:39
bool hasThinnedAssociations() const
std::string const & fileIdentifierBranchName()
Definition: BranchType.cc:223
std::string const & moduleDescriptionMapBranchName()
Definition: BranchType.cc:188
std::string const file_
Definition: RootFile.h:249
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:263
static Registry * instance()
Definition: Registry.cc:12
void readEventHistoryTree()
Definition: RootFile.cc:1628
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 
)
inline

Definition at line 93 of file RootFile.h.

113  : RootFile(
114  fileName, processConfiguration, logicalFileName, filePtr,
115  nullptr, false, -1, -1, nStreams, 0U, treeMaxVirtualSize,
116  processingMode, runHelper,
117  false, productSelectorRules, inputType, branchIDListHelper,
118  thinnedAssociationsHelper, associationsFromSecondary,
119  nullptr, dropDescendantsOfDroppedProducts, processHistoryRegistry,
120  indexesIntoFiles, currentIndexIntoFile, orderedProcessHistoryIDs,
121  bypassVersionCheck, labelRawDataLikeMC,
122  false, enablePrefetching) {}
std::shared_ptr< BranchIDListHelper const > branchIDListHelper() const
Definition: RootFile.h:205
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, bool dropDescendantsOfDroppedProducts, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool labelRawDataLikeMC, bool usingGoToEvent, bool enablePrefetching)
Definition: RootFile.cc:125
processConfiguration
Definition: Schedule.cc:374
edm::RootFile::RootFile ( std::string const &  fileName,
ProcessConfiguration const &  processConfiguration,
std::string const &  logicalFileName,
std::shared_ptr< InputFile filePtr,
unsigned int  nStreams,
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 
)
inline

Definition at line 124 of file RootFile.h.

138  : RootFile(
139  fileName, processConfiguration, logicalFileName, filePtr,
140  nullptr, false, -1, -1, nStreams, 0U, treeMaxVirtualSize,
142  false, productSelectorRules, inputType, nullptr, nullptr,
143  nullptr, nullptr, false, processHistoryRegistry,
144  indexesIntoFiles, currentIndexIntoFile, orderedProcessHistoryIDs,
145  bypassVersionCheck, false,
146  false, enablePrefetching) {}
RootFile(std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, std::shared_ptr< EventSkipperByID > eventSkipperByID, bool skipAnyEvents, int remainingEvents, int remainingLumis, unsigned int nStreams, unsigned int treeCacheSize, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, bool noEventSort, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, std::shared_ptr< DuplicateChecker > duplicateChecker, bool dropDescendantsOfDroppedProducts, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool labelRawDataLikeMC, bool usingGoToEvent, bool enablePrefetching)
Definition: RootFile.cc:125
processConfiguration
Definition: Schedule.cc:374
edm::RootFile::~RootFile ( )

Definition at line 513 of file RootFile.cc.

513  {
514  }
edm::RootFile::RootFile ( RootFile const &  )
delete

Member Function Documentation

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

Definition at line 243 of file RootFile.h.

References branchChildren_, and edm::get_underlying_safe().

Referenced by createFileBlock().

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

Definition at line 244 of file RootFile.h.

References branchChildren_, and edm::get_underlying_safe().

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

Definition at line 205 of file RootFile.h.

References branchIDListHelper_, and edm::get_underlying_safe().

std::shared_ptr< T > & get_underlying_safe(propagate_const< std::shared_ptr< T >> &iP)
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:279
std::shared_ptr<BranchIDListHelper>& edm::RootFile::branchIDListHelper ( )
inline

Definition at line 206 of file RootFile.h.

References branchIDListHelper_, and edm::get_underlying_safe().

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

Definition at line 177 of file RootFile.h.

References branchListIndexesUnchanged_.

Referenced by createFileBlock().

bool branchListIndexesUnchanged_
Definition: RootFile.h:270
void edm::RootFile::close ( void  )

Definition at line 1148 of file RootFile.cc.

References eventHistoryTree_, filePtr_, and treePointers_.

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

1148  {
1149  // Just to play it safe, zero all pointers to objects in the InputFile to be closed.
1150  eventHistoryTree_ = nullptr;
1151  for(auto& treePointer : treePointers_) {
1152  treePointer->close();
1153  treePointer = nullptr;
1154  }
1155  filePtr_->Close();
1156  filePtr_ = nullptr; // propagate_const<T> has no reset() function
1157  }
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:285
RootTreePtrArray treePointers_
Definition: RootFile.h:275
bool edm::RootFile::containsItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 741 of file RootFile.cc.

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

741  {
743  }
tuple lumi
Definition: fjr2json.py:35
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
std::unique_ptr< FileBlock > edm::RootFile::createFileBlock ( ) const

Definition at line 645 of file RootFile.cc.

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

645  {
646  return std::unique_ptr<FileBlock>(new FileBlock(fileFormatVersion(),
647  eventTree_.tree(),
649  lumiTree_.tree(),
651  runTree_.tree(),
652  runTree_.metaTree(),
655  file_,
657  modifiedIDs(),
658  branchChildren()));
659  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
bool branchListIndexesUnchanged() const
Definition: RootFile.h:177
RootTree lumiTree_
Definition: RootFile.h:273
TTree const * metaTree() const
Definition: RootTree.h:142
TTree const * tree() const
Definition: RootTree.h:140
bool modifiedIDs() const
Definition: RootFile.h:178
int whyNotFastClonable() const
Definition: RootFile.h:175
RootTree eventTree_
Definition: RootFile.h:272
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:176
RootTree runTree_
Definition: RootFile.h:274
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:243
std::string const file_
Definition: RootFile.h:249
void edm::RootFile::dropOnInput ( ProductRegistry reg,
ProductSelectorRules const &  rules,
bool  dropDescendants,
InputType  inputType 
)
private

Definition at line 1666 of file RootFile.cc.

References edm::ProductRegistry::allBranchDescriptions(), edm::BranchDescription::branchID(), edm::BranchDescription::branchName(), edm::BranchDescription::branchType(), CommonMethods::cp(), drop, edProductClass_, file_, fileThinnedAssociationsHelper_, edm::getWrapperBasePtr(), hasNewlyDroppedBranch_, edm::InEvent, edm::ProductSelector::initialize(), markBranchToBeDropped(), newBranchToOldBranch(), hltrates_dqm_sourceclient-live_cfg::offset, AlCaHLTBitMon_ParallelJobs::p, edm::BranchDescription::present(), parseEventContent::prod, edm::ProductRegistry::productListUpdator(), edm::SecondaryFile, edm::SecondarySource, edm::ProductSelector::selected(), groupFilesInBlocks::temp, treePointers_, edm::BranchDescription::unwrappedType(), and edm::BranchDescription::wrappedName().

Referenced by RootFile().

1666  {
1667 
1668  // This is the selector for drop on input.
1669  ProductSelector productSelector;
1670  productSelector.initialize(rules, reg.allBranchDescriptions());
1671 
1672  std::vector<BranchDescription const*> associationDescriptions;
1673 
1674  ProductRegistry::ProductList& prodList = reg.productListUpdator();
1675  // Do drop on input. On the first pass, just fill in a set of branches to be dropped.
1676  std::set<BranchID> branchesToDrop;
1677  for(auto const& product : prodList) {
1678  BranchDescription const& prod = product.second;
1679  // Special handling for ThinnedAssociations
1680  if(prod.unwrappedType() == typeid(ThinnedAssociation) && prod.present()) {
1681  if(inputType != InputType::SecondarySource) {
1682  associationDescriptions.push_back(&prod);
1683  } else {
1684  markBranchToBeDropped(dropDescendants, prod.branchID(), branchesToDrop);
1685  }
1686  } else if(!productSelector.selected(prod)) {
1687  markBranchToBeDropped(dropDescendants, prod.branchID(), branchesToDrop);
1688  }
1689  }
1690 
1691  if(inputType != InputType::SecondarySource) {
1692 
1693  // Decide whether to keep the thinned associations and corresponding
1694  // entries in the helper. For secondary source they are all dropped,
1695  // but in other cases we look for thinned collections the associations
1696  // redirect a Ref or Ptr to when dereferencing them.
1697 
1698  // Need a list of kept products in order to determine which thinned associations
1699  // are kept.
1700  std::set<BranchID> keptProductsInEvent;
1701  for(auto const& product : prodList) {
1702  BranchDescription const& prod = product.second;
1703  if( branchesToDrop.find(prod.branchID()) == branchesToDrop.end() &&
1704  prod.present() &&
1705  prod.branchType() == InEvent) {
1706  keptProductsInEvent.insert(prod.branchID());
1707  }
1708  }
1709 
1710  // Decide which ThinnedAssociations to keep and store the decision in keepAssociation
1711  std::map<BranchID, bool> keepAssociation;
1712  fileThinnedAssociationsHelper_->selectAssociationProducts(associationDescriptions,
1713  keptProductsInEvent,
1714  keepAssociation);
1715 
1716  for(auto association : associationDescriptions) {
1717  if(!keepAssociation[association->branchID()]) {
1718  markBranchToBeDropped(dropDescendants, association->branchID(), branchesToDrop);
1719  }
1720  }
1721 
1722  // Also delete the dropped associations from the ThinnedAssociationsHelper
1723  std::unique_ptr<ThinnedAssociationsHelper> temp(new ThinnedAssociationsHelper);
1724  for(auto const& associationBranches : fileThinnedAssociationsHelper_->data()) {
1725  auto iter = keepAssociation.find(associationBranches.association());
1726  if(iter != keepAssociation.end() && iter->second) {
1727  temp->addAssociation(associationBranches);
1728  }
1729  }
1730  // propagate_const<T> has no reset() function
1731  fileThinnedAssociationsHelper_ = std::unique_ptr<ThinnedAssociationsHelper>(temp.release());
1732  }
1733 
1734  // On this pass, actually drop the branches.
1735  std::set<BranchID>::const_iterator branchesToDropEnd = branchesToDrop.end();
1736  for(ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
1737  BranchDescription const& prod = it->second;
1738  bool drop = branchesToDrop.find(prod.branchID()) != branchesToDropEnd;
1739  if(drop) {
1740  if(productSelector.selected(prod) && prod.unwrappedType() != typeid(ThinnedAssociation)) {
1741  LogWarning("RootFile")
1742  << "Branch '" << prod.branchName() << "' is being dropped from the input\n"
1743  << "of file '" << file_ << "' because it is dependent on a branch\n"
1744  << "that was explicitly dropped.\n";
1745  }
1746  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
1747  hasNewlyDroppedBranch_[prod.branchType()] = true;
1748  ProductRegistry::ProductList::iterator icopy = it;
1749  ++it;
1750  prodList.erase(icopy);
1751  } else {
1752  ++it;
1753  }
1754  }
1755 
1756  // Drop on input mergeable run and lumi products, this needs to be invoked for secondary file input
1757  if(inputType == InputType::SecondaryFile) {
1758  TString tString;
1759  for(ProductRegistry::ProductList::iterator it = prodList.begin(), itEnd = prodList.end(); it != itEnd;) {
1760  BranchDescription const& prod = it->second;
1761  if(prod.branchType() != InEvent) {
1762  TClass* cp = TClass::GetClass(prod.wrappedName().c_str());
1763  void* p = cp->New();
1764  int offset = cp->GetBaseClassOffset(edProductClass_);
1765  std::unique_ptr<WrapperBase> edp = getWrapperBasePtr(p, offset);
1766  if(edp->isMergeable()) {
1767  treePointers_[prod.branchType()]->dropBranch(newBranchToOldBranch(prod.branchName()));
1768  ProductRegistry::ProductList::iterator icopy = it;
1769  ++it;
1770  prodList.erase(icopy);
1771  } else {
1772  ++it;
1773  }
1774  }
1775  else ++it;
1776  }
1777  }
1778  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:280
std::map< BranchKey, BranchDescription > ProductList
edm::propagate_const< TClass * > edProductClass_
Definition: RootFile.h:296
const int drop
std::array< bool, NumBranchTypes > hasNewlyDroppedBranch_
Definition: RootFile.h:269
RootTreePtrArray treePointers_
Definition: RootFile.h:275
std::unique_ptr< WrapperBase > getWrapperBasePtr(void *p, int offset)
void markBranchToBeDropped(bool dropDescendants, BranchID const &branchID, std::set< BranchID > &branchesToDrop) const
Definition: RootFile.cc:1657
std::string const & newBranchToOldBranch(std::string const &newBranch) const
Definition: RootFile.cc:662
std::string const file_
Definition: RootFile.h:249
EventAuxiliary const& edm::RootFile::eventAux ( ) const
inline
EventID const& edm::RootFile::eventID ( ) const
inline

Definition at line 170 of file RootFile.h.

References eventAux(), and edm::EventAuxiliary::id().

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

Definition at line 246 of file RootFile.h.

References eventProductProvenanceRetrievers_, and edm::get_underlying_safe().

Referenced by makeProductProvenanceRetriever().

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

Definition at line 247 of file RootFile.h.

References eventProductProvenanceRetrievers_, and edm::get_underlying_safe().

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

Definition at line 171 of file RootFile.h.

References eventTree_.

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

Definition at line 164 of file RootFile.h.

References file_.

Referenced by RootFile().

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

Definition at line 1179 of file RootFile.cc.

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

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

1179  {
1180  if(!eventTree_.current(entry)) {
1181  return false;
1182  }
1183  eventTree_.setEntryNumber(entry);
1185  return true;
1186  }
bool current() const
Definition: RootTree.h:89
RootTree eventTree_
Definition: RootFile.h:272
void fillThisEventAuxiliary()
Definition: RootFile.cc:1160
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::fillEventHistory ( )
private

Definition at line 1189 of file RootFile.cc.

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

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

1189  {
1190  // We could consider doing delayed reading, but because we have to
1191  // store this History object in a different tree than the event
1192  // data tree, this is too hard to do in this first version.
1193 
1194  if(fileFormatVersion().eventHistoryBranch()) {
1195  // Lumi block number was not in EventID for the relevant releases.
1196  EventID id(eventAux().id().run(), 0, eventAux().id().event());
1197  if(eventProcessHistoryIter_->eventID() != id) {
1198  EventProcessHistoryID target(id, ProcessHistoryID());
1200  assert(eventProcessHistoryIter_->eventID() == id);
1201  }
1204  } else if(fileFormatVersion().eventHistoryTree()) {
1205  // for backward compatibility.
1206  History* pHistory = history_.get();
1207  TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(poolNames::eventHistoryBranchName().c_str());
1208  if(!eventHistoryBranch) {
1210  << "Failed to find history branch in event history tree.\n";
1211  }
1212  eventHistoryBranch->SetAddress(&pHistory);
1214  eventAux_.setProcessHistoryID(history_->processHistoryID());
1215  eventSelectionIDs_.swap(history_->eventSelectionIDs());
1216  branchListIndexes_.swap(history_->branchListIndexes());
1217  } else if(fileFormatVersion().noMetaDataTrees()) {
1218  // Current format
1220  TBranch* eventSelectionIDBranch = eventTree_.tree()->GetBranch(poolNames::eventSelectionsBranchName().c_str());
1221  assert(eventSelectionIDBranch != nullptr);
1222  eventTree_.fillBranchEntry(eventSelectionIDBranch, pESV);
1224  TBranch* branchListIndexesBranch = eventTree_.tree()->GetBranch(poolNames::branchListIndexesBranchName().c_str());
1225  assert(branchListIndexesBranch != nullptr);
1226  eventTree_.fillBranchEntry(branchListIndexesBranch, pBLI);
1227  }
1228  if(provenanceAdaptor_) {
1229  eventAux_.setProcessHistoryID(provenanceAdaptor_->convertID(eventAux().processHistoryID()));
1230  for(auto& esID : eventSelectionIDs_) {
1231  esID = provenanceAdaptor_->convertID(esID);
1232  }
1233  }
1234  if(daqProvenanceHelper_) {
1236  }
1238  // old format. branchListIndexes_ must be filled in from the ProvenanceAdaptor.
1239  provenanceAdaptor_->branchListIndexes(branchListIndexes_);
1240  }
1241  if(branchIDListHelper_) {
1242  branchIDListHelper_->fixBranchListIndexes(branchListIndexes_);
1243  }
1244  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:480
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
ForwardSequence::const_iterator lower_bound_all(ForwardSequence const &s, Datum const &d)
wrappers for std::lower_bound
Definition: Algorithms.h:91
assert(m_qm.get())
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:243
std::vector< EventSelectionID > EventSelectionIDVector
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:264
TTree const * tree() const
Definition: RootTree.h:140
std::vector< BranchListIndex > BranchListIndexes
std::string const & eventHistoryBranchName()
Definition: BranchType.cc:238
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:286
bool eventHistoryTree() const
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:291
RootTree eventTree_
Definition: RootFile.h:272
BranchListIndexes branchListIndexes_
Definition: RootFile.h:287
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
Hash< ProcessHistoryType > ProcessHistoryID
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:288
EntryNumber const & entryNumber() const
Definition: RootTree.h:94
void fillBranchEntry(TBranch *branch, T *&pbuf)
Definition: RootTree.h:118
void setProcessHistoryID(ProcessHistoryID const &phid)
ProcessHistoryID const & processHistoryID() const
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:285
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:247
EventAuxiliary eventAux_
Definition: RootFile.h:271
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:279
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:263
void edm::RootFile::fillIndexIntoFile ( )
private

Definition at line 861 of file RootFile.cc.

References assert(), edm::RootTree::entries(), edm::RootTree::entryNumber(), event(), eventAux(), eventAux_, eventTree_, fileFormatVersion(), fillEventHistory(), fillLumiAuxiliary(), fillRunAuxiliary(), fillThisEventAuxiliary(), edm::find_in_all(), indexIntoFile_, edm::IndexIntoFile::invalidEntry, edm::RootTree::isValid(), lastEventEntryNumberRead_, summaryLumi::lcount, fjr2json::lumi, edm::EventAuxiliary::luminosityBlock(), edmLumisInFiles::lumis, lumiTree_, eostools::move(), edm::RootTree::next(), processHistoryRegistry_, DTTTrigCorrFirst::run, edm::EventAuxiliary::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().

861  {
862  // This function is for backward compatibility.
863  // If reading a current format file, indexIntoFile_ is read from the input
864  // file and should always be there. Note that the algorithm below will work
865  // sometimes but often fail with the new format introduced in release 3_8_0.
866  // If it ever becomes necessary to rebuild IndexIntoFile from the new format,
867  // probably a separate function should be written to deal with the task.
868  // This is possible just not implemented yet.
869  assert(!fileFormatVersion().hasIndexIntoFile());
870 
871  typedef std::list<LumiItem> LumiList;
872  LumiList lumis; // (declare 1)
873 
874  typedef std::set<LuminosityBlockID> RunLumiSet;
875  RunLumiSet runLumiSet; // (declare 2)
876 
877  typedef std::list<RunItem> RunList;
878  RunList runs; // (declare 5)
879 
880  typedef std::set<RunNumber_t> RunSet;
881  RunSet runSet; // (declare 4)
882 
883  typedef std::set<RunItem, RunItemSortByRunPhid> RunItemSet;
884  RunItemSet runItemSet; // (declare 3)
885 
886  typedef std::map<RunNumber_t, ProcessHistoryID> PHIDMap;
887  PHIDMap phidMap;
888 
889  RunNumber_t prevRun = 0;
890  LuminosityBlockNumber_t prevLumi = 0;
891  ProcessHistoryID prevPhid;
892  bool iFirst = true;
893 
894  indexIntoFile_.unsortedEventNumbers().clear(); // should already be empty, just being careful
896 
897  // First, loop through the event tree.
898  while(eventTree_.next()) {
899  bool newRun = false;
900  bool newLumi = false;
903 
904  // Save the event numbers as we loop through the event auxiliary to avoid
905  // having to read through the event auxiliary again later. These event numbers
906  // are not actually used in this function, but could be needed elsewhere.
908 
909  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(eventAux().processHistoryID());
910 
911  if(iFirst || prevPhid != reducedPHID || prevRun != eventAux().run()) {
912  iFirst = false;
913  newRun = newLumi = true;
914  } else if(prevLumi != eventAux().luminosityBlock()) {
915  newLumi = true;
916  }
917  prevPhid = reducedPHID;
918  prevRun = eventAux().run();
919  prevLumi = eventAux().luminosityBlock();
920  if(newLumi) {
921  lumis.emplace_back(reducedPHID,
922  eventAux().run(), eventAux().luminosityBlock(), eventTree_.entryNumber()); // (insert 1)
923  runLumiSet.insert(LuminosityBlockID(eventAux().run(), eventAux().luminosityBlock())); // (insert 2)
924  } else {
925  LumiItem& currentLumi = lumis.back();
926  assert(currentLumi.lastEventEntry_ == eventTree_.entryNumber());
927  ++currentLumi.lastEventEntry_;
928  }
929  if(newRun) {
930  // Insert run in list if it is not already there.
931  RunItem item(reducedPHID, eventAux().run());
932  if(runItemSet.insert(item).second) { // (check 3, insert 3)
933  runs.push_back(std::move(item)); // (insert 5)
934  runSet.insert(eventAux().run()); // (insert 4)
935  phidMap.insert(std::make_pair(eventAux().run(), reducedPHID));
936  }
937  }
938  }
939  // now clean up.
941  eventAux_ = EventAuxiliary();
943 
944  // Loop over run entries and fill information.
945 
946  typedef std::map<RunNumber_t, IndexIntoFile::EntryNumber_t> RunMap;
947  RunMap runMap; // (declare 11)
948 
949  typedef std::vector<RunItem> RunVector;
950  RunVector emptyRuns; // (declare 12)
951 
952  if(runTree_.isValid()) {
953  while(runTree_.next()) {
954  // Note: adjacent duplicates will be skipped without an explicit check.
955 
956  std::shared_ptr<RunAuxiliary> runAux = fillRunAuxiliary();
957  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(runAux->processHistoryID());
958 
959  if(runSet.insert(runAux->run()).second) { // (check 4, insert 4)
960  // This run was not associated with any events.
961  emptyRuns.emplace_back(reducedPHID, runAux->run()); // (insert 12)
962  }
963  runMap.insert(std::make_pair(runAux->run(), runTree_.entryNumber())); // (insert 11)
964  phidMap.insert(std::make_pair(runAux->run(), reducedPHID));
965  }
966  // now clean up.
968  }
969 
970  // Insert the ordered empty runs into the run list.
971  RunItemSortByRun runItemSortByRun;
972  stable_sort_all(emptyRuns, runItemSortByRun);
973 
974  RunList::iterator itRuns = runs.begin(), endRuns = runs.end();
975  for(auto const& emptyRun : emptyRuns) {
976  for(; itRuns != endRuns; ++itRuns) {
977  if(runItemSortByRun(emptyRun, *itRuns)) {
978  break;
979  }
980  }
981  runs.insert(itRuns, emptyRun);
982  }
983 
984  // Loop over luminosity block entries and fill information.
985 
986  typedef std::vector<LumiItem> LumiVector;
987  LumiVector emptyLumis; // (declare 7)
988 
989  typedef std::map<LuminosityBlockID, IndexIntoFile::EntryNumber_t> RunLumiMap;
990  RunLumiMap runLumiMap; // (declare 6)
991 
992  if(lumiTree_.isValid()) {
993  while(lumiTree_.next()) {
994  // Note: adjacent duplicates will be skipped without an explicit check.
995  std::shared_ptr<LuminosityBlockAuxiliary> lumiAux = fillLumiAuxiliary();
996  LuminosityBlockID lumiID = LuminosityBlockID(lumiAux->run(), lumiAux->luminosityBlock());
997  if(runLumiSet.insert(lumiID).second) { // (check 2, insert 2)
998  // This lumi was not associated with any events.
999  // Use the process history ID from the corresponding run. In cases of practical
1000  // importance, this should be the correct process history ID, but it is possible
1001  // to construct files where this is not the correct process history ID ...
1002  PHIDMap::const_iterator iPhidMap = phidMap.find(lumiAux->run());
1003  assert(iPhidMap != phidMap.end());
1004  emptyLumis.emplace_back(iPhidMap->second, lumiAux->run(), lumiAux->luminosityBlock(), IndexIntoFile::invalidEntry); // (insert 7)
1005  }
1006  runLumiMap.insert(std::make_pair(lumiID, lumiTree_.entryNumber()));
1007  }
1008  // now clean up.
1010  }
1011 
1012  // Insert the ordered empty lumis into the lumi list.
1013  LumiItemSortByRunLumi lumiItemSortByRunLumi;
1014  stable_sort_all(emptyLumis, lumiItemSortByRunLumi);
1015 
1016  LumiList::iterator itLumis = lumis.begin(), endLumis = lumis.end();
1017  for(auto const& emptyLumi : emptyLumis) {
1018  for(; itLumis != endLumis; ++itLumis) {
1019  if(lumiItemSortByRunLumi(emptyLumi, *itLumis)) {
1020  break;
1021  }
1022  }
1023  lumis.insert(itLumis, emptyLumi);
1024  }
1025 
1026  // Create a map of RunItems that gives the order of first appearance in the list.
1027  // Also fill in the vector of process history IDs
1028  typedef std::map<RunItem, int, RunItemSortByRunPhid> RunCountMap;
1029  RunCountMap runCountMap; // Declare (17)
1030  std::vector<ProcessHistoryID>& phids = indexIntoFile_.setProcessHistoryIDs();
1031  assert(phids.empty());
1032  std::vector<IndexIntoFile::RunOrLumiEntry>& entries = indexIntoFile_.setRunOrLumiEntries();
1033  assert(entries.empty());
1034  int rcount = 0;
1035  for(auto& run : runs) {
1036  RunCountMap::const_iterator countMapItem = runCountMap.find(run);
1037  if(countMapItem == runCountMap.end()) {
1038  countMapItem = runCountMap.insert(std::make_pair(run, rcount)).first; // Insert (17)
1039  assert(countMapItem != runCountMap.end());
1040  ++rcount;
1041  }
1042  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, run.phid_);
1043  if(phidItem == phids.end()) {
1044  phids.push_back(run.phid_);
1045  phidItem = phids.end() - 1;
1046  }
1047  entries.emplace_back(
1048  countMapItem->second, // use (17)
1050  runMap[run.run_], // use (11)
1051  phidItem - phids.begin(),
1052  run.run_,
1053  0U,
1056  }
1057 
1058  // Create a map of LumiItems that gives the order of first appearance in the list.
1059  typedef std::map<LumiItem, int, LumiItemSortByRunLumiPhid> LumiCountMap;
1060  LumiCountMap lumiCountMap; // Declare (19)
1061  int lcount = 0;
1062  for(auto& lumi : lumis) {
1063  RunCountMap::const_iterator runCountMapItem = runCountMap.find(RunItem(lumi.phid_, lumi.run_));
1064  assert(runCountMapItem != runCountMap.end());
1065  LumiCountMap::const_iterator countMapItem = lumiCountMap.find(lumi);
1066  if(countMapItem == lumiCountMap.end()) {
1067  countMapItem = lumiCountMap.insert(std::make_pair(lumi, lcount)).first; // Insert (17)
1068  assert(countMapItem != lumiCountMap.end());
1069  ++lcount;
1070  }
1071  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, lumi.phid_);
1072  assert(phidItem != phids.end());
1073  entries.emplace_back(
1074  runCountMapItem->second,
1075  countMapItem->second,
1076  runLumiMap[LuminosityBlockID(lumi.run_, lumi.lumi_)],
1077  phidItem - phids.begin(),
1078  lumi.run_,
1079  lumi.lumi_,
1080  lumi.firstEventEntry_,
1081  lumi.lastEventEntry_);
1082  }
1083  stable_sort_all(entries);
1084  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1247
tuple lumi
Definition: fjr2json.py:35
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:273
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
EntryNumber const & entries() const
Definition: RootTree.h:96
RunNumber_t run() const
void stable_sort_all(RandomAccessSequence &s)
wrappers for std::stable_sort
Definition: Algorithms.h:135
unsigned int LuminosityBlockNumber_t
LuminosityBlockNumber_t luminosityBlock() const
tuple runs
Definition: gather_cfg.py:87
U second(std::pair< T, U > const &p)
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool next()
Definition: RootTree.h:87
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:276
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
def move
Definition: eostools.py:510
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1271
RootTree eventTree_
Definition: RootFile.h:272
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
RootTree runTree_
Definition: RootFile.h:274
EntryNumber const & entryNumber() const
Definition: RootTree.h:94
std::vector< RunOrLumiEntry > & setRunOrLumiEntries()
std::vector< EventNumber_t > & unsortedEventNumbers() const
static EntryNumber_t const invalidEntry
ForwardSequence::const_iterator find_in_all(ForwardSequence const &s, Datum const &d)
wrappers for std::find
Definition: Algorithms.h:32
void fillEventHistory()
Definition: RootFile.cc:1189
bool isValid() const
Definition: RootTree.cc:104
unsigned int RunNumber_t
EventAuxiliary eventAux_
Definition: RootFile.h:271
void fillThisEventAuxiliary()
Definition: RootFile.cc:1160
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::fillLumiAuxiliary ( )
private

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

1247  {
1248  auto lumiAuxiliary = std::make_shared<LuminosityBlockAuxiliary>();
1250  LuminosityBlockAuxiliary *pLumiAux = lumiAuxiliary.get();
1251  lumiTree_.fillAux<LuminosityBlockAuxiliary>(pLumiAux);
1252  } else {
1253  LuminosityBlockAux lumiAux;
1254  LuminosityBlockAux *pLumiAux = &lumiAux;
1255  lumiTree_.fillAux<LuminosityBlockAux>(pLumiAux);
1256  conversion(lumiAux, *lumiAuxiliary);
1257  }
1258  if(provenanceAdaptor_) {
1259  lumiAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(lumiAuxiliary->processHistoryID()));
1260  }
1261  if(daqProvenanceHelper_) {
1262  lumiAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(lumiAuxiliary->processHistoryID()));
1263  }
1264  if(lumiAuxiliary->luminosityBlock() == 0 && !fileFormatVersion().runsAndLumis()) {
1265  lumiAuxiliary->id() = LuminosityBlockID(RunNumber_t(1), LuminosityBlockNumber_t(1));
1266  }
1267  return lumiAuxiliary;
1268  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
RootTree lumiTree_
Definition: RootFile.h:273
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
unsigned int LuminosityBlockNumber_t
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:291
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
unsigned int RunNumber_t
void fillAux(T *&pAux)
Definition: RootTree.h:102
std::shared_ptr< RunAuxiliary > edm::RootFile::fillRunAuxiliary ( )
private

Definition at line 1271 of file RootFile.cc.

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

Referenced by fillIndexIntoFile(), and readRunAuxiliary_().

1271  {
1272  auto runAuxiliary = std::make_shared<RunAuxiliary>();
1274  RunAuxiliary *pRunAux = runAuxiliary.get();
1275  runTree_.fillAux<RunAuxiliary>(pRunAux);
1276  } else {
1277  RunAux runAux;
1278  RunAux *pRunAux = &runAux;
1279  runTree_.fillAux<RunAux>(pRunAux);
1280  conversion(runAux, *runAuxiliary);
1281  }
1282  if(provenanceAdaptor_) {
1283  runAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(runAuxiliary->processHistoryID()));
1284  }
1285  if(daqProvenanceHelper_) {
1286  runAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(runAuxiliary->processHistoryID()));
1287  }
1288  return runAuxiliary;
1289  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:291
RootTree runTree_
Definition: RootFile.h:274
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
void fillAux(T *&pAux)
Definition: RootTree.h:102
void edm::RootFile::fillThisEventAuxiliary ( )
private

Definition at line 1160 of file RootFile.cc.

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

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

1160  {
1162  // Already read.
1163  return;
1164  }
1166  EventAuxiliary *pEvAux = &eventAux_;
1167  eventTree_.fillAux<EventAuxiliary>(pEvAux);
1168  } else {
1169  // for backward compatibility.
1170  EventAux eventAux;
1171  EventAux *pEvAux = &eventAux;
1172  eventTree_.fillAux<EventAux>(pEvAux);
1173  conversion(eventAux, eventAux_);
1174  }
1176  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:276
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
RootTree eventTree_
Definition: RootFile.h:272
EntryNumber const & entryNumber() const
Definition: RootTree.h:94
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
EventAuxiliary eventAux_
Definition: RootFile.h:271
void fillAux(T *&pAux)
Definition: RootTree.h:102
IndexIntoFile::EntryType edm::RootFile::getNextItemType ( RunNumber_t run,
LuminosityBlockNumber_t lumi,
EventNumber_t event 
)

Definition at line 746 of file RootFile.cc.

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

746  {
747  // First, account for consecutive skipped entries.
748  while(skipThisEntry()) {
751  }
754  }
755  else {
757  }
758  }
759  // OK, we have an entry that is not skipped.
761  if(entryType == IndexIntoFile::kEnd) {
762  return IndexIntoFile::kEnd;
763  }
764  if(entryType == IndexIntoFile::kRun) {
766  runHelper_->checkForNewRun(run);
767  return IndexIntoFile::kRun;
768  } else if(processingMode_ == InputSource::Runs) {
770  return getNextItemType(run, lumi, event);
771  }
772  if(entryType == IndexIntoFile::kLumi) {
775  return IndexIntoFile::kLumi;
778  return getNextItemType(run, lumi, event);
779  }
780  if(isDuplicateEvent()) {
782  return getNextItemType(run, lumi, event);
783  }
787  event = eventAux_.event();
788  return IndexIntoFile::kEvent;
789  }
tuple lumi
Definition: fjr2json.py:35
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:282
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
bool skipThisEntry()
Definition: RootFile.cc:686
IndexIntoFile::EntryType getNextItemType(RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
Definition: RootFile.cc:746
bool isDuplicateEvent()
Definition: RootFile.cc:730
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
EventAuxiliary eventAux_
Definition: RootFile.h:271
EventNumber_t event() const
bool edm::RootFile::goToEvent ( EventID const &  eventID)

Definition at line 1360 of file RootFile.cc.

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

1360  {
1361 
1363 
1364  if(duplicateChecker_) {
1365  duplicateChecker_->disable();
1366  }
1367 
1370 
1371  IndexIntoFile::IndexIntoFileItr iter =
1373 
1374  if(iter == indexIntoFile_.end(sortOrder)) {
1375  return false;
1376  }
1377  indexIntoFileIter_ = iter;
1378  return true;
1379  }
RunNumber_t run() const
Definition: EventID.h:39
EventID const & eventID() const
Definition: RootFile.h:170
EventNumber_t event() const
Definition: EventID.h:41
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:40
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
bool noEventSort_
Definition: RootFile.h:267
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
void fillEventNumbers() const
std::array<bool, NumBranchTypes> const& edm::RootFile::hasNewlyDroppedBranch ( ) const
inline

Definition at line 176 of file RootFile.h.

References hasNewlyDroppedBranch_.

Referenced by createFileBlock().

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

Definition at line 671 of file RootFile.cc.

References indexIntoFileIter_.

671  {
672  return indexIntoFileIter_;
673  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
std::shared_ptr<IndexIntoFile const> edm::RootFile::indexIntoFileSharedPtr ( ) const
inline

Definition at line 207 of file RootFile.h.

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:257
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 208 of file RootFile.h.

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

edm::propagate_const< std::shared_ptr< IndexIntoFile > > indexIntoFileSharedPtr_
Definition: RootFile.h:257
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 681 of file RootFile.cc.

References fileThinnedAssociationsHelper_, and thinnedAssociationsHelper_.

681  {
682  thinnedAssociationsHelper_->initAssociationsFromSecondary(associationsFromSecondary, *fileThinnedAssociationsHelper_);
683  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:280
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:281
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 1641 of file RootFile.cc.

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

Referenced by RootFile().

1643  {
1644  if(duplicateChecker_) {
1645  if(eventTree_.next()) {
1647  duplicateChecker_->inputFileOpened(eventAux().isRealData(),
1649  indexesIntoFiles,
1650  currentIndexIntoFile);
1651  }
1653  }
1654  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
bool next()
Definition: RootTree.h:87
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
RootTree eventTree_
Definition: RootFile.h:272
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
static EntryNumber_t const invalidEntry
void fillThisEventAuxiliary()
Definition: RootFile.cc:1160
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::isDuplicateEvent ( )
private

Definition at line 730 of file RootFile.cc.

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

Referenced by getNextItemType().

730  {
732  if(duplicateChecker_.get() == nullptr) {
733  return false;
734  }
736  return duplicateChecker_->isDuplicateAndCheckActive(indexIntoFileIter_.processHistoryIDIndex(),
738  }
EventNumber_t event() const
Definition: EventID.h:41
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
assert(m_qm.get())
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
EventID const & id() const
EventAuxiliary eventAux_
Definition: RootFile.h:271
std::string const file_
Definition: RootFile.h:249
RootTree const& edm::RootFile::lumiTree ( ) const
inline

Definition at line 172 of file RootFile.h.

References lumiTree_.

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

Definition at line 1798 of file RootFile.cc.

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

Referenced by readCurrentEvent().

1798  {
1799  if(eventProductProvenanceRetrievers_.size()<=iStreamID) {
1800  eventProductProvenanceRetrievers_.resize(iStreamID+1);
1801  }
1802  if(!eventProductProvenanceRetrievers_[iStreamID]) {
1803  // propagate_const<T> has no reset() function
1804  eventProductProvenanceRetrievers_[iStreamID] = std::make_shared<ProductProvenanceRetriever>(provenanceReaderMaker_->makeReader(eventTree_, daqProvenanceHelper_.get()));
1805  }
1806  eventProductProvenanceRetrievers_[iStreamID]->reset();
1807  return eventProductProvenanceRetriever(iStreamID);
1808  }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever(size_t index) const
Definition: RootFile.h:246
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:293
RootTree eventTree_
Definition: RootFile.h:272
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:292
std::unique_ptr< MakeProvenanceReader > edm::RootFile::makeProvenanceReaderMaker ( InputType  inputType)
private

Definition at line 1781 of file RootFile.cc.

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

Referenced by RootFile().

1781  {
1783  readParentageTree(inputType);
1784  return std::unique_ptr<MakeProvenanceReader>(new MakeReducedProvenanceReader(parentageIDLookup_));
1785  } else if(fileFormatVersion_.splitProductIDs()) {
1786  readParentageTree(inputType);
1787  return std::unique_ptr<MakeProvenanceReader>(new MakeFullProvenanceReader);
1788  } else if(fileFormatVersion_.perEventProductIDs()) {
1789  std::unique_ptr<EntryDescriptionMap> entryDescriptionMap(new EntryDescriptionMap);
1790  readEntryDescriptionTree(*entryDescriptionMap, inputType);
1791  return std::unique_ptr<MakeProvenanceReader>(new MakeOldProvenanceReader(std::move(entryDescriptionMap)));
1792  } else {
1793  return std::unique_ptr<MakeProvenanceReader>(new MakeDummyProvenanceReader);
1794  }
1795  }
void readEntryDescriptionTree(EntryDescriptionMap &entryDescriptionMap, InputType inputType)
Definition: RootFile.cc:517
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:255
void readParentageTree(InputType inputType)
Definition: RootFile.cc:563
def move
Definition: eostools.py:510
bool storedProductProvenanceUsed() const
std::map< EntryDescriptionID, EventEntryDescription > EntryDescriptionMap
Definition: RootFile.h:51
bool perEventProductIDs() const
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:294
void edm::RootFile::markBranchToBeDropped ( bool  dropDescendants,
BranchID const &  branchID,
std::set< BranchID > &  branchesToDrop 
) const
private

Definition at line 1657 of file RootFile.cc.

References branchChildren_.

Referenced by dropOnInput().

1657  {
1658  if(dropDescendants) {
1659  branchChildren_->appendToDescendants(branchID, branchesToDrop);
1660  } else {
1661  branchesToDrop.insert(branchID);
1662  }
1663  }
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:289
bool edm::RootFile::modifiedIDs ( ) const
inline

Definition at line 178 of file RootFile.h.

References daqProvenanceHelper_.

Referenced by createFileBlock().

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

Definition at line 662 of file RootFile.cc.

References newBranchToOldBranch_.

Referenced by dropOnInput(), and RootFile().

662  {
663  std::map<std::string, std::string>::const_iterator it = newBranchToOldBranch_.find(newBranch);
664  if(it != newBranchToOldBranch_.end()) {
665  return it->second;
666  }
667  return newBranch;
668  }
std::map< std::string, std::string > newBranchToOldBranch_
Definition: RootFile.h:284
bool edm::RootFile::nextEventEntry ( )
inline

Definition at line 203 of file RootFile.h.

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

203 {return eventTree_.next();}
bool next()
Definition: RootTree.h:87
RootTree eventTree_
Definition: RootFile.h:272
RootFile& edm::RootFile::operator= ( RootFile const &  )
delete
std::shared_ptr<ProductRegistry const> edm::RootFile::productRegistry ( ) const
inline

Definition at line 165 of file RootFile.h.

References productRegistry_.

Referenced by RootFile().

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

Definition at line 1417 of file RootFile.cc.

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

Referenced by readEvent().

1417  {
1418  if(!eventTree_.current()) {
1419  return false;
1420  }
1422  if(!fileFormatVersion().lumiInEventID()) {
1423  //ugly, but will disappear when the backward compatibility is done with schema evolution.
1424  const_cast<EventID&>(eventAux_.id()).setLuminosityBlockNumber(eventAux_.oldLuminosityBlock());
1426  }
1427  fillEventHistory();
1428  runHelper_->overrideRunNumber(eventAux_.id(), eventAux().isRealData());
1429 
1430  // We're not done ... so prepare the EventPrincipal
1431  eventTree_.insertEntryForIndex(principal.transitionIndex());
1432  principal.fillEventPrincipal(eventAux(),
1436  *(makeProductProvenanceRetriever(principal.streamID().value())),
1438 
1439  // report event read from file
1440  filePtr_->eventReadFromFile();
1441  return true;
1442  }
bool isRealData() const
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
bool current() const
Definition: RootTree.h:89
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:98
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:286
def move
Definition: eostools.py:510
RootTree eventTree_
Definition: RootFile.h:272
BranchListIndexes branchListIndexes_
Definition: RootFile.h:287
LuminosityBlockNumber_t oldLuminosityBlock() const
DelayedReader * rootDelayedReader() const
Definition: RootTree.cc:116
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
void fillEventHistory()
Definition: RootFile.cc:1189
std::shared_ptr< ProductProvenanceRetriever > makeProductProvenanceRetriever(unsigned int iStreamIndex)
Definition: RootFile.cc:1798
EventID const & id() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
EventAuxiliary eventAux_
Definition: RootFile.h:271
void fillThisEventAuxiliary()
Definition: RootFile.cc:1160
void edm::RootFile::readEntryDescriptionTree ( EntryDescriptionMap entryDescriptionMap,
InputType  inputType 
)
private

Definition at line 517 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(), i, edm::EventEntryDescription::id(), edm::Parentage::id(), edm::ParentageRegistry::insertMapped(), edm::ParentageRegistry::instance(), edm::numEntries(), parents, edm::EventEntryDescription::parents(), edm::Parentage::parentsForUpdate(), PhysicsTools::registry, edm::SecondarySource, and edm::Parentage::setParents().

Referenced by makeProvenanceReaderMaker().

517  {
518  // Called only for old format files.
519  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
520  std::unique_ptr<TTree> entryDescriptionTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::entryDescriptionTreeName().c_str())));
521  if(nullptr == entryDescriptionTree.get()) {
522  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::entryDescriptionTreeName()
523  << " in the input file.\n";
524  }
525 
526  EntryDescriptionID idBuffer;
527  EntryDescriptionID* pidBuffer = &idBuffer;
528  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), &pidBuffer);
529 
530  EventEntryDescription entryDescriptionBuffer;
531  EventEntryDescription *pEntryDescriptionBuffer = &entryDescriptionBuffer;
532  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), &pEntryDescriptionBuffer);
533 
534  // Fill in the parentage registry.
535  ParentageRegistry& registry = *ParentageRegistry::instance();
536 
537  for(Long64_t i = 0, numEntries = entryDescriptionTree->GetEntries(); i < numEntries; ++i) {
538  roottree::getEntry(entryDescriptionTree.get(), i);
539  if(idBuffer != entryDescriptionBuffer.id()) {
540  throw Exception(errors::EventCorruption) << "Corruption of EntryDescription tree detected.\n";
541  }
542  entryDescriptionMap.insert(std::make_pair(entryDescriptionBuffer.id(),entryDescriptionBuffer));
543  Parentage parents;
544  parents.setParents(entryDescriptionBuffer.parents());
546  ParentageID const oldID = parents.id();
547  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
548  ParentageID newID = parents.id();
549  if(newID != oldID) {
550  daqProvenanceHelper_->setOldParentageIDToNew(oldID,newID);
551  }
552  }
553  // For thread safety, don't update global registries when a secondary source opens a file.
554  if(inputType != InputType::SecondarySource) {
555  registry.insertMapped(parents);
556  }
557  }
558  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), nullptr);
559  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), nullptr);
560  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:480
int i
Definition: DBlmapReader.cc:9
TPRegexp parents
Definition: eve_filter.cc:21
std::string const & entryDescriptionBranchName()
Definition: BranchType.cc:154
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
Hash< EntryDescriptionType > EntryDescriptionID
std::string const & entryDescriptionTreeName()
Definition: BranchType.cc:146
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
std::string const & entryDescriptionIDBranchName()
Definition: BranchType.cc:150
static Interceptor::Registry registry("Interceptor")
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:9
void edm::RootFile::readEvent ( EventPrincipal cache)

Definition at line 1394 of file RootFile.cc.

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

1394  {
1397  // read the event auxiliary if not alrady read.
1399 
1400  // read the event
1402 
1403  runHelper_->checkRunConsistency(eventAux().run(), indexIntoFileIter_.run());
1404  runHelper_->checkLumiConsistency(eventAux().luminosityBlock(), indexIntoFileIter_.lumi());
1405 
1406  // If this next assert shows up in performance profiling or significantly affects memory, then these three lines should be deleted.
1407  // The IndexIntoFile should guarantee that it never fails.
1409  ProcessHistoryID const& reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(idToCheck);
1411 
1413  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
assert(m_qm.get())
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t lumi() const
bool readCurrentEvent(EventPrincipal &cache)
Definition: RootFile.cc:1417
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
ProcessHistoryID const & processHistoryID(int i) const
ProcessHistoryID const & processHistoryID() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
bool useReducedProcessHistoryID() const
void edm::RootFile::readEventHistoryTree ( )
private

Definition at line 1628 of file RootFile.cc.

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

Referenced by RootFile().

1628  {
1629  // Read in the event history tree, if we have one...
1630  if(fileFormatVersion().eventHistoryTree()) {
1631  history_ = std::make_unique<History>(); // propagate_const<T> has no reset() function
1632  eventHistoryTree_ = dynamic_cast<TTree*>(filePtr_->Get(poolNames::eventHistoryTreeName().c_str()));
1633  if(!eventHistoryTree_) {
1635  << "Failed to find the event history tree.\n";
1636  }
1637  }
1638  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:288
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:285
std::string const & eventHistoryTreeName()
Definition: BranchType.cc:268
void edm::RootFile::readFakeRun_ ( RunPrincipal runPrincipal)
std::shared_ptr<RunAuxiliary> edm::RootFile::readFakeRunAuxiliary_ ( )
void edm::RootFile::readLuminosityBlock_ ( LuminosityBlockPrincipal lumiPrincipal)

Definition at line 1573 of file RootFile.cc.

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

1573  {
1576  // Begin code for backward compatibility before the existence of lumi trees.
1577  if(!lumiTree_.isValid()) {
1579  return;
1580  }
1581  // End code for backward compatibility before the existence of lumi trees.
1583  lumiTree_.insertEntryForIndex(lumiPrincipal.transitionIndex());
1584  lumiPrincipal.fillLuminosityBlockPrincipal(*processHistoryRegistry_, lumiTree_.rootDelayedReader());
1585  // Read in all the products now.
1586  lumiPrincipal.readAllFromSourceAndMergeImmediately();
1588  }
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:273
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:98
DelayedReader * rootDelayedReader() const
Definition: RootTree.cc:116
bool isValid() const
Definition: RootTree.cc:104
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::readLuminosityBlockAuxiliary_ ( )

Definition at line 1535 of file RootFile.cc.

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

1535  {
1538  // Begin code for backward compatibility before the existence of lumi trees.
1539  if(!lumiTree_.isValid()) {
1541  assert(eventEntry != IndexIntoFile::invalidEntry);
1542  assert(eventTree_.current(eventEntry));
1543  fillEventAuxiliary(eventEntry);
1544 
1545  LuminosityBlockID lumi = LuminosityBlockID(indexIntoFileIter_.run(), indexIntoFileIter_.lumi());
1546  runHelper_->overrideRunNumber(lumi);
1547  return std::make_shared<LuminosityBlockAuxiliary>(lumi.run(), lumi.luminosityBlock(), eventAux().time(), Timestamp::invalidTimestamp());
1548  }
1549  // End code for backward compatibility before the existence of lumi trees.
1551  std::shared_ptr<LuminosityBlockAuxiliary> lumiAuxiliary = fillLumiAuxiliary();
1552  assert(lumiAuxiliary->run() == indexIntoFileIter_.run());
1553  assert(lumiAuxiliary->luminosityBlock() == indexIntoFileIter_.lumi());
1554  runHelper_->overrideRunNumber(lumiAuxiliary->id());
1555  filePtr_->reportInputLumiSection(lumiAuxiliary->run(), lumiAuxiliary->luminosityBlock());
1556  if(lumiAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1558  if(eventEntry != IndexIntoFile::invalidEntry) {
1559  assert(eventTree_.current(eventEntry));
1560  fillEventAuxiliary(eventEntry);
1561 
1562  lumiAuxiliary->setBeginTime(eventAux().time());
1563  }
1564  lumiAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1565  }
1566  if(!fileFormatVersion().processHistorySameWithinRun() && savedRunAuxiliary_) {
1567  lumiAuxiliary->setProcessHistoryID(savedRunAuxiliary_->processHistoryID());
1568  }
1569  return lumiAuxiliary;
1570  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1247
static Timestamp invalidTimestamp()
Definition: Timestamp.h:101
tuple lumi
Definition: fjr2json.py:35
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:273
Timestamp const & time() const
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
bool current() const
Definition: RootTree.h:89
LuminosityBlockNumber_t lumi() const
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
RootTree eventTree_
Definition: RootFile.h:272
static EntryNumber_t const invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
bool isValid() const
Definition: RootTree.cc:104
EntryNumber_t firstEventEntryThisLumi() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::readParentageTree ( InputType  inputType)
private

Definition at line 563 of file RootFile.cc.

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

Referenced by makeProvenanceReaderMaker().

563  {
564  // New format file
565  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
566  std::unique_ptr<TTree> parentageTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parentageTreeName().c_str())));
567  if(nullptr == parentageTree.get()) {
568  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::parentageTreeName()
569  << " in the input file.\n";
570  }
571 
572  Parentage parents;
573  Parentage *pParentageBuffer = &parents;
574  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), &pParentageBuffer);
575 
576  ParentageRegistry& registry = *ParentageRegistry::instance();
577 
578  parentageIDLookup_.reserve(parentageTree->GetEntries());
579  for(Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
580  roottree::getEntry(parentageTree.get(), i);
582  ParentageID const oldID = parents.id();
583  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
584  ParentageID newID = parents.id();
585  if(newID != oldID) {
586  daqProvenanceHelper_->setOldParentageIDToNew(oldID,newID);
587  }
588  }
589  // For thread safety, don't update global registries when a secondary source opens a file.
590  if(inputType != InputType::SecondarySource) {
591  registry.insertMapped(parents);
592  }
593  parentageIDLookup_.push_back(parents.id());
594  }
595  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), nullptr);
596  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:480
int i
Definition: DBlmapReader.cc:9
TPRegexp parents
Definition: eve_filter.cc:21
std::string const & parentageTreeName()
Definition: BranchType.cc:159
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
Long64_t numEntries(TFile *hdl, std::string const &trname)
Definition: CollUtil.cc:50
std::string const & parentageBranchName()
Definition: BranchType.cc:163
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:294
static Interceptor::Registry registry("Interceptor")
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:9
void edm::RootFile::readRun_ ( RunPrincipal runPrincipal)

Definition at line 1516 of file RootFile.cc.

References assert(), edm::RunPrincipal::fillRunPrincipal(), edm::IndexIntoFile::IndexIntoFileItr::getEntryType(), indexIntoFileEnd_, indexIntoFileIter_, edm::RootTree::insertEntryForIndex(), edm::RootTree::isValid(), edm::IndexIntoFile::kRun, processHistoryRegistry_, edm::Principal::readAllFromSourceAndMergeImmediately(), edm::RootTree::rootDelayedReader(), runHelper_, runTree_, and edm::EDProductGetter::transitionIndex().

1516  {
1517  if(!runHelper_->fakeNewRun()) {
1521  }
1522  // Begin code for backward compatibility before the existence of run trees.
1523  if(!runTree_.isValid()) {
1524  return;
1525  }
1526  // End code for backward compatibility before the existence of run trees.
1527  runTree_.insertEntryForIndex(runPrincipal.transitionIndex());
1528  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, runTree_.rootDelayedReader());
1529  // Read in all the products now.
1530  runPrincipal.readAllFromSourceAndMergeImmediately();
1531  }
assert(m_qm.get())
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:98
RootTree runTree_
Definition: RootFile.h:274
DelayedReader * rootDelayedReader() const
Definition: RootTree.cc:116
bool isValid() const
Definition: RootTree.cc:104
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
std::shared_ptr< RunAuxiliary > edm::RootFile::readRunAuxiliary_ ( )

Definition at line 1450 of file RootFile.cc.

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

1450  {
1451  if(runHelper_->fakeNewRun()) {
1452  runHelper_->overrideRunNumber(savedRunAuxiliary_->id());
1453  return savedRunAuxiliary();
1454  }
1457 
1458  // Begin code for backward compatibility before the existence of run trees.
1459  if(!runTree_.isValid()) {
1460 
1461  // prior to the support of run trees.
1462  // RunAuxiliary did not contain a valid timestamp. Take it from the next event.
1464  assert(eventEntry != IndexIntoFile::invalidEntry);
1465  assert(eventTree_.current(eventEntry));
1466  fillEventAuxiliary(eventEntry);
1467 
1468  RunID run = RunID(indexIntoFileIter_.run());
1469  runHelper_->overrideRunNumber(run);
1470  savedRunAuxiliary_ = std::make_shared<RunAuxiliary>(run.run(), eventAux().time(), Timestamp::invalidTimestamp());
1471  return savedRunAuxiliary();
1472  }
1473  // End code for backward compatibility before the existence of run trees.
1475  std::shared_ptr<RunAuxiliary> runAuxiliary = fillRunAuxiliary();
1476  assert(runAuxiliary->run() == indexIntoFileIter_.run());
1477  runHelper_->overrideRunNumber(runAuxiliary->id());
1478  filePtr_->reportInputRunNumber(runAuxiliary->run());
1479  // If RunAuxiliary did not contain a valid begin timestamp, invalidate any end timestamp.
1480  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1481  runAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1482  }
1483 
1484  // If RunAuxiliary did not contain a valid timestamp, or if this an old format file from
1485  // when the Run's ProcessHistory included only processes where products were added to the Run itself,
1486  // we attempt to read the first event in the run to get appropriate info.
1487  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp() ||
1489 
1491  // If we have a valid event, use its information.
1492  if(eventEntry != IndexIntoFile::invalidEntry) {
1493  assert(eventTree_.current(eventEntry));
1494  fillEventAuxiliary(eventEntry);
1495 
1496  // RunAuxiliary did not contain a valid timestamp. Take it from the next event in this run if there is one.
1497  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1498  runAuxiliary->setBeginTime(eventAux().time());
1499  }
1500 
1501  // For backwards compatibility when the Run's ProcessHistory included only processes where products were added to the
1502  // Run, and then the Run and Event auxiliaries could be different. Use the event ProcessHistoryID if there is one. It should
1503  // almost always be correct by the current definition (processes included if any products are added. This makes the run, lumi,
1504  // and event ProcessHistory's always be the same if no file merging occurs).
1505  if(!fileFormatVersion().processHistorySameWithinRun()) {
1506  fillEventHistory();
1507  runAuxiliary->setProcessHistoryID(eventAux().processHistoryID());
1508  }
1509  }
1510  }
1511  savedRunAuxiliary_ = runAuxiliary;
1512  return runAuxiliary;
1513  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
static Timestamp invalidTimestamp()
Definition: Timestamp.h:101
EntryNumber_t firstEventEntryThisRun() const
assert(m_qm.get())
Timestamp const & time() const
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
bool current() const
Definition: RootTree.h:89
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
EventAuxiliary const & eventAux() const
Definition: RootFile.h:166
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1271
RootTree eventTree_
Definition: RootFile.h:272
RootTree runTree_
Definition: RootFile.h:274
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary() const
Definition: RootFile.h:240
static EntryNumber_t const invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
bool processHistorySameWithinRun() const
void fillEventHistory()
Definition: RootFile.cc:1189
bool isValid() const
Definition: RootTree.cc:104
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:283
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::reportOpened ( std::string const &  inputType)

Definition at line 1134 of file RootFile.cc.

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

1134  {
1135  // Report file opened.
1136  std::string const label = "source";
1137  std::string moduleName = "PoolSource";
1138  filePtr_->inputFileOpened(
1139  logicalFile_,
1140  inputType,
1141  moduleName,
1142  label,
1143  fid_.fid(),
1145  }
std::vector< std::string > const & branchNames() const
Definition: RootTree.h:99
FileID fid_
Definition: RootFile.h:256
std::string const logicalFile_
Definition: RootFile.h:250
std::string moduleName(Provenance const &provenance)
Definition: Provenance.cc:27
std::string const & fid() const
Definition: FileID.h:19
RootTree eventTree_
Definition: RootFile.h:272
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:253
void edm::RootFile::rewind ( )
inline

Definition at line 190 of file RootFile.h.

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

190  {
192  eventTree_.rewind();
193  lumiTree_.rewind();
194  runTree_.rewind();
195  }
RootTree lumiTree_
Definition: RootFile.h:273
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
RootTree eventTree_
Definition: RootFile.h:272
RootTree runTree_
Definition: RootFile.h:274
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:260
void rewind()
Definition: RootTree.h:91
RootTree const& edm::RootFile::runTree ( ) const
inline

Definition at line 173 of file RootFile.h.

References runTree_.

Referenced by validateFile().

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

Definition at line 240 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:265
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 241 of file RootFile.h.

References edm::get_underlying_safe(), and savedRunAuxiliary_.

edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:265
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 1445 of file RootFile.cc.

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

1445  {
1446  eventTree_.setEntryNumber(entry);
1447  }
RootTree eventTree_
Definition: RootFile.h:272
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::setEntryAtEvent ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 1591 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1591  {
1593  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1595  return true;
1596  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
RootTree eventTree_
Definition: RootFile.h:272
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::setEntryAtItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)
inline

Definition at line 180 of file RootFile.h.

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

180  {
182  }
tuple lumi
Definition: fjr2json.py:35
bool setEntryAtRun(RunNumber_t run)
Definition: RootFile.cc:1607
bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi)
Definition: RootFile.cc:1599
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool setEntryAtEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
Definition: RootFile.cc:1591
bool edm::RootFile::setEntryAtLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1599 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1599  {
1601  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1603  return true;
1604  }
tuple lumi
Definition: fjr2json.py:35
RootTree lumiTree_
Definition: RootFile.h:273
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
IndexIntoFileItr findLumiPosition(RunNumber_t run, LuminosityBlockNumber_t lumi) const
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::setEntryAtNextEventInLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

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

1615  {
1618  }
1621  if(run != indexIntoFileIter_.run()) return false;
1622  if(lumi != indexIntoFileIter_.lumi()) return false;
1624  return true;
1625  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
bool edm::RootFile::setEntryAtRun ( RunNumber_t  run)

Definition at line 1607 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1607  {
1609  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1611  return true;
1612  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
RootTree runTree_
Definition: RootFile.h:274
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::setIfFastClonable ( int  remainingEvents,
int  remainingLumis 
)
private

Definition at line 599 of file RootFile.cc.

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

Referenced by RootFile().

599  {
600  if(fileFormatVersion().noMetaDataTrees() and !fileFormatVersion().storedProductProvenanceUsed()) {
601  //we must avoid copying the old branch which stored the per product per event provenance
603  return;
604  }
605  if(!fileFormatVersion().splitProductIDs()) {
607  return;
608  }
611  return;
612  }
613  // Find entry for first event in file
614  IndexIntoFile::IndexIntoFileItr it = indexIntoFileBegin_;
615  while(it != indexIntoFileEnd_ && it.getEntryType() != IndexIntoFile::kEvent) {
616  ++it;
617  }
618  if(it == indexIntoFileEnd_) {
620  return;
621  }
622 
623  // From here on, record all reasons we can't fast clone.
627  }
628  if(skipAnyEvents_) {
630  }
631  if(remainingEvents >= 0 && eventTree_.entries() > remainingEvents) {
633  }
634  if(remainingLumis >= 0 && lumiTree_.entries() > remainingLumis) {
636  }
637  if(duplicateChecker_ &&
638  !duplicateChecker_->checkDisabled() &&
639  !duplicateChecker_->noDuplicatesInFile()) {
641  }
642  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
int whyNotFastClonable_
Definition: RootFile.h:268
RootTree lumiTree_
Definition: RootFile.h:273
EntryNumber const & entries() const
Definition: RootTree.h:96
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:282
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
bool noEventSort_
Definition: RootFile.h:267
bool skipAnyEvents_
Definition: RootFile.h:266
RootTree eventTree_
Definition: RootFile.h:272
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:260
void edm::RootFile::setPosition ( IndexIntoFile::IndexIntoFileItr const &  position)

Definition at line 676 of file RootFile.cc.

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

676  {
678  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
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:509
void edm::RootFile::setToLastEntry ( )
inline

Definition at line 196 of file RootFile.h.

References indexIntoFileEnd_, and indexIntoFileIter_.

196  {
198  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
bool edm::RootFile::skipEntries ( unsigned int &  offset)
inline

Definition at line 200 of file RootFile.h.

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

200 {return eventTree_.skipEntries(offset);}
RootTree eventTree_
Definition: RootFile.h:272
bool skipEntries(unsigned int &offset)
Definition: RootTree.cc:372
bool edm::RootFile::skipEvents ( int &  offset)

Definition at line 1292 of file RootFile.cc.

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

1292  {
1293  while(offset > 0 && indexIntoFileIter_ != indexIntoFileEnd_) {
1294 
1295  int phIndexOfSkippedEvent = IndexIntoFile::invalidIndex;
1296  RunNumber_t runOfSkippedEvent = IndexIntoFile::invalidRun;
1299 
1300  indexIntoFileIter_.skipEventForward(phIndexOfSkippedEvent,
1301  runOfSkippedEvent,
1302  lumiOfSkippedEvent,
1303  skippedEventEntry);
1304 
1305  // At the end of the file and there were no more events to skip
1306  if(skippedEventEntry == IndexIntoFile::invalidEntry) break;
1307 
1308  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1309  fillEventAuxiliary(skippedEventEntry);
1310  if(eventSkipperByID_->skipIt(runOfSkippedEvent, lumiOfSkippedEvent, eventAux_.id().event())) {
1311  continue;
1312  }
1313  }
1314  if(duplicateChecker_ &&
1315  !duplicateChecker_->checkDisabled() &&
1316  !duplicateChecker_->noDuplicatesInFile()) {
1317 
1318  fillEventAuxiliary(skippedEventEntry);
1319  if(duplicateChecker_->isDuplicateAndCheckActive(phIndexOfSkippedEvent,
1320  runOfSkippedEvent,
1321  lumiOfSkippedEvent,
1322  eventAux_.id().event(),
1323  file_)) {
1324  continue;
1325  }
1326  }
1327  --offset;
1328  }
1329 
1330  while(offset < 0) {
1331 
1332  if(duplicateChecker_) {
1333  duplicateChecker_->disable();
1334  }
1335 
1336  int phIndexOfEvent = IndexIntoFile::invalidIndex;
1340 
1341  indexIntoFileIter_.skipEventBackward(phIndexOfEvent,
1342  runOfEvent,
1343  lumiOfEvent,
1344  eventEntry);
1345 
1346  if(eventEntry == IndexIntoFile::invalidEntry) break;
1347 
1348  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1349  fillEventAuxiliary(eventEntry);
1350  if(eventSkipperByID_->skipIt(runOfEvent, lumiOfEvent, eventAux_.id().event())) {
1351  continue;
1352  }
1353  }
1354  ++offset;
1355  }
1357  }
EventNumber_t event() const
Definition: EventID.h:41
static int const invalidIndex
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:254
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
static RunNumber_t const invalidRun
void skipEventBackward(int &phIndexOfEvent, RunNumber_t &runOfEvent, LuminosityBlockNumber_t &lumiOfEvent, EntryNumber_t &eventEntry)
static EntryNumber_t const invalidEntry
static LuminosityBlockNumber_t const invalidLumi
EventID const & id() const
unsigned int RunNumber_t
EventAuxiliary eventAux_
Definition: RootFile.h:271
std::string const file_
Definition: RootFile.h:249
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)
bool edm::RootFile::skipThisEntry ( )
private

Definition at line 686 of file RootFile.cc.

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

Referenced by getNextItemType().

686  {
688  return false;
689  }
690  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
691 
692  // See first if the entire lumi or run is skipped, so we won't have to read the event Auxiliary in that case.
694  return true;
695  }
696 
697  // The Lumi is not skipped. If this is an event, see if the event is skipped.
702  eventAux_.id().event())) {
703  return true;
704  }
705  }
706 
707  // Skip runs with no lumis if either lumisToSkip or lumisToProcess have been set to select lumis
709  eventSkipperByID_->skippingLumis()) {
710  IndexIntoFile::IndexIntoFileItr iterLumi = indexIntoFileIter_;
711 
712  // There are no lumis in this run, not even ones we will skip
713  if(iterLumi.peekAheadAtLumi() == IndexIntoFile::invalidLumi) {
714  return true;
715  }
716  // If we get here there are lumis in the run, check to see if we are skipping all of them
717  do {
718  if(!eventSkipperByID_->skipIt(iterLumi.run(), iterLumi.peekAheadAtLumi(), 0U)) {
719  return false;
720  }
721  }
722  while(iterLumi.skipLumiInRun());
723  return true;
724  }
725  }
726  return false;
727  }
EventNumber_t event() const
Definition: EventID.h:41
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:254
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1179
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:261
static LuminosityBlockNumber_t const invalidLumi
EventID const & id() const
EventAuxiliary eventAux_
Definition: RootFile.h:271
RootTreePtrArray& edm::RootFile::treePointers ( )
inlineprivate

Definition at line 216 of file RootFile.h.

References treePointers_.

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

Definition at line 1087 of file RootFile.cc.

References assert(), edm::createGlobalIdentifier(), daqProvenanceHelper_, duplicateChecker_, edm::IndexIntoFile::empty(), edm::RootTree::entries(), edm::errors::EventCorruption, eventTree_, Exception, fid_, fileFormatVersion(), 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(), and edm::FileFormatVersion::useReducedProcessHistoryID().

Referenced by RootFile().

1087  {
1088  if(!fid_.isValid()) {
1089  fid_ = FileID(createGlobalIdentifier());
1090  }
1091  if(!eventTree_.isValid()) {
1093  "'Events' tree is corrupted or not present\n" << "in the input file.\n";
1094  }
1095 
1096  if(fileFormatVersion().hasIndexIntoFile()) {
1097  if(runTree().entries() > 0) {
1099  }
1101  if(daqProvenanceHelper_) {
1102  std::vector<ProcessHistoryID>& phidVec = indexIntoFile_.setProcessHistoryIDs();
1103  for(auto& phid : phidVec) {
1104  phid = daqProvenanceHelper_->mapProcessHistoryID(phid);
1105  }
1106  }
1108  }
1109  }
1110  else {
1113  }
1114 
1117  indexIntoFile_.setEventFinder(std::shared_ptr<IndexIntoFile::EventFinder>(std::make_shared<RootFileEventFinder>(eventTree_)));
1118  // We fill the event numbers explicitly if we need to find events in closed files,
1119  // such as for secondary files (or secondary sources) or if duplicate checking across files.
1120  bool needEventNumbers = false;
1121  bool needIndexesForDuplicateChecker = duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
1122  if(inputType != InputType::Primary || needIndexesForDuplicateChecker || usingGoToEvent) {
1123  needEventNumbers = true;
1124  }
1125  bool needEventEntries = false;
1126  if(inputType != InputType::Primary || !noEventSort_) {
1127  // We need event entries for sorting or for secondary files or sources.
1128  needEventEntries = true;
1129  }
1130  indexIntoFile_.fillEventNumbersOrEntries(needEventNumbers, needEventEntries);
1131  }
void fillEventNumbersOrEntries(bool needEventNumbers, bool needEventEntries) const
void setEventFinder(std::shared_ptr< EventFinder > ptr) const
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:290
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:174
bool empty() const
True if no runs, lumis, or events are in the file.
assert(m_qm.get())
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:252
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:295
EntryNumber const & entries() const
Definition: RootTree.h:96
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
FileID fid_
Definition: RootFile.h:256
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool noEventSort_
Definition: RootFile.h:267
RootTree const & runTree() const
Definition: RootFile.h:173
RootTree eventTree_
Definition: RootFile.h:272
bool isValid() const
Definition: FileID.h:18
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:258
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
bool isValid() const
Definition: RootTree.cc:104
void fillIndexIntoFile()
Definition: RootFile.cc:861
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:259
void setNumberOfEvents(EntryNumber_t nevents) const
bool useReducedProcessHistoryID() const
std::string createGlobalIdentifier()
bool edm::RootFile::wasFirstEventJustRead ( ) const

Definition at line 799 of file RootFile.cc.

References indexIntoFileIter_, edm::IndexIntoFile::invalidEntry, fjr2json::lumi, DTTTrigCorrFirst::run, and edm::IndexIntoFile::IndexIntoFileItr::skipEventBackward().

799  {
800  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
801  int phIndex;
804  IndexIntoFile::EntryNumber_t eventEntry;
805  itr.skipEventBackward(phIndex,
806  run,
807  lumi,
808  eventEntry);
809  itr.skipEventBackward(phIndex,
810  run,
811  lumi,
812  eventEntry);
813  return eventEntry == IndexIntoFile::invalidEntry;
814  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
static EntryNumber_t const invalidEntry
unsigned int RunNumber_t
bool edm::RootFile::wasLastEventJustRead ( ) const

Definition at line 792 of file RootFile.cc.

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

792  {
793  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
794  itr.advanceToEvent();
795  return itr.getEntryType() == IndexIntoFile::kEnd;
796  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:262
int edm::RootFile::whyNotFastClonable ( ) const
inline

Definition at line 175 of file RootFile.h.

References whyNotFastClonable_.

Referenced by createFileBlock().

175 {return whyNotFastClonable_;}
int whyNotFastClonable_
Definition: RootFile.h:268

Member Data Documentation

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

Definition at line 289 of file RootFile.h.

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

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

Definition at line 279 of file RootFile.h.

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

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

Definition at line 278 of file RootFile.h.

Referenced by RootFile().

BranchListIndexes edm::RootFile::branchListIndexes_
private

Definition at line 287 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

bool edm::RootFile::branchListIndexesUnchanged_
private

Definition at line 270 of file RootFile.h.

Referenced by branchListIndexesUnchanged(), and RootFile().

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

Definition at line 296 of file RootFile.h.

Referenced by dropOnInput().

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

Definition at line 285 of file RootFile.h.

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

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

Definition at line 263 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

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

Definition at line 264 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 293 of file RootFile.h.

Referenced by eventProductProvenanceRetriever(), and makeProductProvenanceRetriever().

EventSelectionIDVector edm::RootFile::eventSelectionIDs_
private

Definition at line 286 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

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

Definition at line 254 of file RootFile.h.

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

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

Definition at line 256 of file RootFile.h.

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

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

Definition at line 249 of file RootFile.h.

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

FileFormatVersion edm::RootFile::fileFormatVersion_
private

Definition at line 255 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 280 of file RootFile.h.

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

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

Definition at line 269 of file RootFile.h.

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

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

Definition at line 288 of file RootFile.h.

Referenced by fillEventHistory(), and readEventHistoryTree().

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

Definition at line 260 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 257 of file RootFile.h.

Referenced by indexIntoFileSharedPtr().

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

Definition at line 276 of file RootFile.h.

Referenced by fillIndexIntoFile(), and fillThisEventAuxiliary().

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

Definition at line 250 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 284 of file RootFile.h.

Referenced by newBranchToOldBranch(), and RootFile().

bool edm::RootFile::noEventSort_
private

Definition at line 267 of file RootFile.h.

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

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

Definition at line 259 of file RootFile.h.

Referenced by validateFile().

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

Definition at line 294 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and readParentageTree().

ProcessConfiguration const& edm::RootFile::processConfiguration_
private

Definition at line 251 of file RootFile.h.

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

Definition at line 282 of file RootFile.h.

Referenced by getNextItemType(), and setIfFastClonable().

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

Definition at line 277 of file RootFile.h.

Referenced by productRegistry(), and RootFile().

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

Definition at line 291 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 292 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 265 of file RootFile.h.

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

bool edm::RootFile::skipAnyEvents_
private

Definition at line 266 of file RootFile.h.

Referenced by setIfFastClonable().

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

Definition at line 281 of file RootFile.h.

Referenced by initAssociationsFromSecondary().

RootTreePtrArray edm::RootFile::treePointers_
private

Definition at line 275 of file RootFile.h.

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

int edm::RootFile::whyNotFastClonable_
private

Definition at line 268 of file RootFile.h.

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