13d5f7b0d091ed228affad0262face3167f00d2e kate Wed Aug 24 14:52:52 2016 -0700 Gene page link to browser from GTEx section now includes gene position, so if launched from other than browser (e.g. Gene Sorter) it will show gene region. refs #17288 diff --git src/hg/hgGene/gtex.c src/hg/hgGene/gtex.c index f05f2be..32b9494 100644 --- src/hg/hgGene/gtex.c +++ src/hg/hgGene/gtex.c @@ -1,100 +1,102 @@ /* GTEx - Gene expression from the Genotype Tissue Expression project. */ /* Copyright (C) 2016 The Regents of the University of California * See README in this or parent directory for licensing information. */ #include "common.h" #include "hash.h" #include "linefile.h" #include "dystring.h" #include "cart.h" #include "cheapcgi.h" #include "hdb.h" #include "hgGene.h" #include "gtexInfo.h" #include "gtexTissue.h" #include "gtexGeneBed.h" #include "gtexUi.h" static boolean gtexExists(struct section *section, struct sqlConnection *conn, char *ucscId) /* Return TRUE if GTEx data exists for this gene */ { char query[512]; if (!sqlTableExists(conn, "gtexGene")) return FALSE; #define NO_ENSGENE 1 // NOTE: Can remove this ifdef when/if hg38 ensGene is pushed #ifdef NO_ENSGENE if (sameString(database, "hg38")) { // Get ENSG (w/ version) from knownCanonical sqlSafef(query, sizeof(query), "SELECT SUBSTRING_INDEX(knownCanonical.protein,'.',1) FROM " "knownCanonical, knownIsoforms WHERE " "knownIsoforms.transcript='%s' AND " "knownCanonical.clusterId=knownIsoforms.clusterId", ucscId); } else #endif // Lookup ucsc gene ID in knownToEnsembl to get ENST (w/ version), look that up (w/o version) // in ensGene to get ENSG (w/o version), and save it for printer sqlSafef(query, sizeof(query), "SELECT ensGene.name2 FROM ensGene, knownToEnsembl WHERE " "knownToEnsembl.name='%s' AND " "ensGene.name=SUBSTRING_INDEX(knownToEnsembl.value,'.',1)", ucscId); char *ensGene = sqlQuickString(conn, query); if (!ensGene) return FALSE; // construct full accession (with version) in gtexGene table sqlSafef(query, sizeof(query), "select geneId from gtexGene where geneId like '%s%%'", ensGene); ensGene = sqlQuickString(conn, query); if (!ensGene) return FALSE; section->items = ensGene; return TRUE; } static void gtexPrint(struct section *section, struct sqlConnection *conn, char *geneId) /* Print out GTEx gene expression boxplot */ { char *ensGene = section->items; // get gtexGene median expression values char query[512]; sqlSafef(query, sizeof(query), "SELECT * from gtexGene WHERE geneId='%s'", ensGene); struct gtexGeneBed *gtexGene = gtexGeneBedLoadByQuery(conn, query); assert(gtexGene); int tisId; float highestLevel = gtexGeneHighestMedianExpression(gtexGene, &tisId); char *highestTissue = gtexGetTissueDescription(tisId, NULL); float totalLevel = gtexGeneTotalMedianExpression(gtexGene); printf("Highest median expression: %0.2f RPKM in %s\n", highestLevel, highestTissue); printf("
Total median expression: %0.2f RPKM

\n", totalLevel); struct tempName pngTn; if (gtexGeneBoxplot(ensGene, NULL, GTEX_DEFAULT_VERSION, FALSE, &pngTn)) hPrintf("
\n", pngTn.forHtml); -hPrintf("
" - "View in GTEx track of Genome Browser", cartSidUrlString(cart)); +hPrintf("
" + "View in GTEx track of Genome Browser", + cartSidUrlString(cart), curGeneChrom, curGeneStart, curGeneEnd); hPrintf("    "); -gtexPortalLink(ensGene); +//gtexPortalLink(ensGene); +// Link is broken as of 8/23/16. Broad has been alerted. } struct section *gtexSection(struct sqlConnection *conn, struct hash *sectionRa) /* Create GTEx gene expression section. */ { struct section *section = sectionNew(sectionRa, "gtex"); if (section != NULL) { section->exists = gtexExists; section->print = gtexPrint; } return section; }