7f5b0b5cf3ed7efc0f9e84aa5bdcc097473c7584
kent
Thu Feb 3 21:18:16 2011 -0800
Some preliminary work putting proper bam support in table browser. Still quite a ways to go, but have implemented a way to get a list of alignments in 'sam' format out of a BAM. This I think contains all the info.
diff --git src/hg/hgTables/bam.c src/hg/hgTables/bam.c
new file mode 100644
index 0000000..cbfc448
--- /dev/null
+++ src/hg/hgTables/bam.c
@@ -0,0 +1,142 @@
+/* bam - stuff to handle BAM stuff in table browser. */
+
+#ifdef USE_BAM
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "localmem.h"
+#include "jksql.h"
+#include "cheapcgi.h"
+#include "cart.h"
+#include "web.h"
+#include "bed.h"
+#include "hdb.h"
+#include "trackDb.h"
+#include "obscure.h"
+#include "hmmstats.h"
+#include "correlate.h"
+#include "asParse.h"
+#include "bbiFile.h"
+#include "bigBed.h"
+#include "hubConnect.h"
+#include "hgTables.h"
+#include "bamFile.h"
+#if (defined USE_BAM && defined KNETFILE_HOOKS)
+#include "knetUdc.h"
+#include "udc.h"
+#endif//def USE_BAM && KNETFILE_HOOKS
+
+
+boolean isBamTable(char *table)
+/* Return TRUE if table corresponds to a BAM file. */
+{
+if (isHubTrack(table))
+ {
+ struct trackDb *tdb = hashFindVal(fullTrackAndSubtrackHash, table);
+ return startsWithWord("bam", tdb->type);
+ }
+else
+ return trackIsType(database, table, curTrack, "bam", ctLookupName);
+}
+
+char *bamFileName(char *table, struct sqlConnection *conn)
+/* Return file name associated with BAM. This handles differences whether it's
+ * a custom or built-in track. Do a freeMem on returned string when done. */
+{
+/* Implementation is same as bigWig. */
+return bigWigFileName(table, conn);
+}
+
+char *bamAsDef =
+"";
+
+void showSchemaBam(char *table)
+/* Show schema on bam. */
+{
+/* Get description of columns, making it up from BED records if need be. */
+struct asObject *as = bigBedAs(bbi);
+if (as == NULL)
+ as = asParseText(bedAsDef(bbi->definedFieldCount, bbi->fieldCount));
+
+hPrintf("Database: %s", database);
+hPrintf(" Primary Table: %s
", table);
+hPrintf("Big Bed File: %s", fileName);
+if (bbi->version >= 2)
+ {
+ hPrintf(" Item Count: ");
+ printLongWithCommas(stdout, bigBedItemCount(bbi));
+ }
+hPrintf("
\n");
+hPrintf("Format description: %s
", as->comment);
+
+/* Put up table that describes fields. */
+hTableStart();
+hPrintf("