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;
 }