5239a72b96078821a5b34d7fda0cf09fa5b5340a
kate
Mon Sep 18 13:56:59 2017 -0700
Add units to effect size on details page table. refs #15646
diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c
index 7152e66..b5de604 100644
--- src/hg/hgc/gtexEqtlClusterClick.c
+++ src/hg/hgc/gtexEqtlClusterClick.c
@@ -1,188 +1,188 @@
/* 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);
}
static void printMinorAlleleFreq(char *rsId, struct sqlConnection *conn)
/* Print minor allele frequency for a SNP (from UCSC dbSNP table) */
{
#define SNP_COMMON_SUFFIX "Common"
#define MAX_ALLELE_COUNT 10
char *snpTable = hFindLatestSnpTableConn(conn, SNP_COMMON_SUFFIX);
if (!snpTable)
return;
char query[256];
sqlSafef(query, sizeof query, "SELECT alleleFreqs FROM %s WHERE name='%s'", snpTable, rsId);
double freqs[MAX_ALLELE_COUNT];
int count = sqlDoubleArray(sqlQuickString(conn, query), freqs, MAX_ALLELE_COUNT);
doubleSort(count, freqs);
printf("
Minor allele frequency (1000 Genomes): %.0f%%\n", 100.0 * freqs[count-2]);
}
static void printGwasCatalogTrait(char *rsId, struct sqlConnection *conn)
/* Print trait/disease for a SNP (from UCSC gwasCatalog table) */
{
char query[256];
sqlSafef(query, sizeof query, "SELECT count(*) FROM gwasCatalog WHERE name='%s'", rsId);
int count = sqlQuickNum(conn, query);
if (count)
{
sqlSafef(query, sizeof query, "SELECT trait FROM gwasCatalog WHERE name='%s' LIMIT 1", rsId);
char *trait = sqlQuickString(conn, query);
printf("
GWAS disease or trait");
if (count > 1)
printf(" (1 of %d)", count);
printf(": %s "
"GWAS Catalog\n", trait, rsId);
}
}
static void printEqtlRegion(struct gtexEqtlCluster *eqtl, char *table, struct sqlConnection *conn)
/* Print position of region encompassing all identified eQTL's for this gene */
{
#define FLANK 1000
char query[256];
sqlSafef(query, sizeof query, "SELECT MIN(chromStart) from %s WHERE target='%s'",
table, eqtl->target);
int start = sqlQuickNum(conn, query) - FLANK;
sqlSafef(query, sizeof query, "SELECT MAX(chromEnd) from %s WHERE target='%s'",
table, eqtl->target);
int end = sqlQuickNum(conn, query) + FLANK;
char posLink[1024];
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);
}
static void printClusterDetails(struct gtexEqtlCluster *eqtl, char *table)
/* Print details of an eQTL cluster */
{
webNewSection("eQTL Cluster Details");
char *version = gtexVersion(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);
printf("
Tissue | Effect | P-Value (-log10) | Probability | |
---|---|---|---|---|
Tissue | Effect (FPKM) | P-Value (-log10) | Probability | |
%s | %s%0.2f | %0.2f | %0.2f |