ee9a6c5c63eba2d963a5d7581185b1004fffe964
angie
  Mon Apr 15 14:06:10 2013 -0700
Added indentifying name to annoStreamer for output header info and better error messages. refs #6152
diff --git src/hg/lib/annoStreamWig.c src/hg/lib/annoStreamWig.c
index 6d5fb51..e9242fb 100644
--- src/hg/lib/annoStreamWig.c
+++ src/hg/lib/annoStreamWig.c
@@ -31,51 +31,51 @@
 }
 
 static void checkWibFile(struct annoStreamWig *self, char *wibFile)
 /* If self doesn't have a .wib file name and handle open, or if the new wibFile is
  * not the same as the old one, update self to use new wibFile. */
 {
 if (self->wibFile == NULL || !sameString(self->wibFile, wibFile))
     {
     carefulClose(&(self->wibF));
     freeMem(self->wibFile);
     self->wibFile = cloneString(wibFile);
     self->wibF = mustOpen(self->wibFile, "r");
     }
 }
 
-static void paranoidCheckSize(struct wiggle *wiggle)
+static void paranoidCheckSize(struct annoStreamWig *self, struct wiggle *wiggle)
 /* paranoid, consider taking this out when code is stable: */
 {
 int bpLen = wiggle->chromEnd - wiggle->chromStart;
 if (bpLen != (wiggle->span * wiggle->count))
-    errAbort("annoStreamWig: length in bases (%u - %u = %d) != span*count (%u * %u = %u)",
-	     wiggle->chromEnd, wiggle->chromStart, bpLen,
+    errAbort("annoStreamWig %s: length in bases (%u - %u = %d) != span*count (%u * %u = %u)",
+	     self->streamer.name, wiggle->chromEnd, wiggle->chromStart, bpLen,
 	     wiggle->span, wiggle->count, (wiggle->span * wiggle->count));
 }
 
 static void getFloatArray(struct annoStreamWig *self, struct wiggle *wiggle,
 			  boolean *retRightFail, int *retValidCount, float *vector)
 /* expand wiggle bytes & spans to per-bp floats; filter values here! */
 {
 fseek(self->wibF, wiggle->offset, SEEK_SET);
 UBYTE wigBuf[wiggle->count];
 size_t bytesRead = fread(wigBuf, 1, wiggle->count, self->wibF);
 if (bytesRead != wiggle->count)
     errnoAbort("annoStreamWig: failed to read %u bytes from %s (got %llu)\n",
 	       wiggle->count, wiggle->file, (unsigned long long)bytesRead);
-paranoidCheckSize(wiggle);
+paranoidCheckSize(self, wiggle);
 int i, j, validCount = 0;
 for (i = 0;  i < wiggle->count;  i++)
     {
     float value;
     if (wigBuf[i] == WIG_NO_DATA)
 	value = NAN;
     else
 	{
 	value = BIN_TO_VALUE(wigBuf[i], wiggle->lowerLimit, wiggle->dataRange);
 	if (annoFilterWigValueFails(self->streamer.filters, value, retRightFail))
 	    value = NAN;
 	else
 	    validCount++;
 	}
     int bpOffset = i * wiggle->span;
@@ -121,24 +121,24 @@
 {
 if (pVSelf == NULL)
     return;
 struct annoStreamWig *self = *(struct annoStreamWig **)pVSelf;
 carefulClose(&(self->wibF));
 freeMem(self->wibFile);
 annoStreamerFree(pVSelf);
 }
 
 struct annoStreamer *annoStreamWigDbNew(char *db, char *table, struct annoAssembly *aa,
 					int maxOutput)
 /* Create an annoStreamer (subclass) object from a wiggle database table. */
 {
 struct annoStreamWig *self = NULL;
 AllocVar(self);
+self->wigStr = annoStreamDbNew(db, table, aa, asParseText(wiggleAsText));
 struct annoStreamer *streamer = &(self->streamer);
-annoStreamerInit(streamer, aa, asParseText(annoRowWigAsText));
+annoStreamerInit(streamer, aa, asParseText(annoRowWigAsText), self->wigStr->name);
 streamer->rowType = arWig;
 streamer->setRegion = aswSetRegion;
 streamer->nextRow = aswNextRow;
 streamer->close = aswClose;
-self->wigStr = annoStreamDbNew(db, table, aa, asParseText(wiggleAsText));
 return (struct annoStreamer *)self;
 }