8d724c5b24b55e805c0f57542676a35f5dc30494
kate
Thu Jun 29 18:18:40 2017 -0700
Expand details page. refs #15646
diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c
index a63d938..e5fb972 100644
--- src/hg/hgc/gtexEqtlClusterClick.c
+++ src/hg/hgc/gtexEqtlClusterClick.c
@@ -1,65 +1,110 @@
/* Details page for GTEx eQTL Clusters */
/* Copyright (C) 2017 The Regents of the University of California
* See README in this or parent directory for licensing information. */
#include "common.h"
+#include "hCommon.h"
#include "web.h"
#include "gtexTissue.h"
#include "gtexInfo.h"
#include "gtexEqtlCluster.h"
#include "hgc.h"
static struct gtexEqtlCluster *getGtexEqtl(char *item, char *chrom, int start, char *table)
/* Retrieve this item from the track table */
{
char *gene = firstWordInLine(cloneString(item));
struct sqlConnection *conn = hAllocConn(database);
char query[512];
sqlSafef(query, sizeof(query), "SELECT * FROM %s WHERE chrom='%s' AND chromStart=%d AND target='%s'",
table, chrom, start, gene);
struct gtexEqtlCluster *eqtl = gtexEqtlClusterLoadByQuery(conn, query);
hFreeConn(&conn);
return eqtl;
}
+static char *getGeneDescription(struct sqlConnection *conn, char *geneName)
+/* Return description from KnownGenes track */
+{
+char query[256];
+sqlSafef(query, sizeof query,
+ "SELECT kgXref.description FROM kgXref WHERE geneSymbol='%s'", geneName);
+return sqlQuickString(conn, query);
+}
+
void doGtexEqtlDetails(struct trackDb *tdb, char *item)
/* Details of GTEx eQTL item */
{
char *chrom = cartString(cart, "c");
int start = cartInt(cart, "o");
+int end;
struct gtexEqtlCluster *eqtl = getGtexEqtl(item, chrom, start, tdb->table);
genericHeader(tdb, item);
char *version = gtexVersion(tdb->table);
struct gtexTissue *tissues = gtexGetTissues(version);
struct hash *tissueHash = hashNew(0);
struct gtexTissue *tis = NULL;
for (tis = tissues; tis != NULL; tis = tis->next)
hashAdd(tissueHash, tis->name, tis);
int i;
-printf("Gene: %s \n", eqtl->target);
+
+struct sqlConnection *conn = hAllocConn(database);
+char *geneName = eqtl->target;
+char *desc = getGeneDescription(conn, geneName);
+printf("Gene: ");
+if (desc == NULL)
+ printf("%s
\n", geneName);
+else
+ {
+ printf("%s
\n",
+ hgGeneName(), database, geneName, geneName);
+ printf("Description: %s\n", desc);
+ }
char posLink[1024];
safef(posLink, sizeof(posLink),"%s:%d-%d",
hgTracksPathAndSettings(), database,
eqtl->chrom, eqtl->chromStart+1, eqtl->chromEnd,
eqtl->chrom, eqtl->chromStart+1, eqtl->chromEnd);
+
+// TODO: Consider adding Ensembl gene ID, GENCODE biotype and class (as in gtexGene track)
printf("
Variant: %s\n", eqtl->name);
+
printf("
Position: %s\n", posLink);
-printf("
Number of tissues with this eQTL: %d\n", eqtl->expCount);
printf("
Score: %d\n", eqtl->score);
-webNewSection("eQTL effect size and causal probability by tissue");
+
+char query[256];
+sqlSafef(query, sizeof query, "SELECT MIN(chromStart) from %s WHERE target='%s'",
+ tdb->table, eqtl->target);
+start = sqlQuickNum(conn, query);
+sqlSafef(query, sizeof query, "SELECT MAX(chromStart) from %s WHERE target='%s'",
+ tdb->table, eqtl->target);
+end = sqlQuickNum(conn, query);
+safef(posLink, sizeof(posLink),"%s:%d-%d",
+ hgTracksPathAndSettings(), database,
+ eqtl->chrom, start+1, end,
+ eqtl->chrom, start+1, end);
+printf("
Region containing eQTLs for this gene: %s (%d bp)\n", posLink, end-start);
+printf("
"
+ "View eQTLs for this gene at the GTEx portal\n",
+ geneName);
+
+printf("
Number of tissues with this eQTL: %d\n", eqtl->expCount);
+hFreeConn(&conn);
+
+webNewSection("eQTL cluster details");
printf("
Tissue | Effect | Probability | |
---|---|---|---|
%s | %s%0.2f | %0.2f |