0a9a2e76325358ac6a0f15040766e1f9a8a327ff
kate
Tue Jul 11 14:34:46 2017 -0700
Add some links out and details from SNP and GWAS tracks. refs #1646
diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c
index 6a46cf6..6933274 100644
--- src/hg/hgc/gtexEqtlClusterClick.c
+++ src/hg/hgc/gtexEqtlClusterClick.c
@@ -1,127 +1,149 @@
/* 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, int end, char *table)
/* Retrieve this item from the track table */
{
char *gene = firstWordInLine(cloneString(item));
struct sqlConnection *conn = hAllocConn(database);
struct gtexEqtlCluster *eqtls = NULL, *eqtl;
char **row;
int offset;
char where[512];
sqlSafefFrag(where, sizeof(where), "target='%s'", gene);
struct sqlResult *sr = hRangeQuery(conn, table, chrom, start, end, where, &offset);
while ((row = sqlNextRow(sr)) != NULL)
{
eqtl = gtexEqtlClusterLoad(row+offset);
slAddHead(&eqtls, eqtl);
}
slReverse(&eqtls);
sqlFreeResult(&sr);
hFreeConn(&conn);
return eqtls;
}
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 = cartInt(cart, "t");
struct gtexEqtlCluster *eqtl = getGtexEqtl(item, chrom, start, end, 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;
struct sqlConnection *conn = hAllocConn(database);
char *geneName = eqtl->target;
char *desc = getGeneDescription(conn, geneName);
printf("Gene: ");
if (desc == NULL)
- printf("%s
\n", geneName);
+ 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);
+char query[256];
+printf("
Variant: %s ", eqtl->name);
+if (startsWith("rs", eqtl->name))
+ {
+ printDbSnpRsUrl(eqtl->name, "dbSNP");
+ sqlSafef(query, sizeof query, "SELECT alleleFreqs FROM snp147 WHERE name='%s'", eqtl->name);
+ char *freqs = sqlQuickString(conn, query);
+ printf("
Allele frequencies: %s\n", freqs);
+ sqlSafef(query, sizeof query, "SELECT count(*) FROM gwasCatalog WHERE name='%s'", eqtl->name);
+ int count = sqlQuickNum(conn, query);
+ if (count)
+ {
+ sqlSafef(query, sizeof query, "SELECT trait FROM gwasCatalog WHERE name='%s' LIMIT 1",
+ eqtl->name);
+ char *trait = sqlQuickString(conn, query);
+ printf("
GWAS disease or trait");
+ if (count > 1)
+ printf(" (1 of %d)", count);
+ printf(": %s "
+ "GWAS Catalog\n", trait, eqtl->name);
+ }
+ }
+else
+ printf("%s\n", eqtl->name);
printf("
Position: %s\n", posLink);
printf("
Score: %d\n", eqtl->score);
#define FLANK 1000
-char query[256];
sqlSafef(query, sizeof query, "SELECT MIN(chromStart) from %s WHERE target='%s'",
tdb->table, eqtl->target);
start = sqlQuickNum(conn, query) - FLANK;
sqlSafef(query, sizeof query, "SELECT MAX(chromEnd) from %s WHERE target='%s'",
tdb->table, eqtl->target);
end = sqlQuickNum(conn, query) + FLANK;
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, including +-%dbp flank)\n",
posLink, end-start, FLANK);
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");
+webNewSection("eQTL Cluster Details");
printf("
Tissue | Effect | Probability | |
---|---|---|---|
%s | %s%0.2f | %0.2f |