src/hg/instinct/hgBamBam/hgBamBam.c 1.2

1.2 2010/05/26 05:20:33 jsanborn
updated
Index: src/hg/instinct/hgBamBam/hgBamBam.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/instinct/hgBamBam/hgBamBam.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -b -B -U 4 -r1.1 -r1.2
--- src/hg/instinct/hgBamBam/hgBamBam.c	25 May 2010 20:22:45 -0000	1.1
+++ src/hg/instinct/hgBamBam/hgBamBam.c	26 May 2010 05:20:33 -0000	1.2
@@ -85,8 +84,67 @@
 return tupleList;
 }
 
 
+struct breaks *getBreaks(struct sqlConnection *conn, char *tableName, char *pos, boolean intra)
+{
+/* get the data from the database */
+char **row = NULL;
+char query[512];
+query[0] = '\0';
+    
+if (!pos)
+    {
+    if (intra)
+	safef(query, sizeof(query), "select * from %s where chrom = chrom2", tableName);
+    else
+	safef(query, sizeof(query), "select * from %s", tableName);
+    }
+else
+    {
+    char *chrom = NULL;
+    int start = 0;
+    int stop = 0;
+    if (!hgParseChromRange(NULL, pos, &chrom, &start, &stop))
+	return NULL;
+
+    if (intra)
+    safef(query, sizeof(query),
+	  "select * from %s where chrom = chrom2 and chrom = '%s' and chromStart<%d and chromEnd>%d",
+	  tableName, chrom, stop, start);
+    else
+	safef(query, sizeof(query),
+	      "select * from %s where chrom = '%s' and chromStart<%d and chromEnd>%d",
+	      tableName, chrom, stop, start);
+    }
+
+struct sqlResult *sr = sqlGetResult(conn, query);
+struct breaks *br, *brList = NULL;
+
+/* all copy number tracks are bed 4 */
+while ((row = sqlNextRow(sr)) != NULL)
+    {
+    AllocVar(br);
+
+    br->chrom = cloneString(row[0]);
+    br->chromStart = atoi(row[1]);
+    br->chromEnd = atoi(row[2]);
+    strcpy(br->strand, row[3]);
+    br->chrom2 = cloneString(row[4]);
+    br->chromStart2 = atoi(row[5]);
+    br->chromEnd2 = atoi(row[6]);
+    strcpy(br->strand2, row[7]);
+    br->support = atoi(row[8]);
+    br->qual = atof(row[9]);
+
+    slAddHead(&brList, br);
+    }
+slReverse(&brList);
+sqlFreeResult(&sr);
+return brList;
+}
+
+
 /****** END HELPER FUNCTIONS *******/
 
 
 float drawCopy(struct sqlConnection *conn, struct json *js, 
@@ -104,8 +162,10 @@
 
 struct settings *settings = initSettings(conn, pos, width, height, 0, maxVal);
 
 char *filename = copyNumberGif(conn, bed, settings, suffix, medVal, col);
+if (!filename)
+    return 0.0;
 
 char jsName[256];
 safef(jsName, sizeof(jsName), "image_%s", suffix);
 jsonAddString(js, jsName, filename);
@@ -114,15 +174,36 @@
 
 return tmpMax;
 }
 
+void drawBreaks(struct sqlConnection *conn, struct json *js, 
+	       char *pos, int width, char *name, char *suffix)
+{
+char tableName[256];
+safef(tableName, sizeof(tableName), "%s_%s", name, suffix);
+
+int height = DEFAULT_LABEL_HEIGHT;
+struct breaks *breaks = getBreaks(conn, tableName, pos, TRUE);  // TRUE = intra
+
+struct settings *settings = initSettings(conn, pos, width, height, 0, 0);
+
+char *filename = breaksGif(conn, breaks, settings);
+if (!filename)
+    return;
+
+jsonAddString(js, suffix, filename);
+jsonAddInt(js, "breaksHeight", settings->height);
+}
+
 void drawIdeo(struct sqlConnection *conn, struct json *js, 
 	      char *pos, int width)
 {
 int height = DEFAULT_LABEL_HEIGHT + CYTO_HEIGHT;
 struct settings *settings = initSettings(conn, pos, width, height, 0, 0);
 
 char *filename = genomeLabelsGif(conn, settings);
+if (!filename)
+    return;
 
 jsonAddString(js, "ideogram", filename);
 }
 
@@ -133,10 +214,13 @@
 int height = DEFAULT_LABEL_HEIGHT;
 struct settings *settings = initSettings(conn, pos, width, height, 0, 0);
 
 char *filename = annotationGif(settings, "refGene");
+if (!filename)
+    return;
 
 jsonAddString(js, "genes", filename);
+jsonAddInt(js, "genesHeight", settings->height);
 }
 
 
 void drawScale(struct sqlConnection *conn, struct json *js, 
@@ -145,8 +229,10 @@
 int height = DEFAULT_LABEL_HEIGHT;
 struct settings *settings = initSettings(conn, pos, width, height, 0, 0);
 
 char *filename = genomeScaleGif(settings);
+if (!filename)
+    return;
 
 jsonAddString(js, "scale", filename);
 }
 
@@ -165,15 +251,18 @@
 maxVal = drawCopy(conn, js, pos, width, height, name, "cnv", FLOAT_NULL, 0.8, MG_BLACK);
 drawCopy(conn, js, pos, width, height, name, "major", maxVal, 0.5, MG_RED);
 drawCopy(conn, js, pos, width, height, name, "minor", maxVal, 0.4, MG_BLUE);
 
+drawBreaks(conn, js, pos, width, name, "breaks");
+
 drawIdeo(conn, js, pos, width);
 drawGenes(conn, js, pos, width);
 drawScale(conn, js, pos, width);
 
+hFreeConn(&conn);
+
 if (js)
     hPrintf("%s\n", js->print(js));
-hFreeConn(&conn);
 }
 
 void dispatchRoutines()
 /* Look at command variables in cart and figure out which