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, bool enforceGUIDInFileName)
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, unsigned int nStreams, int treeMaxVirtualSize, InputSource::ProcessingMode processingMode, RunHelperBase *runHelper, ProductSelectorRules const &productSelectorRules, InputType inputType, std::shared_ptr< BranchIDListHelper > branchIDListHelper, std::shared_ptr< ThinnedAssociationsHelper > thinnedAssociationsHelper, std::vector< BranchID > const *associationsFromSecondary, bool dropDescendantsOfDroppedProducts, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool labelRawDataLikeMC, bool enablePrefetching, bool enforceGUIDInFileName)
 
 RootFile (std::string const &fileName, ProcessConfiguration const &processConfiguration, std::string const &logicalFileName, std::shared_ptr< InputFile > filePtr, unsigned int nStreams, int treeMaxVirtualSize, RunHelperBase *runHelper, ProductSelectorRules const &productSelectorRules, InputType inputType, ProcessHistoryRegistry &processHistoryRegistry, std::vector< std::shared_ptr< IndexIntoFile > > const &indexesIntoFiles, std::vector< std::shared_ptr< IndexIntoFile > >::size_type currentIndexIntoFile, std::vector< ProcessHistoryID > &orderedProcessHistoryIDs, bool bypassVersionCheck, bool enablePrefetching, bool enforceGUIDInFileName)
 
 RootFile (RootFile const &)=delete
 
RootTree const & runTree () const
 
void setAtEventEntry (IndexIntoFile::EntryNumber_t entry)
 
