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 | Static Public Member Functions | Private Member Functions | Private Attributes
edm::RootInputFileSequence Class Reference

#include <RootInputFileSequence.h>

Public Types

typedef boost::shared_ptr
< RootFile
RootFileSharedPtr
 

Public Member Functions

void closeFile_ ()
 
bool containedInCurrentFile (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
 
void dropUnwantedBranches_ (std::vector< std::string > const &wantedBranches)
 
void endJob ()
 
boost::shared_ptr
< BranchIDListHelper const > 
fileBranchIDListHelper () const
 
boost::shared_ptr
< ProductRegistry const > 
fileProductRegistry () const
 
ProcessingController::ForwardState forwardState () const
 
InputSource::ItemType getNextItemType (RunNumber_t &run, LuminosityBlockNumber_t &lumi, EventNumber_t &event)
 
bool goToEvent (EventID const &eventID)
 
RootInputFileSequenceoperator= (RootInputFileSequence const &)=delete
 
ProcessHistoryRegistry const & processHistoryRegistry () const
 
ProcessHistoryRegistryprocessHistoryRegistryForUpdate ()
 
void readEvent (EventPrincipal &cache)
 
std::unique_ptr< FileBlockreadFile_ ()
 
void readLuminosityBlock_ (LuminosityBlockPrincipal &lumiPrincipal)
 
boost::shared_ptr
< LuminosityBlockAuxiliary
readLuminosityBlockAuxiliary_ ()
 
void readOneRandom (EventPrincipal &cache)
 
bool readOneRandomWithID (EventPrincipal &cache, LuminosityBlockID const &id)
 
bool readOneSequential (EventPrincipal &cache)
 
bool readOneSequentialWithID (EventPrincipal &cache, LuminosityBlockID const &id)
 
void readOneSpecified (EventPrincipal &cache, EventID const &id)
 
void readRun_ (RunPrincipal &runPrincipal)
 
boost::shared_ptr< RunAuxiliaryreadRunAuxiliary_ ()
 
ProcessingController::ReverseState reverseState () const
 
void rewind_ ()
 
 RootInputFileSequence (ParameterSet const &pset, PoolSource &input, InputFileCatalog const &catalog, unsigned int nStreams, InputType inputType)
 
 RootInputFileSequence (RootInputFileSequence const &)=delete
 
bool skipEvents (int offset)
 
bool skipToItem (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool currentFileFirst=true)
 
bool skipToItemInNewFile (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
 
virtual ~RootInputFileSequence ()
 

Static Public Member Functions

static void fillDescription (ParameterSetDescription &desc)
 

Private Member Functions

std::vector< FileCatalogItem >
const & 
fileCatalogItems () const
 
void initFile (bool skipBadFiles)
 
bool nextFile ()
 
bool previousFile ()
 
ProcessConfiguration const & processConfiguration () const
 
boost::shared_ptr
< ProductRegistry const > 
productRegistry () const
 
ProductRegistryproductRegistryUpdate () const
 
int remainingEvents () const
 
int remainingLuminosityBlocks () const
 
void rewindFile ()
 

Private Attributes

BranchDescription::MatchMode branchesMustMatch_
 
InputFileCatalog const & catalog_
 
bool dropDescendants_
 
boost::shared_ptr
< DuplicateChecker
duplicateChecker_
 
bool enablePrefetching_
 
boost::shared_ptr
< EventSkipperByID
eventSkipperByID_
 
int eventsRemainingInFile_
 
std::vector< FileCatalogItem >
::const_iterator 
fileIter_
 
std::vector< FileCatalogItem >
::const_iterator 
fileIterBegin_
 
std::vector< FileCatalogItem >
::const_iterator 
fileIterEnd_
 
std::vector< FileCatalogItem >
::const_iterator 
fileIterLastOpened_
 
bool firstFile_
 
std::unique_ptr< CLHEP::RandFlat > flatDistribution_
 
std::vector< boost::shared_ptr
< IndexIntoFile > > 
indexesIntoFiles_
 
int initialNumberOfEventsToSkip_
 
PoolSourceinput_
 
InputType inputType_
 
bool labelRawDataLikeMC_
 
std::string lfn_
 
bool noEventSort_
 
unsigned int nStreams_
 
std::vector< ProcessHistoryIDorderedProcessHistoryIDs_
 
ProductSelectorRules productSelectorRules_
 
RootFileSharedPtr rootFile_
 
RunNumber_t setRun_
 
bool skipBadFiles_
 
unsigned int treeCacheSize_
 
int const treeMaxVirtualSize_
 
bool usedFallback_
 
bool usingGoToEvent_
 

Detailed Description

Definition at line 37 of file RootInputFileSequence.h.

Member Typedef Documentation

Definition at line 49 of file RootInputFileSequence.h.

Constructor & Destructor Documentation

edm::RootInputFileSequence::RootInputFileSequence ( ParameterSet const &  pset,
PoolSource input,
InputFileCatalog const &  catalog,
unsigned int  nStreams,
InputType  inputType 
)
explicit

Definition at line 28 of file RootInputFileSequence.cc.

References StorageFactory::activateTimeout(), branchesMustMatch_, enablePrefetching_, fileIter_, fileIterBegin_, fileIterEnd_, StorageFactory::get(), edm::ParameterSet::getUntrackedParameter(), initFile(), initialNumberOfEventsToSkip_, inputType_, edm::Service< T >::isAvailable(), edm::Primary, productRegistryUpdate(), rootFile_, edm::SecondarySource, skipBadFiles_, skipEvents(), StorageFactory::stagein(), edm::BranchDescription::Strict, AlCaHLTBitMon_QueryRunRegistry::string, treeCacheSize_, and edm::ProductRegistry::updateFromInput().

33  :
34  input_(input),
35  inputType_(inputType),
37  firstFile_(true),
38  lfn_("unknown"),
43  rootFile_(),
48  nStreams_(nStreams),
51  // The default value provided as the second argument to the getUntrackedParameter function call
52  // is not used when the ParameterSet has been validated and the parameters are not optional
53  // in the description. This is currently true when PoolSource is the primary input source.
54  // The modules that use PoolSource as a SecSource have not defined their fillDescriptions function
55  // yet, so the ParameterSet does not get validated yet. As soon as all the modules with a SecSource
56  // have defined descriptions, the defaults in the getUntrackedParameterSet function calls can
57  // and should be deleted from the code.
58  initialNumberOfEventsToSkip_(inputType == InputType::Primary ? pset.getUntrackedParameter<unsigned int>("skipEvents", 0U) : 0U),
59  noEventSort_(inputType == InputType::Primary ? pset.getUntrackedParameter<bool>("noEventSort", true) : false),
60  skipBadFiles_(pset.getUntrackedParameter<bool>("skipBadFiles", false)),
61  treeCacheSize_(noEventSort_ ? pset.getUntrackedParameter<unsigned int>("cacheSize", roottree::defaultCacheSize) : 0U),
62  treeMaxVirtualSize_(pset.getUntrackedParameter<int>("treeMaxVirtualSize", -1)),
63  setRun_(pset.getUntrackedParameter<unsigned int>("setRunNumber", 0U)),
64  productSelectorRules_(pset, "inputCommands", "InputSource"),
65  duplicateChecker_(inputType == InputType::Primary ? new DuplicateChecker(pset) : 0),
66  dropDescendants_(pset.getUntrackedParameter<bool>("dropDescendantsOfDroppedBranches", inputType != InputType::SecondarySource)),
67  labelRawDataLikeMC_(pset.getUntrackedParameter<bool>("labelRawDataLikeMC", true)),
68  usingGoToEvent_(false),
69  enablePrefetching_(false),
70  usedFallback_(false) {
71 
72  // The SiteLocalConfig controls the TTreeCache size and the prefetching settings.
74  if(pSLC.isAvailable()) {
75  if(treeCacheSize_ != 0U && pSLC->sourceTTreeCacheSize()) {
76  treeCacheSize_ = *(pSLC->sourceTTreeCacheSize());
77  }
78  enablePrefetching_ = pSLC->enablePrefetching();
79  }
80 
83  factory->activateTimeout(fileIter_->fileName());
84  factory->stagein(fileIter_->fileName());
85  //NOTE: we do not want to stage in all secondary files since we can be given a list of
86  // thousands of files and prestaging all those files can cause a site to fail.
87  // So, we stage in the first secondary file only.
89  break;
90  }
91  }
92 
93  std::string branchesMustMatch = pset.getUntrackedParameter<std::string>("branchesMustMatch", std::string("permissive"));
94  if(branchesMustMatch == std::string("strict")) branchesMustMatch_ = BranchDescription::Strict;
95 
98  if(rootFile_) break;
99  }
100  if(rootFile_) {
101  productRegistryUpdate().updateFromInput(rootFile_->productRegistry()->productList());
104  }
105  }
106  }
std::vector< boost::shared_ptr< IndexIntoFile > > indexesIntoFiles_
void stagein(const std::string &url)
void initFile(bool skipBadFiles)
ProductSelectorRules productSelectorRules_
std::vector< FileCatalogItem >::const_iterator fileIter_
ProductRegistry & productRegistryUpdate() const
unsigned int const defaultCacheSize
Definition: RootTree.h:37
static std::string const input
Definition: EdmProvDump.cc:44
static StorageFactory * get(void)
std::vector< FileCatalogItem >::const_iterator fileIterLastOpened_
std::vector< FileCatalogItem > const & fileCatalogItems() const
boost::shared_ptr< DuplicateChecker > duplicateChecker_
#define end
Definition: vmac.h:37
std::unique_ptr< CLHEP::RandFlat > flatDistribution_
std::vector< ProcessHistoryID > orderedProcessHistoryIDs_
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
#define begin
Definition: vmac.h:30
boost::shared_ptr< EventSkipperByID > eventSkipperByID_
void updateFromInput(ProductList const &other)
void activateTimeout(const std::string &url)
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
BranchDescription::MatchMode branchesMustMatch_
static std::auto_ptr< EventSkipperByID > create(ParameterSet const &pset)
tuple size
Write out results.
InputFileCatalog const & catalog_
edm::RootInputFileSequence::~RootInputFileSequence ( )
virtual

