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)