src/hg/lib/customFactory.c 1.110
1.110 2009/11/10 05:39:34 kent
Adding bbiFile field to customTrack to avoid reopening it repeatedly. Setting display limits from bigWig/bigBed files so they don't end up the weird 0-127 defaults.
Index: src/hg/lib/customFactory.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/customFactory.c,v
retrieving revision 1.109
retrieving revision 1.110
diff -b -B -U 4 -r1.109 -r1.110
--- src/hg/lib/customFactory.c 9 Nov 2009 22:31:15 -0000 1.109
+++ src/hg/lib/customFactory.c 10 Nov 2009 05:39:34 -0000 1.110
@@ -25,8 +25,9 @@
#include "trashDir.h"
#include "jsHelper.h"
#include "encode/encodePeak.h"
#include "udc.h"
+#include "bbiFile.h"
#include "bigWig.h"
#include "bigBed.h"
#ifdef USE_BAM
#include "bamFile.h"
@@ -1446,8 +1447,26 @@
{
return (sameType(type, "bigWig"));
}
+void setBbiViewLimits(struct customTrack *track)
+/* If there are no viewLimits sets, set them from bbiFile info. */
+{
+struct hash *settings = track->tdb->settingsHash;
+if (hashLookup(settings, "viewLimits") == NULL)
+ {
+ struct bbiSummaryElement sum = bbiTotalSummary(track->bbiFile);
+ if (sum.minVal == sum.maxVal)
+ {
+ sum.minVal += 1;
+ sum.maxVal -= 1;
+ }
+ char text[32];
+ safef(text, sizeof(text), "%f:%f", sum.minVal, sum.maxVal);
+ hashAdd(settings, "viewLimits", cloneString(text));
+ }
+}
+
static struct customTrack *bigWigLoader(struct customFactory *fac,
struct hash *chromHash,
struct customPp *cpp, struct customTrack *track, boolean dbRequested)
/* Load up wiggle data until get next track line. */
@@ -1456,10 +1475,10 @@
struct hash *settings = track->tdb->settingsHash;
char *bigDataUrl = hashFindVal(settings, "bigDataUrl");
if (bigDataUrl == NULL)
errAbort("Missing bigDataUrl setting from track of type=bigWig");
-struct bbiFile *bbi = bigWigFileOpen(bigDataUrl); // Just for error checking
-bbiFileClose(&bbi);
+track->bbiFile = bigWigFileOpen(bigDataUrl);
+setBbiViewLimits(track);
return track;
}
static struct customFactory bigWigFactory =
@@ -1490,10 +1509,10 @@
struct hash *settings = track->tdb->settingsHash;
char *bigDataUrl = hashFindVal(settings, "bigDataUrl");
if (bigDataUrl == NULL)
errAbort("Missing bigDataUrl setting from track of type=bigBed");
-struct bbiFile *bbi = bigBedFileOpen(bigDataUrl); // Just for error checking
-bbiFileClose(&bbi);
+track->bbiFile = bigBedFileOpen(bigDataUrl);
+setBbiViewLimits(track);
return track;
}
static struct customFactory bigBedFactory =