bool setEntryAtEvent (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
 
bool setEntryAtItem (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
 
bool setEntryAtLumi (RunNumber_t run, LuminosityBlockNumber_t lumi)
 
bool setEntryAtNextEventInLumi (RunNumber_t run, LuminosityBlockNumber_t lumi)
 
bool setEntryAtRun (RunNumber_t run)
 
void setPosition (IndexIntoFile::IndexIntoFileItr const &position)
 
void 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_
 
bool enforceGUIDInFileName_
 
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,
bool  enforceGUIDInFileName 
)

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

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

Definition at line 94 of file RootFile.h.

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

Definition at line 126 of file RootFile.h.

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

Definition at line 516 of file RootFile.cc.

516  {
517  }
edm::RootFile::RootFile ( RootFile const &  )
delete

Member Function Documentation

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

Definition at line 246 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:293
std::shared_ptr<BranchChildren>& edm::RootFile::branchChildren ( )
inlineprivate

Definition at line 247 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:293
std::shared_ptr<BranchIDListHelper const> edm::RootFile::branchIDListHelper ( ) const
inline

Definition at line 208 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:283
std::shared_ptr<BranchIDListHelper>& edm::RootFile::branchIDListHelper ( )
inline

Definition at line 209 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:283
bool edm::RootFile::branchListIndexesUnchanged ( ) const
inline

Definition at line 180 of file RootFile.h.

References branchListIndexesUnchanged_.

Referenced by createFileBlock().

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

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

1159  {
1160  // Just to play it safe, zero all pointers to objects in the InputFile to be closed.
1161  eventHistoryTree_ = nullptr;
1162  for(auto& treePointer : treePointers_) {
1163  treePointer->close();
1164  treePointer = nullptr;
1165  }
1166  filePtr_->Close();
1167  filePtr_ = nullptr; // propagate_const<T> has no reset() function
1168  }
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:289
RootTreePtrArray treePointers_
Definition: RootFile.h:279
bool edm::RootFile::containsItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 744 of file RootFile.cc.

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

744  {
746  }
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:261
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
std::unique_ptr< FileBlock > edm::RootFile::createFileBlock ( ) const

Definition at line 648 of file RootFile.cc.

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

648  {
649  return std::unique_ptr<FileBlock>(new FileBlock(fileFormatVersion(),
650  eventTree_.tree(),
652  lumiTree_.tree(),
654  runTree_.tree(),
655  runTree_.metaTree(),
658  file_,
660  modifiedIDs(),
661  branchChildren()));
662  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
bool branchListIndexesUnchanged() const
Definition: RootFile.h:180
RootTree lumiTree_
Definition: RootFile.h:277
TTree const * metaTree() const
Definition: RootTree.h:142
TTree const * tree() const
Definition: RootTree.h:140
bool modifiedIDs() const
Definition: RootFile.h:181
int whyNotFastClonable() const
Definition: RootFile.h:178
RootTree eventTree_
Definition: RootFile.h:276
std::array< bool, NumBranchTypes > const & hasNewlyDroppedBranch() const
Definition: RootFile.h:179
RootTree runTree_
Definition: RootFile.h:278
std::shared_ptr< BranchChildren const > branchChildren() const
Definition: RootFile.h:246
std::string const file_
Definition: RootFile.h:252
void edm::RootFile::dropOnInput ( ProductRegistry reg,
ProductSelectorRules const &  rules,
bool  dropDescendants,
InputType  inputType 
)
private

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

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

Definition at line 173 of file RootFile.h.

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

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

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

References eventProductProvenanceRetrievers_, and edm::get_underlying_safe().

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

Definition at line 174 of file RootFile.h.

References eventTree_.

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

Definition at line 167 of file RootFile.h.

References file_.

Referenced by RootFile().

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

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

1190  {
1191  if(!eventTree_.current(entry)) {
1192  return false;
1193  }
1196  return true;
1197  }
bool current() const
Definition: RootTree.h:89
RootTree eventTree_
Definition: RootFile.h:276
list entry
Definition: mps_splice.py:62
void fillThisEventAuxiliary()
Definition: RootFile.cc:1171
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::fillEventHistory ( )
private

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

1200  {
1201  // We could consider doing delayed reading, but because we have to
1202  // store this History object in a different tree than the event
1203  // data tree, this is too hard to do in this first version.
1204 
1205  if(fileFormatVersion().eventHistoryBranch()) {
1206  // Lumi block number was not in EventID for the relevant releases.
1207  EventID id(eventAux().id().run(), 0, eventAux().id().event());
1208  if(eventProcessHistoryIter_->eventID() != id) {
1209  EventProcessHistoryID target(id, ProcessHistoryID());
1211  assert(eventProcessHistoryIter_->eventID() == id);
1212  }
1215  } else if(fileFormatVersion().eventHistoryTree()) {
1216  // for backward compatibility.
1217  History* pHistory = history_.get();
1218  TBranch* eventHistoryBranch = eventHistoryTree_->GetBranch(poolNames::eventHistoryBranchName().c_str());
1219  if(!eventHistoryBranch) {
1221  << "Failed to find history branch in event history tree.\n";
1222  }
1223  eventHistoryBranch->SetAddress(&pHistory);
1225  eventAux_.setProcessHistoryID(history_->processHistoryID());
1226  eventSelectionIDs_.swap(history_->eventSelectionIDs());
1227  branchListIndexes_.swap(history_->branchListIndexes());
1228  } else if(fileFormatVersion().noMetaDataTrees()) {
1229  // Current format
1231  TBranch* eventSelectionIDBranch = eventTree_.tree()->GetBranch(poolNames::eventSelectionsBranchName().c_str());
1232  assert(eventSelectionIDBranch != nullptr);
1233  eventTree_.fillBranchEntry(eventSelectionIDBranch, pESV);
1235  TBranch* branchListIndexesBranch = eventTree_.tree()->GetBranch(poolNames::branchListIndexesBranchName().c_str());
1236  assert(branchListIndexesBranch != nullptr);
1237  eventTree_.fillBranchEntry(branchListIndexesBranch, pBLI);
1238  }
1239  if(provenanceAdaptor_) {
1240  eventAux_.setProcessHistoryID(provenanceAdaptor_->convertID(eventAux().processHistoryID()));
1241  for(auto& esID : eventSelectionIDs_) {
1242  esID = provenanceAdaptor_->convertID(esID);
1243  }
1244  }
1245  if(daqProvenanceHelper_) {
1247  }
1249  // old format. branchListIndexes_ must be filled in from the ProvenanceAdaptor.
1250  provenanceAdaptor_->branchListIndexes(branchListIndexes_);
1251  }
1252  if(branchIDListHelper_) {
1253  branchIDListHelper_->fixBranchListIndexes(branchListIndexes_);
1254  }
1255  }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:480
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
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:299
std::string const & eventSelectionsBranchName()
Definition: BranchType.cc:243
std::vector< EventSelectionID > EventSelectionIDVector
std::vector< EventProcessHistoryID >::const_iterator eventProcessHistoryIter_
Definition: RootFile.h:267
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:169
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:290
bool eventHistoryTree() const
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:295
RootTree eventTree_
Definition: RootFile.h:276
BranchListIndexes branchListIndexes_
Definition: RootFile.h:291
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:292
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:289
std::string const & branchListIndexesBranchName()
Definition: BranchType.cc:247
EventAuxiliary eventAux_
Definition: RootFile.h:275
edm::propagate_const< std::shared_ptr< BranchIDListHelper > > branchIDListHelper_
Definition: RootFile.h:283
std::vector< EventProcessHistoryID > eventProcessHistoryIDs_
Definition: RootFile.h:266
void edm::RootFile::fillIndexIntoFile ( )
private

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

864  {
865  // This function is for backward compatibility.
866  // If reading a current format file, indexIntoFile_ is read from the input
867  // file and should always be there. Note that the algorithm below will work
868  // sometimes but often fail with the new format introduced in release 3_8_0.
869  // If it ever becomes necessary to rebuild IndexIntoFile from the new format,
870  // probably a separate function should be written to deal with the task.
871  // This is possible just not implemented yet.
872  assert(!fileFormatVersion().hasIndexIntoFile());
873 
874  typedef std::list<LumiItem> LumiList;
875  LumiList lumis; // (declare 1)
876 
877  typedef std::set<LuminosityBlockID> RunLumiSet;
878  RunLumiSet runLumiSet; // (declare 2)
879 
880  typedef std::list<RunItem> RunList;
881  RunList runs; // (declare 5)
882 
883  typedef std::set<RunNumber_t> RunSet;
884  RunSet runSet; // (declare 4)
885 
886  typedef std::set<RunItem, RunItemSortByRunPhid> RunItemSet;
887  RunItemSet runItemSet; // (declare 3)
888 
889  typedef std::map<RunNumber_t, ProcessHistoryID> PHIDMap;
890  PHIDMap phidMap;
891 
892  RunNumber_t prevRun = 0;
893  LuminosityBlockNumber_t prevLumi = 0;
894  ProcessHistoryID prevPhid;
895  bool iFirst = true;
896 
897  indexIntoFile_.unsortedEventNumbers().clear(); // should already be empty, just being careful
899 
900  // First, loop through the event tree.
901  while(eventTree_.next()) {
902  bool newRun = false;
903  bool newLumi = false;
906 
907  // Save the event numbers as we loop through the event auxiliary to avoid
908  // having to read through the event auxiliary again later. These event numbers
909  // are not actually used in this function, but could be needed elsewhere.
911 
912  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(eventAux().processHistoryID());
913 
914  if(iFirst || prevPhid != reducedPHID || prevRun != eventAux().run()) {
915  iFirst = false;
916  newRun = newLumi = true;
917  } else if(prevLumi != eventAux().luminosityBlock()) {
918  newLumi = true;
919  }
920  prevPhid = reducedPHID;
921  prevRun = eventAux().run();
922  prevLumi = eventAux().luminosityBlock();
923  if(newLumi) {
924  lumis.emplace_back(reducedPHID,
925  eventAux().run(), eventAux().luminosityBlock(), eventTree_.entryNumber()); // (insert 1)
926  runLumiSet.insert(LuminosityBlockID(eventAux().run(), eventAux().luminosityBlock())); // (insert 2)
927  } else {
928  LumiItem& currentLumi = lumis.back();
929  assert(currentLumi.lastEventEntry_ == eventTree_.entryNumber());
930  ++currentLumi.lastEventEntry_;
931  }
932  if(newRun) {
933  // Insert run in list if it is not already there.
934  RunItem item(reducedPHID, eventAux().run());
935  if(runItemSet.insert(item).second) { // (check 3, insert 3)
936  runs.push_back(std::move(item)); // (insert 5)
937  runSet.insert(eventAux().run()); // (insert 4)
938  phidMap.insert(std::make_pair(eventAux().run(), reducedPHID));
939  }
940  }
941  }
942  // now clean up.
944  eventAux_ = EventAuxiliary();
946 
947  // Loop over run entries and fill information.
948 
949  typedef std::map<RunNumber_t, IndexIntoFile::EntryNumber_t> RunMap;
950  RunMap runMap; // (declare 11)
951 
952  typedef std::vector<RunItem> RunVector;
953  RunVector emptyRuns; // (declare 12)
954 
955  if(runTree_.isValid()) {
956  while(runTree_.next()) {
957  // Note: adjacent duplicates will be skipped without an explicit check.
958 
959  std::shared_ptr<RunAuxiliary> runAux = fillRunAuxiliary();
960  ProcessHistoryID reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(runAux->processHistoryID());
961 
962  if(runSet.insert(runAux->run()).second) { // (check 4, insert 4)
963  // This run was not associated with any events.
964  emptyRuns.emplace_back(reducedPHID, runAux->run()); // (insert 12)
965  }
966  runMap.insert(std::make_pair(runAux->run(), runTree_.entryNumber())); // (insert 11)
967  phidMap.insert(std::make_pair(runAux->run(), reducedPHID));
968  }
969  // now clean up.
971  }
972 
973  // Insert the ordered empty runs into the run list.
974  RunItemSortByRun runItemSortByRun;
975  stable_sort_all(emptyRuns, runItemSortByRun);
976 
977  RunList::iterator itRuns = runs.begin(), endRuns = runs.end();
978  for(auto const& emptyRun : emptyRuns) {
979  for(; itRuns != endRuns; ++itRuns) {
980  if(runItemSortByRun(emptyRun, *itRuns)) {
981  break;
982  }
983  }
984  runs.insert(itRuns, emptyRun);
985  }
986 
987  // Loop over luminosity block entries and fill information.
988 
989  typedef std::vector<LumiItem> LumiVector;
990  LumiVector emptyLumis; // (declare 7)
991 
992  typedef std::map<LuminosityBlockID, IndexIntoFile::EntryNumber_t> RunLumiMap;
993  RunLumiMap runLumiMap; // (declare 6)
994 
995  if(lumiTree_.isValid()) {
996  while(lumiTree_.next()) {
997  // Note: adjacent duplicates will be skipped without an explicit check.
998  std::shared_ptr<LuminosityBlockAuxiliary> lumiAux = fillLumiAuxiliary();
999  LuminosityBlockID lumiID = LuminosityBlockID(lumiAux->run(), lumiAux->luminosityBlock());
1000  if(runLumiSet.insert(lumiID).second) { // (check 2, insert 2)
1001  // This lumi was not associated with any events.
1002  // Use the process history ID from the corresponding run. In cases of practical
1003  // importance, this should be the correct process history ID, but it is possible
1004  // to construct files where this is not the correct process history ID ...
1005  PHIDMap::const_iterator iPhidMap = phidMap.find(lumiAux->run());
1006  assert(iPhidMap != phidMap.end());
1007  emptyLumis.emplace_back(iPhidMap->second, lumiAux->run(), lumiAux->luminosityBlock(), IndexIntoFile::invalidEntry); // (insert 7)
1008  }
1009  runLumiMap.insert(std::make_pair(lumiID, lumiTree_.entryNumber()));
1010  }
1011  // now clean up.
1013  }
1014 
1015  // Insert the ordered empty lumis into the lumi list.
1016  LumiItemSortByRunLumi lumiItemSortByRunLumi;
1017  stable_sort_all(emptyLumis, lumiItemSortByRunLumi);
1018 
1019  LumiList::iterator itLumis = lumis.begin(), endLumis = lumis.end();
1020  for(auto const& emptyLumi : emptyLumis) {
1021  for(; itLumis != endLumis; ++itLumis) {
1022  if(lumiItemSortByRunLumi(emptyLumi, *itLumis)) {
1023  break;
1024  }
1025  }
1026  lumis.insert(itLumis, emptyLumi);
1027  }
1028 
1029  // Create a map of RunItems that gives the order of first appearance in the list.
1030  // Also fill in the vector of process history IDs
1031  typedef std::map<RunItem, int, RunItemSortByRunPhid> RunCountMap;
1032  RunCountMap runCountMap; // Declare (17)
1033  std::vector<ProcessHistoryID>& phids = indexIntoFile_.setProcessHistoryIDs();
1034  assert(phids.empty());
1035  std::vector<IndexIntoFile::RunOrLumiEntry>& entries = indexIntoFile_.setRunOrLumiEntries();
1036  assert(entries.empty());
1037  int rcount = 0;
1038  for(auto& run : runs) {
1039  RunCountMap::const_iterator countMapItem = runCountMap.find(run);
1040  if(countMapItem == runCountMap.end()) {
1041  countMapItem = runCountMap.insert(std::make_pair(run, rcount)).first; // Insert (17)
1042  assert(countMapItem != runCountMap.end());
1043  ++rcount;
1044  }
1045  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, run.phid_);
1046  if(phidItem == phids.end()) {
1047  phids.push_back(run.phid_);
1048  phidItem = phids.end() - 1;
1049  }
1050  entries.emplace_back(
1051  countMapItem->second, // use (17)
1053  runMap[run.run_], // use (11)
1054  phidItem - phids.begin(),
1055  run.run_,
1056  0U,
1059  }
1060 
1061  // Create a map of LumiItems that gives the order of first appearance in the list.
1062  typedef std::map<LumiItem, int, LumiItemSortByRunLumiPhid> LumiCountMap;
1063  LumiCountMap lumiCountMap; // Declare (19)
1064  int lcount = 0;
1065  for(auto& lumi : lumis) {
1066  RunCountMap::const_iterator runCountMapItem = runCountMap.find(RunItem(lumi.phid_, lumi.run_));
1067  assert(runCountMapItem != runCountMap.end());
1068  LumiCountMap::const_iterator countMapItem = lumiCountMap.find(lumi);
1069  if(countMapItem == lumiCountMap.end()) {
1070  countMapItem = lumiCountMap.insert(std::make_pair(lumi, lcount)).first; // Insert (17)
1071  assert(countMapItem != lumiCountMap.end());
1072  ++lcount;
1073  }
1074  std::vector<ProcessHistoryID>::const_iterator phidItem = find_in_all(phids, lumi.phid_);
1075  assert(phidItem != phids.end());
1076  entries.emplace_back(
1077  runCountMapItem->second,
1078  countMapItem->second,
1079  runLumiMap[LuminosityBlockID(lumi.run_, lumi.lumi_)],
1080  phidItem - phids.begin(),
1081  lumi.run_,
1082  lumi.lumi_,
1083  lumi.firstEventEntry_,
1084  lumi.lastEventEntry_);
1085  }
1086  stable_sort_all(entries);
1087  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1258
tuple lumi
Definition: fjr2json.py:35
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:277
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:255
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:280
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
def move
Definition: eostools.py:510
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1282
RootTree eventTree_
Definition: RootFile.h:276
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:261
RootTree runTree_
Definition: RootFile.h:278
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:1200
bool isValid() const
Definition: RootTree.cc:104
unsigned int RunNumber_t
EventAuxiliary eventAux_
Definition: RootFile.h:275
void fillThisEventAuxiliary()
Definition: RootFile.cc:1171
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
std::shared_ptr< LuminosityBlockAuxiliary > edm::RootFile::fillLumiAuxiliary ( )
private

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

1258  {
1259  auto lumiAuxiliary = std::make_shared<LuminosityBlockAuxiliary>();
1261  LuminosityBlockAuxiliary *pLumiAux = lumiAuxiliary.get();
1262  lumiTree_.fillAux<LuminosityBlockAuxiliary>(pLumiAux);
1263  } else {
1264  LuminosityBlockAux lumiAux;
1265  LuminosityBlockAux *pLumiAux = &lumiAux;
1266  lumiTree_.fillAux<LuminosityBlockAux>(pLumiAux);
1267  conversion(lumiAux, *lumiAuxiliary);
1268  }
1269  if(provenanceAdaptor_) {
1270  lumiAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(lumiAuxiliary->processHistoryID()));
1271  }
1272  if(daqProvenanceHelper_) {
1273  lumiAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(lumiAuxiliary->processHistoryID()));
1274  }
1275  if(lumiAuxiliary->luminosityBlock() == 0 && !fileFormatVersion().runsAndLumis()) {
1276  lumiAuxiliary->id() = LuminosityBlockID(RunNumber_t(1), LuminosityBlockNumber_t(1));
1277  }
1278  return lumiAuxiliary;
1279  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
RootTree lumiTree_
Definition: RootFile.h:277
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:299
unsigned int LuminosityBlockNumber_t
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:295
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 1282 of file RootFile.cc.

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

