21 beginEvents_(invalidEntry),
22 endEvents_(invalidEntry),
23 currentIndex_(invalidIndex),
24 currentRun_(invalidRun),
25 currentLumi_(invalidLumi),
31 unsortedEventNumbers_() {
100 <<
"In IndexIntoFile::addEntry. Entries were added in illegal order.\n" 101 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n" 102 <<
"The output file will be unusable for most purposes.\n" 103 <<
"If this occurs after an unrelated exception was thrown in\n" 104 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n" 105 <<
"the primary exception. This is an expected side effect.\n" 106 <<
"Otherwise please report this to the core framework developers\n";
111 std::pair<IndexRunKey, EntryNumber_t> firstRunEntry(
IndexRunKey(index, run), entry);
123 std::pair<IndexRunLumiKey, EntryNumber_t> firstLumiEntry(
IndexRunLumiKey(index, run, lumi), entry);
162 long long beginEventNumbers = 0;
164 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
165 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
168 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
171 if(beginOfLumi == iEnd)
break;
173 endOfLumi = beginOfLumi + 1;
174 while(endOfLumi != iEnd &&
175 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
176 beginOfLumi->run() == endOfLumi->run() &&
177 beginOfLumi->lumi() == endOfLumi->lumi()) {
181 for(std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
184 if(runOrLumiEntries_[iter->indexToGetEntry()].beginEvents() !=
invalidEntry) {
185 nEvents += runOrLumiEntries_[iter->indexToGetEntry()].endEvents() -
186 runOrLumiEntries_[iter->indexToGetEntry()].beginEvents();
189 for(std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
192 iter->setBeginEventNumbers(beginEventNumbers);
193 iter->setEndEventNumbers(beginEventNumbers + nEvents);
196 beginOfLumi = endOfLumi;
218 needEventNumbers =
false;
222 needEventEntries =
false;
234 if(!needEventNumbers && !needEventEntries) {
240 if(needEventNumbers) {
243 if(needEventEntries) {
248 long long previousBeginEventNumbers = -1LL;
251 runOrLumi != runOrLumiEnd; ++runOrLumi) {
253 if(runOrLumi.isRun())
continue;
255 long long beginEventNumbers = 0;
256 long long endEventNumbers = 0;
259 runOrLumi.getRange(beginEventNumbers, endEventNumbers, beginEventEntry, endEventEntry);
263 if(beginEventNumbers != previousBeginEventNumbers) offset = 0;
266 if(needEventNumbers) {
269 if(needEventEntries) {
275 previousBeginEventNumbers = beginEventNumbers;
276 offset += endEventEntry - beginEventEntry;
278 if(needEventNumbers) {
282 if(needEventEntries) {
325 std::vector<ProcessHistoryID> reducedPHIDs;
327 std::map<ProcessHistoryID, int> reducedPHIDToIndex;
329 std::pair<std::map<ProcessHistoryID, int>::iterator,
bool> insertResult;
331 std::vector<int> phidIndexConverter;
335 mapEntry.first = reducedPHID;
336 insertResult = reducedPHIDToIndex.insert(mapEntry);
338 if(insertResult.second) {
339 insertResult.first->second = reducedPHIDs.size();
340 reducedPHIDs.push_back(reducedPHID);
342 phidIndexConverter.push_back(insertResult.first->second);
344 processHistoryIDs_.
swap(reducedPHIDs);
349 if(processHistoryIDs_.size() == reducedPHIDs.size()) {
353 std::map<IndexIntoFile::IndexRunKey, int> runOrderMap;
354 std::pair<std::map<IndexIntoFile::IndexRunKey, int>::iterator,
bool> runInsertResult;
356 std::map<IndexIntoFile::IndexRunLumiKey, int> lumiOrderMap;
357 std::pair<std::map<IndexIntoFile::IndexRunLumiKey, int>::iterator,
bool> lumiInsertResult;
363 item.setProcessHistoryIDIndex(phidIndexConverter.at(item.processHistoryIDIndex()));
367 runInsertResult = runOrderMap.insert(std::pair<IndexIntoFile::IndexRunKey, int>(runKey,0));
368 if(runInsertResult.second) {
369 runInsertResult.first->second = item.orderPHIDRun();
371 item.setOrderPHIDRun(runInsertResult.first->second);
375 if(item.lumi() != 0) {
377 lumiInsertResult = lumiOrderMap.insert(std::pair<IndexIntoFile::IndexRunLumiKey, int>(lumiKey,0));
378 if(lumiInsertResult.second) {
379 lumiInsertResult.first->second = item.orderPHIDRunLumi();
381 item.setOrderPHIDRunLumi(lumiInsertResult.first->second);
385 std::stable_sort(runOrLumiEntries_.begin(), runOrLumiEntries_.end());
391 std::map<int, int> oldToNewIndex;
396 std::vector<ProcessHistoryID>::const_iterator iterExisting =
397 std::find(processHistoryIDs.begin(), processHistoryIDs.end(), *iter);
398 if(iterExisting == processHistoryIDs.end()) {
400 processHistoryIDs.push_back(*iter);
402 oldToNewIndex[iter -
processHistoryIDs_.begin()] = iterExisting - processHistoryIDs.begin();
408 item.setProcessHistoryIDIndex(oldToNewIndex[item.processHistoryIDIndex()]);
414 std::map<IndexRunKey, EntryNumber_t>::const_iterator firstRunEntry =
418 <<
"In IndexIntoFile::sortVector_Run_Or_Lumi_Entries. A run entry is missing.\n" 419 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n" 420 <<
"The output file will be unusable for most purposes.\n" 421 <<
"If this occurs after an unrelated exception was thrown in\n" 422 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n" 423 <<
"the primary exception. This is an expected side effect.\n" 424 <<
"Otherwise please report this to the core framework developers\n";
426 item.setOrderPHIDRun(firstRunEntry->second);
433 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
434 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
437 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
440 if(beginOfLumi == iEnd)
break;
442 endOfLumi = beginOfLumi + 1;
443 while(endOfLumi != iEnd &&
444 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
445 beginOfLumi->run() == endOfLumi->run() &&
446 beginOfLumi->lumi() == endOfLumi->lumi()) {
449 assert(beginOfLumi->endEventNumbers() >= 0);
450 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventNumbers().size()));
452 eventNumbers().begin() + beginOfLumi->endEventNumbers());
453 beginOfLumi = endOfLumi;
459 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
460 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
463 while(beginOfLumi != iEnd && beginOfLumi->isRun()) {
466 if(beginOfLumi == iEnd)
break;
468 endOfLumi = beginOfLumi + 1;
469 while(endOfLumi != iEnd &&
470 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
471 beginOfLumi->run() == endOfLumi->run() &&
472 beginOfLumi->lumi() == endOfLumi->lumi()) {
475 assert(beginOfLumi->endEventNumbers() >= 0);
476 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventEntries().size()));
478 eventEntries().begin() + beginOfLumi->endEventNumbers());
479 beginOfLumi = endOfLumi;
485 return end(sortOrder);
513 if(it.getEntryType() ==
kEvent) {
514 if(it.entry() < maxEntry) {
517 maxEntry = it.entry();
531 bool lumiMissing = (lumi == 0 &&
event != 0);
533 std::vector<RunOrLumiIndexes>::const_iterator it;
534 std::vector<RunOrLumiIndexes>::const_iterator iEnd =
runOrLumiIndexes().end();
535 std::vector<RunOrLumiIndexes>::const_iterator phEnd;
543 phEnd = std::upper_bound(phBegin, iEnd, el,
Compare_Index());
545 std::vector<RunOrLumiIndexes>::const_iterator iRun = std::lower_bound(phBegin, phEnd, el,
Compare_Index_Run());
547 if(iRun == phEnd || iRun->run() !=
run)
continue;
562 std::vector<RunOrLumiIndexes>::const_iterator iRunEnd = std::upper_bound(iRun, phEnd, el,
Compare_Index_Run());
565 std::vector<RunOrLumiIndexes>::const_iterator iLumi = std::lower_bound(iRun, iRunEnd, el);
566 if(iLumi == iRunEnd || iLumi->lumi() !=
lumi)
continue;
581 long long beginEventNumbers = iLumi->beginEventNumbers();
582 long long endEventNumbers = iLumi->endEventNumbers();
583 if(beginEventNumbers >= endEventNumbers)
continue;
586 long long indexToEvent = 0;
588 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
592 eventIter->event() !=
event)
continue;
594 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
597 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
601 *eventIter != event)
continue;
603 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
612 endEventNumbers - beginEventNumbers);
616 std::vector<RunOrLumiIndexes>::const_iterator iLumi = iRun;
617 while(iLumi != iRunEnd && iLumi->lumi() ==
invalidLumi) {
620 if(iLumi == iRunEnd)
continue;
622 std::vector<RunOrLumiIndexes>::const_iterator lumiEnd;
628 lumiEnd = std::upper_bound(iLumi, iRunEnd, elWithLumi);
630 long long beginEventNumbers = iLumi->beginEventNumbers();
631 long long endEventNumbers = iLumi->endEventNumbers();
632 if(beginEventNumbers >= endEventNumbers)
continue;
634 long long indexToEvent = 0;
636 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
640 eventIter->event() !=
event)
continue;
641 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
644 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
648 *eventIter != event)
continue;
649 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
658 endEventNumbers - beginEventNumbers);
682 while(itr != itrEnd) {
697 if(eventNumber == event) {
782 while(iter1 != iEnd1 && iter1.
isRun()) ++iter1;
783 if(iter1 == iEnd1)
return;
786 while(iter2 != iEnd2 && iter2.
isRun()) ++iter2;
787 if(iter2 == iEnd2)
return;
793 while(iter1 != iEnd1 && iter2 != iEnd2) {
797 if(indexes1 < indexes2) {
799 }
else if(indexes2 < indexes1) {
804 if(indexes1.
isRun() ||
805 (previousIndexes && !(*previousIndexes < indexes1))) {
809 previousIndexes = &indexes1;
820 if((beginEventNumbers1 >= endEventNumbers1) ||
821 (beginEventNumbers2 >= endEventNumbers2)) {
828 std::vector<EventEntry> matchingEvents;
829 std::insert_iterator<std::vector<EventEntry> > insertIter(matchingEvents, matchingEvents.begin());
832 indexIntoFile.
eventEntries().begin() + beginEventNumbers2,
833 indexIntoFile.
eventEntries().begin() + endEventNumbers2,
844 std::vector<EventNumber_t> matchingEvents;
845 std::insert_iterator<std::vector<EventNumber_t> > insertIter(matchingEvents, matchingEvents.begin());
848 indexIntoFile.
eventNumbers().begin() + beginEventNumbers2,
849 indexIntoFile.
eventNumbers().begin() + endEventNumbers2,
869 iter != iEnd; ++iter) {
874 if(indexes.
isRun() ||
875 (previousIndexes && !(*previousIndexes < indexes))) {
878 previousIndexes = &indexes;
884 if(beginEventNumbers + 1 >= endEventNumbers)
continue;
887 std::vector<EventEntry>::iterator
last =
eventEntries().begin() + endEventNumbers;
888 if(std::adjacent_find(
eventEntries().
begin() + beginEventNumbers, last) != last) {
893 std::vector<EventNumber_t>::iterator
last =
eventNumbers().begin() + endEventNumbers;
894 if(std::adjacent_find(
eventNumbers().
begin() + beginEventNumbers, last) != last) {
934 int indexToGetEntry) :
938 indexToGetEntry_(indexToGetEntry),
939 beginEventNumbers_(-1),
945 indexIntoFile_(indexIntoFile), runOrLumi_(runOrLumi) {
972 long long & endEventNumbers,
992 int indexToEventRange,
993 long long indexToEvent,
998 indexToRun_(indexToRun),
999 indexToLumi_(indexToLumi),
1000 indexToEventRange_(indexToEventRange),
1001 indexToEvent_(indexToEvent),
1045 }
else if(nextType ==
kRun) {
1057 if(nextType ==
kRun && sameRun) {
1059 }
else if(nextType ==
kRun && !sameRun) {
1062 }
else if(nextType ==
kLumi) {
1076 runOfSkippedEvent =
run();
1100 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1109 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1122 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1175 if(newLumi <= 0)
return false;
1178 for( ; newLumi > 0; --newLumi) {
1186 if(newLumi == 0)
return false;
1200 int newRun = newLumi;
1221 long long saveNEvents =
nEvents();
1248 long long saveNEvents =
nEvents();
1294 for(
int i = 1; startSearch +
i <
size_; ++
i) {
1310 for(
int i = 1; startSearch +
i <
size_; ++
i) {
1350 if(entryType ==
kRun) {
1557 if(index < 0 || index >=
size()) {
1566 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1574 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1629 long long eventNumberIndex =
1644 long long eventNumberIndex =
1672 long long nEventsInRange =
1675 if(nEventsInRange == 0) {
1683 assert(nEventsInRange ==
1712 if(index < 0 || index >=
size()) {
1721 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1729 if(index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1779 entryType !=
kEnd && entryType !=
kLumi;
1792 return lh.
run() < rh.
run();
void initializeRun()
Should only be used internally and for tests.
virtual bool nextEventRange()
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
virtual EntryNumber_t entry() const
virtual bool isSameLumi(int index1, int index2) const =0
EntryNumber_t peekAheadAtEventEntry() const
void setIndexToLumi(int value)
EntryNumber_t endEvents() const
void doneFileInitialization() const
Clears the temporary vector of event numbers to reduce memory usage.
static int const invalidIndex
virtual LuminosityBlockNumber_t lumi() const
virtual EntryNumber_t peekAheadAtEventEntry() const
virtual EntryNumber_t entry() const
IndexIntoFile const * indexIntoFile() const
virtual bool isSameRun(int index1, int index2) const
LuminosityBlockNumber_t currentLumi_
bool skipToNextEventInLumi()
virtual bool previousEventRange()=0
std::vector< EventEntry > & eventEntries() const
virtual bool nextEventRange()=0
EntryNumber_t beginEvents() const
virtual bool skipLumiInRun()
void advanceToNextLumiOrRun()
std::vector< EventNumber_t > eventNumbers_
virtual EntryType getRunOrLumiEntryType(int index) const
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
virtual LuminosityBlockNumber_t peekAheadAtLumi() const
EntryType getEntryType() const
EntryNumber_t beginEvents_
virtual bool setToLastEventInRange(int index)
virtual bool nextEventRange()
virtual RunNumber_t run() const
virtual void initializeLumi_()
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
IndexIntoFileItr begin(SortOrder sortOrder) const
IndexIntoFile const * indexIntoFile_
void swap(Hash< I > &other)
LuminosityBlockNumber_t lumi() const
std::vector< RunOrLumiEntry > const & runOrLumiEntries() const
Used internally and for test purposes.
void stable_sort_all(RandomAccessSequence &s)
wrappers for std::stable_sort
virtual int processHistoryIDIndex() const
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)
void setIndexToEventRange(int value)
virtual IndexIntoFileItrImpl * clone() const
virtual ~IndexIntoFileItrImpl()
unsigned int LuminosityBlockNumber_t
IndexIntoFileItr findRunPosition(RunNumber_t run) const
Same as findPosition.
std::vector< ProcessHistoryID > const & processHistoryIDs() const
static EventNumber_t const invalidEvent
void swap(Association< C > &lhs, Association< C > &rhs)
long long beginEventNumbers() const
std::map< IndexRunLumiKey, EntryNumber_t > lumiToFirstEntry_
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)
size_t numberOfEvents() const
void reduceProcessHistoryIDs(ProcessHistoryRegistry const &processHistoryRegistry)
IndexIntoFile const * indexIntoFile() const
int & currentIndex() const
RunOrLumiIndexes(int processHistoryIDIndex, RunNumber_t run, LuminosityBlockNumber_t lumi, int indexToGetEntry)
long long indexToEvent() const
double intersection(double r12)
static RunNumber_t const 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_
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_
void fillEventEntries() const
IndexIntoFileItrImpl(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual EntryNumber_t peekAheadAtEventEntry() const
virtual bool skipLumiInRun()=0
void fillRunOrLumiIndexes() const
std::map< IndexRunKey, EntryNumber_t > runToFirstEntry_
virtual bool isSameRun(int index1, int index2) const
bool operator==(IndexIntoFileItrImpl const &right) const
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.
virtual IndexIntoFileItrImpl * clone() const
virtual bool skipLumiInRun()
ProcessHistoryID const & reducedProcessHistoryID(ProcessHistoryID const &fullID) const
virtual EntryType getRunOrLumiEntryType(int index) const =0
virtual RunNumber_t run() const
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 containsItem(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
void inputFileClosed() const
void fixIndexes(std::vector< ProcessHistoryID > &processHistoryIDs)
void resetEventFinder() const
std::map< IndexRunKey, EntryNumber_t > & runToFirstEntry() const
std::vector< EventNumber_t > & unsortedEventNumbers() const
static EntryNumber_t const invalidEntry
virtual bool isSameLumi(int index1, int index2) const
virtual EntryType getRunOrLumiEntryType(int index) const
IndexIntoFileItrSorted(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual LuminosityBlockNumber_t peekAheadAtLumi() const
virtual RunNumber_t run() const =0
static LuminosityBlockNumber_t const 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
EntryNumber_t firstEventEntryThisRun()
void copyPosition(IndexIntoFileItrImpl const &position)
std::vector< EventEntry > eventEntries_
virtual bool previousEventRange()
EventNumber_t getEventNumberOfEntry(EntryNumber_t entry) const
virtual int processHistoryIDIndex() const
virtual LuminosityBlockNumber_t lumi() const
void fillEventNumbers() const
static int position[264][3]
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()
std::map< IndexRunLumiKey, EntryNumber_t > & lumiToFirstEntry() const
virtual bool previousEventRange()
bool containsRun(RunNumber_t run) const
EntryNumber_t orderPHIDRunLumi_
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
virtual bool setToLastEventInRange(int index)
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)
virtual void initializeLumi_()
edm::propagate_const< std::shared_ptr< EventFinder > > eventFinder_
RunOrLumiIndexes const & runOrLumiIndexes() const