155896fe22edfc94d4171b7f3f42f4135d2f50a8 kate Wed Sep 13 13:23:38 2017 -0700 Add (filter activated) to track label if any track filter is on. refs #15646 diff --git src/hg/hgTracks/gtexEqtlClusterTrack.c src/hg/hgTracks/gtexEqtlClusterTrack.c index bbdf2a8..6a086c5 100644 --- src/hg/hgTracks/gtexEqtlClusterTrack.c +++ src/hg/hgTracks/gtexEqtlClusterTrack.c @@ -30,38 +30,38 @@ } static boolean filterTissuesFromCart(struct track *track, struct gtexEqtlClusterTrack *extras) /* Check cart for tissue selection. Populate track tissues hash */ { char *version = gtexVersionSuffix(track->table); extras->tissues = gtexGetTissues(version); extras->tissueHash = hashNew(0); struct gtexTissue *tis = NULL; for (tis = extras->tissues; tis != NULL; tis = tis->next) hashAdd(extras->tissueHash, tis->name, tis); // if all tissues included, return full hash if (!cartListVarExistsAnyLevel(cart, track->tdb, FALSE, GTEX_TISSUE_SELECT)) return FALSE; - -// create tissue hash with only included tissues -struct hash *tisHash = hashNew(0); struct slName *selectedValues = cartOptionalSlNameListClosestToHome(cart, track->tdb, FALSE, GTEX_TISSUE_SELECT); -if (selectedValues == NULL) +if (selectedValues == NULL || slCount(selectedValues) == slCount(extras->tissues)) return FALSE; +// create tissue hash with only included tissues +struct hash *tisHash = hashNew(0); + struct slName *name; for (name = selectedValues; name != NULL; name = name->next) { tis = (struct gtexTissue *)hashFindVal(extras->tissueHash, name->name); if (tis != NULL) hashAdd(tisHash, name->name, tis); } extras->tissueHash = tisHash; return TRUE; } static void eqtlExcludeTissue(struct gtexEqtlCluster *eqtl, int i) /* Mark the tissue to exclude from display */ { eqtl->expScores[i] = 0.0; @@ -156,54 +156,60 @@ /* Track methods */ static void gtexEqtlClusterLoadItems(struct track *track) /* Load items in window and prune those that don't pass filter */ { /* initialize track info */ struct gtexEqtlClusterTrack *extras; AllocVar(extras); track->extraUiData = extras; char cartVar[64]; // UI settings safef(cartVar, sizeof cartVar, "%s.%s", track->track, GTEX_EQTL_TISSUE_COLOR); extras->doTissueColor = cartUsualBoolean(cart, cartVar, GTEX_EQTL_TISSUE_COLOR_DEFAULT); +boolean isFiltered = FALSE; // filter by gene via SQL safef(cartVar, sizeof cartVar, "%s.%s", track->track, GTEX_EQTL_GENE); char *gene = cartNonemptyString(cart, cartVar); char *where = NULL; if (gene) { struct dyString *ds = dyStringNew(0); sqlDyStringPrintfFrag(ds, "%s = '%s'", GTEX_EQTL_GENE_FIELD, gene); where = dyStringCannibalize(&ds); + isFiltered = TRUE; } bedLoadItemWhere(track, track->table, where, (ItemLoader)loadOne); +// more filtering safef(cartVar, sizeof cartVar, "%s.%s", track->track, GTEX_EQTL_EFFECT); extras->minEffect = fabs(cartUsualDouble(cart, cartVar, GTEX_EFFECT_MIN_DEFAULT)); safef(cartVar, sizeof cartVar, "%s.%s", track->track, GTEX_EQTL_PROBABILITY); extras->minProb = cartUsualDouble(cart, cartVar, GTEX_EQTL_PROBABILITY_DEFAULT); boolean hasTissueFilter = filterTissuesFromCart(track, extras); -if (!hasTissueFilter && extras->minEffect == 0.0 && extras->minProb == 0.0) - return; - -// more filtering + hasTissueFilter, extras->minEffect, extras->minProb); +if (hasTissueFilter || extras->minEffect != 0.0 || extras->minProb != 0.0) + { + isFiltered = TRUE; filterItems(track, eqtlIncludeFilter, "include"); } +if (isFiltered) + labelTrackAsFiltered(track); +} static char *gtexEqtlClusterItemName(struct track *track, void *item) /* Left label is gene name */ { struct gtexEqtlCluster *eqtl = (struct gtexEqtlCluster *)item; return eqtl->target; } static Color gtexEqtlClusterItemColor(struct track *track, void *item, struct hvGfx *hvg) /* Color by highest effect in list (blue -, red +), with brighter for higher effect (teal, fuschia) */ { struct gtexEqtlCluster *eqtl = (struct gtexEqtlCluster *)item; double maxEffect = 0.0; int i; for (i=0; i<eqtl->expCount; i++)