Referenced by fillIndexIntoFile(), and readRunAuxiliary_().

1282  {
1283  auto runAuxiliary = std::make_shared<RunAuxiliary>();
1285  RunAuxiliary *pRunAux = runAuxiliary.get();
1286  runTree_.fillAux<RunAuxiliary>(pRunAux);
1287  } else {
1288  RunAux runAux;
1289  RunAux *pRunAux = &runAux;
1290  runTree_.fillAux<RunAux>(pRunAux);
1291  conversion(runAux, *runAuxiliary);
1292  }
1293  if(provenanceAdaptor_) {
1294  runAuxiliary->setProcessHistoryID(provenanceAdaptor_->convertID(runAuxiliary->processHistoryID()));
1295  }
1296  if(daqProvenanceHelper_) {
1297  runAuxiliary->setProcessHistoryID(daqProvenanceHelper_->mapProcessHistoryID(runAuxiliary->processHistoryID()));
1298  }
1299  return runAuxiliary;
1300  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:299
edm::propagate_const< std::unique_ptr< ProvenanceAdaptor > > provenanceAdaptor_
Definition: RootFile.h:295
RootTree runTree_
Definition: RootFile.h:278
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 1171 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().

1171  {
1173  // Already read.
1174  return;
1175  }
1177  EventAuxiliary *pEvAux = &eventAux_;
1178  eventTree_.fillAux<EventAuxiliary>(pEvAux);
1179  } else {
1180  // for backward compatibility.
1181  EventAux eventAux;
1182  EventAux *pEvAux = &eventAux;
1183  eventTree_.fillAux<EventAux>(pEvAux);
1184  conversion(eventAux, eventAux_);
1185  }
1187  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
IndexIntoFile::EntryNumber_t lastEventEntryNumberRead_
Definition: RootFile.h:280
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
RootTree eventTree_
Definition: RootFile.h:276
EntryNumber const & entryNumber() const
Definition: RootTree.h:94
void conversion(EventAux const &from, EventAuxiliary &to)
Definition: EventAux.cc:9
EventAuxiliary eventAux_
Definition: RootFile.h:275
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 749 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().

