53d0631297a3a456ea701baac52834e870c0d570 fanhsu Mon Jan 24 06:50:01 2011 -0800 Added processing logic for omimGeneClass3 subtrack. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index 77e9aec..6f40019 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -9186,30 +9186,235 @@ 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 printOmimGeneClass3Details(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; + +chrom = cartOptionalString(cart, "c"); +chromStart = cartOptionalString(cart, "o"); +chromEnd = cartOptionalString(cart, "t"); + +if (url != NULL && url[0] != 0) + { + printf("<B>OMIM Gene ");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"); + + 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); + + /* get corresponding KG ID */ + safef(query, sizeof(query), + "select k.transcript from knownCanonical k where k.chrom='%s' and k.chromStart=%s and k.chromEnd=%s", + chrom, chromStart, chromEnd); + sr = sqlMustGetResult(conn, query); + row = sqlNextRow(sr); + if (row != NULL) + { + kgId = cloneString(row[0]); + } + sqlFreeResult(&sr); + + /* use geneSymbol from omimMorbidMap if available */ + if (geneSymbol!= NULL) + { + 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 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); } void printRgdSslpCustomUrl(struct trackDb *tdb, char *itemName, boolean encode) /* Print RGD QTL URL. */ { char *url = tdb->url; char *sslpId; char *chrom, *chromStart, *chromEnd; @@ -23110,30 +23315,34 @@ { doCpgIsland(tdb, item); } else if (sameWord(table, "illuminaProbes")) { doIlluminaProbes(tdb, item); } else if (sameWord(table, "htcIlluminaProbesAlign")) { htcIlluminaProbesAlign(item); } else if (sameWord(table, "switchDbTss")) { doSwitchDbTss(tdb, item); } +else if (sameWord(table, "omimGeneClass3")) + { + doOmimGeneClass3(tdb, item); + } else if (sameWord(table, "omimAv")) { doOmimAv(tdb, item); } else if (sameWord(table, "rgdGene")) { doRgdGene(tdb, item); } else if (sameWord(table, "rgdGene2")) { doRgdGene2(tdb, item); } else if (sameWord(table, "rgdEst")) { doHgRna(tdb, item);