e7f02d37914178e82c5f2b481cf6f294c6687d39 jcasper Mon Nov 28 16:35:16 2022 -0800 Allow users to invert Hi-C plots, refs #30330, #30343 diff --git src/hg/lib/hicUi.c src/hg/lib/hicUi.c index 8eabb72..6b8dbb9 100644 --- src/hg/lib/hicUi.c +++ src/hg/lib/hicUi.c @@ -146,45 +146,58 @@ char *selected = cartOptionalStringClosestToHome(cart, tdb, FALSE, HIC_DRAW_MODE); if (selected == NULL) { selected = trackDbSetting(tdb, HIC_TDB_DRAW_MODE); } char *result = HIC_DRAW_MODE_DEFAULT; if (sameWordOk(selected, HIC_DRAW_MODE_SQUARE)) result = HIC_DRAW_MODE_SQUARE; else if (sameWordOk(selected, HIC_DRAW_MODE_ARC)) result = HIC_DRAW_MODE_ARC; else if (sameWordOk(selected, HIC_DRAW_MODE_TRIANGLE)) result = HIC_DRAW_MODE_TRIANGLE; return result; } +boolean hicUiFetchInverted(struct cart *cart, struct trackDb *tdb) +/* Check if the user has set this track to draw in inverted mode. + * Ideally this would also be available via a trackDb setting, but + * this is the first pass at this feature. */ +{ +boolean defaultVal = FALSE; +return cartUsualBooleanClosestToHome(cart, tdb, FALSE, HIC_DRAW_INVERTED, defaultVal); +} + void hicUiDrawMenu(struct cart *cart, struct trackDb *tdb) /* Draw the list of draw mode options for Hi-C tracks. Square is the * standard square-shaped heatmap with the chromosome position axis on * a diagonal from top left to bottom right. Triangle is the top half * of that square, after rotating it 45 degrees to have the position * axis lie horizontally. Arc draws arcs between related positions, * but skips over self-relations. */ { char cartVar[1024]; printf("<b>Draw mode:</b> "); safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_MODE); char *menu[] = {HIC_DRAW_MODE_SQUARE, HIC_DRAW_MODE_TRIANGLE, HIC_DRAW_MODE_ARC}; char* selected = hicUiFetchDrawMode(cart, tdb); cgiMakeDropList(cartVar, menu, 3, selected); +puts(" "); +printf("<b>Invert:</b> "); +safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_INVERTED); +cgiMakeCheckBox(cartVar, hicUiFetchInverted(cart, tdb)); } char *hicUiFetchDrawColor(struct cart *cart, struct trackDb *tdb) /* Retrieve the HTML hex code for the color to draw the * track values in (e.g., #00ffa1) */ { // Color might have been specified in the cart, probably in #aabbcc format char* selected = cartOptionalStringClosestToHome(cart, tdb, FALSE, HIC_DRAW_COLOR); if (selected == NULL) // Or color might be in trackDb, probably in R,G,B format selected = trackDbSettingClosestToHomeOrDefault(tdb, HIC_TDB_COLOR, HIC_DRAW_COLOR_DEFAULT); const char *commaColorExpr = "^[0-9]+,[0-9]+,[0-9]+$"; if (regexMatch(selected, commaColorExpr)) {