749  {
750  // First, account for consecutive skipped entries.
751  while(skipThisEntry()) {
754  }
757  }
758  else {
760  }
761  }
762  // OK, we have an entry that is not skipped.
764  if(entryType == IndexIntoFile::kEnd) {
765  return IndexIntoFile::kEnd;
766  }
767  if(entryType == IndexIntoFile::kRun) {
769  runHelper_->checkForNewRun(run);
770  return IndexIntoFile::kRun;
771  } else if(processingMode_ == InputSource::Runs) {
773  return getNextItemType(run, lumi, event);
774  }
775  if(entryType == IndexIntoFile::kLumi) {
778  return IndexIntoFile::kLumi;
781  return getNextItemType(run, lumi, event);
782  }
783  if(isDuplicateEvent()) {
785  return getNextItemType(run, lumi, event);
786  }
790  event = eventAux_.event();
791  return IndexIntoFile::kEvent;
792  }
tuple lumi
Definition: fjr2json.py:35
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:286
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
bool skipThisEntry()
Definition: RootFile.cc:689
IndexIntoFile::EntryType getNextItemType(RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
Definition: RootFile.cc:749
bool isDuplicateEvent()
Definition: RootFile.cc:733
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:287
EventAuxiliary eventAux_
Definition: RootFile.h:275
EventNumber_t event() const
bool edm::RootFile::goToEvent ( EventID const &  eventID)

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

1371  {
1372 
1374 
1375  if(duplicateChecker_) {
1376  duplicateChecker_->disable();
1377  }
1378 
1381 
1382  IndexIntoFile::IndexIntoFileItr iter =
1384 
1385  if(iter == indexIntoFile_.end(sortOrder)) {
1386  return false;
1387  }
1388  indexIntoFileIter_ = iter;
1389  return true;
1390  }
RunNumber_t run() const
Definition: EventID.h:39
EventID const & eventID() const
Definition: RootFile.h:173
EventNumber_t event() const
Definition: EventID.h:41
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:294
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
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:270
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
void fillEventNumbers() const
std::array<bool, NumBranchTypes> const& edm::RootFile::hasNewlyDroppedBranch ( ) const
inline

Definition at line 179 of file RootFile.h.

References hasNewlyDroppedBranch_.

Referenced by createFileBlock().

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

Definition at line 674 of file RootFile.cc.

References indexIntoFileIter_.

674  {
675  return indexIntoFileIter_;
676  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
std::shared_ptr<IndexIntoFile const> edm::RootFile::indexIntoFileSharedPtr ( ) const
inline

Definition at line 210 of file RootFile.h.

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

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

References edm::get_underlying_safe(), and indexIntoFileSharedPtr_.

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

References fileThinnedAssociationsHelper_, and thinnedAssociationsHelper_.

684  {
685  thinnedAssociationsHelper_->initAssociationsFromSecondary(associationsFromSecondary, *fileThinnedAssociationsHelper_);
686  }
edm::propagate_const< std::unique_ptr< ThinnedAssociationsHelper > > fileThinnedAssociationsHelper_
Definition: RootFile.h:284
edm::propagate_const< std::shared_ptr< ThinnedAssociationsHelper > > thinnedAssociationsHelper_
Definition: RootFile.h:285
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 1652 of file RootFile.cc.

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

Referenced by RootFile().

1654  {
1655  if(duplicateChecker_) {
1656  if(eventTree_.next()) {
1658  duplicateChecker_->inputFileOpened(eventAux().isRealData(),
1660  indexesIntoFiles,
1661  currentIndexIntoFile);
1662  }
1664  }
1665  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:294
bool next()
Definition: RootTree.h:87
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
RootTree eventTree_
Definition: RootFile.h:276
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
static EntryNumber_t const invalidEntry
void fillThisEventAuxiliary()
Definition: RootFile.cc:1171
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::isDuplicateEvent ( )
private

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

733  {
735  if(duplicateChecker_.get() == nullptr) {
736  return false;
737  }
739  return duplicateChecker_->isDuplicateAndCheckActive(indexIntoFileIter_.processHistoryIDIndex(),
741  }
EventNumber_t event() const
Definition: EventID.h:41
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:294
assert(m_qm.get())
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
EventID const & id() const
EventAuxiliary eventAux_
Definition: RootFile.h:275
std::string const file_
Definition: RootFile.h:252
RootTree const& edm::RootFile::lumiTree ( ) const
inline

Definition at line 175 of file RootFile.h.

References lumiTree_.

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

Definition at line 1809 of file RootFile.cc.

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

Referenced by readCurrentEvent().

1809  {
1810  if(eventProductProvenanceRetrievers_.size()<=iStreamID) {
1811  eventProductProvenanceRetrievers_.resize(iStreamID+1);
1812  }
1813  if(!eventProductProvenanceRetrievers_[iStreamID]) {
1814  // propagate_const<T> has no reset() function
1815  eventProductProvenanceRetrievers_[iStreamID] = std::make_shared<ProductProvenanceRetriever>(provenanceReaderMaker_->makeReader(eventTree_, daqProvenanceHelper_.get()));
1816  }
1817  eventProductProvenanceRetrievers_[iStreamID]->reset();
1818  return eventProductProvenanceRetriever(iStreamID);
1819  }
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:299
std::shared_ptr< ProductProvenanceRetriever const > eventProductProvenanceRetriever(size_t index) const
Definition: RootFile.h:249
std::vector< edm::propagate_const< std::shared_ptr< ProductProvenanceRetriever > > > eventProductProvenanceRetrievers_
Definition: RootFile.h:297
RootTree eventTree_
Definition: RootFile.h:276
edm::propagate_const< std::unique_ptr< MakeProvenanceReader > > provenanceReaderMaker_
Definition: RootFile.h:296
std::unique_ptr< MakeProvenanceReader > edm::RootFile::makeProvenanceReaderMaker ( InputType  inputType)
private

Definition at line 1792 of file RootFile.cc.

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

Referenced by RootFile().

1792  {
1794  readParentageTree(inputType);
1795  return std::unique_ptr<MakeProvenanceReader>(new MakeReducedProvenanceReader(parentageIDLookup_));
1796  } else if(fileFormatVersion_.splitProductIDs()) {
1797  readParentageTree(inputType);
1798  return std::unique_ptr<MakeProvenanceReader>(new MakeFullProvenanceReader);
1799  } else if(fileFormatVersion_.perEventProductIDs()) {
1800  std::unique_ptr<EntryDescriptionMap> entryDescriptionMap(new EntryDescriptionMap);
1801  readEntryDescriptionTree(*entryDescriptionMap, inputType);
1802  return std::unique_ptr<MakeProvenanceReader>(new MakeOldProvenanceReader(std::move(entryDescriptionMap)));
1803  } else {
1804  return std::unique_ptr<MakeProvenanceReader>(new MakeDummyProvenanceReader);
1805  }
1806  }
void readEntryDescriptionTree(EntryDescriptionMap &entryDescriptionMap, InputType inputType)
Definition: RootFile.cc:520
FileFormatVersion fileFormatVersion_
Definition: RootFile.h:258
void readParentageTree(InputType inputType)
Definition: RootFile.cc:566
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:298
void edm::RootFile::markBranchToBeDropped ( bool  dropDescendants,
BranchID const &  branchID,
std::set< BranchID > &  branchesToDrop 
) const
private

Definition at line 1668 of file RootFile.cc.

References branchChildren_.

Referenced by dropOnInput().

1668  {
1669  if(dropDescendants) {
1670  branchChildren_->appendToDescendants(branchID, branchesToDrop);
1671  } else {
1672  branchesToDrop.insert(branchID);
1673  }
1674  }
edm::propagate_const< std::shared_ptr< BranchChildren > > branchChildren_
Definition: RootFile.h:293
bool edm::RootFile::modifiedIDs ( ) const
inline

Definition at line 181 of file RootFile.h.

References daqProvenanceHelper_.

Referenced by createFileBlock().

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

Definition at line 665 of file RootFile.cc.

References newBranchToOldBranch_.

Referenced by dropOnInput(), and RootFile().

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

Definition at line 206 of file RootFile.h.

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

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

Definition at line 168 of file RootFile.h.

References productRegistry_.

Referenced by RootFile().

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

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

1428  {
1429  if(!eventTree_.current()) {
1430  return false;
1431  }
1433  if(!fileFormatVersion().lumiInEventID()) {
1434  //ugly, but will disappear when the backward compatibility is done with schema evolution.
1435  const_cast<EventID&>(eventAux_.id()).setLuminosityBlockNumber(eventAux_.oldLuminosityBlock());
1437  }
1438  fillEventHistory();
1439  runHelper_->overrideRunNumber(eventAux_.id(), eventAux().isRealData());
1440 
1441  // We're not done ... so prepare the EventPrincipal
1442  eventTree_.insertEntryForIndex(principal.transitionIndex());
1443  principal.fillEventPrincipal(eventAux(),
1447  *(makeProductProvenanceRetriever(principal.streamID().value())),
1449 
1450  // report event read from file
1451  filePtr_->eventReadFromFile();
1452  return true;
1453  }
bool isRealData() const
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:255
bool current() const
Definition: RootTree.h:89
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:98
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
EventSelectionIDVector eventSelectionIDs_
Definition: RootFile.h:290
def move
Definition: eostools.py:510
RootTree eventTree_
Definition: RootFile.h:276
BranchListIndexes branchListIndexes_
Definition: RootFile.h:291
LuminosityBlockNumber_t oldLuminosityBlock() const
DelayedReader * rootDelayedReader() const
Definition: RootTree.cc:116
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
void fillEventHistory()
Definition: RootFile.cc:1200
std::shared_ptr< ProductProvenanceRetriever > makeProductProvenanceRetriever(unsigned int iStreamIndex)
Definition: RootFile.cc:1809
EventID const & id() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:287
EventAuxiliary eventAux_
Definition: RootFile.h:275
void fillThisEventAuxiliary()
Definition: RootFile.cc:1171
void edm::RootFile::readEntryDescriptionTree ( EntryDescriptionMap entryDescriptionMap,
InputType  inputType 
)
private

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

520  {
521  // Called only for old format files.
522  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
523  std::unique_ptr<TTree> entryDescriptionTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::entryDescriptionTreeName().c_str())));
524  if(nullptr == entryDescriptionTree.get()) {
525  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::entryDescriptionTreeName()
526  << " in the input file.\n";
527  }
528 
529  EntryDescriptionID idBuffer;
530  EntryDescriptionID* pidBuffer = &idBuffer;
531  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), &pidBuffer);
532 
533  EventEntryDescription entryDescriptionBuffer;
534  EventEntryDescription *pEntryDescriptionBuffer = &entryDescriptionBuffer;
535  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), &pEntryDescriptionBuffer);
536 
537  // Fill in the parentage registry.
538  ParentageRegistry& registry = *ParentageRegistry::instance();
539 
540  for(Long64_t i = 0, numEntries = entryDescriptionTree->GetEntries(); i < numEntries; ++i) {
541  roottree::getEntry(entryDescriptionTree.get(), i);
542  if(idBuffer != entryDescriptionBuffer.id()) {
543  throw Exception(errors::EventCorruption) << "Corruption of EntryDescription tree detected.\n";
544  }
545  entryDescriptionMap.insert(std::make_pair(entryDescriptionBuffer.id(),entryDescriptionBuffer));
546  Parentage parents;
547  parents.setParents(entryDescriptionBuffer.parents());
549  ParentageID const oldID = parents.id();
550  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
551  ParentageID newID = parents.id();
552  if(newID != oldID) {
553  daqProvenanceHelper_->setOldParentageIDToNew(oldID,newID);
554  }
555  }
556  // For thread safety, don't update global registries when a secondary source opens a file.
557  if(inputType != InputType::SecondarySource) {
558  registry.insertMapped(parents);
559  }
560  }
561  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionIDBranchName().c_str(), nullptr);
562  entryDescriptionTree->SetBranchAddress(poolNames::entryDescriptionBranchName().c_str(), nullptr);
563  }
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:299
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:256
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 1405 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().

