796941fcefa1a7ff1e5fa743cd360856e2f768ee fanhsu Fri Nov 5 16:41:21 2010 -0700 Updated for RGD Genes. diff --git src/hg/hgc/hgc.c src/hg/hgc/hgc.c index efc6fc5..3f9fd49 100644 --- src/hg/hgc/hgc.c +++ src/hg/hgc/hgc.c @@ -9835,30 +9835,199 @@ printf("%s</A><BR>\n", jo.mouseSymbol); } sqlFreeResult(&sr); } if (startsWith("hg", database)) { printf("\n"); printf("<B>AceView:</B> "); printf("<A HREF = \"http://www.ncbi.nlm.nih.gov/IEB/Research/Acembly/av.cgi?db=human&l=%s\" TARGET=_blank>", rl->name); printf("%s</A><BR>\n", rl->name); } printStanSource(rl->mrnaAcc, "mrna"); } +void prKnownGeneInfo(struct sqlConnection *conn, char *rnaName, + char *sqlRnaName, struct refLink *rl) +/* print basic details information and links for a Known Gene */ +{ +struct sqlResult *sr; +char **row; +char query[256]; +int ver = gbCdnaGetVersion(conn, rl->mrnaAcc); +char *cdsCmpl = NULL; + +printf("<td valign=top nowrap>\n"); + +printf("<H2>Known Gene %s</H2>\n", rl->name); +printf("<B>KnownGene:</B> <A HREF=\""); +printEntrezNucleotideUrl(stdout, rl->mrnaAcc); +if (ver > 0) + printf("\" TARGET=_blank>%s.%d</A>", rl->mrnaAcc, ver); +else + printf("\" TARGET=_blank>%s</A>", rl->mrnaAcc); +fflush(stdout); + +puts("<BR>"); +char *desc = gbCdnaGetDescription(conn, rl->mrnaAcc); +if (desc != NULL) + { + printf("<B>Description:</B> "); + htmlTextOut(desc); + printf("<BR>\n"); + } + +printCcdsForSrcDb(conn, rl->mrnaAcc); + +cdsCmpl = getRefSeqCdsCompleteness(conn, sqlRnaName); +if (cdsCmpl != NULL) + { + printf("<B>CDS:</B> %s<BR>", cdsCmpl); + } +if (rl->omimId != 0) + { + printf("<B>OMIM:</B> <A HREF=\""); + printEntrezOMIMUrl(stdout, rl->omimId); + printf("\" TARGET=_blank>%d</A><BR>\n", rl->omimId); + } +if (rl->locusLinkId != 0) + { + printf("<B>Entrez Gene:</B> "); + printf("<A HREF=\"http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%d\" TARGET=_blank>", + rl->locusLinkId); + printf("%d</A><BR>\n", rl->locusLinkId); + + if ( (strstr(database, "mm") != NULL) && hTableExists(database, "MGIid")) + { + char *mgiID; + safef(query, sizeof(query), "select MGIid from MGIid where LLid = '%d';", + rl->locusLinkId); + + sr = sqlGetResult(conn, query); + if ((row = sqlNextRow(sr)) != NULL) + { + printf("<B>Mouse Genome Informatics:</B> "); + mgiID = cloneString(row[0]); + + printf("<A HREF=\"http://www.informatics.jax.org/searches/accession_report.cgi?id=%s\" TARGET=_BLANK>%s</A><BR>\n",mgiID, mgiID); + } + else + { + /* per Carol Bult from Jackson Lab 4/12/02, JAX do not always agree + * with Locuslink on seq to gene association. + * Thus, not finding a MGIid even if a LocusLink ID + * exists is always a possibility. */ + } + sqlFreeResult(&sr); + } + } +printStanSource(rl->mrnaAcc, "mrna"); +} + +void doKnownGene(struct trackDb *tdb, char *rnaName) +/* Process click on a known gene. */ +{ +struct sqlConnection *conn = hAllocConn(database); +struct sqlResult *sr; +char **row; +char query[256]; +char *kgId = cartString(cart, "i"); +char *sqlRnaName = rnaName; +char *summary = NULL; +struct refLink rlR; +struct refLink *rl; +int start = cartInt(cart, "o"); +int left = cartInt(cart, "l"); +int right = cartInt(cart, "r"); +char *chrom = cartString(cart, "c"); +/* Make sure to escape single quotes for DB parseability */ +if (strchr(rnaName, '\'')) + { + sqlRnaName = replaceChars(rnaName, "'", "''"); + } +/* get refLink entry */ +if (strstr(rnaName, "NM_") != NULL) + { + safef(query, sizeof(query), "select * from refLink where mrnaAcc = '%s'", sqlRnaName); + sr = sqlGetResult(conn, query); + if ((row = sqlNextRow(sr)) == NULL) + errAbort("Couldn't find %s in refLink table - database inconsistency.", rnaName); + rl = refLinkLoad(row); + sqlFreeResult(&sr); + } +else + { + rlR.name = strdup(kgId); + rlR.mrnaAcc = strdup(kgId); + rlR.locusLinkId = 0; + rl = &rlR; + } + +cartWebStart(cart, database, "Known Gene"); +printf("<table border=0>\n<tr>\n"); +prKnownGeneInfo(conn, rnaName, sqlRnaName, rl); + +printf("</tr>\n</table>\n"); + +/* optional summary text */ +summary = getRefSeqSummary(conn, kgId); +if (summary != NULL) + { + htmlHorizontalLine(); + printf("<H3>Summary of %s</H3>\n", kgId); + printf("<P>%s</P>\n", summary); + freeMem(summary); + } +htmlHorizontalLine(); + +/* print alignments that track was based on */ +{ +char *aliTbl; + +if (strstr(kgId, "NM_")) + { + aliTbl = strdup("refSeqAli"); + } +else + { + aliTbl = strdup("all_mrna"); + } +struct psl *pslList = getAlignments(conn, aliTbl, rl->mrnaAcc); +printf("<H3>mRNA/Genomic Alignments</H3>"); +printAlignments(pslList, start, "htcCdnaAli", aliTbl, kgId); +} +htmlHorizontalLine(); + +struct palInfo *palInfo = NULL; + +if (genbankIsRefSeqCodingMRnaAcc(rnaName)) + { + AllocVar(palInfo); + palInfo->chrom = chrom; + palInfo->left = left; + palInfo->right = right; + palInfo->rnaName = rnaName; + } + +geneShowPosAndLinksPal(rl->mrnaAcc, rl->protAcc, tdb, "refPep", "htcTranslatedProtein", + "htcRefMrna", "htcGeneInGenome", "mRNA Sequence",palInfo); + +printTrackHtml(tdb); +hFreeConn(&conn); +} + void doRefGene(struct trackDb *tdb, char *rnaName) /* Process click on a known RefSeq gene. */ { struct sqlConnection *conn = hAllocConn(database); struct sqlResult *sr; char **row; char query[256]; char *sqlRnaName = rnaName; char *summary = NULL; boolean isXeno = sameString(tdb->table, "xenoRefGene"); struct refLink *rl; int start = cartInt(cart, "o"); int left = cartInt(cart, "l"); int right = cartInt(cart, "r"); char *chrom = cartString(cart, "c"); @@ -22826,30 +22995,34 @@ { doRgdQtl(tdb, item); } else if (sameWord(table, "superfamily")) { doSuperfamily(tdb, item, NULL); } else if (sameWord(table, "ensGene") || sameWord (table, "ensGeneNonCoding")) { doEnsemblGene(tdb, item, NULL); } else if (sameWord(table, "xenoRefGene")) { doRefGene(tdb, item); } +else if (sameWord(table, "knownGene")) + { + doKnownGene(tdb, item); + } else if (sameWord(table, "refGene")) { doRefGene(tdb, item); } else if (sameWord(table, "ccdsGene")) { doCcdsGene(tdb, item); } else if (sameWord(table, "mappedRefSeq")) /* human refseqs on chimp browser */ { doRefGene(tdb, item); } else if (sameWord(table, "mgcGenes") || sameWord(table, "mgcFullMrna")) {