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; inAttributes-1; i+=2) { printf("
", i, htmlEncode(trackMeta->attributes[i]), "../images/ab_right.gif"); printf("
\n", i); printf("
%s
", htmlEncode(trackMeta->attributes[i+1])); printf("
\n"); safef(scriptline, sizeof(scriptline), "$('label.trackUiHicAttrToggle%d').click(function() {$(this).children('img').toggleClass('open'); $('div.hicAttr%d').toggle();});", i, i); jsInline(scriptline); } printf("\n"); printf("

For questions concerning the content of a file's metadata header, please contact the file creator.

\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("Filter by interaction distance in bp (0 for no limit): "); +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("

"); printf("Items are drawn in shades of the chosen color depending on score - scores above the " "chosen maximum are drawn at full intensity.

\n"); hicUiNormalizationMenu(cart, tdb, trackMeta); puts("  "); hicUiMaxOptionsMenu(cart, tdb, FALSE); puts("

"); hicUiDrawMenu(cart, tdb); puts("  "); hicUiResolutionMenu(cart, tdb, trackMeta); puts("  "); hicUiColorMenu(cart, tdb); puts("

\n"); +hicUiMinMaxRangeMenu(cart, tdb); +puts("

\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("

"); printf("Items are drawn in shades of the chosen color depending on score - scores above the " "chosen maximum are drawn at full intensity.

\n"); hicUiMaxOptionsMenu(cart, tdb, TRUE); puts("

"); hicUiDrawMenu(cart, tdb); puts("  "); hicUiColorMenu(cart, tdb); puts("

\n"); +hicUiMinMaxRangeMenu(cart, tdb); +puts("

\n"); puts("Subtracks below have additional file-specific configuration options for resolution and normalization.\n

"); cfgEndBox(boxed); } + +