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); }