Definition at line 353 of file RootInputFileSequence.cc.

353  {
354  }
edm::RootInputFileSequence::RootInputFileSequence ( RootInputFileSequence const &  )
delete

Member Function Documentation

void edm::RootInputFileSequence::closeFile_ ( )

Definition at line 137 of file RootInputFileSequence.cc.

References duplicateChecker_, input_, inputType_, lfn_, edm::Primary, rootFile_, edm::SecondarySource, and usedFallback_.

Referenced by endJob(), initFile(), and rewind_().

137  {
138  // close the currently open file, if any, and delete the RootFile object.
139  if(rootFile_) {
141  std::unique_ptr<InputSource::FileCloseSentry>
142  sentry((inputType_ == InputType::Primary) ? new InputSource::FileCloseSentry(input_, lfn_, usedFallback_) : 0);
143  rootFile_->close();
144  if(duplicateChecker_) duplicateChecker_->inputFileClosed();
145  }
146  rootFile_.reset();
147  }
148  }
boost::shared_ptr< DuplicateChecker > duplicateChecker_
bool edm::RootInputFileSequence::containedInCurrentFile ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
) const

Definition at line 420 of file RootInputFileSequence.cc.

References rootFile_.

420  {
421  if(!rootFile_) return false;
422  return rootFile_->containsItem(run, lumi, event);
423  }
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
void edm::RootInputFileSequence::dropUnwantedBranches_ ( std::vector< std::string > const &  wantedBranches)

Definition at line 607 of file RootInputFileSequence.cc.

References edm::ParameterSet::addUntrackedParameter(), productSelectorRules_, and cmsCodeRulesChecker::rules.

607  {
608  std::vector<std::string> rules;
609  rules.reserve(wantedBranches.size() + 1);
610  rules.emplace_back("drop *");
611  for(std::vector<std::string>::const_iterator it = wantedBranches.begin(), itEnd = wantedBranches.end();
612  it != itEnd; ++it) {
613  rules.push_back("keep " + *it + "_*");
614  }
615  ParameterSet pset;
616  pset.addUntrackedParameter("inputCommands", rules);
617  productSelectorRules_ = ProductSelectorRules(pset, "inputCommands", "InputSource");
618  }
ProductSelectorRules productSelectorRules_
void edm::RootInputFileSequence::endJob ( void  )

Definition at line 114 of file RootInputFileSequence.cc.

References closeFile_().

114  {
115  closeFile_();
116  }
boost::shared_ptr< BranchIDListHelper const > edm::RootInputFileSequence::fileBranchIDListHelper ( ) const

Definition at line 299 of file RootInputFileSequence.cc.

References rootFile_.

299  {
300  assert(rootFile_);
301  return rootFile_->branchIDListHelper();
302  }
std::vector< FileCatalogItem > const & edm::RootInputFileSequence::fileCatalogItems ( ) const
private

Definition at line 109 of file RootInputFileSequence.cc.

References catalog_, and edm::InputFileCatalog::fileCatalogItems().

Referenced by readOneRandom().

109  {
110  return catalog_.fileCatalogItems();
111  }
std::vector< FileCatalogItem > const & fileCatalogItems() const
InputFileCatalog const & catalog_
boost::shared_ptr< ProductRegistry const > edm::RootInputFileSequence::fileProductRegistry ( ) const

Definition at line 293 of file RootInputFileSequence.cc.

References rootFile_.

293  {
294  assert(rootFile_);
295  return rootFile_->productRegistry();
296  }
void edm::RootInputFileSequence::fillDescription ( ParameterSetDescription desc)
static

Definition at line 771 of file RootInputFileSequence.cc.

