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("&nbsp;&nbsp;");
+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))
     {