a97e94e8103e84304643a671fb6d674c7cb7c469
fanhsu
  Mon Feb 7 12:26:56 2011 -0800
Added function for new OMIM related tracks.  Still under development ...
diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c
index 05f6b7c..8c83e33 100644
--- src/hg/hgc/hgc.c
+++ src/hg/hgc/hgc.c
@@ -9561,33 +9561,349 @@
 		    printf(", ");
     	    	printf("<A HREF=\"%s%s&hgg_chrom=none\" target=_blank>", "../cgi-bin/hgGene?hgg_gene=", row[0]);
     	    	printf("%s</A></B>", row[0]);
 	    	printedCnt++;
 		}
             if (printedCnt >= 1) printf("<BR>\n");
 	    }
 	sqlFreeResult(&sr);
 	}
     }
 
 printf("<HR>");
 printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName);
 }
 
+void printOmimLocationDetails(struct trackDb *tdb, char *itemName, boolean encode)
+/* Print details of an OMIM Class 3 Gene entry. */
+{
+struct sqlConnection *conn  = hAllocConn(database);
+struct sqlConnection *conn2 = hAllocConn(database);
+char query[256];
+struct sqlResult *sr;
+char **row;
+char *url = tdb->url;
+char *kgId= NULL;
+char *title1 = NULL;
+char *title2 = NULL;
+char *geneSymbol = NULL;
+char *chrom, *chromStart, *chromEnd;
+char *kgDescription = NULL;
+char *refSeq;
+char *omimId;
+
+chrom      = cartOptionalString(cart, "c");
+chromStart = cartOptionalString(cart, "o");
+chromEnd   = cartOptionalString(cart, "t");
+
+omimId = itemName;
+
+if (url != NULL && url[0] != 0)
+    {
+    printf("<B>OMIM Entry ");fflush(stdout);
+    printf("<A HREF=\"%s%s\" target=_blank>", url, itemName);
+    printf("%s</A></B>", itemName);
+    safef(query, sizeof(query),
+    	  "select title1, title2 from omimGeneMap where omimId=%s;", itemName);
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	if (row[0] != NULL)
+	    {
+	    title1 = cloneString(row[0]);
+    	    printf(": %s", title1);
+	    }
+	if (row[1] != NULL)
+	    {
+	    title2 = cloneString(row[1]);
+    	    printf(" %s ", title2);
+	    }
+	}
+    sqlFreeResult(&sr);
+
+    printf("<BR>\n");
+    
+    printf("<B>Location: </B>");
+    safef(query, sizeof(query),
+    	  "select location from omimGeneMap where omimId=%s;", itemName);
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	if (row[0] != NULL)
+	    {
+	    char *locStr;
+	    locStr= cloneString(row[0]);
+    	    printf("%s\n", locStr);
+	    }
+	}
+    sqlFreeResult(&sr);
+
+    printf("<BR>\n");
+    safef(query, sizeof(query),
+    	  "select geneSymbol from omimGeneMap where omimId=%s;", itemName);
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	geneSymbol = cloneString(row[0]);
+	}
+    sqlFreeResult(&sr);
+
+    safef(query, sizeof(query),"select omimId from omimDisorderPhenotype where omimId=%s\n", omimId);
+    if (sqlQuickNum(conn, query) > 0)
+    	{
+	char *phenotypeClass, *questionable, *hasBracket, *hasBrace, *phenotypeId, *disorder;
+	
+	printf("<B>Gene symbol(s):</B> %s", geneSymbol);
+	printf("<BR>\n");
+
+	/* display disorder for genes in morbidmap */
+    	safef(query, sizeof(query), 
+	 "select disorder, phenotypeClass, questionable, hasBracket, hasBrace, phenotypeId from omimDisorderPhenotype where omimId=%s order by disorder",
+	 itemName);
+    	sr = sqlMustGetResult(conn, query);
+ 	printf("<B>Disorder(s):</B><UL>\n"); 
+        while ((row = sqlNextRow(sr)) != NULL)
+    	    {
+	    disorder       = row[0];
+	    phenotypeClass = row[1];
+	    questionable   = row[2];
+	    hasBracket     = row[3];
+	    hasBrace	   = row[4];
+	    phenotypeId    = row[5];
+	    printf("<LI>%s", disorder);
+ 	    if (phenotypeId != NULL)
+	    	{
+		if (!sameWord(phenotypeId, "-1"))
+		    {
+                    printf(" (phenotype <A HREF=\"%s%s\" target=_blank>", url, phenotypeId);
+                    printf("%s</A></B>)", phenotypeId);
+		    }
+		}
+	    printf("<BR>\n");
+	    }
+	printf("</UL>\n");
+    	sqlFreeResult(&sr);
+	}
+    else
+	{
+	/* display gene symbol(s) from omimGenemap  */
+    	safef(query, sizeof(query), "select geneSymbol from omimGeneMap where omimId=%s;", itemName);
+    	sr = sqlMustGetResult(conn, query);
+    	row = sqlNextRow(sr);
+        if (row != NULL)
+    	    {
+ 	    printf("<B>OMIM Gene Symbol:</B> %s", row[0]);
+	    printf("<BR>\n");
+    	    sqlFreeResult(&sr);
+	    }
+	else
+    	    {
+	    /* get gene symbol from kgXref if the entry is not in morbidmap and omim genemap */
+    	    safef(query, sizeof(query), "select geneSymbol from kgXref where kgId='%s';", kgId);
+
+            sr = sqlMustGetResult(conn, query);
+    	    row = sqlNextRow(sr);
+    	    if (row != NULL)
+    	    	{
+ 	    	printf("<B>UCSC Gene Symbol:</B> %s", row[0]);
+	    	printf("<BR>\n");
+	    	}
+    	    sqlFreeResult(&sr);
+    	    }
+	}
+
+    if (kgId != NULL)
+    	{
+    	printf("<B>UCSC Canonical Gene ");
+    	printf("<A HREF=\"%s%s&hgg_chrom=none\" target=_blank>",
+	       "../cgi-bin/hgGene?hgg_gene=", kgId);
+    	printf("%s</A></B>: ", kgId);
+
+	safef(query, sizeof(query), "select refseq from kgXref where kgId='%s';", kgId);
+    	sr = sqlMustGetResult(conn, query);
+    	row = sqlNextRow(sr);
+    	if (row != NULL)
+	    {
+	    refSeq = strdup(row[0]);
+	    kgDescription = gbCdnaGetDescription(conn2, refSeq);
+	    }
+	sqlFreeResult(&sr);
+        hFreeConn(&conn2);
+
+	if (kgDescription == NULL)
+	    {
+    	    safef(query, sizeof(query), "select description from kgXref where kgId='%s';", kgId);
+    	    sr = sqlMustGetResult(conn, query);
+    	    row = sqlNextRow(sr);
+    	    if (row != NULL)
+    	    	{
+	    	printf("%s", row[0]);
+	    	}
+
+	    sqlFreeResult(&sr);
+	    }
+	else
+    	    {
+	    printf("%s", kgDescription);
+	    }
+        printf("<BR>\n");
+
+	safef(query, sizeof(query),
+	      "select i.transcript from knownIsoforms i, knownCanonical c where c.transcript='%s' and i.clusterId=c.clusterId and i.transcript <>'%s'",
+	      kgId, kgId);
+    	sr = sqlMustGetResult(conn, query);
+	if (sr != NULL)
+	    {
+	    int printedCnt;
+	    printedCnt = 0;
+	    while ((row = sqlNextRow(sr)) != NULL)
+	    	{
+	        if (printedCnt < 1)
+		    printf("<B>Other UCSC Gene(s) in the same cluster: </B>");
+		else
+		    printf(", ");
+    	    	printf("<A HREF=\"%s%s&hgg_chrom=none\" target=_blank>", "../cgi-bin/hgGene?hgg_gene=", row[0]);
+    	    	printf("%s</A></B>", row[0]);
+	    	printedCnt++;
+		}
+            if (printedCnt >= 1) printf("<BR>\n");
+	    }
+	sqlFreeResult(&sr);
+	}
+    }
+
+printf("<HR>");
+printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName);
+}
+
+void doOmimLocation(struct trackDb *tdb, char *item)
+/* Put up OmimGene track info. */
+{
+genericHeader(tdb, item);
+printOmimLocationDetails(tdb, item, FALSE);
+printTrackHtml(tdb);
+}
+
+void printOmimAvSnpDetails(struct trackDb *tdb, char *itemName, boolean encode)
+/* Print details of an OMIM AvSnp entry. */
+{
+struct sqlConnection *conn  = hAllocConn(database);
+char query[256];
+struct sqlResult *sr;
+char **row;
+char *url = tdb->url;
+char *title1 = NULL;
+char *title2 = NULL;
+char *chrom, *chromStart, *chromEnd;
+char *omimId;
+char *avId;
+char *dbSnpId;
+char *snpId;
+char *chp;
+
+chrom      = cartOptionalString(cart, "c");
+chromStart = cartOptionalString(cart, "o");
+chromEnd   = cartOptionalString(cart, "t");
+
+chp = strstr(itemName, "_");
+*chp = '\0';
+avId = strdup(itemName);
+chp++;
+snpId = strdup(chp);
+chp = strstr(itemName, "#");
+*chp = '\0';
+omimId = strdup(itemName);
+
+if (url != NULL && url[0] != 0)
+    {
+    printf("<B>OMIM Entry ");fflush(stdout);
+    printf("<A HREF=\"%s%s\" target=_blank>", url, itemName);
+    printf("%s</A></B>", itemName);
+    safef(query, sizeof(query),
+    	  "select title1, title2 from omimGeneMap where omimId=%s;", itemName);
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	if (row[0] != NULL)
+	    {
+	    title1 = cloneString(row[0]);
+    	    printf(": %s", title1);
+	    }
+	if (row[1] != NULL)
+	    {
+	    title2 = cloneString(row[1]);
+    	    printf(" %s ", title2);
+	    }
+	}
+    sqlFreeResult(&sr);
+
+    printf("<br><B>Allelic Variant:</B>%s\n", avId);
+
+    safef(query, sizeof(query),
+    	  "select replStr from omimAvRepl where avId=%s;", avId);
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	if (row[0] != NULL)
+	    {
+	    char *replStr;
+	    replStr= cloneString(row[0]);
+    	    printf("<BR><B>Amino Acid Replacement:</B> %s\n", replStr);
+	    }
+	}
+    sqlFreeResult(&sr);
+
+    dbSnpId = strdup("-");
+    printf("<BR>\n");
+    safef(query, sizeof(query),
+    	  "select dbSnpId from omimAvRepl where avId='%s'", avId);
+    
+    sr = sqlMustGetResult(conn, query);
+    row = sqlNextRow(sr);
+    if (row != NULL)
+    	{
+	dbSnpId = cloneString(row[0]);
+	}
+    sqlFreeResult(&sr);
+
+    if (!sameWord(dbSnpId, "-"))
+    	{
+    	printf("<B>dbSNP:</B> \n");
+    	printf("<A HREF=\"%s%s\" target=_blank>",
+	       "../cgi-bin/hgc?g=snp132&i=", dbSnpId);
+    	printf("%s</A></B>", dbSnpId);
+	fflush(stdout);
+	}
+    }
+
+printf("<HR>");
+printPosOnChrom(chrom, atoi(chromStart), atoi(chromEnd), NULL, FALSE, itemName);
+}
+
+void doOmimAvSnp(struct trackDb *tdb, char *item)
+/* Put up OmimGene track info. */
+{
+genericHeader(tdb, item);
+printOmimAvSnpDetails(tdb, item, FALSE);
+printTrackHtml(tdb);
+}
 
-#include "jl.c"
-#include "js.c"
 void doOmimGeneClass3(struct trackDb *tdb, char *item)
 /* Put up OmimGene track info. */
 {
 genericHeader(tdb, item);
 printOmimGeneClass3Details(tdb, item, FALSE);
 printTrackHtml(tdb);
 }
 
 void doOmimGene(struct trackDb *tdb, char *item)
 /* Put up OmimGene track info. */
 {
 genericHeader(tdb, item);
 printOmimGeneDetails(tdb, item, FALSE);
 printTrackHtml(tdb);
 }