References edm::ParameterSetDescription::addUntracked(), edm::roottree::defaultCacheSize, edm::EventSkipperByID::fillDescription(), edm::ProductSelectorRules::fillDescription(), edm::DuplicateChecker::fillDescription(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by edm::PoolSource::fillDescriptions().

771  {
772  desc.addUntracked<unsigned int>("skipEvents", 0U)
773  ->setComment("Skip the first 'skipEvents' events that otherwise would have been processed.");
774  desc.addUntracked<bool>("noEventSort", true)
775  ->setComment("True: Process runs, lumis and events in the order they appear in the file (but see notes 1 and 2).\n"
776  "False: Process runs, lumis and events in each file in numerical order (run#, lumi#, event#) (but see note 3).\n"
777  "Note 1: Events within the same lumi will always be processed contiguously.\n"
778  "Note 2: Lumis within the same run will always be processed contiguously.\n"
779  "Note 3: Any sorting occurs independently in each input file (no sorting across input files).");
780  desc.addUntracked<bool>("skipBadFiles", false)
781  ->setComment("True: Ignore any missing or unopenable input file.\n"
782  "False: Throw exception if missing or unopenable input file.");
783  desc.addUntracked<unsigned int>("cacheSize", roottree::defaultCacheSize)
784  ->setComment("Size of ROOT TTree prefetch cache. Affects performance.");
785  desc.addUntracked<int>("treeMaxVirtualSize", -1)
786  ->setComment("Size of ROOT TTree TBasket cache. Affects performance.");
787  desc.addUntracked<unsigned int>("setRunNumber", 0U)
788  ->setComment("If non-zero, change number of first run to this number. Apply same offset to all runs. Allowed only for simulation.");
789  desc.addUntracked<bool>("dropDescendantsOfDroppedBranches", true)
790  ->setComment("If True, also drop on input any descendent of any branch dropped on input.");
791  std::string defaultString("permissive");
792  desc.addUntracked<std::string>("branchesMustMatch", defaultString)
793  ->setComment("'strict': Branches in each input file must match those in the first file.\n"
794  "'permissive': Branches in each input file may be any subset of those in the first file.");
795  desc.addUntracked<bool>("labelRawDataLikeMC", true)
796  ->setComment("If True: replace module label for raw data to match MC. Also use 'LHC' as process.");
797 
798  ProductSelectorRules::fillDescription(desc, "inputCommands");
801  }
static void fillDescription(ParameterSetDescription &desc, char const *parameterName)
static void fillDescription(ParameterSetDescription &desc)
unsigned int const defaultCacheSize
Definition: RootTree.h:37
static void fillDescription(ParameterSetDescription &desc)
ProcessingController::ForwardState edm::RootInputFileSequence::forwardState ( ) const
InputSource::ItemType edm::RootInputFileSequence::getNextItemType ( RunNumber_t run,
LuminosityBlockNumber_t lumi,
EventNumber_t event 
)

Definition at line 395 of file RootInputFileSequence.cc.

References fileIter_, fileIterEnd_, firstFile_, edm::InputSource::IsEvent, edm::InputSource::IsFile, edm::InputSource::IsLumi, edm::InputSource::IsRun, edm::InputSource::IsStop, edm::IndexIntoFile::kEnd, edm::IndexIntoFile::kEvent, edm::IndexIntoFile::kLumi, edm::IndexIntoFile::kRun, and rootFile_.

395  {
396  if(fileIter_ == fileIterEnd_) {
397  return InputSource::IsStop;
398  }
399  if(firstFile_) {
400  return InputSource::IsFile;
401  }
402  if(rootFile_) {
403  IndexIntoFile::EntryType entryType = rootFile_->getNextItemType(run, lumi, event);
404  if(entryType == IndexIntoFile::kEvent) {
405  return InputSource::IsEvent;
406  } else if(entryType == IndexIntoFile::kLumi) {
407  return InputSource::IsLumi;
408  } else if(entryType == IndexIntoFile::kRun) {
409  return InputSource::IsRun;
410  }
411  assert(entryType == IndexIntoFile::kEnd);
412  }
413  if(fileIter_ + 1 == fileIterEnd_) {
414  return InputSource::IsStop;
415  }
416  return InputSource::IsFile;
417  }
std::vector< FileCatalogItem >::const_iterator fileIter_
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
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
bool edm::RootInputFileSequence::goToEvent ( EventID const &  eventID)

Definition at line 471 of file RootInputFileSequence.cc.

References edm::EventID::event(), fileIter_, fileIterBegin_, newFWLiteAna::found, indexesIntoFiles_, initFile(), edm::EventID::luminosityBlock(), rootFile_, edm::EventID::run(), and usingGoToEvent_.

471  {
472  usingGoToEvent_ = true;
473  if(rootFile_) {
474  if(rootFile_->goToEvent(eventID)) {
475  return true;
476  }
477  // If only one input file, give up now, to save time.
478  if(rootFile_ && indexesIntoFiles_.size() == 1) {
479  return false;
480  }
481  // Save the current file and position so that we can restore them
482  // if we fail to restore the desired event
483  bool closedOriginalFile = false;
484  std::vector<FileCatalogItem>::const_iterator originalFile = fileIter_;
485  IndexIntoFile::IndexIntoFileItr originalPosition = rootFile_->indexIntoFileIter();
486 
487  // Look for item (run/lumi/event) in files previously opened without reopening unnecessary files.
488  typedef std::vector<boost::shared_ptr<IndexIntoFile> >::const_iterator Iter;
489  for(Iter it = indexesIntoFiles_.begin(), itEnd = indexesIntoFiles_.end(); it != itEnd; ++it) {
490  if(*it && (*it)->containsItem(eventID.run(), eventID.luminosityBlock(), eventID.event())) {
491  // We found it. Close the currently open file, and open the correct one.
492  fileIter_ = fileIterBegin_ + (it - indexesIntoFiles_.begin());
493  initFile(false);
494  // Now get the item from the correct file.
495  bool found = rootFile_->goToEvent(eventID);
496  assert(found);
497  return true;
498  }
499  }
500  // Look for item in files not yet opened.
501  for(Iter it = indexesIntoFiles_.begin(), itEnd = indexesIntoFiles_.end(); it != itEnd; ++it) {
502  if(!*it) {
503  fileIter_ = fileIterBegin_ + (it - indexesIntoFiles_.begin());
504  initFile(false);
505  closedOriginalFile = true;
506  if((*it)->containsItem(eventID.run(), eventID.luminosityBlock(), eventID.event())) {
507  if (rootFile_->goToEvent(eventID)) {
508  return true;
509  }
510  }
511  }
512  }
513  if(closedOriginalFile) {
514  fileIter_ = originalFile;
515  initFile(false);
516  rootFile_->setPosition(originalPosition);
517  }
518  }
519  return false;
520  }
std::vector< boost::shared_ptr< IndexIntoFile > > indexesIntoFiles_
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
void edm::RootInputFileSequence::initFile ( bool  skipBadFiles)
private

Definition at line 150 of file RootInputFileSequence.cc.

References edm::InputSource::branchIDListHelper(), closeFile_(), dropDescendants_, duplicateChecker_, alignCSCRings::e, enablePrefetching_, eventSkipperByID_, edm::hlt::Exception, cms::Exception::explainSelf(), edm::errors::FallbackFileOpenError, fileIter_, fileIterBegin_, fileIterEnd_, fileIterLastOpened_, edm::errors::FileOpenError, indexesIntoFiles_, initialNumberOfEventsToSkip_, input_, RPC_Client_on_RootFile::InputFile, inputType_, labelRawDataLikeMC_, lfn_, noEventSort_, nStreams_, orderedProcessHistoryIDs_, dbtoconf::out, dbtoconf::pfn, edm::Primary, processConfiguration(), processHistoryRegistryForUpdate(), edm::InputSource::processingMode(), productSelectorRules_, remainingEvents(), remainingLuminosityBlocks(), edm::InputFile::reportFallbackAttempt(), edm::InputFile::reportSkippedFile(), rootFile_, edm::SecondaryFile, edm::SecondarySource, setRun_, AlCaHLTBitMon_QueryRunRegistry::string, treeCacheSize_, treeMaxVirtualSize_, usedFallback_, and usingGoToEvent_.

Referenced by goToEvent(), nextFile(), previousFile(), readFile_(), readOneRandom(), readOneSequential(), rewind_(), RootInputFileSequence(), skipToItem(), and skipToItemInNewFile().

150  {
151  // We are really going to close the open file.
152 
153  // If this is the primary sequence, we are not duplicate checking across files
154  // and we are not using random access to find events, then we can delete the
155  // IndexIntoFile for the file we are closing. If we can't delete all of it,
156  // then we can delete the parts we do not need.
158  size_t currentIndexIntoFile = fileIterLastOpened_ - fileIterBegin_;
159  bool needIndexesForDuplicateChecker = duplicateChecker_ && duplicateChecker_->checkingAllFiles() && !duplicateChecker_->checkDisabled();
160  bool deleteIndexIntoFile = inputType_ == InputType::Primary &&
161  !needIndexesForDuplicateChecker &&
163  if(deleteIndexIntoFile) {
164  indexesIntoFiles_[currentIndexIntoFile].reset();
165  } else {
166  if(indexesIntoFiles_[currentIndexIntoFile]) indexesIntoFiles_[currentIndexIntoFile]->inputFileClosed();
167  }
169  }
170  closeFile_();
171 
172  if(fileIter_ == fileIterEnd_) {
173  // No files specified
174  return;
175  }
176 
177  // Check if the logical file name was found.
178  if(fileIter_->fileName().empty()) {
179  // LFN not found in catalog.
180  InputFile::reportSkippedFile(fileIter_->fileName(), fileIter_->logicalFileName());
181  if(!skipBadFiles) {
182  throw cms::Exception("LogicalFileNameNotFound", "RootInputFileSequence::initFile()\n")
183  << "Logical file name '" << fileIter_->logicalFileName() << "' was not found in the file catalog.\n"
184  << "If you wanted a local file, you forgot the 'file:' prefix\n"
185  << "before the file name in your configuration file.\n";
186  }
187  LogWarning("") << "Input logical file: " << fileIter_->logicalFileName() << " was not found in the catalog, and will be skipped.\n";
188  return;
189  }
190 
191  lfn_ = fileIter_->logicalFileName().empty() ? fileIter_->fileName() : fileIter_->logicalFileName();
192  usedFallback_ = false;
193 
194  // Determine whether we have a fallback URL specified; if so, prepare it;
195  // Only valid if it is non-empty and differs from the original filename.
196  std::string fallbackName = fileIter_->fallbackFileName();
197  bool hasFallbackUrl = !fallbackName.empty() && fallbackName != fileIter_->fileName();
198 
199  boost::shared_ptr<InputFile> filePtr;
200  try {
201  std::unique_ptr<InputSource::FileOpenSentry>
202  sentry(inputType_ == InputType::Primary ? new InputSource::FileOpenSentry(input_, lfn_, usedFallback_) : 0);
203  filePtr.reset(new InputFile(gSystem->ExpandPathName(fileIter_->fileName().c_str()), " Initiating request to open file ", inputType_));
204  }
205  catch (cms::Exception const& e) {
206  if(!skipBadFiles) {
207  if(hasFallbackUrl) {
208  std::ostringstream out;
209  out << e.explainSelf();
210  std::string pfn(gSystem->ExpandPathName(fallbackName.c_str()));
211  InputFile::reportFallbackAttempt(pfn, fileIter_->logicalFileName(), out.str());
212  } else {
213  InputFile::reportSkippedFile(fileIter_->fileName(), fileIter_->logicalFileName());
214  Exception ex(errors::FileOpenError, "", e);
215  ex.addContext("Calling RootInputFileSequence::initFile()");
216  std::ostringstream out;
217  out << "Input file " << fileIter_->fileName() << " could not be opened.";
218  ex.addAdditionalInfo(out.str());
219  throw ex;
220  }
221  }
222  }
223  if(!filePtr && (hasFallbackUrl)) {
224  try {
225  usedFallback_ = true;
226  std::unique_ptr<InputSource::FileOpenSentry>
227  sentry(inputType_ == InputType::Primary ? new InputSource::FileOpenSentry(input_, lfn_, usedFallback_) : 0);
228  filePtr.reset(new InputFile(gSystem->ExpandPathName(fallbackName.c_str()), " Fallback request to file ", inputType_));
229  }
230  catch (cms::Exception const& e) {
231  if(!skipBadFiles) {
232  InputFile::reportSkippedFile(fileIter_->fileName(), fileIter_->logicalFileName());
234  ex.addContext("Calling RootInputFileSequence::initFile()");
235  std::ostringstream out;
236  out << "Input file " << fileIter_->fileName() << " could not be opened.\n";
237  out << "Fallback Input file " << fallbackName << " also could not be opened.";
238  ex.addAdditionalInfo(out.str());
239  throw ex;
240  }
241  }
242  }
243  if(filePtr) {
244  std::vector<boost::shared_ptr<IndexIntoFile> >::size_type currentIndexIntoFile = fileIter_ - fileIterBegin_;
245  rootFile_ = RootFileSharedPtr(new RootFile(
246  fileIter_->fileName(),
248  fileIter_->logicalFileName(),
249  filePtr,
252  remainingEvents(),
254  nStreams_,
258  setRun_,
259  noEventSort_,
261  inputType_,
262  (inputType_ == InputType::SecondarySource ? boost::shared_ptr<BranchIDListHelper>(new BranchIDListHelper()) : input_.branchIDListHelper()),
267  currentIndexIntoFile,
272 
274  indexesIntoFiles_[currentIndexIntoFile] = rootFile_->indexIntoFileSharedPtr();
275  char const* inputType = 0;
276  switch(inputType_) {
277  case InputType::Primary: inputType = "primaryFiles"; break;
278  case InputType::SecondaryFile: inputType = "secondaryFiles"; break;
279  case InputType::SecondarySource: inputType = "mixingFiles"; break;
280  }
281  rootFile_->reportOpened(inputType);
282  } else {
283  InputFile::reportSkippedFile(fileIter_->fileName(), fileIter_->logicalFileName());
284  if(!skipBadFiles) {
286  "RootInputFileSequence::initFile(): Input file " << fileIter_->fileName() << " was not found or could not be opened.\n";
287  }
288  LogWarning("") << "Input file: " << fileIter_->fileName() << " was not found or could not be opened, and will be skipped.\n";
289  }
290  }
std::vector< boost::shared_ptr< IndexIntoFile > > indexesIntoFiles_
list pfn
Definition: dbtoconf.py:76
ProductSelectorRules productSelectorRules_
ProcessConfiguration const & processConfiguration() const
virtual std::string explainSelf() const
Definition: Exception.cc:146
std::vector< FileCatalogItem >::const_iterator fileIter_
ProcessingMode processingMode() const
RunsLumisAndEvents (default), RunsAndLumis, or Runs.
Definition: InputSource.h:249
static void reportSkippedFile(std::string const &fileName, std::string const &logicalFileName)
Definition: InputFile.cc:69
uint16_t size_type
tuple InputFile
Open Root file and provide MEs ############.
static void reportFallbackAttempt(std::string const &pfn, std::string const &logicalFileName, std::string const &errorMessage)
Definition: InputFile.cc:75
std::vector< FileCatalogItem >::const_iterator fileIterLastOpened_
boost::shared_ptr< BranchIDListHelper > branchIDListHelper() const
Accessor for branchIDListHelper.
Definition: InputSource.h:176
boost::shared_ptr< DuplicateChecker > duplicateChecker_
tuple out
Definition: dbtoconf.py:99
std::vector< ProcessHistoryID > orderedProcessHistoryIDs_
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
tuple skipBadFiles
Definition: example_cfg.py:64
boost::shared_ptr< EventSkipperByID > eventSkipperByID_
ProcessHistoryRegistry & processHistoryRegistryForUpdate()
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
boost::shared_ptr< RootFile > RootFileSharedPtr
bool edm::RootInputFileSequence::nextFile ( )
private

Definition at line 304 of file RootInputFileSequence.cc.

References branchesMustMatch_, edm::hlt::Exception, fileIter_, fileIterBegin_, fileIterEnd_, initFile(), inputType_, edm::ProductRegistry::merge(), edm::errors::MismatchedInputFiles, edm::Primary, productRegistryUpdate(), rootFile_, skipBadFiles_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by readFile_(), and skipEvents().

304  {
306  if(fileIter_ == fileIterEnd_) {
308  return false;
309  } else {
311  }
312  }
313 
315 
317  // make sure the new product registry is compatible with the main one
318  std::string mergeInfo = productRegistryUpdate().merge(*rootFile_->productRegistry(),
319  fileIter_->fileName(),
321  if(!mergeInfo.empty()) {
322  throw Exception(errors::MismatchedInputFiles,"RootInputFileSequence::nextFile()") << mergeInfo;
323  }
324  }
325  return true;
326  }
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
ProductRegistry & productRegistryUpdate() const
std::string merge(ProductRegistry const &other, std::string const &fileName, BranchDescription::MatchMode branchesMustMatch=BranchDescription::Permissive)
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
BranchDescription::MatchMode branchesMustMatch_
RootInputFileSequence& edm::RootInputFileSequence::operator= ( RootInputFileSequence const &  )
delete
bool edm::RootInputFileSequence::previousFile ( )
private

Definition at line 328 of file RootInputFileSequence.cc.

References branchesMustMatch_, edm::hlt::Exception, fileIter_, fileIterBegin_, fileIterEnd_, initFile(), inputType_, edm::ProductRegistry::merge(), edm::errors::MismatchedInputFiles, edm::Primary, productRegistryUpdate(), rootFile_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by skipEvents().

328  {
329  if(fileIter_ == fileIterBegin_) {
331  return false;
332  } else {
334  }
335  }
336  --fileIter_;
337 
338  initFile(false);
339 
341  // make sure the new product registry is compatible to the main one
342  std::string mergeInfo = productRegistryUpdate().merge(*rootFile_->productRegistry(),
343  fileIter_->fileName(),
345  if(!mergeInfo.empty()) {
346  throw Exception(errors::MismatchedInputFiles,"RootInputFileSequence::previousEvent()") << mergeInfo;
347  }
348  }
349  if(rootFile_) rootFile_->setToLastEntry();
350  return true;
351  }
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
ProductRegistry & productRegistryUpdate() const
std::string merge(ProductRegistry const &other, std::string const &fileName, BranchDescription::MatchMode branchesMustMatch=BranchDescription::Permissive)
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
BranchDescription::MatchMode branchesMustMatch_
ProcessConfiguration const & edm::RootInputFileSequence::processConfiguration ( ) const
private

