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 @@ -51,71 +51,93 @@ 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("<b>Gene: </b>"); if (desc == NULL) - printf("%s<br>\n", geneName); + printf("%s\n", geneName); else { printf("<a target='_blank' href='%s?db=%s&hgg_gene=%s'>%s</a><br>\n", hgGeneName(), database, geneName, geneName); printf("<b>Description:</b> %s\n", desc); } 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); // TODO: Consider adding Ensembl gene ID, GENCODE biotype and class (as in gtexGene track) -printf("<br><b>Variant:</b> %s\n", eqtl->name); +char query[256]; +printf("<br><b>Variant: </b>%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("<br><b>Allele frequencies:</b> %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("<br><b>GWAS disease or trait"); + if (count > 1) + printf(" (1 of %d)", count); + printf(": </b>%s <a target='_blank' href='https://www.ebi.ac.uk/gwas/search?query=%s'>" + "GWAS Catalog</a>\n", trait, eqtl->name); + } + } +else + printf("%s\n", eqtl->name); printf("<br><b>Position:</b> %s\n", posLink); printf("<br><b>Score:</b> %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,"<a href='%s&db=%s&position=%s%%3A%d-%d'>%s:%d-%d</a>", hgTracksPathAndSettings(), database, eqtl->chrom, start+1, end, eqtl->chrom, start+1, end); printf("<br><b>Region containing eQTLs for this gene:</b> %s (%d bp, including +-%dbp flank)\n", posLink, end-start, FLANK); printf("<br><a target='_blank' href='https://www.gtexportal.org/home/bubbleHeatmapPage/%s'>" "View eQTLs for this gene at the GTEx portal<a>\n", geneName); printf("<br><b>Number of tissues with this eQTL:</b> %d\n", eqtl->expCount); hFreeConn(&conn); -webNewSection("eQTL cluster details"); +webNewSection("eQTL Cluster Details"); printf("<table id='eqtls' cellspacing=1 cellpadding=3>\n"); 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();