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;