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