6eb7b642e4d1286b4662ea3d527a9bc09b17db70 kate Wed May 4 10:53:50 2016 -0700 Performance work: Add measureTiming support. Also, restructure GTEx to move heavy lifting to print routine so closing section will save time. Also, a few label changes for expression sections. refs #17244 diff --git src/hg/hgGene/gtex.c src/hg/hgGene/gtex.c index 8326082..59ecbbe 100644 --- src/hg/hgGene/gtex.c +++ src/hg/hgGene/gtex.c @@ -4,87 +4,81 @@ * 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 struct gtexSectionInfo - { - char *ensGene; - float totalLevel; - float highestLevel; - char *highestTissue; - } gtexGeneInfo; - static boolean gtexExists(struct section *section, struct sqlConnection *conn, char *geneId) /* Return TRUE if GTEx data exists for this gene */ { // Lookup geneId 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 char query[512]; if (!sqlTableExists(conn, "gtexGene")) return FALSE; sqlSafef(query, sizeof(query), "SELECT ensGene.name2 FROM ensGene, knownToEnsembl WHERE " "knownToEnsembl.name='%s' AND " "ensGene.name=SUBSTRING_INDEX(knownToEnsembl.value,'.',1)", geneId); 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; - -// get gtexGene median expression values -sqlSafef(query, sizeof(query), - "SELECT * from gtexGene WHERE geneId='%s'", ensGene); -struct gtexGeneBed *gtexGene = gtexGeneBedLoadByQuery(conn, query); -assert(gtexGene); -gtexGeneInfo.ensGene = cloneString(ensGene); -gtexGeneInfo.totalLevel = gtexGeneTotalMedianExpression(gtexGene); -int tisId; -gtexGeneInfo.highestLevel = gtexGeneHighestMedianExpression(gtexGene, &tisId); -gtexGeneInfo.highestTissue = gtexGetTissueDescription(tisId, NULL); -section->items = >exGeneInfo; +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; -struct gtexSectionInfo *info = section->items; -printf("Highest median expression: %0.2f RPKM in %s\n", - info->highestLevel, info->highestTissue); -printf("
Total median expression: %0.2f RPKM

\n", info->totalLevel); -if (gtexGeneBoxplot(info->ensGene, NULL, GTEX_DEFAULT_VERSION, FALSE, &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("    "); -gtexPortalLink(info->ensGene); +gtexPortalLink(ensGene); } 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; }