Definition at line 582 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::processConfiguration().

Referenced by initFile().

582  {
583  return input_.processConfiguration();
584  }
ProcessConfiguration const & processConfiguration() const
Accessor for Process Configuration.
Definition: InputSource.h:204
ProcessHistoryRegistry const & edm::RootInputFileSequence::processHistoryRegistry ( ) const

Definition at line 572 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::processHistoryRegistry().

572  {
574  }
ProcessHistoryRegistry const & processHistoryRegistry() const
Const accessor for process history registry.
Definition: InputSource.h:170
ProcessHistoryRegistry & edm::RootInputFileSequence::processHistoryRegistryForUpdate ( )

Definition at line 577 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::processHistoryRegistryForUpdate().

Referenced by initFile().

577  {
579  }
ProcessHistoryRegistry & processHistoryRegistryForUpdate()
Non-const accessor for process history registry.
Definition: InputSource.h:173
boost::shared_ptr< ProductRegistry const > edm::RootInputFileSequence::productRegistry ( ) const
private

Definition at line 602 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::productRegistry().

602  {
603  return input_.productRegistry();
604  }
boost::shared_ptr< ProductRegistry const > productRegistry() const
Accessor for product registry.
Definition: InputSource.h:167
ProductRegistry & edm::RootInputFileSequence::productRegistryUpdate ( ) const
private

