7c2d98b2096ecfe0c2a45c4a8b81a0fd41788879
kate
  Wed Jul 5 14:45:11 2017 -0700
Cleanup before merge. refs #15646
diff --git src/hg/hgc/gtexEqtlClusterClick.c src/hg/hgc/gtexEqtlClusterClick.c
index dc4b664..6a46cf6 100644
--- src/hg/hgc/gtexEqtlClusterClick.c
+++ src/hg/hgc/gtexEqtlClusterClick.c
@@ -1,128 +1,127 @@
 /* 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);
 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("
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");
 printf("
| Tissue | Effect | Probability | |
|---|---|---|---|
| %s | %s%0.2f | %0.2f |