e199edebab9458a3b535bb2d0e32c52167d8fdae
jcasper
  Fri Apr 15 14:09:59 2022 -0700
Adding pack/squish to hic tracks, plus interaction distance filters.  refs #29280

diff --git src/hg/lib/hicUi.c src/hg/lib/hicUi.c
index a43fa23..1ff21ad 100644
--- src/hg/lib/hicUi.c
+++ src/hg/lib/hicUi.c
@@ -309,65 +309,107 @@
 char scriptline[2048];
 for (i=0; i<trackMeta->nAttributes-1; i+=2)
     {
     printf("<label class='trackUiHicLabelExpand trackUiHicAttrToggle%d'>%s <img src='%s' class='trackUiHicLabelArrow'></label><br>", i, htmlEncode(trackMeta->attributes[i]), "../images/ab_right.gif");
     printf("<div class='trackUiHicHiddenAttributes hicAttr%d'>\n", i);
     printf("<pre>%s</pre>", htmlEncode(trackMeta->attributes[i+1]));
     printf("</div>\n");
     
     safef(scriptline, sizeof(scriptline), "$('label.trackUiHicAttrToggle%d').click(function() {$(this).children('img').toggleClass('open'); $('div.hicAttr%d').toggle();});", i, i);
     jsInline(scriptline);
     }
 printf("</div>\n");
 printf("<p>For questions concerning the content of a file's metadata header, please contact the file creator.</p>\n");
 }
 
+double hicUiMaxInteractionRange(struct cart *cart, struct trackDb *tdb)
+/* Retrieve the maximum range for an interaction to be drawn.  Range is
+ * calculated from the left-most start to the right-most end of the interaction. */
+{
+double defaultValue = 0;
+char *tdbString = trackDbSetting(tdb, HIC_TDB_MAX_DISTANCE);
+if (!isEmpty(tdbString))
+    defaultValue = atof(tdbString);
+return cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MAX_DISTANCE, defaultValue);
+}
+
+double hicUiMinInteractionRange(struct cart *cart, struct trackDb *tdb)
+/* Retrieve the minimum range for an interaction to be drawn.  Range is
+ * calculated from the left-most start to the right-most end of the interaction. */
+{
+double defaultValue = 0;
+char *tdbString = trackDbSetting(tdb, HIC_TDB_MIN_DISTANCE);
+if (!isEmpty(tdbString))
+    defaultValue = atof(tdbString);
+return cartUsualDoubleClosestToHome(cart, tdb, FALSE, HIC_DRAW_MIN_DISTANCE, defaultValue);
+}
+
+void hicUiMinMaxRangeMenu(struct cart *cart, struct trackDb *tdb)
+{
+char cartVar[2048];
+double minRange = hicUiMinInteractionRange(cart, tdb);
+double maxRange = hicUiMaxInteractionRange(cart, tdb);
+printf("<b>Filter by interaction distance in bp (0 for no limit):</b> ");
+safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_MIN_DISTANCE);
+printf("minimum ");
+cgiMakeDoubleVarWithMin(cartVar, minRange, NULL, 0, 0);
+safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_MAX_DISTANCE);
+printf(" maximum ");
+cgiMakeDoubleVarWithMin(cartVar, maxRange, NULL, 0, 0);
+}
+
 void hicCfgUi(char *database, struct cart *cart, struct trackDb *tdb, char *track,
                         char *title, boolean boxed)
 /* Draw the list of track configuration options for Hi-C tracks */
 {
 
 boxed = cfgBeginBoxAndTitle(tdb, boxed, title);
 char *filename = trackDbSetting(tdb, "bigDataUrl");
 if (filename == NULL)
     errAbort("Error: no bigDataUrl provided in trackDb for hic track %s", tdb->track);
 struct hicMeta *trackMeta;
 char *errMsg = hicLoadHeader(filename, &trackMeta, database);
 if (errMsg != NULL)
     errAbort("Error retrieving file info: %s", errMsg);
 
 puts("<p>");
 printf("Items are drawn in shades of the chosen color depending on score - scores above the "
         "chosen maximum are drawn at full intensity.</p><p>\n");
 hicUiNormalizationMenu(cart, tdb, trackMeta);
 puts("&nbsp;&nbsp;");
 hicUiMaxOptionsMenu(cart, tdb, FALSE);
 
 puts("</p><p>");
 hicUiDrawMenu(cart, tdb);
 puts("&nbsp;&nbsp;");
 hicUiResolutionMenu(cart, tdb, trackMeta);
 puts("&nbsp;&nbsp;");
 hicUiColorMenu(cart, tdb);
 puts("</p><p>\n");
+hicUiMinMaxRangeMenu(cart, tdb);
+puts("</p><p>\n");
 hicUiFileDetails(trackMeta);
 cfgEndBox(boxed);
 }
 
 void hicCfgUiComposite(struct cart *cart, struct trackDb *tdb, char *track,
                         char *title, boolean boxed)
 /* Draw the (empty) list of track configuration options for a composite of Hi-C tracks */
 {
 boxed = cfgBeginBoxAndTitle(tdb, boxed, title);
 
 puts("<p>");
 printf("Items are drawn in shades of the chosen color depending on score - scores above the "
         "chosen maximum are drawn at full intensity.</p><p>\n");
 hicUiMaxOptionsMenu(cart, tdb, TRUE);
 puts("</p><p>");
 hicUiDrawMenu(cart, tdb);
 puts("&nbsp;&nbsp;");
 hicUiColorMenu(cart, tdb);
 puts("</p><p>\n");
+hicUiMinMaxRangeMenu(cart, tdb);
+puts("</p><p>\n");
 puts("Subtracks below have additional file-specific configuration options for resolution and normalization.\n</p>");
 cfgEndBox(boxed);
 }
+
+