21 beginEvents_(invalidEntry),
22 endEvents_(invalidEntry),
23 currentIndex_(invalidIndex),
24 currentRun_(invalidRun),
25 currentLumi_(invalidLumi),
31 unsortedEventNumbers_() {
116 <<
"In IndexIntoFile::addEntry. Entries were added in illegal order.\n" 117 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n" 118 <<
"The output file will be unusable for most purposes.\n" 119 <<
"If this occurs after an unrelated exception was thrown in\n" 120 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n" 121 <<
"the primary exception. This is an expected side effect.\n" 122 <<
"Otherwise please report this to the core framework developers\n";
128 std::pair<IndexRunKey, EntryNumber_t> keyAndOrder(
IndexRunKey(index, run), entry);
179 long long beginEventNumbers = 0;
181 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
182 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
185 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
188 if(beginOfLumi == iEnd)
break;
190 endOfLumi = beginOfLumi + 1;
191 while(endOfLumi != iEnd &&
192 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
193 beginOfLumi->run() == endOfLumi->run() &&
194 beginOfLumi->lumi() == endOfLumi->lumi()) {
198 for(std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
201 if(runOrLumiEntries_[iter->indexToGetEntry()].beginEvents() !=
invalidEntry) {
202 nEvents += runOrLumiEntries_[iter->indexToGetEntry()].endEvents() -
203 runOrLumiEntries_[iter->indexToGetEntry()].beginEvents();
206 for(std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
209 iter->setBeginEventNumbers(beginEventNumbers);
210 iter->setEndEventNumbers(beginEventNumbers + nEvents);
213 beginOfLumi = endOfLumi;
235 needEventNumbers =
false;
239 needEventEntries =
false;
251 if(!needEventNumbers && !needEventEntries) {
257 if(needEventNumbers) {
260 if(needEventEntries) {
265 long long previousBeginEventNumbers = -1LL;
268 runOrLumi != runOrLumiEnd; ++runOrLumi) {
270 if(runOrLumi.isRun())
continue;
272 long long beginEventNumbers = 0;
273 long long endEventNumbers = 0;
276 runOrLumi.getRange(beginEventNumbers, endEventNumbers, beginEventEntry, endEventEntry);
280 if(beginEventNumbers != previousBeginEventNumbers) offset = 0;
283 if(needEventNumbers) {
286 if(needEventEntries) {
292 previousBeginEventNumbers = beginEventNumbers;
293 offset += endEventEntry - beginEventEntry;
295 if(needEventNumbers) {
299 if(needEventEntries) {
342 std::vector<ProcessHistoryID> reducedPHIDs;
344 std::map<ProcessHistoryID, int> reducedPHIDToIndex;
346 std::pair<std::map<ProcessHistoryID, int>::iterator,
bool> insertResult;
348 std::vector<int> phidIndexConverter;
352 mapEntry.first = reducedPHID;
353 insertResult = reducedPHIDToIndex.insert(mapEntry);
355 if(insertResult.second) {
356 insertResult.first->second = reducedPHIDs.size();
357 reducedPHIDs.push_back(reducedPHID);
359 phidIndexConverter.push_back(insertResult.first->second);
361 processHistoryIDs_.
swap(reducedPHIDs);
366 if(processHistoryIDs_.size() == reducedPHIDs.size()) {
370 std::map<IndexIntoFile::IndexRunKey, int> runOrderMap;
371 std::pair<std::map<IndexIntoFile::IndexRunKey, int>::iterator,
bool> runInsertResult;
373 std::map<IndexIntoFile::IndexRunLumiKey, int> lumiOrderMap;
374 std::pair<std::map<IndexIntoFile::IndexRunLumiKey, int>::iterator,
bool> lumiInsertResult;
380 item.setProcessHistoryIDIndex(phidIndexConverter.at(item.processHistoryIDIndex()));
384 runInsertResult = runOrderMap.insert(std::pair<IndexIntoFile::IndexRunKey, int>(runKey,0));
385 if(runInsertResult.second) {
386 runInsertResult.first->second = item.orderPHIDRun();
388 item.setOrderPHIDRun(runInsertResult.first->second);
392 if(item.lumi() != 0) {
394 lumiInsertResult = lumiOrderMap.insert(std::pair<IndexIntoFile::IndexRunLumiKey, int>(lumiKey,0));
395 if(lumiInsertResult.second) {
396 lumiInsertResult.first->second = item.orderPHIDRunLumi();
398 item.setOrderPHIDRunLumi(lumiInsertResult.first->second);
402 std::stable_sort(runOrLumiEntries_.begin(), runOrLumiEntries_.end());
408 std::map<int, int> oldToNewIndex;
413 std::vector<ProcessHistoryID>::const_iterator iterExisting =
414 std::find(processHistoryIDs.begin(), processHistoryIDs.end(), *iter);
415 if(iterExisting == processHistoryIDs.end()) {
417 processHistoryIDs.push_back(*iter);
419 oldToNewIndex[iter -
processHistoryIDs_.begin()] = iterExisting - processHistoryIDs.begin();
425 item.setProcessHistoryIDIndex(oldToNewIndex[item.processHistoryIDIndex()]);
431 std::map<IndexRunKey, EntryNumber_t>::const_iterator keyAndOrder =
435 <<
"In IndexIntoFile::sortVector_Run_Or_Lumi_Entries. A run entry is missing.\n" 436 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n" 437 <<
"The output file will be unusable for most purposes.\n" 438 <<
"If this occurs after an unrelated exception was thrown in\n" 439 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n" 440 <<
"the primary exception. This is an expected side effect.\n" 441 <<
"Otherwise please report this to the core framework developers\n";
443 item.setOrderPHIDRun(keyAndOrder->second);
450 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
451 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
454 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
457 if(beginOfLumi == iEnd)
break;
459 endOfLumi = beginOfLumi + 1;
460 while(endOfLumi != iEnd &&
461 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
462 beginOfLumi->run() == endOfLumi->run() &&
463 beginOfLumi->lumi() == endOfLumi->lumi()) {
466 assert(beginOfLumi->endEventNumbers() >= 0);
467 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventNumbers().size()));
469 eventNumbers().begin() + beginOfLumi->endEventNumbers());
470 beginOfLumi = endOfLumi;
476 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
477 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
480 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
483 if(beginOfLumi == iEnd)
break;
485 endOfLumi = beginOfLumi + 1;
486 while(endOfLumi != iEnd &&
487 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
488 beginOfLumi->run() == endOfLumi->run() &&
489 beginOfLumi->lumi() == endOfLumi->lumi()) {
492 assert(beginOfLumi->endEventNumbers() >= 0);
493 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventEntries().size()));
495 eventEntries().begin() + beginOfLumi->endEventNumbers());
496 beginOfLumi = endOfLumi;
502 return end(sortOrder);
530 if(it.getEntryType() ==
kEvent) {
531 if(it.entry() < maxEntry) {
534 maxEntry = it.entry();
548 bool lumiMissing = (lumi == 0 &&
event != 0);
550 std::vector<RunOrLumiIndexes>::const_iterator it;
551 std::vector<RunOrLumiIndexes>::const_iterator iEnd =
runOrLumiIndexes().end();
552 std::vector<RunOrLumiIndexes>::const_iterator phEnd;
560 phEnd = std::upper_bound(phBegin, iEnd, el,
Compare_Index());
562 std::vector<RunOrLumiIndexes>::const_iterator iRun = std::lower_bound(phBegin, phEnd, el,
Compare_Index_Run());
564 if(iRun == phEnd || iRun->run() !=
run)
continue;
579 std::vector<RunOrLumiIndexes>::const_iterator iRunEnd = std::upper_bound(iRun, phEnd, el,
Compare_Index_Run());
582 std::vector<RunOrLumiIndexes>::const_iterator iLumi = std::lower_bound(iRun, iRunEnd, el);
583 if(iLumi == iRunEnd || iLumi->lumi() !=
lumi)
continue;
598 long long beginEventNumbers = iLumi->beginEventNumbers();
599 long long endEventNumbers = iLumi->endEventNumbers();
600 if(beginEventNumbers >= endEventNumbers)
continue;
603 long long indexToEvent = 0;
605 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
609 eventIter->event() !=
event)
continue;
611 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
614 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
618 *eventIter != event)
continue;
620 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
637 endEventNumbers - beginEventNumbers);
641 std::vector<RunOrLumiIndexes>::const_iterator iLumi = iRun;
642 while(iLumi != iRunEnd && iLumi->lumi() ==
invalidLumi) {
645 if(iLumi == iRunEnd)
continue;
647 std::vector<RunOrLumiIndexes>::const_iterator lumiEnd;
653 lumiEnd = std::upper_bound(iLumi, iRunEnd, elWithLumi);
655 long long beginEventNumbers = iLumi->beginEventNumbers();
656 long long endEventNumbers = iLumi->endEventNumbers();
657 if(beginEventNumbers >= endEventNumbers)
continue;
659 long long indexToEvent = 0;
661 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
665 eventIter->event() !=
event)
continue;
666 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
669 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
673 *eventIter != event)
continue;
674 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
691 endEventNumbers - beginEventNumbers);
715 while(itr != itrEnd) {
730 if(eventNumber == event) {
815 while(iter1 != iEnd1 && iter1.
isRun()) ++iter1;
816 if(iter1 == iEnd1)
return;
819 while(iter2 != iEnd2 && iter2.
isRun()) ++iter2;
820 if(iter2 == iEnd2)
return;
826 while(iter1 != iEnd1 && iter2 != iEnd2) {
830 if(indexes1 < indexes2) {
832 }
else if(indexes2 < indexes1) {
837 if(indexes1.
isRun() ||
838 (previousIndexes && !(*previousIndexes < indexes1))) {
842 previousIndexes = &indexes1;
853 if((beginEventNumbers1 >= endEventNumbers1) ||
854 (beginEventNumbers2 >= endEventNumbers2)) {
861 std::vector<EventEntry> matchingEvents;
862 std::insert_iterator<std::vector<EventEntry> > insertIter(matchingEvents, matchingEvents.begin());
865 indexIntoFile.
eventEntries().begin() + beginEventNumbers2,
866 indexIntoFile.
eventEntries().begin() + endEventNumbers2,
877 std::vector<EventNumber_t> matchingEvents;
878 std::insert_iterator<std::vector<EventNumber_t> > insertIter(matchingEvents, matchingEvents.begin());
881 indexIntoFile.
eventNumbers().begin() + beginEventNumbers2,
882 indexIntoFile.
eventNumbers().begin() + endEventNumbers2,
902 iter != iEnd; ++iter) {
907 if(indexes.
isRun() ||
908 (previousIndexes && !(*previousIndexes < indexes))) {
911 previousIndexes = &indexes;
917 if(beginEventNumbers + 1 >= endEventNumbers)
continue;
920 std::vector<EventEntry>::iterator
last =
eventEntries().begin() + endEventNumbers;
921 if(std::adjacent_find(
eventEntries().
begin() + beginEventNumbers, last) != last) {
926 std::vector<EventNumber_t>::iterator
last =
eventNumbers().begin() + endEventNumbers;
927 if(std::adjacent_find(
eventNumbers().
begin() + beginEventNumbers, last) != last) {
967 int indexToGetEntry) :
971 indexToGetEntry_(indexToGetEntry),
972 beginEventNumbers_(-1),
978 indexIntoFile_(indexIntoFile), runOrLumi_(runOrLumi) {
1005 long long & endEventNumbers,
1025 int indexToEventRange,
1026 long long indexToEvent,
1031 indexToRun_(indexToRun),
1032 indexToLumi_(indexToLumi),
1033 indexToEventRange_(indexToEventRange),
1034 indexToEvent_(indexToEvent),
1078 }
else if(nextType ==
kRun) {
1090 if(nextType ==
kRun && sameRun) {
1092 }
else if(nextType ==
kRun && !sameRun) {
1095 }
else if(nextType ==
kLumi) {
1109 runOfSkippedEvent =
run();
1133 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1142 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1155 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1208 if(newLumi <= 0)
return false;
1211 for( ; newLumi > 0; --newLumi) {
1219 if(newLumi == 0)
return false;
1234 int newRun = newLumi;
1255 long long saveNEvents =
nEvents();
1282 long long saveNEvents =
nEvents();
1328 for(
int i = 1; startSearch +
i <
size_; ++
i) {
1344 for(
int i = 1; startSearch +
i <
size_; ++
i) {
1384 if(entryType ==
kRun) {
1402 auto oldLumi =
lumi();
1406 assert(oldLumi ==
lumi());
1606 if(index < 0 || index >=
size()) {
1615 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1623 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1678 long long eventNumberIndex =
1693 long long eventNumberIndex =
1721 long long nEventsInRange =
1724 if(nEventsInRange == 0) {
1732 assert(nEventsInRange ==
1765 if(index < 0 || index >=
size()) {
1774 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1782 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1832 entryType !=
kEnd && entryType !=
kLumi;
1845 return lh.
run() < rh.
run();
void initializeRun()
Should only be used internally and for tests.
void fillEventNumbersOrEntries(bool needEventNumbers, bool needEventEntries) const
RunNumber_t & currentRun() const
int processHistoryIDIndex() const
int processHistoryIDIndex() const
virtual bool isSameLumi(int index1, int index2) const =0
EntryNumber_t peekAheadAtEventEntry() const
int processHistoryIDIndex() const override
bool isSameLumi(int index1, int index2) const override
void setIndexToLumi(int value)
virtual void initializeLumi_()=0
EntryNumber_t endEvents() const
void doneFileInitialization() const
Clears the temporary vector of event numbers to reduce memory usage.
static constexpr int invalidIndex
bool skipLumiInRun() override
RunNumber_t run() const override
IndexIntoFile const * indexIntoFile() const
IndexIntoFileItrImpl * clone() const override
LuminosityBlockNumber_t currentLumi_
bool skipToNextEventInLumi()
bool isSameRun(int index1, int index2) const override
void addLumi(int index, RunNumber_t run, LuminosityBlockNumber_t lumi, EntryNumber_t entry)
virtual bool previousEventRange()=0
std::vector< EventEntry > & eventEntries() const
virtual bool nextEventRange()=0
EntryNumber_t beginEvents() const
void advanceToNextLumiOrRun()
EntryNumber_t entry() const override
std::vector< EventNumber_t > eventNumbers_
virtual bool setToLastEventInRange(int index)=0
SortedRunOrLumiItr beginRunOrLumi() const
EntryNumber_t orderPHIDRun_
bool empty() const
True if no runs, lumis, or events are in the file.
LuminosityBlockNumber_t & currentLumi() const
RunNumber_t run() const override
EntryType getEntryType() const
EntryNumber_t beginEvents_
bool isSameLumi(int index1, int index2) const override
bool nextEventRange() override
IndexIntoFile const * indexIntoFile_
bool operator==(SortedRunOrLumiItr const &right) const
unsigned long long EventNumber_t
std::vector< RunOrLumiIndexes > & runOrLumiIndexes() const
EntryNumber_t beginEvents_
void fillUnsortedEventNumbers() const
EntryNumber_t peekAheadAtEventEntry() const override
IndexIntoFileItr begin(SortOrder sortOrder) const
void initializeLumi_() override
bool previousEventRange() override
IndexIntoFile const * indexIntoFile_
void swap(Hash< I > &other)
LuminosityBlockNumber_t lumi() const
std::map< IndexRunLumiKey, EntryNumber_t > & lumiToOrder() const
std::vector< RunOrLumiEntry > const & runOrLumiEntries() const
Used internally and for test purposes.
LuminosityBlockNumber_t peekAheadAtLumi() const override
void stable_sort_all(RandomAccessSequence &s)
wrappers for std::stable_sort
EntryNumber_t orderPHIDRun() const
std::vector< EventNumber_t > unsortedEventNumbers_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
EntryNumber_t entry() const override
virtual LuminosityBlockNumber_t lumi() const =0
void setIndexToEventRange(int value)
virtual ~IndexIntoFileItrImpl()
unsigned int LuminosityBlockNumber_t
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
std::vector< ProcessHistoryID > const & processHistoryIDs() const
static constexpr EventNumber_t invalidEvent
void swap(Association< C > &lhs, Association< C > &rhs)
long long beginEventNumbers() const
virtual bool lumiEntryValid(int index) const =0
std::map< IndexRunLumiKey, EntryNumber_t > lumiToOrder_
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
virtual bool isSameRun(int index1, int index2) const =0
int & previousAddedIndex() const
void sortVector_Run_Or_Lumi_Entries()
void setNEvents(long long value)
EntryType getRunOrLumiEntryType(int index) const override
size_t numberOfEvents() const
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
IndexIntoFile const * indexIntoFile() const
bool skipLumiInRun() override
int & currentIndex() const
bool setToLastEventInRange(int index) override
RunOrLumiIndexes(int processHistoryIDIndex, RunNumber_t run, LuminosityBlockNumber_t lumi, int indexToGetEntry)
long long indexToEvent() const
LuminosityBlockNumber_t lumi() const override
double intersection(double r12)
static constexpr RunNumber_t invalidRun
void setIndexToEvent(long long value)
int processHistoryIDIndex_
void skipEventBackward(int &phIndexOfEvent, RunNumber_t &runOfEvent, LuminosityBlockNumber_t &lumiOfEvent, EntryNumber_t &eventEntry)
EntryNumber_t orderPHIDRunLumi() const
int indexToEventRange() const
std::vector< RunOrLumiEntry > runOrLumiEntries_
std::map< IndexRunKey, EntryNumber_t > runToOrder_
void copyPosition(IndexIntoFileItr const &position)
Copy the position without modifying the pointer to the IndexIntoFile or size.
IndexIntoFileItr end(SortOrder sortOrder) const
Used to end an iteration over the Runs, Lumis, and Events in a file.
EntryNumber_t numberOfEvents_
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)
std::vector< ProcessHistoryID > processHistoryIDs_
LuminosityBlockNumber_t lumi_
bool isSameRun(int index1, int index2) const override
void fillEventEntries() const
IndexIntoFileItrImpl(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual bool skipLumiInRun()=0
EntryType getRunOrLumiEntryType(int index) const override
void fillRunOrLumiIndexes() const
bool operator==(IndexIntoFileItrImpl const &right) const
bool lumiEntryValid(int index) const override
bool previousLumiWithEvents()
void set_intersection(IndexIntoFile const &indexIntoFile, std::set< IndexRunLumiEventKey > &intersection) const
SortedRunOrLumiItr & operator++()
bool iterationWillBeInEntryOrder(SortOrder sortOrder) const
Used to determine whether or not to disable fast cloning.
ProcessHistoryID const & reducedProcessHistoryID(ProcessHistoryID const &fullID) const
virtual EntryType getRunOrLumiEntryType(int index) const =0
LuminosityBlockNumber_t lumi() const override
bool operator()(IndexIntoFile::RunOrLumiIndexes const &lh, IndexIntoFile::RunOrLumiIndexes const &rh)
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 operator!=(SortedRunOrLumiItr const &right) const
void addEntry(ProcessHistoryID const &processHistoryID, RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
long long endEventNumbers() const
SortedRunOrLumiItr(IndexIntoFile const *indexIntoFile, unsigned runOrLumi)
EntryNumber_t firstEventEntryThisLumi()
Hash< ProcessHistoryType > ProcessHistoryID
void sortEventEntries() const
bool containsLumi(RunNumber_t run, LuminosityBlockNumber_t lumi) const
bool containsDuplicateEvents() const
Returns true if the IndexIntoFile contains 2 events with the same ProcessHistoryID index...
bool previousEventRange() override
bool containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
void inputFileClosed() const
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
bool setToLastEventInRange(int index) override
void resetEventFinder() const
bool nextEventRange() override
std::vector< EventNumber_t > & unsortedEventNumbers() const
static constexpr EntryNumber_t invalidEntry
EntryNumber_t peekAheadAtEventEntry() const override
IndexIntoFileItrSorted(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual RunNumber_t run() const =0
static constexpr LuminosityBlockNumber_t invalidLumi
IndexIntoFileItr findLumiPosition(RunNumber_t run, LuminosityBlockNumber_t lumi) const
unsigned runOrLumi() const
void initializeLumi()
Should only be used internally and for tests.
ProcessHistoryID const & processHistoryID(int i) const
std::map< IndexRunKey, EntryNumber_t > & runToOrder() const
EntryNumber_t firstEventEntryThisRun()
void copyPosition(IndexIntoFileItrImpl const &position)
IndexIntoFileItrImpl * clone() const override
std::vector< EventEntry > eventEntries_
EventNumber_t getEventNumberOfEntry(EntryNumber_t entry) const
bool lumiEntryValid(int index) const override
void fillEventNumbers() const
static int position[264][3]
LuminosityBlockNumber_t peekAheadAtLumi() const override
long long nEvents() const
void setNumberOfEvents(EntryNumber_t nevents) const
bool containsEvent(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
std::vector< EventNumber_t > & eventNumbers() const
std::vector< RunOrLumiIndexes > runOrLumiIndexes_
IndexIntoFileItr(IndexIntoFile const *indexIntoFile, SortOrder sortOrder, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual int processHistoryIDIndex() const =0
virtual LuminosityBlockNumber_t peekAheadAtLumi() const =0
SortedRunOrLumiItr endRunOrLumi() const
bool operator()(IndexIntoFile::RunOrLumiIndexes const &lh, IndexIntoFile::RunOrLumiIndexes const &rh)
bool skipToNextEventInLumi()
bool containsRun(RunNumber_t run) const
EntryNumber_t orderPHIDRunLumi_
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
EntryNumber_t entry() const
void getRange(long long &beginEventNumbers, long long &endEventNumbers, EntryNumber_t &beginEventEntry, EntryNumber_t &endEventEntry)
EntryNumber_t & endEvents() const
LuminosityBlockNumber_t peekAheadAtLumi() const
EntryNumber_t & beginEvents() const
virtual EntryNumber_t peekAheadAtEventEntry() const =0
value_ptr< IndexIntoFileItrImpl > impl_
IndexIntoFileItrNoSort(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
void initializeLumi_() override
int processHistoryIDIndex() const override
edm::propagate_const< std::shared_ptr< EventFinder > > eventFinder_
RunOrLumiIndexes const & runOrLumiIndexes() const