1405  {
1408  // read the event auxiliary if not alrady read.
1410 
1411  // read the event
1413 
1414  runHelper_->checkRunConsistency(eventAux().run(), indexIntoFileIter_.run());
1415  runHelper_->checkLumiConsistency(eventAux().luminosityBlock(), indexIntoFileIter_.lumi());
1416 
1417  // If this next assert shows up in performance profiling or significantly affects memory, then these three lines should be deleted.
1418  // The IndexIntoFile should guarantee that it never fails.
1420  ProcessHistoryID const& reducedPHID = processHistoryRegistry_->reducedProcessHistoryID(idToCheck);
1422 
1424  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
assert(m_qm.get())
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:255
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:299
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
LuminosityBlockNumber_t lumi() const
bool readCurrentEvent(EventPrincipal &cache)
Definition: RootFile.cc:1428
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
Hash< ProcessHistoryType > ProcessHistoryID
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
ProcessHistoryID const & processHistoryID(int i) const
ProcessHistoryID const & processHistoryID() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:287
bool useReducedProcessHistoryID() const
void edm::RootFile::readEventHistoryTree ( )
private

Definition at line 1639 of file RootFile.cc.

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

Referenced by RootFile().

1639  {
1640  // Read in the event history tree, if we have one...
1641  if(fileFormatVersion().eventHistoryTree()) {
1642  history_ = std::make_unique<History>(); // propagate_const<T> has no reset() function
1643  eventHistoryTree_ = dynamic_cast<TTree*>(filePtr_->Get(poolNames::eventHistoryTreeName().c_str()));
1644  if(!eventHistoryTree_) {
1646  << "Failed to find the event history tree.\n";
1647  }
1648  }
1649  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
edm::propagate_const< std::unique_ptr< History > > history_
Definition: RootFile.h:292
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
edm::propagate_const< TTree * > eventHistoryTree_
Definition: RootFile.h:289
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 1584 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().

1584  {
1587  // Begin code for backward compatibility before the existence of lumi trees.
1588  if(!lumiTree_.isValid()) {
1590  return;
1591  }
1592  // End code for backward compatibility before the existence of lumi trees.
1594  lumiTree_.insertEntryForIndex(lumiPrincipal.transitionIndex());
1595  lumiPrincipal.fillLuminosityBlockPrincipal(*processHistoryRegistry_, lumiTree_.rootDelayedReader());
1596  // Read in all the products now.
1597  lumiPrincipal.readAllFromSourceAndMergeImmediately();
1599  }
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:277
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:255
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
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 1546 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().

1546  {
1549  // Begin code for backward compatibility before the existence of lumi trees.
1550  if(!lumiTree_.isValid()) {
1552  assert(eventEntry != IndexIntoFile::invalidEntry);
1553  assert(eventTree_.current(eventEntry));
1554  fillEventAuxiliary(eventEntry);
1555 
1556  LuminosityBlockID lumi = LuminosityBlockID(indexIntoFileIter_.run(), indexIntoFileIter_.lumi());
1557  runHelper_->overrideRunNumber(lumi);
1558  return std::make_shared<LuminosityBlockAuxiliary>(lumi.run(), lumi.luminosityBlock(), eventAux().time(), Timestamp::invalidTimestamp());
1559  }
1560  // End code for backward compatibility before the existence of lumi trees.
1562  std::shared_ptr<LuminosityBlockAuxiliary> lumiAuxiliary = fillLumiAuxiliary();
1563  assert(lumiAuxiliary->run() == indexIntoFileIter_.run());
1564  assert(lumiAuxiliary->luminosityBlock() == indexIntoFileIter_.lumi());
1565  runHelper_->overrideRunNumber(lumiAuxiliary->id());
1566  filePtr_->reportInputLumiSection(lumiAuxiliary->run(), lumiAuxiliary->luminosityBlock());
1567  if(lumiAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1569  if(eventEntry != IndexIntoFile::invalidEntry) {
1570  assert(eventTree_.current(eventEntry));
1571  fillEventAuxiliary(eventEntry);
1572 
1573  lumiAuxiliary->setBeginTime(eventAux().time());
1574  }
1575  lumiAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1576  }
1577  if(!fileFormatVersion().processHistorySameWithinRun() && savedRunAuxiliary_) {
1578  lumiAuxiliary->setProcessHistoryID(savedRunAuxiliary_->processHistoryID());
1579  }
1580  return lumiAuxiliary;
1581  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
std::shared_ptr< LuminosityBlockAuxiliary > fillLumiAuxiliary()
Definition: RootFile.cc:1258
static Timestamp invalidTimestamp()
Definition: Timestamp.h:101
tuple lumi
Definition: fjr2json.py:35
assert(m_qm.get())
RootTree lumiTree_
Definition: RootFile.h:277
Timestamp const & time() const
edm::propagate_const< std::shared_ptr< RunAuxiliary > > savedRunAuxiliary_
Definition: RootFile.h:268
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
bool current() const
Definition: RootTree.h:89
LuminosityBlockNumber_t lumi() const
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
RootTree eventTree_
Definition: RootFile.h:276
static EntryNumber_t const invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
bool isValid() const
Definition: RootTree.cc:104
EntryNumber_t firstEventEntryThisLumi() const
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:287
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::readParentageTree ( InputType  inputType)
private

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

566  {
567  // New format file
568  // We use a smart pointer so the tree will be deleted after use, and not kept for the life of the file.
569  std::unique_ptr<TTree> parentageTree(dynamic_cast<TTree*>(filePtr_->Get(poolNames::parentageTreeName().c_str())));
570  if(nullptr == parentageTree.get()) {
571  throw Exception(errors::FileReadError) << "Could not find tree " << poolNames::parentageTreeName()
572  << " in the input file.\n";
573  }
574 
575  Parentage parents;
576  Parentage *pParentageBuffer = &parents;
577  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), &pParentageBuffer);
578 
579  ParentageRegistry& registry = *ParentageRegistry::instance();
580 
581  parentageIDLookup_.reserve(parentageTree->GetEntries());
582  for(Long64_t i = 0, numEntries = parentageTree->GetEntries(); i < numEntries; ++i) {
583  roottree::getEntry(parentageTree.get(), i);
585  ParentageID const oldID = parents.id();
586  daqProvenanceHelper_->fixMetaData(parents.parentsForUpdate());
587  ParentageID newID = parents.id();
588  if(newID != oldID) {
589  daqProvenanceHelper_->setOldParentageIDToNew(oldID,newID);
590  }
591  }
592  // For thread safety, don't update global registries when a secondary source opens a file.
593  if(inputType != InputType::SecondarySource) {
594  registry.insertMapped(parents);
595  }
596  parentageIDLookup_.push_back(parents.id());
597  }
598  parentageTree->SetBranchAddress(poolNames::parentageBranchName().c_str(), nullptr);
599  }
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:299
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:256
std::vector< ParentageID > parentageIDLookup_
Definition: RootFile.h:298
static Interceptor::Registry registry("Interceptor")
static ParentageRegistry * instance()
Hash< ParentageType > ParentageID
Definition: ParentageID.h:9
void edm::RootFile::readRun_ ( RunPrincipal runPrincipal)

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

