src/hg/lib/customFactory.c 1.106
1.106 2009/10/08 06:38:23 angie
Added support for bam as a custom track type.
Index: src/hg/lib/customFactory.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/lib/customFactory.c,v
retrieving revision 1.105
retrieving revision 1.106
diff -b -B -U 4 -r1.105 -r1.106
--- src/hg/lib/customFactory.c 8 Oct 2009 03:33:26 -0000 1.105
+++ src/hg/lib/customFactory.c 8 Oct 2009 06:38:23 -0000 1.106
@@ -27,8 +27,11 @@
#include "encode/encodePeak.h"
#include "udc.h"
#include "bigWig.h"
#include "bigBed.h"
+#ifdef USE_BAM
+#include "bamFile.h"
+#endif//def USE_BAM
static char const rcsid[] = "$Id$";
/*** Utility routines used by many factories. ***/
@@ -1500,8 +1503,43 @@
bigBedLoader,
};
+#ifdef USE_BAM
+/*** BAM Factory - for client-side BAM alignment files ***/
+
+static boolean bamRecognizer(struct customFactory *fac, struct customPp *cpp, char *type,
+ struct customTrack *track)
+/* Return TRUE if looks like we're handling a bam track */
+{
+return (sameType(type, "bam"));
+}
+
+static struct customTrack *bamLoader(struct customFactory *fac, struct hash *chromHash,
+ struct customPp *cpp, struct customTrack *track,
+ boolean dbRequested)
+/* Process the bam track line. */
+{
+struct hash *settings = track->tdb->settingsHash;
+char *bigDataUrl = hashFindVal(settings, "bigDataUrl");
+if (bigDataUrl == NULL)
+ errAbort("Missing bigDataUrl setting from track of type=bam (%s)", track->tdb->shortLabel);
+if (!bamFileExists(bigDataUrl))
+ errAbort("Can't access %s's bigDataUrl %s", track->tdb->shortLabel, bigDataUrl);
+return track;
+}
+
+static struct customFactory bamFactory =
+/* Factory for bam tracks */
+ {
+ NULL,
+ "bam",
+ bamRecognizer,
+ bamLoader,
+ };
+#endif//def USE_BAM
+
+
/*** Framework for custom factories. ***/
static struct customFactory *factoryList;
@@ -1525,8 +1563,11 @@
slAddTail(&factoryList, &bedGraphFactory);
slAddTail(&factoryList, µarrayFactory);
slAddTail(&factoryList, &coloredExonFactory);
slAddTail(&factoryList, &encodePeakFactory);
+#ifdef USE_BAM
+ slAddTail(&factoryList, &bamFactory);
+#endif//def USE_BAM
}
}
struct customFactory *customFactoryFind(char *genomeDb, struct customPp *cpp,