e443dee06a48dc2ae206afcfb4a4478549503d33 braney Thu Mar 1 09:35:16 2018 -0800 don't calculate (add, subtract) with tracks that are turned off diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index 05e0480..9c7b36d 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -14097,52 +14097,70 @@ } } track->height = height; return track->height; } int trackPriCmp(const void *va, const void *vb) /* Compare for sort based on priority */ { const struct track *a = *((struct track **)va); const struct track *b = *((struct track **)vb); return (a->priority - b->priority); } + +static bool isSubtrackVisibleTdb(struct cart *cart, struct trackDb *tdb) +/* Has this subtrack not been deselected in hgTrackUi or declared with + * * "subTrack ... off"? -- assumes composite track is visible. */ +{ +boolean overrideComposite = (NULL != cartOptionalString(cart, tdb->track)); +bool enabledInTdb = TRUE; // assume that this track is enabled in tdb +char option[1024]; +safef(option, sizeof(option), "%s_sel", tdb->track); +boolean enabled = cartUsualBoolean(cart, option, enabledInTdb); +if (overrideComposite) + enabled = TRUE; +return enabled; +} + void buildMathWig(struct trackDb *tdb) /* Turn a mathWig composite into a mathWig track. */ { char *aggregateFunc = cartOrTdbString(cart, tdb, "aggregate" , FALSE); if ((aggregateFunc == NULL) || !(sameString("add", aggregateFunc) || sameString("subtract", aggregateFunc))) return; struct trackDb *subTracks = tdb->subtracks; tdb->subtracks = NULL; tdb->type = "mathWig"; struct dyString *dy = newDyString(1024); if (sameString("add", aggregateFunc)) dyStringPrintf(dy, "+ "); else // subtract dyStringPrintf(dy, "- "); struct trackDb *subTdb; for (subTdb=subTracks; subTdb; subTdb = subTdb->next) { + if (!isSubtrackVisibleTdb(cart, subTdb) ) + continue; + char *bigDataUrl = trackDbSetting(subTdb, "bigDataUrl"); char *useDb; char *table; if (bigDataUrl != NULL) dyStringPrintf(dy, "%s ",bigDataUrl); else { if (isCustomTrack(trackHubSkipHubName(subTdb->track))) { useDb = CUSTOM_TRASH; table = trackDbSetting(subTdb, "dbTableName"); } else { useDb = database;