Definition at line 597 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::productRegistryUpdate().

Referenced by nextFile(), previousFile(), and RootInputFileSequence().

597  {
598  return input_.productRegistryUpdate();
599  }
ProductRegistry & productRegistryUpdate() const
Definition: InputSource.h:343
void edm::RootInputFileSequence::readEvent ( EventPrincipal cache)

Definition at line 390 of file RootInputFileSequence.cc.

References rootFile_.

390  {
391  rootFile_->readEvent(eventPrincipal);
392  }
std::unique_ptr< FileBlock > edm::RootInputFileSequence::readFile_ ( )

Definition at line 119 of file RootInputFileSequence.cc.

References firstFile_, initFile(), nextFile(), rootFile_, and skipBadFiles_.

119  {
120  if(firstFile_) {
121  // The first input file has already been opened.
122  firstFile_ = false;
123  if(!rootFile_) {
125  }
126  } else {
127  if(!nextFile()) {
128  assert(0);
129  }
130  }
131  if(!rootFile_) {
132  return std::unique_ptr<FileBlock>(new FileBlock);
133  }
134  return rootFile_->createFileBlock();
135  }
void initFile(bool skipBadFiles)
void edm::RootInputFileSequence::readLuminosityBlock_ ( LuminosityBlockPrincipal lumiPrincipal)

