698521a7d4cd9d9ecf29b9c316a59060f01ef950
kate
  Tue Apr 5 09:57:31 2016 -0700
Fix click box problem -- handling of multi-mapped genes found by QA (Thanks Chris!)

diff --git src/hg/hgc/gtexClick.c src/hg/hgc/gtexClick.c
index 68f4664..9a9973c 100644
--- src/hg/hgc/gtexClick.c
+++ src/hg/hgc/gtexClick.c
@@ -81,41 +81,43 @@
 struct tempName pngTn;
 trashDirFile(&pngTn, "hgc", "gtexGene", ".png");
 char cmd[256];
 
 /* Exec R in quiet mode, without reading/saving environment or workspace */
 safef(cmd, sizeof(cmd), "Rscript --vanilla --slave hgcData/gtexBoxplot.R %s %s %s %s %s %s",  
                                 gtexGene->name, dfTn.forCgi, pngTn.forHtml, 
                                 doLogTransform ? "log=TRUE" : "log=FALSE", "order=alpha", version);
 //NOTE: use "order=score" to order bargraph by median RPKM, descending
 
 int ret = system(cmd);
 if (ret == 0)
     printf("<IMG SRC = \"%s\" BORDER=1><BR>\n", pngTn.forHtml);
 }
 
-struct gtexGeneBed *getGtexGene(char *item, char *table)
+static struct gtexGeneBed *getGtexGene(char *item, char *chrom, int start, int end, char *table)
 /* Retrieve gene info for this item from the main track table */
 {
 struct gtexGeneBed *gtexGene = NULL;
 struct sqlConnection *conn = hAllocConn(database);
 char **row;
 char query[512];
 struct sqlResult *sr;
 if (sqlTableExists(conn, table))
     {
-    sqlSafef(query, sizeof(query), "select * from %s where name = '%s'", table, item);
+    sqlSafef(query, sizeof query, "select * from %s where name = '%s' and chrom = '%s' "
+                                  " and chromStart = %d and chromEnd = %d", 
+                                        table, item, chrom, start, end);
     sr = sqlGetResult(conn, query);
     row = sqlNextRow(sr);
     if (row != NULL)
         {
         gtexGene = gtexGeneBedLoad(row);
         }
     sqlFreeResult(&sr);
     }
 hFreeConn(&conn);
 return gtexGene;
 }
 
 struct tissueSampleVals *getTissueSampleVals(struct gtexGeneBed *gtexGene, boolean doLogTransform,
                                                 char *version, double *maxValRet)
 /* Get sample data for the gene.  Optionally log10 it. Return maximum value seen */
@@ -204,31 +206,33 @@
     }
 else
     {
     sqlSafef(query, sizeof(query), 
                 "select kgXref.description from kgXref where geneSymbol='%s'", gtexGene->name);
     }
 struct sqlConnection *conn = hAllocConn(database);
 char *desc = sqlQuickString(conn, query);
 hFreeConn(&conn);
 return desc;
 }
 
 void doGtexGeneExpr(struct trackDb *tdb, char *item)
 /* Details of GTEx gene expression item */
 {
-struct gtexGeneBed *gtexGene = getGtexGene(item, tdb->table);
+int start = cartInt(cart, "o");
+int end = cartInt(cart, "t");
+struct gtexGeneBed *gtexGene = getGtexGene(item, seqName, start, end, tdb->table);
 if (gtexGene == NULL)
     errAbort("Can't find gene %s in GTEx gene table %s\n", item, tdb->table);
 
 genericHeader(tdb, item);
 printf("<b>Gene: </b>");
 char *desc = getGeneDescription(gtexGene);
 if (desc == NULL)
     printf("%s<br>\n", gtexGene->name);
 else
     {
     printf("<a target='_blank' href='%s?db=%s&hgg_gene=%s'>%s</a><br>\n", 
                         hgGeneName(), database, gtexGene->name, gtexGene->name);
     printf("<b>Description:</b> %s<br>\n", desc);
     }
 printf("<b>Ensembl gene ID:</b> %s<br>\n", gtexGene->geneId);