1527  {
1528  if(!runHelper_->fakeNewRun()) {
1532  }
1533  // Begin code for backward compatibility before the existence of run trees.
1534  if(!runTree_.isValid()) {
1535  return;
1536  }
1537  // End code for backward compatibility before the existence of run trees.
1538  runTree_.insertEntryForIndex(runPrincipal.transitionIndex());
1539  runPrincipal.fillRunPrincipal(*processHistoryRegistry_, runTree_.rootDelayedReader());
1540  // Read in all the products now.
1541  runPrincipal.readAllFromSourceAndMergeImmediately();
1542  }
assert(m_qm.get())
edm::propagate_const< ProcessHistoryRegistry * > processHistoryRegistry_
Definition: RootFile.h:255
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
void insertEntryForIndex(unsigned int index)
Definition: RootTree.cc:98
RootTree runTree_
Definition: RootFile.h:278
DelayedReader * rootDelayedReader() const
Definition: RootTree.cc:116
bool isValid() const
Definition: RootTree.cc:104
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:287
std::shared_ptr< RunAuxiliary > edm::RootFile::readRunAuxiliary_ ( )

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

1461  {
1462  if(runHelper_->fakeNewRun()) {
1463  runHelper_->overrideRunNumber(savedRunAuxiliary_->id());
1464  return savedRunAuxiliary();
1465  }
1468 
1469  // Begin code for backward compatibility before the existence of run trees.
1470  if(!runTree_.isValid()) {
1471 
1472  // prior to the support of run trees.
1473  // RunAuxiliary did not contain a valid timestamp. Take it from the next event.
1475  assert(eventEntry != IndexIntoFile::invalidEntry);
1476  assert(eventTree_.current(eventEntry));
1477  fillEventAuxiliary(eventEntry);
1478 
1479  RunID run = RunID(indexIntoFileIter_.run());
1480  runHelper_->overrideRunNumber(run);
1481  savedRunAuxiliary_ = std::make_shared<RunAuxiliary>(run.run(), eventAux().time(), Timestamp::invalidTimestamp());
1482  return savedRunAuxiliary();
1483  }
1484  // End code for backward compatibility before the existence of run trees.
1486  std::shared_ptr<RunAuxiliary> runAuxiliary = fillRunAuxiliary();
1487  assert(runAuxiliary->run() == indexIntoFileIter_.run());
1488  runHelper_->overrideRunNumber(runAuxiliary->id());
1489  filePtr_->reportInputRunNumber(runAuxiliary->run());
1490  // If RunAuxiliary did not contain a valid begin timestamp, invalidate any end timestamp.
1491  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1492  runAuxiliary->setEndTime(Timestamp::invalidTimestamp());
1493  }
1494 
1495  // If RunAuxiliary did not contain a valid timestamp, or if this an old format file from
1496  // when the Run's ProcessHistory included only processes where products were added to the Run itself,
1497  // we attempt to read the first event in the run to get appropriate info.
1498  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp() ||
1500 
1502  // If we have a valid event, use its information.
1503  if(eventEntry != IndexIntoFile::invalidEntry) {
1504  assert(eventTree_.current(eventEntry));
1505  fillEventAuxiliary(eventEntry);
1506 
1507  // RunAuxiliary did not contain a valid timestamp. Take it from the next event in this run if there is one.
1508  if(runAuxiliary->beginTime() == Timestamp::invalidTimestamp()) {
1509  runAuxiliary->setBeginTime(eventAux().time());
1510  }
1511 
1512  // For backwards compatibility when the Run's ProcessHistory included only processes where products were added to the
1513  // Run, and then the Run and Event auxiliaries could be different. Use the event ProcessHistoryID if there is one. It should
1514  // almost always be correct by the current definition (processes included if any products are added. This makes the run, lumi,
1515  // and event ProcessHistory's always be the same if no file merging occurs).
1516  if(!fileFormatVersion().processHistorySameWithinRun()) {
1517  fillEventHistory();
1518  runAuxiliary->setProcessHistoryID(eventAux().processHistoryID());
1519  }
1520  }
1521  }
1522  savedRunAuxiliary_ = runAuxiliary;
1523  return runAuxiliary;
1524  }
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
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:268
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
bool current() const
Definition: RootTree.h:89
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
EventAuxiliary const & eventAux() const
Definition: RootFile.h:169
std::shared_ptr< RunAuxiliary > fillRunAuxiliary()
Definition: RootFile.cc:1282
RootTree eventTree_
Definition: RootFile.h:276
RootTree runTree_
Definition: RootFile.h:278
std::shared_ptr< RunAuxiliary const > savedRunAuxiliary() const
Definition: RootFile.h:243
static EntryNumber_t const invalidEntry
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
bool processHistorySameWithinRun() const
void fillEventHistory()
Definition: RootFile.cc:1200
bool isValid() const
Definition: RootTree.cc:104
edm::propagate_const< RunHelperBase * > runHelper_
Definition: RootFile.h:287
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::reportOpened ( std::string const &  inputType)

Definition at line 1145 of file RootFile.cc.

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

