ca8d142dc346906220151aca8bfe7ce70201abe5
fanhsu
  Thu Jul 8 15:00:44 2010 -0700
Built hgIkmc track for hg19 (IKMC track mapped to human genome).
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index b90dcca..c0fde4f 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -21660,6 +21660,93 @@
 hFreeConn(&conn);
 }
 
+void doHgIkmc(struct trackDb *tdb, char *item)
+/* Human Genome Map of KnockOut Mouse Project */
+{
+struct sqlConnection *conn = hAllocConn(database);
+char query[512];
+struct sqlResult *sr;
+char **row;
+genericHeader(tdb, item);
+char defaultExtra[HDB_MAX_TABLE_STRING];
+safef(defaultExtra, sizeof(defaultExtra), "%sExtra", tdb->table);
+char *extraTable = trackDbSettingOrDefault(tdb, "xrefTable", defaultExtra);
+boolean gotExtra = sqlTableExists(conn, extraTable);
+if (gotExtra)
+    {
+    char mgiId[256];
+    char *designId;
+
+    safef(query, sizeof(query), "select alias from %s where name = '%s'",
+	  extraTable, item);
+    sqlQuickQuery(conn, query, mgiId, sizeof(mgiId));
+    char *ptr = strchr(mgiId, ',');
+    if (!startsWith("MGI:", mgiId) || ptr == NULL)
+	errAbort("Where is the MGI ID?: '%s'", mgiId);
+    else
+	*ptr = '\0';
+    ptr++;
+    designId = ptr;
+    ptr = strchr(ptr, ',');
+    *ptr = '\0';
+
+    // Use the MGI ID to show all centers that are working on this gene:
+    safef(query, sizeof(query), "select name,alias from %s where alias like '%s,%s%%'",
+	  extraTable, mgiId, designId);
+    sr = sqlGetResult(conn, query);
+    char lastMgiId[16];
+    lastMgiId[0] = '\0';
+    puts("<TABLE BORDERWIDTH=0 CELLPADDING=0>");
+    while ((row = sqlNextRow(sr)) != NULL)
+	{
+	char *words[4];
+	int wordCount = chopCommas(row[1], words);
+	if (wordCount >= 3)
+	    {
+	    char *mgiId = words[0], *center = words[2], *status = words[3];
+	    if (!sameString(mgiId, lastMgiId))
+		{
+		printf("<TR><TD colspan=2>");
+		printCustomUrl(tdb, mgiId, FALSE);
+		printf("</TD></TR>\n<TR><TD colspan=2>");
+		printOtherCustomUrl(tdb, mgiId, "mgiUrl", FALSE);
+		printf("</TD></TR>\n");
+		safecpy(lastMgiId, sizeof(lastMgiId), mgiId);
+		}
+	    printf("<TR><TD><B>Center: </B>%s</TD>\n", center);
+	    ptr = strrchr(row[0], '_');
+	    if (ptr != NULL)
+		printf("<TD><B>Design ID: </B>%s</TD>\n", ptr+1);
+	    printf("<TD><B>Status: </B>%s</TD></TR>\n", status);
+	    }
+	}
+    puts("<TR><TD colspan=2>");
+    sqlFreeResult(&sr);
+    }
+safef(query, sizeof(query), "select chrom,chromStart,chromEnd from %s "
+      "where name = '%s'", tdb->table, item);
+sr = sqlGetResult(conn, query);
+char lastChr[32];
+int lastStart = -1;
+int lastEnd = -1;
+lastChr[0] = '\0';
+while ((row = sqlNextRow(sr)) != NULL)
+    {
+    char *chr = row[0];
+    int start = atoi(row[1]), end = atoi(row[2]);
+    if (!sameString(chr, lastChr) || start != lastStart || end != lastEnd)
+	printPos(chr, start, end, NULL, TRUE, item);
+    safecpy(lastChr, sizeof(lastChr), chr);
+    lastStart = start;
+    lastEnd = end;
+    }
+sqlFreeResult(&sr);
+if (gotExtra)
+    puts("</TD></TR></TABLE>");
+printTrackHtml(tdb);
+hFreeConn(&conn);
+}
+
 void doUCSFDemo(struct trackDb *tdb, char *item)
 {
 genericHeader(tdb, item);
@@ -23143,6 +23230,10 @@
     {
     doKomp(tdb, item);
     }
+else if (sameString("hgIkmc", table))
+    {
+    doHgIkmc(tdb, item);
+    }
 else if (startsWith("dbRIP", table))
     {
     dbRIP(tdb, item, NULL);