src/hg/hgTracks/bedTrack.c 1.20
1.20 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/bedTrack.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/bedTrack.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -b -B -U 4 -r1.19 -r1.20
--- src/hg/hgTracks/bedTrack.c 10 Nov 2009 05:48:17 -0000 1.19
+++ src/hg/hgTracks/bedTrack.c 1 Dec 2009 05:49:35 -0000 1.20
@@ -11,33 +11,8 @@
#include "cds.h"
#define SEQ_DELIM '~'
-char *bbiNameFromTable(struct sqlConnection *conn, char *table)
-/* Return file name from little table. */
-{
-char query[256];
-safef(query, sizeof(query), "select fileName from %s", table);
-char *fileName = sqlQuickString(conn, query);
-if (fileName == NULL)
- errAbort("Missing fileName in %s table", table);
-return fileName;
-}
-
-struct bigBedInterval *bigBedSelectRange(struct sqlConnection *conn, struct track *track,
- char *chrom, int start, int end, struct lm *lm)
-/* Return list of intervals in range. */
-{
-struct bbiFile *bbi = track->bbiFile;
-if (bbi == NULL)
- {
- char *fileName = bbiNameFromTable(conn, track->mapName);
- bbi = track->bbiFile = bigBedFileOpen(fileName);
- }
-struct bigBedInterval *result = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm);
-return result;
-}
-
struct bed *bedLoadPairedTagAlign(char **row)
/* Load first six fields of bed.
* Add ~seq1~seq2 to end of name
* Then remove the sequence to extra field when we convert to linkedFeature.
@@ -199,31 +174,8 @@
bedFree(pBed);
return lf;
}
-void bigBedAddLinkedFeaturesFrom(struct sqlConnection *conn, struct track *track,
- char *chrom, int start, int end, int scoreMin, int scoreMax, boolean useItemRgb,
- int fieldCount, struct linkedFeatures **pLfList)
-/* Read in items in chrom:start-end from bigBed file named in track->bbiFileName, convert
- * them to linkedFeatures, and add to head of list. */
-{
-struct lm *lm = lmInit(0);
-struct trackDb *tdb = track->tdb;
-struct bigBedInterval *bb, *bbList = bigBedSelectRange(conn, track, chrom, start, end, lm);
-char *bedRow[32];
-char startBuf[16], endBuf[16];
-
-for (bb = bbList; bb != NULL; bb = bb->next)
- {
- bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow));
- struct bed *bed = bedLoadN(bedRow, fieldCount);
- struct linkedFeatures *lf = bedMungToLinkedFeatures(&bed, tdb, fieldCount,
- scoreMin, scoreMax, useItemRgb);
- slAddHead(pLfList, lf);
- }
-lmCleanup(&lm);
-}
-
void loadBed9(struct track *tg)
/* Convert bed 9 info in window to linked feature. (to handle itemRgb)*/
{
struct sqlConnection *conn = hAllocConn(database);
@@ -606,9 +558,12 @@
{
if (!tg->drawItemAt)
errAbort("missing drawItemAt in track %s", tg->mapName);
-genericDrawItems(tg, seqStart, seqEnd, hvg, xOff, yOff, width,
+if (vis == tvDense && tg->isBigBed)
+ bigBedDrawDense(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color);
+else
+ genericDrawItems(tg, seqStart, seqEnd, hvg, xOff, yOff, width,
font, color, vis);
}
char *bedName(struct track *tg, void *item)