1145  {
1146  // Report file opened.
1147  std::string const label = "source";
1148  std::string moduleName = "PoolSource";
1149  filePtr_->inputFileOpened(
1150  logicalFile_,
1151  inputType,
1152  moduleName,
1153  label,
1154  fid_.fid(),
1156  }
std::vector< std::string > const & branchNames() const
Definition: RootTree.h:99
FileID fid_
Definition: RootFile.h:259
std::string const logicalFile_
Definition: RootFile.h:253
std::string moduleName(Provenance const &provenance)
Definition: Provenance.cc:27
std::string const & fid() const
Definition: FileID.h:19
RootTree eventTree_
Definition: RootFile.h:276
edm::propagate_const< std::shared_ptr< InputFile > > filePtr_
Definition: RootFile.h:256
void edm::RootFile::rewind ( )
inline

Definition at line 193 of file RootFile.h.

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

193  {
195  eventTree_.rewind();
196  lumiTree_.rewind();
197  runTree_.rewind();
198  }
RootTree lumiTree_
Definition: RootFile.h:277
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
RootTree eventTree_
Definition: RootFile.h:276
RootTree runTree_
Definition: RootFile.h:278
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:263
void rewind()
Definition: RootTree.h:91
RootTree const& edm::RootFile::runTree ( ) const
inline

Definition at line 176 of file RootFile.h.

References runTree_.

Referenced by validateFile().

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

Definition at line 243 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:268
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 244 of file RootFile.h.

References edm::get_underlying_safe(), and savedRunAuxiliary_.

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

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

1456  {
1458  }
RootTree eventTree_
Definition: RootFile.h:276
list entry
Definition: mps_splice.py:62
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
bool edm::RootFile::setEntryAtEvent ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 1602 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1602  {
1604  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1606  return true;
1607  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
RootTree eventTree_
Definition: RootFile.h:276
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:261
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 183 of file RootFile.h.

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

183  {
185  }
tuple lumi
Definition: fjr2json.py:35
bool setEntryAtRun(RunNumber_t run)
Definition: RootFile.cc:1618
bool setEntryAtLumi(RunNumber_t run, LuminosityBlockNumber_t lumi)
Definition: RootFile.cc:1610
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:1602
bool edm::RootFile::setEntryAtLumi ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi 
)

Definition at line 1610 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1610  {
1612  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1614  return true;
1615  }
tuple lumi
Definition: fjr2json.py:35
RootTree lumiTree_
Definition: RootFile.h:277
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
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 1626 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().

1626  {
1629  }
1632  if(run != indexIntoFileIter_.run()) return false;
1633  if(lumi != indexIntoFileIter_.lumi()) return false;
1635  return true;
1636  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
LuminosityBlockNumber_t lumi() const
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
bool edm::RootFile::setEntryAtRun ( RunNumber_t  run)

Definition at line 1618 of file RootFile.cc.

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

Referenced by setEntryAtItem().

1618  {
1620  if(indexIntoFileIter_ == indexIntoFileEnd_) return false;
1622  return true;
1623  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
RootTree runTree_
Definition: RootFile.h:278
void setEntryNumber(EntryNumber theEntryNumber)
Definition: RootTree.cc:190
void edm::RootFile::setIfFastClonable ( int  remainingEvents,
int  remainingLumis 
)
private

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

602  {
603  if(fileFormatVersion().noMetaDataTrees() and !fileFormatVersion().storedProductProvenanceUsed()) {
604  //we must avoid copying the old branch which stored the per product per event provenance
606  return;
607  }
608  if(!fileFormatVersion().splitProductIDs()) {
610  return;
611  }
614  return;
615  }
616  // Find entry for first event in file
617  IndexIntoFile::IndexIntoFileItr it = indexIntoFileBegin_;
618  while(it != indexIntoFileEnd_ && it.getEntryType() != IndexIntoFile::kEvent) {
619  ++it;
620  }
621  if(it == indexIntoFileEnd_) {
623  return;
624  }
625 
626  // From here on, record all reasons we can't fast clone.
630  }
631  if(skipAnyEvents_) {
633  }
634  if(remainingEvents >= 0 && eventTree_.entries() > remainingEvents) {
636  }
637  if(remainingLumis >= 0 && lumiTree_.entries() > remainingLumis) {
639  }
640  if(duplicateChecker_ &&
641  !duplicateChecker_->checkDisabled() &&
642  !duplicateChecker_->noDuplicatesInFile()) {
644  }
645  }
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:294
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
int whyNotFastClonable_
Definition: RootFile.h:272
RootTree lumiTree_
Definition: RootFile.h:277
EntryNumber const & entries() const
Definition: RootTree.h:96
InputSource::ProcessingMode processingMode_
Definition: RootFile.h:286
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
bool noEventSort_
Definition: RootFile.h:270
bool skipAnyEvents_
Definition: RootFile.h:269
RootTree eventTree_
Definition: RootFile.h:276
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
IndexIntoFile::IndexIntoFileItr indexIntoFileBegin_
Definition: RootFile.h:263
void edm::RootFile::setPosition ( IndexIntoFile::IndexIntoFileItr const &  position)

Definition at line 679 of file RootFile.cc.

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

679  {
681  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
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 199 of file RootFile.h.

References indexIntoFileEnd_, and indexIntoFileIter_.

199  {
201  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
bool edm::RootFile::skipEntries ( unsigned int &  offset)
inline

Definition at line 203 of file RootFile.h.

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

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

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

1303  {
1304  while(offset > 0 && indexIntoFileIter_ != indexIntoFileEnd_) {
1305 
1306  int phIndexOfSkippedEvent = IndexIntoFile::invalidIndex;
1307  RunNumber_t runOfSkippedEvent = IndexIntoFile::invalidRun;
1310 
1311  indexIntoFileIter_.skipEventForward(phIndexOfSkippedEvent,
1312  runOfSkippedEvent,
1313  lumiOfSkippedEvent,
1314  skippedEventEntry);
1315 
1316  // At the end of the file and there were no more events to skip
1317  if(skippedEventEntry == IndexIntoFile::invalidEntry) break;
1318 
1319  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1320  fillEventAuxiliary(skippedEventEntry);
1321  if(eventSkipperByID_->skipIt(runOfSkippedEvent, lumiOfSkippedEvent, eventAux_.id().event())) {
1322  continue;
1323  }
1324  }
1325  if(duplicateChecker_ &&
1326  !duplicateChecker_->checkDisabled() &&
1327  !duplicateChecker_->noDuplicatesInFile()) {
1328 
1329  fillEventAuxiliary(skippedEventEntry);
1330  if(duplicateChecker_->isDuplicateAndCheckActive(phIndexOfSkippedEvent,
1331  runOfSkippedEvent,
1332  lumiOfSkippedEvent,
1333  eventAux_.id().event(),
1334  file_)) {
1335  continue;
1336  }
1337  }
1338  --offset;
1339  }
1340 
1341  while(offset < 0) {
1342 
1343  if(duplicateChecker_) {
1344  duplicateChecker_->disable();
1345  }
1346 
1347  int phIndexOfEvent = IndexIntoFile::invalidIndex;
1351 
1352  indexIntoFileIter_.skipEventBackward(phIndexOfEvent,
1353  runOfEvent,
1354  lumiOfEvent,
1355  eventEntry);
1356 
1357  if(eventEntry == IndexIntoFile::invalidEntry) break;
1358 
1359  if(eventSkipperByID_ && eventSkipperByID_->somethingToSkip()) {
1360  fillEventAuxiliary(eventEntry);
1361  if(eventSkipperByID_->skipIt(runOfEvent, lumiOfEvent, eventAux_.id().event())) {
1362  continue;
1363  }
1364  }
1365  ++offset;
1366  }
1368  }
EventNumber_t event() const
Definition: EventID.h:41
static int const invalidIndex
edm::propagate_const< std::shared_ptr< DuplicateChecker > > duplicateChecker_
Definition: RootFile.h:294
edm::propagate_const< std::shared_ptr< EventSkipperByID > > eventSkipperByID_
Definition: RootFile.h:257
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
unsigned int LuminosityBlockNumber_t
long long EntryNumber_t
bool fillEventAuxiliary(IndexIntoFile::EntryNumber_t entry)
Definition: RootFile.cc:1190
IndexIntoFile::IndexIntoFileItr indexIntoFileEnd_
Definition: RootFile.h:264
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:275
std::string const file_
Definition: RootFile.h:252
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)
bool edm::RootFile::skipThisEntry ( )
private

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

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

