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/hgTracks/gtexTracks.c src/hg/hgTracks/gtexTracks.c
index d7704f7..391a68c 100644
--- src/hg/hgTracks/gtexTracks.c
+++ src/hg/hgTracks/gtexTracks.c
@@ -911,44 +911,44 @@
 }
 
 static void gtexGeneMapItem(struct track *tg, struct hvGfx *hvg, void *item, char *itemName, 
                         char *mapItemName, int start, int end, int x, int y, int width, int height)
 /* Create a map box on gene model and label, and one for each tissue (bar in the graph) in
  * pack or full mode.  Just single map for squish/dense modes */
 {
 if (tg->visibility == tvDense)
     {
     genericMapItem(tg, hvg, item, itemName, itemName, start, end, x, y, width, height);
     return;
     }
 struct gtexGeneInfo *geneInfo = item;
 struct gtexGeneBed *geneBed = geneInfo->geneBed;
 struct gtexGeneExtras *extras = (struct gtexGeneExtras *)tg->extraUiData;
+int geneStart = geneBed->chromStart;
+int geneEnd = geneBed->chromEnd;
 if (tg->visibility == tvSquish)
     {
     int tisId = maxTissueForGene(geneBed);
     char *maxTissue = "";
     if (tisId > 1)
         maxTissue = getTissueDescription(tisId, extras->version);
     char buf[128];
     safef(buf, sizeof buf, "%s %s", geneBed->name, maxTissue);
     int x1, x2;
-    int s = geneBed->chromStart;
-    int e = geneBed->chromEnd;
-    getItemX(s, e, &x1, &x2);
+    getItemX(geneStart, geneEnd, &x1, &x2);
     int width = max(1, x2-x1);
-    mapBoxHc(hvg, s, e, x1, y, width, height, 
+    mapBoxHc(hvg, geneStart, geneEnd, x1, y, width, height, 
                  tg->track, mapItemName, buf);
     return;
     }
 int topGraphHeight = gtexGeneGraphHeight(tg, geneInfo, TRUE);
 topGraphHeight = max(topGraphHeight, tl.fontHeight);        // label
 int yZero = topGraphHeight + y - 1;  // yZero is bottom of graph
 int x1 = insideX;
 
 
 // add maps to tissue bars in expresion graph
 struct gtexTissue *tissues = getTissues(extras->version);
 struct gtexTissue *tissue = NULL;
 int barWidth = gtexBarWidth();
 int padding = gtexGraphPadding();
 double maxMedian = ((struct gtexGeneExtras *)tg->extraUiData)->maxMedian;
@@ -967,65 +967,66 @@
     }
 int i = 0;
 
 double viewMax = (double)cartUsualIntClosestToHome(cart, tg->tdb, FALSE, 
                                 GTEX_MAX_LIMIT, GTEX_MAX_LIMIT_DEFAULT);
 for (tissue = tissues; tissue != NULL; tissue = tissue->next, i++)
     {
     if (!filterTissue(tg, tissue->name))
         continue;
     double expScore =  (geneInfo->medians1 ? geneInfo->medians1[i] : geneBed->expScores[i]);
     int height = valToClippedHeight(expScore, maxMedian, viewMax, 
                                         gtexMaxGraphHeight(), extras->doLogTransform);
     char *qualifier = NULL;
     if (extras->isComparison && extras->isDifference)
         qualifier = "F-M";
-    mapBoxHc(hvg, start, end, x1, yZero-height, barWidth, height, tg->track, mapItemName,  
+    mapBoxHc(hvg, geneStart, geneEnd, x1, yZero-height, barWidth, height, tg->track, mapItemName,  
                 tissueExpressionText(tissue, expScore, extras->doLogTransform, qualifier));
     // add map box to comparison graph
     if (geneInfo->medians2)
         {
         double expScore = geneInfo->medians2[i];
         int height = valToClippedHeight(expScore, maxMedian, viewMax, 
                                         gtexMaxGraphHeight(), extras->doLogTransform);
         int y = yZero + gtexGeneModelHeight(extras) + gtexGeneMargin();  // y is top of bottom graph
         if (extras->isComparison && extras->isDifference)
             qualifier = "M-F";
-        mapBoxHc(hvg, start, end, x1, y, barWidth, height, tg->track, mapItemName,
+        mapBoxHc(hvg, geneStart, geneEnd, x1, y, barWidth, height, tg->track, mapItemName,
                 tissueExpressionText(tissue, expScore, extras->doLogTransform, qualifier));
         }
     x1 = x1 + barWidth + padding;
     }
 
 // add map boxes with description to gene model
 if (geneInfo->geneModel && geneInfo->description)
     {
+    // perhaps these are just start, end ?
+    int itemStart = geneInfo->geneModel->txStart;
+    int itemEnd = gtexGeneItemEnd(tg, item);
     int x1, x2;
-    int s = geneInfo->geneModel->txStart;
-    int e = gtexGeneItemEnd(tg, item);
-    getItemX(s, e, &x1, &x2);
+    getItemX(itemStart, itemEnd, &x1, &x2);
     int w = x2-x1;
     int labelWidth = mgFontStringWidth(tl.font, itemName);
     if (x1-labelWidth <= insideX)
         labelWidth = 0;
     // map over label
     int itemHeight = geneInfo->height;
-    mapBoxHc(hvg, start, end, x1-labelWidth, y, labelWidth, itemHeight-3, 
+    mapBoxHc(hvg, geneStart, geneEnd, x1-labelWidth, y, labelWidth, itemHeight-3, 
                         tg->track, mapItemName, geneInfo->description);
     // map over gene model (extending to end of item)
     int geneModelHeight = gtexGeneModelHeight(extras);
-    mapBoxHc(hvg, start, end, x1, y+itemHeight-geneModelHeight-3, w, geneModelHeight,
+    mapBoxHc(hvg, geneStart, geneEnd, x1, y+itemHeight-geneModelHeight-3, w, geneModelHeight,
                         tg->track, mapItemName, geneInfo->description);
     } 
 }
 
 static char *gtexGeneItemName(struct track *tg, void *item)
 /* Return gene name */
 {
 struct gtexGeneInfo *geneInfo = (struct gtexGeneInfo *)item;
 struct gtexGeneBed *geneBed = geneInfo->geneBed;
 return geneBed->name;
 }
 
 static int gtexGeneHeight(void *item)
 {
 struct gtexGeneInfo *geneInfo = (struct gtexGeneInfo *)item;