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
\n", jo.mouseSymbol); } sqlFreeResult(&sr); } if (startsWith("hg", database)) { printf("\n"); printf("AceView: "); printf("", rl->name); printf("%s
\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("\n"); + +printf("

Known Gene %s

\n", rl->name); +printf("KnownGene: mrnaAcc); +if (ver > 0) + printf("\" TARGET=_blank>%s.%d", rl->mrnaAcc, ver); +else + printf("\" TARGET=_blank>%s", rl->mrnaAcc); +fflush(stdout); + +puts("
"); +char *desc = gbCdnaGetDescription(conn, rl->mrnaAcc); +if (desc != NULL) + { + printf("Description: "); + htmlTextOut(desc); + printf("
\n"); + } + +printCcdsForSrcDb(conn, rl->mrnaAcc); + +cdsCmpl = getRefSeqCdsCompleteness(conn, sqlRnaName); +if (cdsCmpl != NULL) + { + printf("CDS: %s
", cdsCmpl); + } +if (rl->omimId != 0) + { + printf("OMIM: omimId); + printf("\" TARGET=_blank>%d
\n", rl->omimId); + } +if (rl->locusLinkId != 0) + { + printf("Entrez Gene: "); + printf("", + rl->locusLinkId); + printf("%d
\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("Mouse Genome Informatics: "); + mgiID = cloneString(row[0]); + + printf("%s
\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("\n\n"); +prKnownGeneInfo(conn, rnaName, sqlRnaName, rl); + +printf("\n
\n"); + +/* optional summary text */ +summary = getRefSeqSummary(conn, kgId); +if (summary != NULL) + { + htmlHorizontalLine(); + printf("

Summary of %s

\n", kgId); + printf("

%s

\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("

mRNA/Genomic Alignments

"); +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")) {