87165caa138700c2f604737f7448685797bf1954 angie Wed Dec 18 14:20:37 2019 -0800 Apply same base and indel coloring defaults to BAM tracks in hgTrackUi as in hgTracks. refs #24674 diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 90ab414..2d20738 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -1327,30 +1327,52 @@ } } static void indelShowOptionsWithName(struct cart *cart, struct trackDb *tdb, char *name) /* Make HTML inputs for indel display options if any are applicable. */ { indelShowOptionsWithNameExt(cart, tdb, name, "query", TRUE, TRUE); } void indelShowOptions(struct cart *cart, struct trackDb *tdb) /* Make HTML inputs for indel display options if any are applicable. */ { indelShowOptionsWithName(cart, tdb, tdb->track); } +#define BAM_DEFAULT_SHOW_DIFF_BASES_MAX_ZOOM "100" + +void bamAddBaseAndIndelSettings(struct trackDb *tdb) +/* Unless already set in tdb, add settings to enable base-level differences and indel display. */ +{ +struct hash *settings = tdb->settingsHash; +if (!hashLookup(settings, BASE_COLOR_USE_SEQUENCE)) + hashAdd(settings, BASE_COLOR_USE_SEQUENCE, cloneString("lfExtra")); +if (!hashLookup(settings, BASE_COLOR_DEFAULT)) + hashAdd(settings, BASE_COLOR_DEFAULT, cloneString(BASE_COLOR_DRAW_DIFF_BASES)); +if (!hashLookup(settings, SHOW_DIFF_BASES_ALL_SCALES)) + hashAdd(settings, SHOW_DIFF_BASES_ALL_SCALES, cloneString(".")); +if (!hashLookup(settings, INDEL_DOUBLE_INSERT)) + hashAdd(settings, INDEL_DOUBLE_INSERT, cloneString("on")); +if (!hashLookup(settings, INDEL_QUERY_INSERT)) + hashAdd(settings, INDEL_QUERY_INSERT, cloneString("on")); +if (!hashLookup(settings, INDEL_POLY_A)) + hashAdd(settings, INDEL_POLY_A, cloneString("on")); +if (!hashLookup(settings, "showDiffBasesMaxZoom")) + hashAdd(settings, "showDiffBasesMaxZoom", cloneString(BAM_DEFAULT_SHOW_DIFF_BASES_MAX_ZOOM)); +} + /****** base position (ruler) controls *******/ static char *zoomOptions[] = { ZOOM_1PT5X, ZOOM_3X, ZOOM_10X, ZOOM_100X, ZOOM_BASE }; void zoomRadioButtons(char *var, char *curVal) /* Make a list of radio buttons for all zoom options */ { int i; @@ -7462,30 +7484,34 @@ for (var i=0; i < inputs.length; i++) { \ if (inputs[i].type == 'radio') { \ inputs[i].checked = (inputs[i].value == '%s'); \ } \ } \ }" void bamCfgUi(struct cart *cart, struct trackDb *tdb, char *name, char *title, boolean boxed) /* BAM: short-read-oriented alignment file format. */ { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); char cartVarName[1024]; printf("<TABLE%s><TR><TD>",boxed?" width='100%'":""); +bamAddBaseAndIndelSettings(tdb); +// Deal with tdb being from a subtrack when a view is being configured, ugh: +if (differentString(tdb->track, name) && tdb->parent != NULL && sameString(tdb->parent->type, "bam")) + bamAddBaseAndIndelSettings(tdb->parent); #ifdef NOTNOW // temporarily (?) remove this check box because code doesn't allow for setting wiggle options char *showWig = cartOrTdbString(cart, tdb, BAMWIG_MODE, "0"); safef(cartVarName, sizeof(cartVarName), "%s.%s", name, BAMWIG_MODE); cgiMakeCheckBox(cartVarName, SETTING_IS_ON(showWig)); printf("</TD><TD>Only show coverage of reads</TD>"); printf("</TR>\n"); #endif printf("<TR><TD>\n"); char *showNames = cartOrTdbString(cart, tdb, BAM_SHOW_NAMES, "0"); safef(cartVarName, sizeof(cartVarName), "%s.%s", name, BAM_SHOW_NAMES); cgiMakeCheckBox(cartVarName, SETTING_IS_ON(showNames)); printf("</TD><TD>Display read names</TD>"); if (boxed && fileExists(hHelpFile("hgBamTrackHelp"))) printf("<TD style='text-align:right'><A HREF=\"../goldenPath/help/hgBamTrackHelp.html\" " @@ -7494,38 +7520,30 @@ boolean canPair = (cartOrTdbString(cart, tdb, BAM_PAIR_ENDS_BY_NAME, NULL) != NULL); if (canPair) { char *doPairing = cartOrTdbString(cart, tdb, BAM_PAIR_ENDS_BY_NAME, "0"); printf("<TR><TD>"); safef(cartVarName, sizeof(cartVarName), "%s." BAM_PAIR_ENDS_BY_NAME, name); cgiMakeCheckBox(cartVarName, SETTING_IS_ON(doPairing)); printf("</TD><TD>Attempt to join paired end reads by name</TD></TR>\n"); } printf("<TR><TD colspan=2>Minimum alignment quality:\n"); safef(cartVarName, sizeof(cartVarName), "%s." BAM_MIN_ALI_QUAL, name); cgiMakeIntVar(cartVarName, atoi(cartOrTdbString(cart, tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT)), 4); printf("</TD></TR></TABLE>"); -if (isCustomTrack(name)) - { - // Auto-magic baseColor defaults for BAM, same as in hgTracks.c newCustomTrack - hashAdd(tdb->settingsHash, BASE_COLOR_USE_SEQUENCE, cloneString("lfExtra")); - hashAdd(tdb->settingsHash, BASE_COLOR_DEFAULT, cloneString("diffBases")); - hashAdd(tdb->settingsHash, SHOW_DIFF_BASES_ALL_SCALES, cloneString(".")); - hashAdd(tdb->settingsHash, "showDiffBasesMaxZoom", cloneString("100")); - } baseColorDropLists(cart, tdb, name); puts("<BR>"); indelShowOptionsWithName(cart, tdb, name); printf("<BR>\n"); printf("<B>Additional coloring modes:</B><BR>\n"); safef(cartVarName, sizeof(cartVarName), "%s." BAM_COLOR_MODE, name); char *selected = cartOrTdbString(cart, tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT); cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_STRAND, sameString(selected, BAM_COLOR_MODE_STRAND)); printf("Color by strand (blue for +, red for -)<BR>\n"); cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_GRAY, sameString(selected, BAM_COLOR_MODE_GRAY)); printf("Use gray for\n"); char cartVarName2[1024]; safef(cartVarName2, sizeof(cartVarName2), "%s." BAM_GRAY_MODE, name); int grayMenuSize = canPair ? ArraySize(grayLabels) : ArraySize(grayLabels)-1; char *sel2 = cartOrTdbString(cart, tdb, BAM_GRAY_MODE, BAM_GRAY_MODE_DEFAULT);