src/hg/hgTracks/bigWigTrack.c 1.8

1.8 2009/12/01 05:49:35 kent
Moving a few bigBed-specific functions from bedTrack.c to new modulc bigBedTrack.c Making bigBeds in dense mode do drawing by querying summary rather than going through itemList. Making it so that it only loads maxItems+1 (251 by default) items before flipping to dense. Making it draw density plot in grayscale if denseCoverage is set. Net result should be reduced bigBed i/o when zoomed out.
Index: src/hg/hgTracks/bigWigTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bigWigTrack.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -b -B -U 1000000 -r1.7 -r1.8
--- src/hg/hgTracks/bigWigTrack.c	10 Nov 2009 05:48:17 -0000	1.7
+++ src/hg/hgTracks/bigWigTrack.c	1 Dec 2009 05:49:35 -0000	1.8
@@ -1,75 +1,72 @@
 /* bigWigTrack - stuff to handle loading and display of bigWig type tracks in browser.   */
 
 #include "common.h"
 #include "hash.h"
 #include "linefile.h"
 #include "jksql.h"
 #include "hdb.h"
 #include "hgTracks.h"
-// #include "wiggle.h"
-// #include "scoredRef.h"
-// #include "customTrack.h"
 #include "localmem.h"
 #include "wigCommon.h"
 #include "bbiFile.h"
 #include "bigWig.h"
 
 static char const rcsid[] = "$Id$";
 
 static void bigWigDrawItems(struct track *tg, int seqStart, int seqEnd,
 	struct hvGfx *hvg, int xOff, int yOff, int width,
 	MgFont *font, Color color, enum trackVisibility vis)
 {
 /* Allocate predraw area. */
 int preDrawZero, preDrawSize;
 struct preDrawElement *preDraw = initPreDraw(width, &preDrawSize, &preDrawZero);
 
 /* Get summary info from bigWig */
 int summarySize = width;
 struct bbiSummaryElement *summary;
 AllocArray(summary, summarySize);
 if (bigWigSummaryArrayExtended(tg->bbiFile, chromName, winStart, winEnd, summarySize, summary))
     {
     /* Convert format to predraw */
     int i;
     for (i=0; i<summarySize; ++i)
         {
 	struct preDrawElement *pe = &preDraw[i + preDrawZero];
 	struct bbiSummaryElement *be = &summary[i];
 	pe->count = be->validCount;
 	pe->min = be->minVal;
 	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);
 freeMem(summary);
 }
 
 static void bigWigLoadItems(struct track *tg)
 /* Fill up tg->items with bedGraphItems derived from a bigWig file */
 {
 if (tg->bbiFile == NULL)
     {
     /* Figure out bigWig file name. */
     struct sqlConnection *conn = hAllocConn(database);
     char *fileName = bbiNameFromTable(conn, tg->mapName);
     tg->bbiFile = bigWigFileOpen(fileName);
     hFreeConn(&conn);
     }
 }
 
 void bigWigMethods(struct track *track, struct trackDb *tdb, 
 	int wordCount, char *words[])
 /* Set up bigWig methods. */
 {
 bedGraphMethods(track, tdb, wordCount, words);
 track->loadItems = bigWigLoadItems;
 track->drawItems = bigWigDrawItems;
 }