9c316b6992fbb751d2d46b5c5ca06229045c5d5b angie Fri Oct 11 14:58:03 2013 -0700 qTail->start should be compared to region end only when it's on the same chrom. diff --git src/lib/annoGrator.c src/lib/annoGrator.c index 1282d5e..11f0ce8 100644 --- src/lib/annoGrator.c +++ src/lib/annoGrator.c @@ -60,31 +60,32 @@ if (cDifNewTail < 0) errAbort("annoGrator %s: Unsorted input from internal source %s (%s < %s)", self->streamer.name, self->mySource->name, newRow->chrom, self->qTail->chrom); else if (cDifNewTail == 0 && newRow->start < self->qTail->start) errAbort("annoGrator %s: Unsorted input from internal source %s (%s, %u < %u)", self->streamer.name, self->mySource->name, newRow->chrom, newRow->start, self->qTail->start); } } INLINE void agFetchToEnd(struct annoGrator *self, char *chrom, uint start, uint end) /* Fetch rows until we are sure we have all items that start to the left of end, * i.e. we have an item that starts at/after end or we hit eof. */ { while (!self->eof && - (self->qTail == NULL || strcmp(self->qTail->chrom, chrom) < 0 || self->qTail->start < end)) + (self->qTail == NULL || strcmp(self->qTail->chrom, chrom) < 0 || + (sameString(self->qTail->chrom, chrom) && self->qTail->start < end))) { struct annoRow *newRow = self->mySource->nextRow(self->mySource, chrom, start, self->qLm); if (newRow == NULL) self->eof = TRUE; else { agCheckInternalSorting(self, newRow); int cDifNewP = strcmp(newRow->chrom, chrom); if (cDifNewP >= 0) { // Add newRow to qTail if (self->qTail == NULL) { if (self->qHead != NULL) errAbort("annoGrator %s: qTail is NULL but qHead is non-NULL",