66 <<
"In IndexIntoFile::addEntry. Entries were added in illegal order.\n"
67 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n"
68 <<
"The output file will be unusable for most purposes.\n"
69 <<
"If this occurs after an unrelated exception was thrown in\n"
70 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n"
71 <<
"the primary exception. This is an expected side effect.\n"
72 <<
"Otherwise please report this to the core framework developers\n";
77 std::pair<IndexRunKey, EntryNumber_t> firstRunEntry(
IndexRunKey(index, run), entry);
90 std::pair<IndexRunLumiKey, EntryNumber_t> firstLumiEntry(
IndexRunLumiKey(index, run, lumi), entry);
121 for (std::vector<RunOrLumiEntry>::const_iterator iter =
runOrLumiEntries_.begin(),
132 long long beginEventNumbers = 0;
134 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
135 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
138 while (beginOfLumi != iEnd && beginOfLumi->isRun()) {
141 if (beginOfLumi == iEnd)
break;
143 endOfLumi = beginOfLumi + 1;
144 while (endOfLumi != iEnd &&
145 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
146 beginOfLumi->run() == endOfLumi->run() &&
147 beginOfLumi->lumi() == endOfLumi->lumi()) {
151 for (std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
159 for (std::vector<RunOrLumiIndexes>::iterator iter = beginOfLumi;
162 iter->setBeginEventNumbers(beginEventNumbers);
163 iter->setEndEventNumbers(beginEventNumbers + nEvents);
166 beginOfLumi = endOfLumi;
188 needEventNumbers =
false;
192 needEventEntries =
false;
204 if (!needEventNumbers && !needEventEntries) {
210 if (needEventNumbers) {
213 if (needEventEntries) {
218 long long previousBeginEventNumbers = -1LL;
221 runOrLumi != runOrLumiEnd; ++runOrLumi) {
223 if (runOrLumi.isRun())
continue;
225 long long beginEventNumbers = 0;
226 long long endEventNumbers = 0;
229 runOrLumi.getRange(beginEventNumbers, endEventNumbers, beginEventEntry, endEventEntry);
233 if (beginEventNumbers != previousBeginEventNumbers) offset = 0;
236 if (needEventNumbers) {
239 if (needEventEntries) {
245 previousBeginEventNumbers = beginEventNumbers;
246 offset += endEventEntry - beginEventEntry;
248 if (needEventNumbers) {
252 if (needEventEntries) {
295 std::map<int, int> oldToNewIndex;
300 std::vector<ProcessHistoryID>::const_iterator iterExisting =
301 std::find(processHistoryIDs.begin(), processHistoryIDs.end(), *iter);
302 if (iterExisting == processHistoryIDs.end()) {
304 processHistoryIDs.push_back(*iter);
307 oldToNewIndex[iter -
processHistoryIDs_.begin()] = iterExisting - processHistoryIDs.begin();
316 iter->setProcessHistoryIDIndex(oldToNewIndex[iter->processHistoryIDIndex()]);
325 std::map<IndexRunKey, EntryNumber_t>::const_iterator firstRunEntry =
329 <<
"In IndexIntoFile::sortVector_Run_Or_Lumi_Entries. A run entry is missing.\n"
330 <<
"This means the IndexIntoFile product in the output file will be corrupted.\n"
331 <<
"The output file will be unusable for most purposes.\n"
332 <<
"If this occurs after an unrelated exception was thrown in\n"
333 <<
"endLuminosityBlock or endRun then ignore this exception and fix\n"
334 <<
"the primary exception. This is an expected side effect.\n"
335 <<
"Otherwise please report this to the core framework developers\n";
337 iter->setOrderPHIDRun(firstRunEntry->second);
344 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
345 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
348 while (beginOfLumi != iEnd && beginOfLumi->isRun()) {
351 if (beginOfLumi == iEnd)
break;
353 endOfLumi = beginOfLumi + 1;
354 while (endOfLumi != iEnd &&
355 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
356 beginOfLumi->run() == endOfLumi->run() &&
357 beginOfLumi->lumi() == endOfLumi->lumi()) {
360 assert(beginOfLumi->endEventNumbers() >= 0);
361 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventNumbers().size()));
363 eventNumbers().begin() + beginOfLumi->endEventNumbers());
364 beginOfLumi = endOfLumi;
370 std::vector<RunOrLumiIndexes>::iterator beginOfLumi =
runOrLumiIndexes().begin();
371 std::vector<RunOrLumiIndexes>::iterator endOfLumi = beginOfLumi;
374 while (beginOfLumi != iEnd && beginOfLumi->isRun()) {
377 if (beginOfLumi == iEnd)
break;
379 endOfLumi = beginOfLumi + 1;
380 while (endOfLumi != iEnd &&
381 beginOfLumi->processHistoryIDIndex() == endOfLumi->processHistoryIDIndex() &&
382 beginOfLumi->run() == endOfLumi->run() &&
383 beginOfLumi->lumi() == endOfLumi->lumi()) {
386 assert(beginOfLumi->endEventNumbers() >= 0);
387 assert(beginOfLumi->endEventNumbers() <=
static_cast<long long>(
eventEntries().size()));
389 eventEntries().begin() + beginOfLumi->endEventNumbers());
390 beginOfLumi = endOfLumi;
396 return end(sortOrder);
424 if(it.getEntryType() ==
kEvent) {
425 if(it.entry() < maxEntry) {
428 maxEntry = it.entry();
442 bool lumiMissing = (lumi == 0 &&
event != 0);
444 std::vector<RunOrLumiIndexes>::const_iterator it;
445 std::vector<RunOrLumiIndexes>::const_iterator iEnd =
runOrLumiIndexes().end();
446 std::vector<RunOrLumiIndexes>::const_iterator phEnd;
454 phEnd = std::upper_bound(phBegin, iEnd, el,
Compare_Index());
456 std::vector<RunOrLumiIndexes>::const_iterator iRun = std::lower_bound(phBegin, phEnd, el,
Compare_Index_Run());
458 if (iRun == phEnd || iRun->run() !=
run)
continue;
473 std::vector<RunOrLumiIndexes>::const_iterator iRunEnd = std::upper_bound(iRun, phEnd, el,
Compare_Index_Run());
476 std::vector<RunOrLumiIndexes>::const_iterator iLumi = std::lower_bound(iRun, iRunEnd, el);
477 if (iLumi == iRunEnd || iLumi->lumi() !=
lumi)
continue;
492 long long beginEventNumbers = iLumi->beginEventNumbers();
493 long long endEventNumbers = iLumi->endEventNumbers();
494 if (beginEventNumbers >= endEventNumbers)
continue;
497 long long indexToEvent = 0;
499 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
503 eventIter->event() !=
event)
continue;
505 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
508 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
512 *eventIter != event)
continue;
514 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
523 endEventNumbers - beginEventNumbers);
527 std::vector<RunOrLumiIndexes>::const_iterator iLumi = iRun;
528 while (iLumi != iRunEnd && iLumi->lumi() ==
invalidLumi) {
531 if (iLumi == iRunEnd)
continue;
533 std::vector<RunOrLumiIndexes>::const_iterator lumiEnd;
539 lumiEnd = std::upper_bound(iLumi, iRunEnd, elWithLumi);
541 long long beginEventNumbers = iLumi->beginEventNumbers();
542 long long endEventNumbers = iLumi->endEventNumbers();
543 if (beginEventNumbers >= endEventNumbers)
continue;
545 long long indexToEvent = 0;
547 std::vector<EventEntry>::const_iterator eventIter = std::lower_bound(
eventEntries().
begin() + beginEventNumbers,
551 eventIter->event() !=
event)
continue;
552 indexToEvent = eventIter -
eventEntries().begin() - beginEventNumbers;
555 std::vector<EventNumber_t>::const_iterator eventIter = std::lower_bound(
eventNumbers().
begin() + beginEventNumbers,
559 *eventIter != event)
continue;
560 indexToEvent = eventIter -
eventNumbers().begin() - beginEventNumbers;
569 endEventNumbers - beginEventNumbers);
593 while (itr != itrEnd) {
612 if (eventNumber == event) {
698 while (iter1 != iEnd1 && iter1.
isRun()) ++iter1;
699 if (iter1 == iEnd1)
return;
702 while (iter2 != iEnd2 && iter2.
isRun()) ++iter2;
703 if (iter2 == iEnd2)
return;
709 while (iter1 != iEnd1 && iter2 != iEnd2) {
713 if (indexes1 < indexes2) {
716 else if (indexes2 < indexes1) {
722 if (indexes1.
isRun() ||
723 (previousIndexes && !(*previousIndexes < indexes1))) {
728 previousIndexes = &indexes1;
739 if ((beginEventNumbers1 >= endEventNumbers1) ||
740 (beginEventNumbers2 >= endEventNumbers2)) {
747 std::vector<EventEntry> matchingEvents;
748 std::insert_iterator<std::vector<EventEntry> > insertIter(matchingEvents, matchingEvents.begin());
751 indexIntoFile.
eventEntries().begin() + beginEventNumbers2,
752 indexIntoFile.
eventEntries().begin() + endEventNumbers2,
754 for (std::vector<EventEntry>::const_iterator
iEvent = matchingEvents.begin(),
755 iEnd = matchingEvents.end();
765 std::vector<EventNumber_t> matchingEvents;
766 std::insert_iterator<std::vector<EventNumber_t> > insertIter(matchingEvents, matchingEvents.begin());
769 indexIntoFile.
eventNumbers().begin() + beginEventNumbers2,
770 indexIntoFile.
eventNumbers().begin() + endEventNumbers2,
772 for (std::vector<EventNumber_t>::const_iterator
iEvent = matchingEvents.begin(),
773 iEnd = matchingEvents.end();
792 iter != iEnd; ++iter) {
797 if (indexes.
isRun() ||
798 (previousIndexes && !(*previousIndexes < indexes))) {
801 previousIndexes = &indexes;
807 if (beginEventNumbers + 1 >= endEventNumbers)
continue;
810 std::vector<EventEntry>::iterator
last =
eventEntries().begin() + endEventNumbers;
811 if (std::adjacent_find(
eventEntries().
begin() + beginEventNumbers, last) != last) {
816 std::vector<EventNumber_t>::iterator
last =
eventNumbers().begin() + endEventNumbers;
817 if (std::adjacent_find(
eventNumbers().
begin() + beginEventNumbers, last) != last) {
826 orderPHIDRun_(invalidEntry),
827 orderPHIDRunLumi_(invalidEntry),
828 entry_(invalidEntry),
829 processHistoryIDIndex_(invalidIndex),
832 beginEvents_(invalidEntry),
833 endEvents_(invalidEntry) {
839 int processHistoryIDIndex,
844 orderPHIDRun_(orderPHIDRun),
845 orderPHIDRunLumi_(orderPHIDRunLumi),
847 processHistoryIDIndex_(processHistoryIDIndex),
850 beginEvents_(beginEvents),
851 endEvents_(endEvents) {
857 int indexToGetEntry) :
858 processHistoryIDIndex_(processHistoryIDIndex),
861 indexToGetEntry_(indexToGetEntry),
862 beginEventNumbers_(-1),
868 indexIntoFile_(indexIntoFile), runOrLumi_(runOrLumi) {
884 if (runOrLumi_ != indexIntoFile_->runOrLumiEntries().size()) {
891 return indexIntoFile_->runOrLumiIndexes().at(runOrLumi_).lumi() ==
invalidLumi;
895 long long & endEventNumbers,
898 beginEventNumbers = indexIntoFile_->runOrLumiIndexes().at(runOrLumi_).beginEventNumbers();
899 endEventNumbers = indexIntoFile_->runOrLumiIndexes().at(runOrLumi_).endEventNumbers();
901 int indexToGetEntry = indexIntoFile_->runOrLumiIndexes().at(runOrLumi_).indexToGetEntry();
902 beginEventEntry = indexIntoFile_->runOrLumiEntries_.at(indexToGetEntry).beginEvents();
903 endEventEntry = indexIntoFile_->runOrLumiEntries_.at(indexToGetEntry).endEvents();
908 return indexIntoFile_->runOrLumiIndexes().at(runOrLumi_);
915 int indexToEventRange,
916 long long indexToEvent,
918 indexIntoFile_(indexIntoFile),
921 indexToRun_(indexToRun),
922 indexToLumi_(indexToLumi),
923 indexToEventRange_(indexToEventRange),
924 indexToEvent_(indexToEvent),
933 if ((indexToEvent_ + 1) < nEvents_) {
937 bool found = nextEventRange();
940 type_ = getRunOrLumiEntryType(indexToLumi_ + 1);
942 if (type_ ==
kLumi) {
946 else if (type_ ==
kRun) {
947 indexToRun_ = indexToLumi_ + 1;
956 else if (type_ ==
kLumi) {
958 if (indexToLumi_ + 1 == size_) {
959 if (indexToEvent_ < nEvents_) {
968 EntryType nextType = getRunOrLumiEntryType(indexToLumi_ + 1);
970 if (nextType ==
kLumi && isSameLumi(indexToLumi_, indexToLumi_ + 1)) {
973 else if (indexToEvent_ < nEvents_) {
976 else if (nextType ==
kRun) {
978 indexToRun_ = indexToLumi_ + 1;
987 else if (type_ ==
kRun) {
988 EntryType nextType = getRunOrLumiEntryType(indexToRun_ + 1);
989 bool sameRun = isSameRun(indexToRun_, indexToRun_ + 1);
990 if (nextType ==
kRun && sameRun) {
993 else if (nextType ==
kRun && !sameRun) {
997 else if (nextType ==
kLumi) {
1010 if (indexToEvent_ < nEvents_) {
1011 phIndexOfSkippedEvent = processHistoryIDIndex();
1012 runOfSkippedEvent =
run();
1013 lumiOfSkippedEvent = peekAheadAtLumi();
1014 skippedEventEntry = peekAheadAtEventEntry();
1016 if ((indexToEvent_ + 1) < nEvents_) {
1020 else if (nextEventRange()) {
1023 else if (type_ ==
kRun || type_ ==
kLumi) {
1024 if (skipLumiInRun()) {
1028 else if (type_ ==
kEvent) {
1036 if (type_ ==
kRun) {
1037 while (skipLumiInRun()) {
1038 if (indexToEvent_ < nEvents_) {
1039 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1045 while (indexToEvent_ >= nEvents_ && type_ !=
kEnd) {
1046 while (skipLumiInRun()) {
1047 if (indexToEvent_ < nEvents_) {
1048 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1054 if (type_ ==
kEnd) {
1061 skipEventForward(phIndexOfSkippedEvent, runOfSkippedEvent, lumiOfSkippedEvent, skippedEventEntry);
1070 if (indexToEvent_ > 0) {
1073 else if (!previousEventRange()) {
1076 if (!previousLumiWithEvents()) {
1080 if (!indexIntoFile_->empty()) {
1097 phIndexOfEvent = processHistoryIDIndex();
1099 lumiOfEvent = peekAheadAtLumi();
1100 eventEntry = peekAheadAtEventEntry();
1105 int newLumi = indexToLumi();
1110 while (getRunOrLumiEntryType(newLumi - 1) ==
kLumi &&
1111 isSameLumi(newLumi, newLumi - 1)) {
1116 if (newLumi <= 0)
return false;
1119 for ( ; newLumi > 0; --newLumi) {
1120 if (getRunOrLumiEntryType(newLumi) ==
kRun) {
1123 if (setToLastEventInRange(newLumi)) {
1127 if (newLumi == 0)
return false;
1130 while (getRunOrLumiEntryType(newLumi - 1) ==
kLumi &&
1131 isSameLumi(newLumi, newLumi - 1)) {
1134 setIndexToLumi(newLumi);
1137 isSameRun(newLumi, indexToRun())) {
1141 int newRun = newLumi;
1142 while (newRun > 0 && getRunOrLumiEntryType(newRun - 1) ==
kLumi) {
1146 assert(getRunOrLumiEntryType(newRun) ==
kRun);
1147 while (getRunOrLumiEntryType(newRun - 1) ==
kRun &&
1148 isSameRun(newRun - 1, newLumi)) {
1151 indexToRun_ = newRun;
1157 if (type_ ==
kEnd)
return;
1158 for (
int i = 1; indexToRun_ +
i < size_; ++
i) {
1159 if (getRunOrLumiEntryType(indexToRun_ +
i) ==
kRun) {
1160 if (!isSameRun(indexToRun_, indexToRun_ +
i)) {
1172 if (type_ ==
kEnd)
return;
1178 int startSearch = indexToRun_;
1179 for (
int i = 1; startSearch +
i < size_; ++
i) {
1180 if (getRunOrLumiEntryType(startSearch +
i) ==
kRun &&
1181 isSameRun(indexToRun_, startSearch +
i)) {
1182 indexToRun_ = startSearch +
i;
1194 startSearch = indexToLumi_;
1195 if (startSearch ==
invalidIndex) startSearch = indexToRun_;
1196 for (
int i = 1; startSearch +
i < size_; ++
i) {
1197 if (getRunOrLumiEntryType(startSearch +
i) ==
kRun) {
1198 if (!isSameRun(indexToRun_, startSearch +
i)) {
1200 indexToRun_ = startSearch +
i;
1206 if (!isSameLumi(indexToLumi_, startSearch +
i)) {
1208 indexToLumi_ = startSearch +
i;
1218 if (indexToEvent_ >= nEvents_)
return false;
1219 if ((indexToEvent_ + 1) < nEvents_) {
1223 return nextEventRange();
1233 for (
int i = 1; (
i + indexToRun_) < size_; ++
i) {
1234 EntryType entryType = getRunOrLumiEntryType(indexToRun_ +
i);
1235 bool sameRun = isSameRun(indexToRun_, indexToRun_ +
i);
1237 if (entryType ==
kRun) {
1246 indexToLumi_ = indexToRun_ +
i;
1255 size_ == right.
size_ &&
1256 type_ == right.
type_ &&
1266 type_ = position.
type_;
1287 int indexToEventRange,
1288 long long indexToEvent,
1308 return indexIntoFile()->runOrLumiEntries()[indexToRun()].processHistoryIDIndex();
1313 return indexIntoFile()->runOrLumiEntries()[indexToRun()].run();
1318 return indexIntoFile()->runOrLumiEntries()[indexToLumi()].lumi();
1323 if (
type() ==
kRun)
return indexIntoFile()->runOrLumiEntries()[indexToRun()].entry();
1324 if (
type() ==
kLumi)
return indexIntoFile()->runOrLumiEntries()[indexToLumi()].entry();
1326 indexIntoFile()->runOrLumiEntries()[indexToEventRange()].beginEvents() +
1332 return indexIntoFile()->runOrLumiEntries()[indexToLumi()].lumi();
1339 indexIntoFile()->runOrLumiEntries()[indexToEventRange()].beginEvents() +
1350 for (
int i = 0; indexToLumi() +
i <
size(); ++
i) {
1351 if (indexIntoFile()->runOrLumiEntries()[indexToLumi() +
i].isRun()) {
1354 else if (indexIntoFile()->runOrLumiEntries()[indexToLumi() +
i].lumi() ==
1355 indexIntoFile()->runOrLumiEntries()[indexToLumi()].lumi()) {
1356 if (indexIntoFile()->runOrLumiEntries()[indexToLumi() +
i].beginEvents() ==
invalidEntry) {
1359 setIndexToEventRange(indexToLumi() +
i);
1375 for(
int i = 1; indexToEventRange() +
i <
size(); ++
i) {
1376 if (indexIntoFile()->runOrLumiEntries()[indexToEventRange() +
i ].isRun()) {
1379 else if (indexIntoFile()->runOrLumiEntries()[indexToEventRange() +
i].lumi() ==
1380 indexIntoFile()->runOrLumiEntries()[indexToEventRange()].lumi()) {
1381 if (indexIntoFile()->runOrLumiEntries()[indexToEventRange() +
i].beginEvents() ==
invalidEntry) {
1384 setIndexToEventRange(indexToEventRange() +
i);
1397 assert(indexToEventRange() <
size());
1400 for(
int i = 1; indexToEventRange() -
i > 0; ++
i) {
1401 int newRange = indexToEventRange() -
i;
1405 else if (isSameLumi(newRange, indexToEventRange())) {
1409 setIndexToEventRange(newRange);
1412 setIndexToEvent(
nEvents() - 1);
1424 setIndexToEventRange(index);
1428 setIndexToEvent(
nEvents() - 1);
1434 for(
int i = 1; indexToLumi() +
i <
size(); ++
i) {
1435 int newLumi = indexToLumi() +
i;
1443 setIndexToLumi(newLumi);
1451 if (index < 0 || index >=
size()) {
1461 if (index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1464 return indexIntoFile()->runOrLumiEntries()[index1].lumi() ==
1465 indexIntoFile()->runOrLumiEntries()[index2].lumi();
1469 if (index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1472 return indexIntoFile()->runOrLumiEntries()[index1].run() ==
1473 indexIntoFile()->runOrLumiEntries()[index2].run() &&
1474 indexIntoFile()->runOrLumiEntries()[index1].processHistoryIDIndex() ==
1475 indexIntoFile()->runOrLumiEntries()[index2].processHistoryIDIndex();
1482 int indexToEventRange,
1483 long long indexToEvent,
1501 return indexIntoFile()->runOrLumiIndexes()[indexToRun()].processHistoryIDIndex();
1506 return indexIntoFile()->runOrLumiIndexes()[indexToRun()].run();
1511 return indexIntoFile()->runOrLumiIndexes()[indexToLumi()].lumi();
1517 int i = indexIntoFile()->runOrLumiIndexes()[indexToRun()].indexToGetEntry();
1518 return indexIntoFile()->runOrLumiEntries()[
i].entry();
1521 int i = indexIntoFile()->runOrLumiIndexes()[indexToLumi()].indexToGetEntry();
1522 return indexIntoFile()->runOrLumiEntries()[
i].entry();
1524 long long eventNumberIndex =
1525 indexIntoFile()->runOrLumiIndexes()[indexToEventRange()].beginEventNumbers() +
1527 indexIntoFile()->fillEventEntries();
1528 return indexIntoFile()->eventEntries().at(eventNumberIndex).entry();
1533 return indexIntoFile()->runOrLumiIndexes()[indexToLumi()].lumi();
1539 long long eventNumberIndex =
1540 indexIntoFile()->runOrLumiIndexes()[indexToEventRange()].beginEventNumbers() +
1542 indexIntoFile()->fillEventEntries();
1543 return indexIntoFile()->eventEntries().at(eventNumberIndex).entry();
1548 setIndexToEventRange(indexToLumi());
1567 long long nEventsInRange =
1568 indexIntoFile()->runOrLumiIndexes()[
index].endEventNumbers() -
1569 indexIntoFile()->runOrLumiIndexes()[
index].beginEventNumbers();
1570 if (nEventsInRange == 0) {
1575 isSameLumi(index, index - 1)) {
1578 assert(nEventsInRange ==
1582 setIndexToEventRange(index);
1583 setNEvents(nEventsInRange);
1585 setIndexToEvent(nEventsInRange - 1);
1591 for(
int i = 1; indexToLumi() +
i <
size(); ++
i) {
1592 int newLumi = indexToLumi() +
i;
1600 setIndexToLumi(newLumi);
1608 if (index < 0 || index >=
size()) {
1618 if (index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1621 return indexIntoFile()->runOrLumiIndexes()[index1].lumi() ==
1622 indexIntoFile()->runOrLumiIndexes()[index2].lumi();
1626 if (index1 < 0 || index1 >=
size() || index2 < 0 || index2 >=
size()) {
1629 return indexIntoFile()->runOrLumiIndexes()[index1].run() ==
1630 indexIntoFile()->runOrLumiIndexes()[index2].run() &&
1631 indexIntoFile()->runOrLumiIndexes()[index1].processHistoryIDIndex() ==
1632 indexIntoFile()->runOrLumiIndexes()[index2].processHistoryIDIndex();
1640 int indexToEventRange,
1641 long long indexToEvent,
1668 for (
EntryType entryType = getEntryType();
1670 entryType = getEntryType()) {
1676 for (
EntryType entryType = getEntryType();
1677 entryType !=
kEnd && entryType !=
kLumi;
1678 entryType = getEntryType()) {
1685 impl_->copyPosition(*position.
impl_);
1690 lumiToFirstEntry_(),
1698 runOrLumiIndexes_(),
1701 unsortedEventNumbers_() {
1706 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
virtual bool isSameLumi(int index1, int index2) const
virtual EntryNumber_t entry() const
EntryNumber_t peekAheadAtEventEntry() 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
virtual bool isSameRun(int index1, int index2) const
bool skipToNextEventInLumi()
unsigned int EventNumber_t
std::vector< EventEntry > & eventEntries() const
virtual bool skipLumiInRun()
void advanceToNextLumiOrRun()
virtual EntryType getRunOrLumiEntryType(int index) const
SortedRunOrLumiItr beginRunOrLumi() const
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
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
std::vector< RunOrLumiIndexes > & runOrLumiIndexes() const
void fillUnsortedEventNumbers() const
IndexIntoFileItr begin(SortOrder sortOrder) const
IndexIntoFile const * indexIntoFile_
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
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
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 int position[TOTALCHAMBERS][3]
static EventNumber_t const invalidEvent
void swap(Association< C > &lhs, Association< C > &rhs)
long long beginEventNumbers() const
IndexIntoFileItr findPosition(RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
int & previousAddedIndex() const
void sortVector_Run_Or_Lumi_Entries()
size_t numberOfEvents() const
IndexIntoFile const * indexIntoFile() const
int & currentIndex() const
RunOrLumiIndexes(int processHistoryIDIndex, RunNumber_t run, LuminosityBlockNumber_t lumi, int indexToGetEntry)
double intersection(double r12)
static RunNumber_t const invalidRun
void skipEventBackward(int &phIndexOfEvent, RunNumber_t &runOfEvent, LuminosityBlockNumber_t &lumiOfEvent, EntryNumber_t &eventEntry)
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.
void skipEventForward(int &phIndexOfSkippedEvent, RunNumber_t &runOfSkippedEvent, LuminosityBlockNumber_t &lumiOfSkippedEvent, EntryNumber_t &skippedEventEntry)
std::vector< ProcessHistoryID > processHistoryIDs_
std::pair< std::string, MonitorElement * > entry
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
void fillRunOrLumiIndexes() const
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()
virtual RunNumber_t run() const
unsigned int offset(bool)
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)
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
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
void copyPosition(IndexIntoFileItrImpl const &position)
virtual bool previousEventRange()
EventNumber_t getEventNumberOfEntry(EntryNumber_t entry) const
virtual int processHistoryIDIndex() const
virtual LuminosityBlockNumber_t lumi() const
void fillEventNumbers() 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
IndexIntoFileItr(IndexIntoFile const *indexIntoFile, SortOrder sortOrder, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
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
IndexIntoFileItr findEventPosition(RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event) const
virtual bool setToLastEventInRange(int index)
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
value_ptr< IndexIntoFileItrImpl > impl_
tuple size
Write out results.
IndexIntoFileItrNoSort(IndexIntoFile const *indexIntoFile, EntryType entryType, int indexToRun, int indexToLumi, int indexToEventRange, long long indexToEvent, long long nEvents)
virtual void initializeLumi_()
RunOrLumiIndexes const & runOrLumiIndexes() const