src/hg/hgTracks/bigWigTrack.c 1.10
1.10 2010/04/27 23:31:41 braney
first pass at multiWiggle. This shouldn't change existing behavior. Add extTable to your bigWig trackDb to get two tables into one bigWig wiggle track.
Index: src/hg/hgTracks/bigWigTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bigWigTrack.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -b -B -U 4 -r1.9 -r1.10
--- src/hg/hgTracks/bigWigTrack.c 25 Mar 2010 17:46:01 -0000 1.9
+++ src/hg/hgTracks/bigWigTrack.c 27 Apr 2010 23:31:41 -0000 1.10
@@ -18,15 +18,25 @@
MgFont *font, Color color, enum trackVisibility vis)
{
/* Allocate predraw area. */
int preDrawZero, preDrawSize;
-struct preDrawElement *preDraw = initPreDraw(width, &preDrawSize, &preDrawZero);
+struct preDrawContainer *preDrawList = NULL;
/* Get summary info from bigWig */
int summarySize = width;
struct bbiSummaryElement *summary;
AllocArray(summary, summarySize);
-if (bigWigSummaryArrayExtended(tg->bbiFile, chromName, winStart, winEnd, summarySize, summary))
+
+struct bbiFile *bbiFile ;
+for(bbiFile = tg->bbiFile; bbiFile ; bbiFile = bbiFile->next)
+ {
+ struct preDrawContainer *preDrawContainer;
+ struct preDrawElement *preDraw = initPreDraw(width, &preDrawSize, &preDrawZero);
+ AllocVar(preDrawContainer);
+ preDrawContainer->preDraw = preDraw;
+ slAddHead(&preDrawList, preDrawContainer);
+
+ if (bigWigSummaryArrayExtended(bbiFile, chromName, winStart, winEnd, summarySize, summary))
{
/* Convert format to predraw */
int i;
for (i=0; i<summarySize; ++i)
@@ -38,29 +48,55 @@
pe->max = be->maxVal;
pe->sumData = be->sumData;
pe->sumSquares = be->sumSquares;
}
-
- /* Call actual graphing routine. */
- wigDrawPredraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis,
- preDraw, preDrawZero, preDrawSize, &tg->graphUpperLimit, &tg->graphLowerLimit);
+ }
}
-freeMem(preDraw);
+/* Call actual graphing routine. */
+wigDrawPredraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis,
+ preDrawList, preDrawZero, preDrawSize, &tg->graphUpperLimit, &tg->graphLowerLimit);
+
+struct preDrawContainer *nextContain;
+for(; preDrawList ; preDrawList = nextContain)
+ {
+ nextContain = preDrawList->next;
+ freeMem(preDrawList->preDraw);
+ freeMem(preDrawList);
+ }
freeMem(summary);
}
static void bigWigLoadItems(struct track *tg)
/* Fill up tg->items with bedGraphItems derived from a bigWig file */
{
-if (tg->bbiFile == NULL)
+char *extTableString = trackDbSetting(tg->tdb, "extTable");
+
+if (extTableString != NULL)
+ {
+ // if there's an extra table, read this one in too
+ struct sqlConnection *conn = hAllocConnTrack(database, tg->tdb);
+ char *fileName = bbiNameFromTable(conn, tg->mapName);
+ struct bbiFile *bbiFile = bigWigFileOpen(fileName);
+ slAddHead(&tg->bbiFile, bbiFile);
+
+ fileName = bbiNameFromTable(conn, extTableString);
+ bbiFile = bigWigFileOpen(fileName);
+ slAddHead(&tg->bbiFile, bbiFile);
+
+ hFreeConn(&conn);
+ }
+else
+ {
+ if (tg->bbiFile == NULL)
{
/* Figure out bigWig file name. */
struct sqlConnection *conn = hAllocConnTrack(database, tg->tdb);
char *fileName = bbiNameFromTable(conn, tg->mapName);
tg->bbiFile = bigWigFileOpen(fileName);
hFreeConn(&conn);
}
+ }
}
void bigWigMethods(struct track *track, struct trackDb *tdb,
int wordCount, char *words[])