Definition at line 372 of file RootInputFileSequence.cc.

References rootFile_.

372  {
373  rootFile_->readLuminosityBlock_(lumiPrincipal);
374  }
boost::shared_ptr< LuminosityBlockAuxiliary > edm::RootInputFileSequence::readLuminosityBlockAuxiliary_ ( )

Definition at line 362 of file RootInputFileSequence.cc.

References rootFile_.

362  {
363  return rootFile_->readLuminosityBlockAuxiliary_();
364  }
void edm::RootInputFileSequence::readOneRandom ( EventPrincipal cache)

Definition at line 690 of file RootInputFileSequence.cc.

References edm::errors::Configuration, eventsRemainingInFile_, edm::hlt::Exception, fileCatalogItems(), fileIter_, fileIterBegin_, fileIterEnd_, flatDistribution_, newFWLiteAna::found, initFile(), edm::errors::NotFound, rootFile_, findQualityFiles::size, and skipBadFiles_.

690  {
692  throw Exception(errors::Configuration) << "RootInputFileSequence::readOneRandom(): no input files specified for secondary input source.\n";
693  }
694  if(!flatDistribution_) {
696  CLHEP::HepRandomEngine& engine = rng->getEngine();
697  flatDistribution_.reset(new CLHEP::RandFlat(engine));
698  }
699  skipBadFiles_ = false;
700  unsigned int currentSeqNumber = fileIter_ - fileIterBegin_;
701  while(eventsRemainingInFile_ == 0) {
702  fileIter_ = fileIterBegin_ + flatDistribution_->fireInt(fileCatalogItems().size());
703  unsigned int newSeqNumber = fileIter_ - fileIterBegin_;
704  if(newSeqNumber != currentSeqNumber) {
705  initFile(false);
706  currentSeqNumber = newSeqNumber;
707  }
708  eventsRemainingInFile_ = rootFile_->eventTree().entries();
709  if(eventsRemainingInFile_ == 0) {
710  throw Exception(errors::NotFound) <<
711  "RootInputFileSequence::readOneRandom(): Secondary Input file " << fileIter_->fileName() << " contains no events.\n";
712  }
713  rootFile_->setAtEventEntry(flatDistribution_->fireInt(eventsRemainingInFile_) - 1);
714  }
715  rootFile_->nextEventEntry();
716 
717  bool found = rootFile_->readCurrentEvent(cache);
718  if(!found) {
719  rootFile_->setAtEventEntry(0);
720  bool found = rootFile_->readCurrentEvent(cache);
721  assert(found);
722  }
724  }
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
std::vector< FileCatalogItem > const & fileCatalogItems() const
std::unique_ptr< CLHEP::RandFlat > flatDistribution_
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
tuple size
Write out results.
bool edm::RootInputFileSequence::readOneRandomWithID ( EventPrincipal cache,
LuminosityBlockID const &  id 
)

Definition at line 729 of file RootInputFileSequence.cc.

References edm::errors::Configuration, edm::hlt::Exception, fileIter_, fileIterBegin_, fileIterEnd_, flatDistribution_, newFWLiteAna::found, i, rootFile_, DTTTrigCorrFirst::run, skipBadFiles_, and skipToItem().

729  {
731  throw Exception(errors::Configuration) << "RootInputFileSequence::readOneRandomWithID(): no input files specified for secondary input source.\n";
732  }
733  if(!flatDistribution_) {
735  CLHEP::HepRandomEngine& engine = rng->getEngine();
736  flatDistribution_.reset(new CLHEP::RandFlat(engine));
737  }
738  skipBadFiles_ = false;
739  if(fileIter_ == fileIterEnd_ || !rootFile_ ||
740  rootFile_->indexIntoFileIter().run() != id.run() ||
741  rootFile_->indexIntoFileIter().lumi() != id.luminosityBlock()) {
742  bool found = skipToItem(id.run(), id.luminosityBlock(), 0);
743  if(!found) {
744  return false;
745  }
746  int eventsInLumi = 0;
747  while(rootFile_->setEntryAtNextEventInLumi(id.run(), id.luminosityBlock())) ++eventsInLumi;
748  found = skipToItem(id.run(), id.luminosityBlock(), 0);
749  assert(found);
750  int eventInLumi = flatDistribution_->fireInt(eventsInLumi);
751  for(int i = 0; i < eventInLumi; ++i) {
752  bool found = rootFile_->setEntryAtNextEventInLumi(id.run(), id.luminosityBlock());
753  assert(found);
754  }
755  }
756  bool found = rootFile_->setEntryAtNextEventInLumi(id.run(), id.luminosityBlock());
757  if(found) {
758  found = rootFile_->readCurrentEvent(cache);
759  }
760  if(!found) {
761  bool found = rootFile_->setEntryAtItem(id.run(), id.luminosityBlock(), 0);
762  if(!found) {
763  return false;
764  }
765  return readOneRandomWithID(cache, id);
766  }
767  return true;
768  }
int i
Definition: DBlmapReader.cc:9
std::vector< FileCatalogItem >::const_iterator fileIter_
bool skipToItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool currentFileFirst=true)
std::unique_ptr< CLHEP::RandFlat > flatDistribution_
bool readOneRandomWithID(EventPrincipal &cache, LuminosityBlockID const &id)
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
bool edm::RootInputFileSequence::readOneSequential ( EventPrincipal cache)

Definition at line 621 of file RootInputFileSequence.cc.

References edm::errors::Configuration, edm::hlt::Exception, fileIter_, fileIterBegin_, fileIterEnd_, newFWLiteAna::found, initFile(), edm::IndexIntoFile::invalidEntry, rootFile_, and skipBadFiles_.

621  {
622  skipBadFiles_ = false;
623  if(fileIter_ == fileIterEnd_ || !rootFile_) {
625  throw Exception(errors::Configuration) << "RootInputFileSequence::readOneSequential(): no input files specified for secondary input source.\n";
626  }
628  initFile(false);
629  rootFile_->setAtEventEntry(IndexIntoFile::invalidEntry);
630  }
631  rootFile_->nextEventEntry();
632  bool found = rootFile_->readCurrentEvent(cache);
633  if(!found) {
634  ++fileIter_;
635  if(fileIter_ == fileIterEnd_) {
636  return false;
637  }
638  initFile(false);
639  rootFile_->setAtEventEntry(IndexIntoFile::invalidEntry);
640  return readOneSequential(cache);
641  }
642  return true;
643  }
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
bool readOneSequential(EventPrincipal &cache)
static EntryNumber_t const invalidEntry
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
bool edm::RootInputFileSequence::readOneSequentialWithID ( EventPrincipal cache,
LuminosityBlockID const &  id 
)

