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++)