void BcfReaderSeek(WiggleIterator * wi, const char * chrom, int start, int finish) { BCFReaderData * data = (BCFReaderData *) wi->data; killBufferedReader(data->bufferedReaderData); data->tabix_iterator = ti_query(data->tabix_file, chrom, start, finish); launchBufferedReader(&downloadTabixFile, data, &(data->bufferedReaderData)); wi->done = false; BCFReaderPop(wi); while (!wi->done && (strcmp(wi->chrom, chrom) < 0 || (strcmp(chrom, wi->chrom) == 0 && wi->finish <= start))) BCFReaderPop(wi); data->chrom = chrom; data->stop = finish; }
void BigBedReaderSeek(WiggleIterator * wi, const char * chrom, int start, int finish) { BigBedReaderData * data = (BigBedReaderData *) wi->data; if (data->bufferedReaderData) { killBufferedReader(data->bufferedReaderData); free(data->bufferedReaderData); data->bufferedReaderData = NULL; } data->chrom = chrom; data->start = start; data->stop = finish; launchBufferedReader(&readBigBed, data, &(data->bufferedReaderData)); wi->done = false; BigBedReaderPop(wi); while (!wi->done && (strcmp(wi->chrom, chrom) < 0 || (strcmp(chrom, wi->chrom) == 0 && wi->finish <= start))) BigBedReaderPop(wi); if (!wi->done && strcmp(chrom, wi->chrom) == 0 && wi->start < start) wi->start = start; }
void BamReaderSeek(WiggleIterator * wi, const char * chrom, int start, int finish) { BamReaderData * data = (BamReaderData *) wi->data; char region[1000]; if (data->bufferedReaderData) { killBufferedReader(data->bufferedReaderData); free(data->bufferedReaderData); data->bufferedReaderData = NULL; } data->chrom = chrom; data->stop = finish; sprintf(region, "%s:%i-%i", chrom, start, finish); data->conf->reg = region; seekRegion(data); launchBufferedReader(&downloadBamFile, data, &(data->bufferedReaderData)); wi->done = false; BamReaderPop(wi); while (!wi->done && (strcmp(wi->chrom, chrom) < 0 || (strcmp(wi->chrom, chrom) == 0 && wi->finish <= start))) BamReaderPop(wi); }