Definition at line 646 of file RootInputFileSequence.cc.

References edm::errors::Configuration, edm::hlt::Exception, fileIter_, fileIterBegin_, fileIterEnd_, newFWLiteAna::found, rootFile_, DTTTrigCorrFirst::run, skipBadFiles_, skipToItem(), and skipToItemInNewFile().

646  {
648  throw Exception(errors::Configuration) << "RootInputFileSequence::readOneSequentialWithID(): no input files specified for secondary input source.\n";
649  }
650  skipBadFiles_ = false;
651  if(fileIter_ == fileIterEnd_ || !rootFile_ ||
652  rootFile_->indexIntoFileIter().run() != id.run() ||
653  rootFile_->indexIntoFileIter().lumi() != id.luminosityBlock()) {
654  bool found = skipToItem(id.run(), id.luminosityBlock(), 0, false);
655  if(!found) {
656  return false;
657  }
658  }
659  bool found = rootFile_->setEntryAtNextEventInLumi(id.run(), id.luminosityBlock());
660  if(found) {
661  found = rootFile_->readCurrentEvent(cache);
662  }
663  if(!found) {
664  found = skipToItemInNewFile(id.run(), id.luminosityBlock(), 0);
665  if(!found) {
666  return false;
667  }
668  return readOneSequentialWithID(cache, id);
669  }
670  return true;
671  }
std::vector< FileCatalogItem >::const_iterator fileIter_
bool skipToItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool currentFileFirst=true)
bool readOneSequentialWithID(EventPrincipal &cache, LuminosityBlockID const &id)
bool skipToItemInNewFile(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
void edm::RootInputFileSequence::readOneSpecified ( EventPrincipal cache,
EventID const &  id 
)

Definition at line 674 of file RootInputFileSequence.cc.

References edm::errors::Configuration, event(), edm::hlt::Exception, fileIterBegin_, fileIterEnd_, newFWLiteAna::found, edm::errors::NotFound, rootFile_, DTTTrigCorrFirst::run, skipBadFiles_, and skipToItem().

674  {
676  throw Exception(errors::Configuration) << "RootInputFileSequence::readOneSpecified(): no input files specified for secondary input source.\n";
677  }
678  skipBadFiles_ = false;
679  bool found = skipToItem(id.run(), id.luminosityBlock(), id.event());
680  if(!found) {
681  throw Exception(errors::NotFound) <<
682  "RootInputFileSequence::readOneSpecified(): Secondary Input files" <<
683  " do not contain specified event:\n" << id << "\n";
684  }
685  found = rootFile_->readCurrentEvent(cache);
686  assert(found);
687  }
bool skipToItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool currentFileFirst=true)
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
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
void edm::RootInputFileSequence::readRun_ ( RunPrincipal runPrincipal)

Definition at line 367 of file RootInputFileSequence.cc.

References rootFile_.

367  {
368  rootFile_->readRun_(runPrincipal);
369  }
boost::shared_ptr< RunAuxiliary > edm::RootInputFileSequence::readRunAuxiliary_ ( )

Definition at line 357 of file RootInputFileSequence.cc.

References rootFile_.

357  {
358  return rootFile_->readRunAuxiliary_();
359  }
int edm::RootInputFileSequence::remainingEvents ( ) const
private

Definition at line 587 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::remainingEvents().

Referenced by initFile().

587  {
588  return input_.remainingEvents();
589  }
int remainingEvents() const
Definition: InputSource.h:190
int edm::RootInputFileSequence::remainingLuminosityBlocks ( ) const
private

Definition at line 592 of file RootInputFileSequence.cc.

References input_, and edm::InputSource::remainingLuminosityBlocks().

Referenced by initFile().

592  {
594  }
int remainingLuminosityBlocks() const
Definition: InputSource.h:198
ProcessingController::ReverseState edm::RootInputFileSequence::reverseState ( ) const
void edm::RootInputFileSequence::rewind_ ( )

Definition at line 427 of file RootInputFileSequence.cc.

References closeFile_(), fileIter_, fileIterBegin_, firstFile_, initFile(), initialNumberOfEventsToSkip_, rewindFile(), rootFile_, and skipEvents().

427  {
428  if(fileIter_ != fileIterBegin_) {
429  closeFile_();
431  }
432  if(!rootFile_) {
433  initFile(false);
434  }
435  rewindFile();
436  firstFile_ = true;
437  if(rootFile_) {
440  }
441  }
442  }
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
void edm::RootInputFileSequence::rewindFile ( )
private

Definition at line 446 of file RootInputFileSequence.cc.

References rootFile_.

Referenced by rewind_().

446  {
447  if(rootFile_) rootFile_->rewind();
448  }
bool edm::RootInputFileSequence::skipEvents ( int  offset)

Definition at line 452 of file RootInputFileSequence.cc.

References fileIter_, fileIterEnd_, inputType_, nextFile(), previousFile(), rootFile_, and edm::SecondaryFile.

Referenced by rewind_(), and RootInputFileSequence().

452  {
453  // We never call skipEvents for secondary input files. If we did,
454  // we would have to implement synchronization if a new file is opened.
455  // To avoid this, just assert.
457  while(offset != 0) {
458  bool atEnd = rootFile_->skipEvents(offset);
459  if((offset > 0 || atEnd) && !nextFile()) {
460  return false;
461  }
462  if(offset < 0 && !previousFile()) {
464  return false;
465  }
466  }
467  return true;
468  }
std::vector< FileCatalogItem >::const_iterator fileIter_
unsigned int offset(bool)
std::vector< FileCatalogItem >::const_iterator fileIterEnd_
bool edm::RootInputFileSequence::skipToItem ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event,
bool  currentFileFirst = true 
)

Definition at line 541 of file RootInputFileSequence.cc.

References fileIter_, fileIterBegin_, newFWLiteAna::found, indexesIntoFiles_, initFile(), rootFile_, and skipToItemInNewFile().

Referenced by readOneRandomWithID(), readOneSequentialWithID(), and readOneSpecified().

