a61d43c445b0e9ead7e956bef4efc1f983d75c3d angie Wed Aug 7 07:41:32 2013 -0700 For BAM custom tracks, base-coloring trackDb settings were automatically set,but that didn't take care of hub tracks, and not all native BAM tracks added those settings in their trackDb entries. So, as I should have done from the beginning, I'm forcing the base-coloring settings directly in bamMethods. fixes #11479 diff --git src/hg/hgTracks/bamTrack.c src/hg/hgTracks/bamTrack.c index 604ad0f..3bf6cb8 100644 --- src/hg/hgTracks/bamTrack.c +++ src/hg/hgTracks/bamTrack.c @@ -741,55 +741,77 @@ } void bamLinkedFeaturesDraw(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, MgFont *font, Color color, enum trackVisibility vis) /* Draw linked features items. */ { linkedFeaturesDraw(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis); if(tg->customInt) doMapBoxPerRow(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis); } +static void addBamBaseAndIndelSettings(struct trackDb *tdb) +/* Unless already set in trackDb, 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("diffBases")); +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("100")); +} + void bamMethods(struct track *track) /* Methods for BAM alignment files. */ { #if (defined USE_BAM && defined KNETFILE_HOOKS) knetUdcInstall(); #endif//def USE_BAM && KNETFILE_HOOKS track->canPack = TRUE; boolean isPaired = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, BAM_PAIR_ENDS_BY_NAME, (trackDbSettingClosestToHome(track->tdb, BAM_PAIR_ENDS_BY_NAME) != NULL)); char *tdbShowNames = trackDbSetting(track->tdb, BAM_SHOW_NAMES); boolean showNames = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, BAM_SHOW_NAMES, SETTING_IS_ON(tdbShowNames)); char *colorMode = cartOrTdbString(cart, track->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT); char *userTag = cartOrTdbString(cart, track->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT); if (sameString(colorMode, BAM_COLOR_MODE_TAG) && userTag != NULL) { if (! (isalpha(userTag[0]) && isalnum(userTag[1]) && userTag[2] == '\0')) { warn("%s: BAM tag '%s' is not valid -- must be a letter followed by a letter or number.", track->tdb->shortLabel, htmlEncode(userTag)); cartRemoveVariableClosestToHome(cart, track->tdb, FALSE, BAM_COLOR_TAG); } } +addBamBaseAndIndelSettings(track->tdb); if (isPaired) { linkedFeaturesSeriesMethods(track); track->loadItems = bamPairedLoadItems; track->drawItems = bamLinkedFeaturesSeriesDraw; track->drawItemAt = bamPairedDrawAt; } else { linkedFeaturesMethods(track); track->loadItems = bamLoadItems; track->drawItems = bamLinkedFeaturesDraw; track->drawItemAt = bamDrawAt; }