59 std::vector<std::string>
const& iFileNames2,
60 bool useSecFileMapSorted)
68 event2_->setGetter(getter_);
73 std::cout <<
"------------------------------------------------------------------------" << std::endl;
74 std::cout <<
"WARNING! What you are about to do may be very slow." << std::endl;
75 std::cout <<
"The 2-file solution in FWLite works with very simple assumptions." << std::endl;
76 std::cout <<
"It will linearly search through the files in the secondary file list for Products." << std::endl;
77 std::cout <<
"There are speed improvements available to make this run faster." << std::endl;
78 std::cout <<
"***If your secondary files are sorted with a run-range within a file, (almost always the case) " << std::endl;
79 std::cout <<
"***please use the option useSecFileMapSorted=true in this constructor. " << std::endl;
80 std::cout <<
" > usage: MultiChainEvent(primaryFiles, secondaryFiles, true);" << std::endl;
81 std::cout <<
"------------------------------------------------------------------------" << std::endl;
87 std::cout <<
"------------------------------------------------------------------------" << std::endl;
88 std::cout <<
"This MultiChainEvent is now creating a (run_range)_2 ---> file_index_2 map" << std::endl;
89 std::cout <<
"for the 2-file solution. " << std::endl;
90 std::cout <<
"This is assuming the files you are giving me are sorted by run,event pairs within each secondary file." << std::endl;
91 std::cout <<
"If this is not true (rarely the case), set this option to false." << std::endl;
92 std::cout <<
" > usage: MultiChainEvent(primaryFiles, secondaryFiles, false);" << std::endl;
93 std::cout <<
"------------------------------------------------------------------------" << std::endl;
100 std::pair<event_id_range,Long64_t> eventRange;
101 bool firstFile =
true;
103 bool foundAny =
false;
105 for(event2_->toBegin();
109 if (lastFile != event2_->getTFile()) {
119 eventRange.first.first = event2_->event()->id();
120 lastFile = event2_->getTFile();
126 eventRange.first.second = event2_->event()->id();
127 eventRange.second = event2_->eventIndex();
207 return event1_->to(run, lumi, event);
214 return to(run, 0U, event);
238 for (sec_file_range_index_map::const_iterator mBegin =
245 if (id < mit->
first.first ||
id > mit->first.second)
256 event2_->switchToFile(mit->second);
280 <<
" in secondary list. Exiting."
315 char const* iInstance,
316 char const* iProcess)
const
318 return event1_->getBranchNameFor(iType,iModule,iInstance,iProcess);
321 std::vector<edm::BranchDescription>
const&
324 return event1_->getBranchDescriptions();
327 std::vector<std::string>
const&
330 return event1_->getProcessHistory();
336 return event1_->processHistory();
342 return event1_->eventAuxiliary();
347 std::type_info
const& iType,
349 char const* iInstance,
350 char const* iProcess,
353 bool ret1 =
event1_->getByLabel(iType, iModule, iInstance, iProcess, iValue);
356 bool ret2 =
event2_->getByLabel(iType,iModule,iInstance,iProcess,iValue);
357 if (!ret2)
return false;
364 std::type_info
const& iType,
366 char const* iInstance,
367 char const* iProcess,
369 bool ret1 =
event1_->getByLabel(iType, iModule, iInstance, iProcess, holder);
372 bool ret2 =
event2_->getByLabel(iType, iModule, iInstance, iProcess, holder);
373 if(!ret2)
return false;
385 edp =
event2_->getByProductID(iID);
387 throw cms::Exception(
"ProductNotFound") <<
"Cannot find product " << iID;
420 if (names != 0)
return *
names;
422 event1_->fillParameterSetRegistry();
424 if (names != 0)
return *
names;
429 event2_->fillParameterSetRegistry();
431 if (names != 0)
return *
names;
434 <<
"TriggerNames not found in ParameterSet registry";
442 hTriggerResults.
getByLabel(*
this,
"TriggerResults",
"",process.c_str());
443 if (!hTriggerResults.
isValid()) {
450 event1_->fillParameterSetRegistry();
456 event2_->fillParameterSetRegistry();
469 char const* iInstance,
470 char const* iProcess) {
edm::WrapperHolder getByProductID(edm::ProductID const &) const
std::vector< edm::BranchDescription > const & getBranchDescriptions() const
static const HistoName names[]
unsigned int EventNumber_t
MultiProductGetter(MultiChainEvent const *iEvent)
MultiChainEvent const * event_
virtual edm::WrapperHolder getIt(edm::ProductID const &iID) const override
boost::shared_ptr< ChainEvent > event2_
virtual ~MultiChainEvent()
edm::LuminosityBlockNumber_t luminosityBlock() const
virtual unsigned int transitionIndex_() const override
const MultiChainEvent & operator++()
unsigned int LuminosityBlockNumber_t
static void throwProductNotFoundException(std::type_info const &, char const *, char const *, char const *)
bool to(Long64_t iIndex)
Go to the event at index iIndex.
void getByLabel(const P &iP, const char *iModuleLabel, const char *iProductInstanceLabel=0, const char *iProcessLabel=0)
const MultiChainEvent & toBegin()
bool toSec(Long64_t iIndex)
Go to the event from secondary files at index iIndex.
virtual edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const
edm::ProcessHistory const & processHistory() const
bool useSecFileMapSorted_
std::vector< std::string > const & getProcessHistory() const
boost::shared_ptr< ChainEvent > event1_
static void throwProductNotFoundException(std::type_info const &, char const *, char const *, char const *)
static std::string const triggerResults
boost::shared_ptr< internal::MultiProductGetter > getter_
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
sec_file_range_index_map secFileMapSorted_
virtual std::string const getBranchNameFor(std::type_info const &, char const *, char const *, char const *) const
static TriggerNames const * triggerNames_(edm::TriggerResults const &triggerResults)
virtual edm::EventAuxiliary const & eventAuxiliary() const
MultiChainEvent(std::vector< std::string > const &iFileNames1, std::vector< std::string > const &iFileNames2, bool useSecFileMapSorted=false)
std::pair< edm::EventID, edm::EventID > event_id_range
virtual edm::TriggerResultsByName triggerResultsByName(std::string const &process) const
T const * product() const
virtual bool getByLabel(std::type_info const &, char const *, char const *, char const *, void *) const