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, &microarrayFactory);
     slAddTail(&factoryList, &coloredExonFactory);
     slAddTail(&factoryList, &encodePeakFactory);
+#ifdef USE_BAM
+    slAddTail(&factoryList, &bamFactory);
+#endif//def USE_BAM
     }
 }
 
 struct customFactory *customFactoryFind(char *genomeDb, struct customPp *cpp,