a1e57595bda0dc8a20c2548f47a4874ebe29e37b kent Mon Jan 11 14:37:05 2021 -0800 Making log-transformable for barCharts be settable via transformFunc trackDb setting. Factoring out barChartCurViewMax for reuse elsewhere. diff --git src/hg/lib/barChartUi.c src/hg/lib/barChartUi.c index f5d3e78..09fcee6 100644 --- src/hg/lib/barChartUi.c +++ src/hg/lib/barChartUi.c @@ -103,68 +103,87 @@ catSel->checked = TRUE; else catSel->checked = (hashLookup(checkHash, categ->name) != NULL); slAddHead(&all, catSel); } slReverse(&all); makeGroupCheckboxes(name, NULL, all); puts(""); char buf[512]; safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name); cgiMakeHiddenVar(buf, "0"); } /* Convenience functions for hgTrackUi */ +boolean barChartIsLogTransformed(struct cart *cart, char *track, struct trackDb *tdb) +/* Return TRUE if bar chart needs to be log transformed */ +{ +char cartVar[1024]; +safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_LOG_TRANSFORM); +char *trans = trackDbSetting(tdb, "transformFunc"); +boolean isLog = sameWordOk(trans, "LOG"); +return cartCgiUsualBoolean(cart, cartVar, isLog); +} + void barChartUiLogTransform(struct cart *cart, char *track, struct trackDb *tdb) /* Checkbox to select log-transformed RPKM values */ /* NOTE: this code from gtexUi.c. Consider sharing. */ { char cartVar[1024]; -puts("Log10(x+1) transform:\n"); safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_LOG_TRANSFORM); -boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_LOG_TRANSFORM_DEFAULT); +puts("Log10(x+1) transform:\n"); +boolean isLogTransform = barChartIsLogTransformed(cart, track, tdb); cgiMakeCheckBoxWithId(cartVar, isLogTransform, cartVar); jsOnEventByIdF("change", cartVar, "barChartUiTransformChanged('%s');", track); } double barChartUiMaxMedianScore(struct trackDb *tdb) /* Max median score, for scaling */ { char *setting = trackDbSettingClosestToHome(tdb, BAR_CHART_MAX_LIMIT); if (setting != NULL) { double max = sqlDouble(setting); if (max > 0.0) return max; } return BAR_CHART_MAX_LIMIT_DEFAULT; } +double barChartCurViewMax(struct cart *cart, char *trackName, struct trackDb *tdb) +/* Look up max value to scale for this bar chart - consults both cart and trackDb defaults. */ +{ +char cartVar[1024]; +safef(cartVar, sizeof(cartVar), "%s.%s", trackName, BAR_CHART_MAX_VIEW_LIMIT); +char *limitString = trackDbSettingOrDefault(tdb, BAR_CHART_LIMIT, "50"); +double limit = atof(limitString); +if (limit <= 0) limit = 0.001; +return cartCgiUsualDouble(cart, cartVar, limit); +} + void barChartUiViewLimits(struct cart *cart, char *track, struct trackDb *tdb) /* Set viewing limits if log transform not checked */ /* NOTE: this code from gtexUi.c. Consider sharing. */ { char cartVar[1024]; char buf[512]; -safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_LOG_TRANSFORM); -boolean isLogTransform = cartCgiUsualBoolean(cart, cartVar, BAR_CHART_LOG_TRANSFORM_DEFAULT); +boolean isLogTransform = barChartIsLogTransformed(cart, track, tdb); safef(buf, sizeof buf, "%sViewLimitsMaxLabel %s", track, isLogTransform ? "disabled" : ""); printf("View limits maximum:\n", buf); -safef(cartVar, sizeof(cartVar), "%s.%s", track, BAR_CHART_MAX_VIEW_LIMIT); -int viewMax = cartCgiUsualInt(cart, cartVar, BAR_CHART_MAX_VIEW_LIMIT_DEFAULT); -cgiMakeIntVarWithExtra(cartVar, viewMax, 4, isLogTransform ? "disabled" : ""); +double viewMax = barChartCurViewMax(cart, track, tdb); +cgiMakeDoubleVarWithExtra(cartVar, viewMax, 4, isLogTransform ? "disabled" : ""); char *unit = trackDbSettingClosestToHomeOrDefault(tdb, BAR_CHART_UNIT, ""); printf(" %s (range 0-%d)\n", buf, unit, round(barChartUiMaxMedianScore(tdb))); } // TODO: libify static boolean isUrl(char *url) { return startsWith("http://", url) || startsWith("https://", url) || startsWith("ftp://", url); } static void getCategsFromSettings(char *track, char *labelSetting, char *colorSetting, struct slName **labels, struct slName **colors)