707bd9f05c4c104fb6a90a680aa72d38895b67a3 kate Mon Jun 26 18:32:29 2017 -0700 Details page. refs #15646 diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c new file mode 100644 index 0000000..a63d938 --- /dev/null +++ src/hg/hgc/gtexEqtlClusterClick.c @@ -0,0 +1,72 @@ +/* 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 "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; +} + +void doGtexEqtlDetails(struct trackDb *tdb, char *item) +/* Details of GTEx eQTL item */ +{ +char *chrom = cartString(cart, "c"); +int start = cartInt(cart, "o"); +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("<b>Gene:</b> %s \n", eqtl->target); +char posLink[1024]; +safef(posLink, sizeof(posLink),"<a href=\"%s&db=%s&position=%s%%3A%d-%d\">%s:%d-%d</a>", + hgTracksPathAndSettings(), database, + eqtl->chrom, eqtl->chromStart+1, eqtl->chromEnd, + eqtl->chrom, eqtl->chromStart+1, eqtl->chromEnd); +printf("<br><b>Variant:</b> %s\n", eqtl->name); +printf("<br><b>Position:</b> %s\n", posLink); +printf("<br><b>Number of tissues with this eQTL:</b> %d\n", eqtl->expCount); +printf("<br><b>Score:</b> %d\n", eqtl->score); +webNewSection("eQTL effect size and causal probability by tissue"); +printf("<table id='eqtls' cellspacing=1 cellpadding=3>\n"); +//printf("<style>#eqtls th {text-align: left; background-color: #eaca92;}</style>"); +printf("<style>#eqtls th {text-align: left; background-color: #F3E0BE;}</style>"); +printf("<tr><th> </th><th>Tissue</th><th>Effect </th><th>Probability </th></tr>\n"); +for (i=0; i<eqtl->expCount; i++) + { + double effect= eqtl->expScores[i]; + double prob = eqtl->expProbs[i]; + struct gtexTissue *tis = (struct gtexTissue *)hashFindVal(tissueHash, eqtl->expNames[i]); + unsigned color = tis ? tis->color : 0; // BLACK + char *name = tis ? tis->description : "Unknown"; + printf("<tr><td bgcolor=#%06X></td><td>%s</td><td>%s%0.2f</td><td>%0.2f</td></tr>\n", + color, name, effect < 0 ? "" : "+", effect, prob); + } +printf("</table>"); +webEndSection(); +webNewEmptySection(); +printTrackHtml(tdb); +} + + +