src/hg/hgTracks/hgTracks.c 1.1553

1.1553 2009/02/10 22:16:52 kent
Creating bigBed type custom tracks.
Index: src/hg/hgTracks/hgTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/hgTracks.c,v
retrieving revision 1.1552
retrieving revision 1.1553
diff -b -B -U 4 -r1.1552 -r1.1553
--- src/hg/hgTracks/hgTracks.c	9 Feb 2009 22:24:08 -0000	1.1552
+++ src/hg/hgTracks/hgTracks.c	10 Feb 2009 22:16:52 -0000	1.1553
@@ -29,8 +29,9 @@
 #include "cutterTrack.h"
 #include "wikiTrack.h"
 #include "ctgPos.h"
 #include "bed.h"
+#include "bigBed.h"
 #include "bedCart.h"
 #include "customTrack.h"
 #include "cytoBand.h"
 #include "ensFace.h"
@@ -2605,8 +2606,26 @@
     tg = trackFromTrackDb(tdb);
     tg->bbiFileName = trackDbSetting(tdb, "dataUrl");
     tg->labelNextItemButtonable = FALSE;
     }
+else if (sameString(type, "bigBed"))
+    {
+    /* Figure out file name from settings. */
+    char *fileName = trackDbSetting(tdb, "dataUrl");
+
+    /* Briefly open file to find field counts, and from that revise the
+     * tdb->type to be more complete. */
+    struct bbiFile *bbi = bigBedFileOpen(fileName);
+    char extra = (bbi->fieldCount > bbi->definedFieldCount ? '+' : '.');
+    char typeBuf[64];
+    safef(typeBuf, sizeof(typeBuf), "bigBed %d %c", bbi->definedFieldCount, extra);
+    tdb->type = cloneString(typeBuf);
+    bbiFileClose(&bbi);
+
+    /* Finish wrapping track around tdb. */
+    tg = trackFromTrackDb(tdb);
+    tg->bbiFileName = fileName;
+    }
 else if (sameString(type, "bedGraph"))
     {
     tg = trackFromTrackDb(tdb);
     tg->canPack = FALSE;