541  {
542  // Attempt to find item in currently open input file.
543  bool found = currentFileFirst && rootFile_ && rootFile_->setEntryAtItem(run, lumi, event);
544  if(!found) {
545  // If only one input file, give up now, to save time.
546  if(currentFileFirst && rootFile_ && indexesIntoFiles_.size() == 1) {
547  return false;
548  }
549  // Look for item (run/lumi/event) in files previously opened without reopening unnecessary files.
550  typedef std::vector<boost::shared_ptr<IndexIntoFile> >::const_iterator Iter;
551  for(Iter it = indexesIntoFiles_.begin(), itEnd = indexesIntoFiles_.end(); it != itEnd; ++it) {
552  if(*it && (*it)->containsItem(run, lumi, event)) {
553  // We found it. Close the currently open file, and open the correct one.
554  std::vector<FileCatalogItem>::const_iterator currentIter = fileIter_;
555  fileIter_ = fileIterBegin_ + (it - indexesIntoFiles_.begin());
556  if(fileIter_ != currentIter) {
557  initFile(false);
558  }
559  // Now get the item from the correct file.
560  found = rootFile_->setEntryAtItem(run, lumi, event);
561  assert(found);
562  return true;
563  }
564  }
565  // Look for item in files not yet opened.
566  return skipToItemInNewFile(run, lumi, event);
567  }
568  return true;
569  }
std::vector< boost::shared_ptr< IndexIntoFile > > indexesIntoFiles_
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
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
bool skipToItemInNewFile(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event)
std::vector< FileCatalogItem >::const_iterator fileIterBegin_
bool edm::RootInputFileSequence::skipToItemInNewFile ( RunNumber_t  run,
LuminosityBlockNumber_t  lumi,
EventNumber_t  event 
)

Definition at line 523 of file RootInputFileSequence.cc.

References fileIter_, fileIterBegin_, newFWLiteAna::found, indexesIntoFiles_, initFile(), and rootFile_.

Referenced by readOneSequentialWithID(), and skipToItem().

523  {
524  // Look for item in files not yet opened.
525  typedef std::vector<boost::shared_ptr<IndexIntoFile> >::const_iterator Iter;
526  for(Iter it = indexesIntoFiles_.begin(), itEnd = indexesIntoFiles_.end(); it != itEnd; ++it) {
527  if(!*it) {
528  fileIter_ = fileIterBegin_ + (it - indexesIntoFiles_.begin());
529  initFile(false);
530  bool found = rootFile_->setEntryAtItem(run, lumi, event);
531  if(found) {
532  return true;
533  }
534  }
535  }
536  // Not found
537  return false;
538  }
std::vector< boost::shared_ptr< IndexIntoFile > > indexesIntoFiles_
void initFile(bool skipBadFiles)
std::vector< FileCatalogItem >::const_iterator fileIter_
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
std::vector< FileCatalogItem >::const_iterator fileIterBegin_

Member Data Documentation

BranchDescription::MatchMode edm::RootInputFileSequence::branchesMustMatch_
private

Definition at line 102 of file RootInputFileSequence.h.

Referenced by nextFile(), previousFile(), and RootInputFileSequence().

InputFileCatalog const& edm::RootInputFileSequence::catalog_
private

Definition at line 94 of file RootInputFileSequence.h.

Referenced by fileCatalogItems().

bool edm::RootInputFileSequence::dropDescendants_
private

Definition at line 119 of file RootInputFileSequence.h.

Referenced by initFile().

boost::shared_ptr<DuplicateChecker> edm::RootInputFileSequence::duplicateChecker_
private

Definition at line 118 of file RootInputFileSequence.h.

Referenced by closeFile_(), and initFile().

bool edm::RootInputFileSequence::enablePrefetching_
private

Definition at line 122 of file RootInputFileSequence.h.

Referenced by initFile(), and RootInputFileSequence().

boost::shared_ptr<EventSkipperByID> edm::RootInputFileSequence::eventSkipperByID_
private

Definition at line 109 of file RootInputFileSequence.h.

Referenced by initFile().

int edm::RootInputFileSequence::eventsRemainingInFile_
private

Definition at line 110 of file RootInputFileSequence.h.

Referenced by readOneRandom().

std::vector<FileCatalogItem>::const_iterator edm::RootInputFileSequence::fileIter_
private
std::vector<FileCatalogItem>::const_iterator edm::RootInputFileSequence::fileIterBegin_
private
std::vector<FileCatalogItem>::const_iterator edm::RootInputFileSequence::fileIterEnd_
private
std::vector<FileCatalogItem>::const_iterator edm::RootInputFileSequence::fileIterLastOpened_
private

Definition at line 100 of file RootInputFileSequence.h.

Referenced by initFile().

bool edm::RootInputFileSequence::firstFile_
private

Definition at line 95 of file RootInputFileSequence.h.

Referenced by getNextItemType(), readFile_(), and rewind_().

std::unique_ptr<CLHEP::RandFlat> edm::RootInputFileSequence::flatDistribution_
private

Definition at line 104 of file RootInputFileSequence.h.

Referenced by readOneRandom(), and readOneRandomWithID().

std::vector<boost::shared_ptr<IndexIntoFile> > edm::RootInputFileSequence::indexesIntoFiles_
private

Definition at line 105 of file RootInputFileSequence.h.

Referenced by goToEvent(), initFile(), skipToItem(), and skipToItemInNewFile().

int edm::RootInputFileSequence::initialNumberOfEventsToSkip_
private

Definition at line 111 of file RootInputFileSequence.h.

Referenced by initFile(), rewind_(), and RootInputFileSequence().

PoolSource& edm::RootInputFileSequence::input_
private
InputType edm::RootInputFileSequence::inputType_
private
bool edm::RootInputFileSequence::labelRawDataLikeMC_
private

Definition at line 120 of file RootInputFileSequence.h.

Referenced by initFile().

std::string edm::RootInputFileSequence::lfn_
private

Definition at line 96 of file RootInputFileSequence.h.

Referenced by closeFile_(), and initFile().

bool edm::RootInputFileSequence::noEventSort_
private

Definition at line 112 of file RootInputFileSequence.h.

Referenced by initFile().

unsigned int edm::RootInputFileSequence::nStreams_
private

Definition at line 108 of file RootInputFileSequence.h.

Referenced by initFile().

std::vector<ProcessHistoryID> edm::RootInputFileSequence::orderedProcessHistoryIDs_
private

Definition at line 106 of file RootInputFileSequence.h.

Referenced by initFile().

ProductSelectorRules edm::RootInputFileSequence::productSelectorRules_
private

Definition at line 117 of file RootInputFileSequence.h.

Referenced by dropUnwantedBranches_(), and initFile().

RootFileSharedPtr edm::RootInputFileSequence::rootFile_
private
RunNumber_t edm::RootInputFileSequence::setRun_
private

Definition at line 116 of file RootInputFileSequence.h.

Referenced by initFile().

bool edm::RootInputFileSequence::skipBadFiles_
private
unsigned int edm::RootInputFileSequence::treeCacheSize_
private

Definition at line 114 of file RootInputFileSequence.h.

Referenced by initFile(), and RootInputFileSequence().

int const edm::RootInputFileSequence::treeMaxVirtualSize_
private

Definition at line 115 of file RootInputFileSequence.h.

Referenced by initFile().

bool edm::RootInputFileSequence::usedFallback_
private

Definition at line 123 of file RootInputFileSequence.h.

Referenced by closeFile_(), and initFile().

bool edm::RootInputFileSequence::usingGoToEvent_
private

Definition at line 121 of file RootInputFileSequence.h.

Referenced by goToEvent(), and initFile().