Definition at line 219 of file RootFile.h.

References treePointers_.

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

Definition at line 1090 of file RootFile.cc.

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

Referenced by RootFile().

1090  {
1091  if(!fid_.isValid()) {
1092  fid_ = FileID(createGlobalIdentifier());
1093  }
1094  if(!eventTree_.isValid()) {
1096  "'Events' tree is corrupted or not present\n" << "in the input file.\n";
1097  }
1098  if (enforceGUIDInFileName_) {
1099  auto guidFromName = stemFromPath(file_);
1100  if (guidFromName != fid_.fid()) {
1102  << "GUID " << guidFromName << " extracted from file name " << file_
1103  << " is inconsistent with the GUID read from the file " << fid_.fid();
1104  }
1105  }
1106 
1107  if(fileFormatVersion().hasIndexIntoFile()) {
1108  if(runTree().entries() > 0) {
1110  }
1112  if(daqProvenanceHelper_) {
1113  std::vector<ProcessHistoryID>& phidVec = indexIntoFile_.setProcessHistoryIDs();
1114  for(auto& phid : phidVec) {
1115  phid = daqProvenanceHelper_->mapProcessHistoryID(phid);
1116  }
1117  }
1119  }
1120  }
1121  else {
1124  }
1125 
1128  indexIntoFile_.setEventFinder(std::shared_ptr<IndexIntoFile::EventFinder>(std::make_shared<RootFileEventFinder>(eventTree_)));
1129  // We fill the event numbers explicitly if we need to find events in closed files,
1130  // such as for secondary files (or secondary sources) or if duplicate checking across files.
1131  bool needEventNumbers = false;
1132  bool needIndexesForDuplicateChecker = duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
1133  if(inputType != InputType::Primary || needIndexesForDuplicateChecker || usingGoToEvent) {
1134  needEventNumbers = true;
1135  }
1136  bool needEventEntries = false;
1137  if(inputType != InputType::Primary || !noEventSort_) {
1138  // We need event entries for sorting or for secondary files or sources.
1139  needEventEntries = true;
1140  }
1141  indexIntoFile_.fillEventNumbersOrEntries(needEventNumbers, needEventEntries);
1142  }
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:294
FileFormatVersion fileFormatVersion() const
Definition: RootFile.h:177
bool enforceGUIDInFileName_
Definition: RootFile.h:271
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:255
edm::propagate_const< std::unique_ptr< DaqProvenanceHelper > > daqProvenanceHelper_
Definition: RootFile.h:299
EntryNumber const & entries() const
Definition: RootTree.h:96
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
FileID fid_
Definition: RootFile.h:259
std::vector< ProcessHistoryID > & setProcessHistoryIDs()
bool noEventSort_
Definition: RootFile.h:270
std::string const & fid() const
Definition: FileID.h:19
RootTree const & runTree() const
Definition: RootFile.h:176
RootTree eventTree_
Definition: RootFile.h:276
bool isValid() const
Definition: FileID.h:18
std::string stemFromPath(const std::string &path)
Definition: stemFromPath.cc:4
IndexIntoFile & indexIntoFile_
Definition: RootFile.h:261
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
bool isValid() const
Definition: RootTree.cc:104
void fillIndexIntoFile()
Definition: RootFile.cc:864
std::vector< ProcessHistoryID > & orderedProcessHistoryIDs_
Definition: RootFile.h:262
void setNumberOfEvents(EntryNumber_t nevents) const
bool useReducedProcessHistoryID() const
std::string const file_
Definition: RootFile.h:252
std::string createGlobalIdentifier()
bool edm::RootFile::wasFirstEventJustRead ( ) const

Definition at line 802 of file RootFile.cc.

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

802  {
803  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
804  int phIndex;
807  IndexIntoFile::EntryNumber_t eventEntry;
808  itr.skipEventBackward(phIndex,
809  run,
810  lumi,
811  eventEntry);
812  itr.skipEventBackward(phIndex,
813  run,
814  lumi,
815  eventEntry);
816  return eventEntry == IndexIntoFile::invalidEntry;
817  }
tuple lumi
Definition: fjr2json.py:35
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
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 795 of file RootFile.cc.

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

795  {
796  IndexIntoFile::IndexIntoFileItr itr(indexIntoFileIter_);
797  itr.advanceToEvent();
798  return itr.getEntryType() == IndexIntoFile::kEnd;
799  }
IndexIntoFile::IndexIntoFileItr indexIntoFileIter_
Definition: RootFile.h:265
int edm::RootFile::whyNotFastClonable ( ) const
inline

Definition at line 178 of file RootFile.h.

References whyNotFastClonable_.

Referenced by createFileBlock().

178 {return whyNotFastClonable_;}
int whyNotFastClonable_
Definition: RootFile.h:272

Member Data Documentation

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

Definition at line 293 of file RootFile.h.

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

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

Definition at line 283 of file RootFile.h.

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

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

Definition at line 282 of file RootFile.h.

Referenced by RootFile().

BranchListIndexes edm::RootFile::branchListIndexes_
private

Definition at line 291 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

bool edm::RootFile::branchListIndexesUnchanged_
private

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

Referenced by dropOnInput().

bool edm::RootFile::enforceGUIDInFileName_
private

Definition at line 271 of file RootFile.h.

Referenced by validateFile().

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

Definition at line 289 of file RootFile.h.

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

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

Definition at line 266 of file RootFile.h.

Referenced by fillEventHistory(), and RootFile().

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

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

Referenced by eventProductProvenanceRetriever(), and makeProductProvenanceRetriever().

EventSelectionIDVector edm::RootFile::eventSelectionIDs_
private

Definition at line 290 of file RootFile.h.

Referenced by fillEventHistory(), and readCurrentEvent().

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

Definition at line 257 of file RootFile.h.

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

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

Definition at line 259 of file RootFile.h.

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

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

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

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

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

Definition at line 273 of file RootFile.h.

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

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

Definition at line 292 of file RootFile.h.

Referenced by fillEventHistory(), and readEventHistoryTree().

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

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

Referenced by indexIntoFileSharedPtr().

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

Definition at line 280 of file RootFile.h.

Referenced by fillIndexIntoFile(), and fillThisEventAuxiliary().

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

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

Referenced by newBranchToOldBranch(), and RootFile().

bool edm::RootFile::noEventSort_
private

Definition at line 270 of file RootFile.h.

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

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

Definition at line 262 of file RootFile.h.

Referenced by validateFile().

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

Definition at line 298 of file RootFile.h.

Referenced by makeProvenanceReaderMaker(), and readParentageTree().

ProcessConfiguration const& edm::RootFile::processConfiguration_
private

Definition at line 254 of file RootFile.h.

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

Definition at line 286 of file RootFile.h.

Referenced by getNextItemType(), and setIfFastClonable().

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

Definition at line 281 of file RootFile.h.

Referenced by productRegistry(), and RootFile().

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

Definition at line 295 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 296 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 268 of file RootFile.h.

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

bool edm::RootFile::skipAnyEvents_
private

Definition at line 269 of file RootFile.h.

Referenced by setIfFastClonable().

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

Definition at line 285 of file RootFile.h.

Referenced by initAssociationsFromSecondary().

RootTreePtrArray edm::RootFile::treePointers_
private

Definition at line 279 of file RootFile.h.

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

int edm::RootFile::whyNotFastClonable_
private

Definition at line 272 of file RootFile.h.

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