6e9453c2d801b2b3997cff07da444afebc810fc7 tdreszer Mon Dec 13 10:32:27 2010 -0800 Fixed type=ld2 form remine #1333.4. Didn't work with ClosestToHome logic which caused rightClick weirdnesses. diff --git src/hg/hgTracks/variation.c src/hg/hgTracks/variation.c index 61e316a..8a3e09b 100644 --- src/hg/hgTracks/variation.c +++ src/hg/hgTracks/variation.c @@ -1150,36 +1150,33 @@ /*******************************************************************/ /* Declare our color gradients and the the number of colors in them */ Color ldShadesPos[LD_DATA_SHADES]; Color ldHighLodLowDprime; /* pink */ Color ldHighDprimeLowLod; /* blue */ int colorLookup[256]; void ldShadesInit(struct track *tg, struct hvGfx *hvg, boolean isDprime) /* Allocate the LD for positive and negative values, and error cases */ { static struct rgbColor white = {255, 255, 255}; static struct rgbColor red = {255, 0, 0}; static struct rgbColor green = { 0, 255, 0}; static struct rgbColor blue = { 0, 0, 255}; -char var[512]; char *ldPos = NULL; -char *track = tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track; -safef(var, sizeof(var), "%s_pos", track); -ldPos = cartUsualString(cart, var, ldPosDefault); +ldPos = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, "_pos", ldPosDefault); ldHighLodLowDprime = hvGfxFindColorIx(hvg, 255, 224, 224); /* pink */ ldHighDprimeLowLod = hvGfxFindColorIx(hvg, 192, 192, 240); /* blue */ if (sameString(ldPos,"red")) hvGfxMakeColorGradient(hvg, &white, &red, LD_DATA_SHADES, ldShadesPos); else if (sameString(ldPos,"blue")) hvGfxMakeColorGradient(hvg, &white, &blue, LD_DATA_SHADES, ldShadesPos); else if (sameString(ldPos,"green")) hvGfxMakeColorGradient(hvg, &white, &green, LD_DATA_SHADES, ldShadesPos); else errAbort("LD fill color must be 'red', 'blue', or 'green'; '%s' is not recognized", ldPos); } void bedLoadLdItemByQuery(struct track *tg, char *table, char *query, ItemLoader loader) /* LD specific tg->item loader, as we need to load items beyond @@ -1375,35 +1372,31 @@ return; /* mapDiamondUI is working well, but there is a bug with AREA=POLY on the Mac browsers, so this will be postponed for now by not using this code */ /* also, since it only goes to hgTrackUi, it is redundant with mapTrackBackground. * so keep this disabled until there is something more specific like an hgc * handler for diamonds. */ if (drawMap && xt-xl>5 && xb-xl>5) mapDiamondUi(hvg, xl, yl, xt, yt, xr, yr, xb, yb, name, tg->track, tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track); } Color getOutlineColor(struct track *tg, int itemCount) /* get outline color from cart and set outlineColor*/ { char *outColor = NULL; -char var[512]; - -char *track = tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track; -safef(var, sizeof(var), "%s_out", track); -outColor = cartUsualString(cart, var, ldOutDefault); +outColor = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, "_out", ldOutDefault); if (winEnd-winStart > 100000) return 0; if (sameString(outColor,"yellow")) return MG_YELLOW; else if (sameString(outColor,"red")) return MG_RED; else if (sameString(outColor,"blue")) return MG_BLUE; else if (sameString(outColor,"green")) return MG_GREEN; else if (sameString(outColor,"white")) return MG_WHITE; else if (sameString(outColor,"black")) return MG_BLACK; else @@ -1537,34 +1530,31 @@ /* Draw dynamically computed dense LD values */ { struct hashEl *hashEl, *stats=hashElListHash(ldHash); for (hashEl=stats; hashEl!=NULL; hashEl=hashEl->next) ldDrawDenseValue(hvg, tg, xOff, yOff, scale, outlineColor, hashEl->val); hashElFreeList(&stats); } void ldDrawDense(struct hvGfx *hvg, struct track *tg, int xOff, int yOff, double scale, Color outlineColor, boolean isLod, boolean isRsquared) /* Draw precomputed dense LD values from ld2 table. */ { static struct ldStats lds; struct ld2 *dPtr; -char var[512]; -char *track = tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track; -safef(var, sizeof(var), "%s_gap", track); -boolean useTInt = cartUsualBoolean(cart, var, ldGapDefault); +boolean useTInt = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE, "_gap", ldGapDefault); for (dPtr = tg->items; dPtr != NULL; dPtr = dPtr->next) { lds.chromStart = dPtr->chromStart; if (isLod) lds.sumValues = ldIndexCharToInt(dPtr->avgLod); else if (isRsquared) lds.sumValues = ldIndexCharToInt(dPtr->avgRsquared); else lds.sumValues = ldIndexCharToInt(dPtr->avgDprime); lds.n = (lds.sumValues < 0) ? 0 : 1; if (useTInt && dPtr->tInt >= 'c' && dPtr->tInt <= 'h' && dPtr->next != NULL && dPtr->next->chromStart > winStart) { /* Use tInt to color the spaces between SNPs. */ @@ -1575,46 +1565,43 @@ int x2 = round((dPtr->next->chromStart-winStart)*scale) + xOff; int w = x2 - x1; hvGfxBox(hvg, x1, yOff, w, tg->heightPer-1, shade); } ldDrawDenseValue(hvg, tg, xOff, yOff, scale, outlineColor, &lds); } } void ldDrawLeftLabels(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, int height, boolean withCenterLabels, MgFont *font, Color color, enum trackVisibility vis) /* Draw left labels. */ { char label[17]; -char var[512]; char *ldVal; int yVisOffset; if (vis == tvDense) { if (withCenterLabels && !tdbIsComposite(tg->tdb)) yVisOffset = tg->heightPer; else yVisOffset = 0; } else yVisOffset = tg->heightPer + height/2; -char *track = tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track; -safef(var, sizeof(var), "%s_val", track); -ldVal = cartUsualString(cart, var, ldValDefault); +ldVal = cartUsualStringClosestToHome(cart, tg->tdb, FALSE, "_val", ldValDefault); if (sameString(ldVal, "lod")) ldVal = cloneString("LOD"); else if (sameString(ldVal, "rsquared")) ldVal = cloneString("R^2"); else if (sameString(ldVal, "dprime")) ldVal = cloneString("D'"); else errAbort("%s values are not recognized", ldVal); if (isNotEmpty(tg->shortLabel) && strlen(tg->shortLabel) <= 12) safef(label, sizeof(label), "%s %s", tg->shortLabel, ldVal); else { char *pop = cloneString(tg->table); char *ptr = strstr(pop, "ChbJpt"); @@ -1672,40 +1659,35 @@ MgFont *font, Color color, enum trackVisibility vis) /* Draw item list, one per track. */ { struct ld2 *dPtr = NULL, *sPtr = NULL; /* pointers to 5' and 3' ends */ boolean isLod = FALSE, isRsquared = FALSE, isDprime = FALSE; double scale = scaleForPixels(insideWidth); int itemCount = slCount((struct slList *)tg->items); Color shade = 0, outlineColor = getOutlineColor(tg, itemCount); int a, b, c, d, i; /* chromosome coordinates and counter */ boolean drawMap = FALSE; /* ( itemCount<1000 ? TRUE : FALSE ); */ struct hash *ldHash = newHash(20); Color yellow = hvGfxFindRgb(hvg, &undefinedYellowColor); char *ldVal = NULL; boolean ldTrm; boolean ldInv; -char var[512]; boolean dynamicDense = FALSE; -safef(var, sizeof(var), "%s_inv", tg->tdb->track); -ldInv = cartUsualBoolean(cart, var, ldInvDefault); -char *track = tg->tdb->parent ? tg->tdb->parent->track : tg->tdb->track; -safef(var, sizeof(var), "%s_val", track); -ldVal = cartUsualString( cart, var, ldValDefault); -safef(var, sizeof(var), "%s_trm", track); -ldTrm = cartUsualBoolean(cart, var, ldTrmDefault); +ldInv = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE, "_inv", ldInvDefault); +ldVal = cartUsualStringClosestToHome( cart, tg->tdb, FALSE, "_val", ldValDefault); +ldTrm = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE, "_trm", ldTrmDefault); if (tg->limitedVisSet) vis = tg->limitedVis; if (vis != tvDense && vis != tvFull) errAbort("Visibility '%s'(%d) is not supported for the LD track yet.", hStringFromTv(vis), vis); if (vis == tvDense) { if (tg->tdb && sameString(tg->tdb->type, "ld2")) dynamicDense = FALSE; else dynamicDense = TRUE; } if (vis == tvDense) hvGfxBox(hvg, insideX, yOff, insideWidth, tg->height-1, yellow);