6697f821c6b91c2e0c069bf6b0283adc99eb0201 angie Sat Jun 8 15:56:04 2013 -0700 Added support for remaining dbNSFP sources; added longLabels to VEP output header lines. refs #6152 diff --git src/lib/annoStreamBigWig.c src/lib/annoStreamBigWig.c index 14f9a4b..8e4b4eb 100644 --- src/lib/annoStreamBigWig.c +++ src/lib/annoStreamBigWig.c @@ -8,40 +8,43 @@ "\"autoSql description of a single annoRowBigWig value, for filtering\"\n" " (\n" " float value; \"data value for this range\"\n" " )\n" ; struct annoStreamBigWig { struct annoStreamer streamer; // Parent class members & methods // Private members struct bbiFile *bbi; // bbi handle for bigBed file/URL. struct lm *intervalQueryLm; // localmem object for bigWigIntervalQuery struct bbiInterval *intervalList; // results of bigWigIntervalQuery struct bbiInterval *nextInterval; // next result to be translated into row struct bbiChromInfo *chromList; // list of chromosomes for which bbi actually has data - struct bbiChromInfo *queryChrom; // most recently queried chrom (or NULL) for whole-genome + struct bbiChromInfo *queryChrom; // most recently queried chrom for whole-genome (or NULL) + boolean eof; // TRUE when we are done }; static void asbwSetRegion(struct annoStreamer *vSelf, char *chrom, uint regionStart, uint regionEnd) /* Set region -- and free localmem from previous query if necessary. */ { annoStreamerSetRegion(vSelf, chrom, regionStart, regionEnd); struct annoStreamBigWig *self = (struct annoStreamBigWig *)vSelf; self->nextInterval = self->intervalList = NULL; +self->queryChrom = NULL; +self->eof = FALSE; lmCleanup(&(self->intervalQueryLm)); } static void asbwDoQuery(struct annoStreamBigWig *self, char *minChrom, uint minEnd) /* Store results of an interval query. [Would be nice to make a streaming version of this.] */ { struct annoStreamer *sSelf = &(self->streamer); if (self->intervalQueryLm == NULL) self->intervalQueryLm = lmInit(0); if (sSelf->chrom != NULL) { uint start = sSelf->regionStart; if (minChrom) { if (differentString(minChrom, sSelf->chrom)) @@ -56,31 +59,31 @@ else { // Genome-wide query: break it into chrom-by-chrom queries. if (self->queryChrom == NULL) self->queryChrom = self->chromList; else self->queryChrom = self->queryChrom->next; if (minChrom != NULL) { // Skip chroms that precede minChrom while (self->queryChrom != NULL && strcmp(self->queryChrom->name, minChrom) < 0) self->queryChrom = self->queryChrom->next; } if (self->queryChrom == NULL) { - self->chromList = NULL; // EOF, don't start over! + self->eof = TRUE; self->intervalList = NULL; } else { char *chrom = self->queryChrom->name; int start = 0; if (minChrom != NULL && sameString(chrom, minChrom)) start = minEnd; uint end = self->queryChrom->size; self->intervalList = bigWigIntervalQuery(self->bbi, chrom, start, end, self->intervalQueryLm); } } self->nextInterval = self->intervalList; } @@ -161,18 +164,19 @@ } struct annoStreamer *annoStreamBigWigNew(char *fileOrUrl, struct annoAssembly *aa) /* Create an annoStreamer (subclass) object from a file or URL. */ { struct bbiFile *bbi = bigWigFileOpen(fileOrUrl); struct asObject *asObj = asParseText(annoRowBigWigAsText); struct annoStreamBigWig *self = NULL; AllocVar(self); struct annoStreamer *streamer = &(self->streamer); annoStreamerInit(streamer, aa, asObj, fileOrUrl); streamer->rowType = arWig; streamer->setRegion = asbwSetRegion; streamer->nextRow = asbwNextRow; streamer->close = asbwClose; +self->chromList = bbiChromList(bbi); self->bbi = bbi; return (struct annoStreamer *)self; }