e12ac8fea086d17ed824392a2bb3e425090ecb2d
jcasper
  Fri Sep 27 16:17:32 2019 -0700
Adding table browser selectors for normalization and resolution in .hic tracks, refs #18842

diff --git src/hg/lib/hicUi.c src/hg/lib/hicUi.c
index f76a422..648d728 100644
--- src/hg/lib/hicUi.c
+++ src/hg/lib/hicUi.c
@@ -25,41 +25,46 @@
 char *selected = cartNonemptyString(cart, cartVar);
 char *menu[] = {"NONE", "VC", "VC_SQRT", "KR"};
 int i, sanityCheck = 0;
 for (i=0; i<4; i++)
     {
     if (sameOk(selected, menu[i]))
         sanityCheck = 1;
     }
 if (!sanityCheck)
     {
     selected = menu[0];
     }
 return selected;
 }
 
-void hicUiNormalizationMenu(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
-/* Draw a menu to select the normalization method to use. */
+void hicUiNormalizationDropDown(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
 {
 char cartVar[1024];
-printf("<b>Score normalization:</b> ");
 char* selected = hicUiFetchNormalization(cart, tdb, meta);
 char *menu[] = {"NONE", "VC", "VC_SQRT", "KR"};
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_NORMALIZATION);
 cgiMakeDropList(cartVar, menu, 4, selected);
 }
 
+void hicUiNormalizationMenu(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
+/* Draw a menu to select the normalization method to use. */
+{
+printf("<b>Score normalization:</b> ");
+hicUiNormalizationDropDown(cart, tdb, meta);
+}
+
 char *hicUiFetchResolution(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
 /* Return the current resolution selection, or the default if none
  * has been selected. */
 {
 char cartVar[1024];
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_RESOLUTION);
 char *selected = cartNonemptyString(cart, cartVar);
 int sanityCheck = sameOk(selected, "Auto");
 int i;
 for (i=0; i<meta->nRes; i++)
     {
     if (sameOk(selected, meta->resolutions[i]))
         sanityCheck = 1;
     }
 if (!sanityCheck)
@@ -82,55 +87,60 @@
     for (i=meta->nRes-1; i>= 0; i--)
         {
         if (atoi(meta->resolutions[i]) < idealRes)
             {
             autoRes = meta->resolutions[i];
             break;
             }
         }
     result = atoi(autoRes);
     }
 else
     result = atoi(resolutionString);
 return result;
 }
 
-void hicUiResolutionMenu(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
-/* Draw a menu to select which binSize to use for fetching data */
+void hicUiResolutionDropDown(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
 {
 char cartVar[1024];
 char autoscale[10] = "Auto";
-printf("<b>Resolution:</b> ");
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_RESOLUTION);
 char **menu = NULL;
 AllocArray(menu, meta->nRes+1);
 char **values = NULL;
 AllocArray(values, meta->nRes+1);
 menu[0] = autoscale;
 values[0] = autoscale;
 int i;
 for (i=1; i<meta->nRes+1; i++)
     {
     char buffer[1024];
     long long value = atoll(meta->resolutions[i-1]);
     sprintWithMetricBaseUnit(buffer, sizeof(buffer), value);
     menu[i] = cloneString(buffer);
     values[i] = cloneString(meta->resolutions[i-1]);
     }
 char *selected = hicUiFetchResolution(cart, tdb, meta);
 cgiMakeDropListWithVals(cartVar, menu, values, meta->nRes+1, selected);
-free(menu);
+freeMem(menu);
+}
+
+void hicUiResolutionMenu(struct cart *cart, struct trackDb *tdb, struct hicMeta *meta)
+/* Draw a menu to select which binSize to use for fetching data */
+{
+printf("<b>Resolution:</b> ");
+hicUiResolutionDropDown(cart, tdb, meta);
 }
 
 
 char *hicUiFetchDrawMode(struct cart *cart, struct trackDb *tdb)
 /* Return the current draw mode selection, or the default if none
  * has been selected. */
 {
 char *selected = cartOptionalStringClosestToHome(cart, tdb, FALSE, HIC_DRAW_MODE);
 if (    !sameOk(selected, HIC_DRAW_MODE_SQUARE) &&
         !sameOk(selected, HIC_DRAW_MODE_ARC) &&
         !sameOk(selected, HIC_DRAW_MODE_TRIANGLE) )
     {
     selected = HIC_DRAW_MODE_DEFAULT;
     }
 return selected;
@@ -246,31 +256,31 @@
 printf("<span id='hicMaxText'><b>%sMaximum:</b></span> ", isComposite ? "Score " : "");
 cgiMakeDoubleVar(cartVar, currentMax, 6);
 
 printf("&nbsp;&nbsp;<b>Auto-scale:</b> ");
 safef(cartVar, sizeof(cartVar), "%s.%s", tdb->track, HIC_DRAW_AUTOSCALE);
 boolean autoscaleChecked = hicUiFetchAutoScale(cart, tdb);
 cgiMakeCheckBox(cartVar, autoscaleChecked);
 
 hicUiAddAutoScaleJS(cart, tdb->track);
 }
 
 
 
 void hicUiFileDetails(struct hicMeta *trackMeta)
 {
-int i;//, first = 1;
+int i;
 printf("</p><hr>\nMetadata from file header:<br>\n");
 printf("<div style='margin-left: 2em'>\n");
 printf("<label class='trackUiHicLabel'>Genome: %s\n<br></label>", trackMeta->fileAssembly);
 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");
@@ -306,26 +316,24 @@
 hicUiColorMenu(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");
-//hicUiNormalizationMenu(cart, track, trackMeta);
-//puts("&nbsp;&nbsp;");
 hicUiMaxOptionsMenu(cart, tdb, TRUE);
 puts("</p><p>");
 hicUiDrawMenu(cart, tdb);
 puts("&nbsp;&nbsp;");
 hicUiColorMenu(cart, tdb);
 puts("</p><p>\n");
 puts("Subtracks below have additional file-specific configuration options for resolution and normalization.\n</p>");
 cfgEndBox(boxed);
 }