fc724a23c9a0ad34a6ff6e530eb93945fd94a5c5
kate
  Sun Mar 11 18:24:53 2018 -0700
Add score filtering. refs #17512

diff --git src/hg/hgTracks/interactTrack.c src/hg/hgTracks/interactTrack.c
index 0e21a78..117a666 100644
--- src/hg/hgTracks/interactTrack.c
+++ src/hg/hgTracks/interactTrack.c
@@ -26,60 +26,74 @@
 {
 struct interact *inter = item;
 
 struct rgbColor itemRgb;
 // There must be a better way...
 itemRgb.r = (inter->color & 0xff0000) >> 16;
 itemRgb.g = (inter->color & 0xff00) >> 8;
 itemRgb.b = inter->color & 0xff;
 return hvGfxFindColorIx(hvg, itemRgb.r, itemRgb.g, itemRgb.b);
 }
 
 void interactLoadItems(struct track *tg)
 /* Load all interact items in region */
 {
 loadSimpleBedWithLoader(tg, (bedItemLoader)interactLoad);
+
+// filters
+char buf[1024];
+safef(buf, sizeof buf, "%s.%s", tg->tdb->track, INTERACT_MINSCORE);
+int minScore = cartUsualInt(cart, buf, INTERACT_DEFMINSCORE);
+struct interact *inter, *next, *filteredItems = NULL;
+for (inter = tg->items; inter; inter = next)
+    {
+    next = inter->next;
+    if (inter->score < minScore)
+        continue;
+    slAddHead(&filteredItems, inter);
+    }
+slReverse(&filteredItems);
+tg->items = filteredItems;
 }
 
 static void interactDrawItems(struct track *tg, int seqStart, int seqEnd,
         struct hvGfx *hvg, int xOff, int yOff, int width, 
         MgFont *font, Color color, enum trackVisibility vis)
 /* Draw a list of interact structures. */
 {
 #define DRAW_LINE       0
 #define DRAW_CURVE      1
 #define DRAW_ELLIPSE    2
 
 int draw = DRAW_LINE;
 if (vis != tvDense)
     {
     char *drawMode = cartUsualStringClosestToHome(cart, tg->tdb, FALSE,
                                 INTERACT_DRAW, INTERACT_DRAW_DEFAULT);
     if (sameString(drawMode, INTERACT_DRAW_CURVE))
         draw = DRAW_CURVE;
     else if (sameString(drawMode, INTERACT_DRAW_ELLIPSE))
         draw = DRAW_ELLIPSE;
     }
 boolean isDirectional = interactUiDirectional(tg->tdb);
 
 double scale = scaleForWindow(width, seqStart, seqEnd);
 struct interact *inters = tg->items;
 unsigned int maxWidth = 0;
 struct interact *inter;
 char buffer[1024];
 char itemBuf[2048];
-safef(buffer, sizeof buffer, "%s.%s", tg->tdb->track, INTERACT_MINSCORE);
 
 // Determine if there are mixed inter and intra-chromosomal 
 // Suppress interchromosomal labels if they overlap
 int nSame = 0, nOther = 0;
 int prevLabelEnd = 0, prevLabelStart = 0;
 char *prevLabel = 0;
 boolean doOtherLabels = TRUE;
 char *otherChrom = NULL;
 for (inter=inters; inter; inter=inter->next)
     {
     int width = inter->chromEnd - inter->chromStart;
     if (width > maxWidth)
         maxWidth = width;
     }
 for (inter=inters; inter; inter=inter->next)
@@ -104,33 +118,33 @@
         prevLabelStart = labelStart;
         prevLabelEnd = labelEnd;
         prevLabel = otherChrom;
         }
     }
 int fontHeight = vgGetFontPixelHeight(hvg->vg, font);
 int otherHeight = (nOther) ? 3 * fontHeight : 0;
 int sameHeight = (nSame) ? tg->height - otherHeight: 0;
 
 // Draw items
 for (inter=inters; inter; inter=inter->next)
     {
     char *otherChrom = interactOtherChrom(inter);
     safef(itemBuf, sizeof itemBuf, "%s", inter->name);
     struct dyString *ds = dyStringNew(0);
-    if (isEmpty(inter->name))
+    if (isEmpty(inter->name) || sameString(".", inter->name))
         {
-        if (isNotEmpty(inter->exp))
+        if (isNotEmpty(inter->exp) && differentString(".", inter->name))
             dyStringPrintf(ds, "%s ", inter->exp);
         if (otherChrom)
             dyStringPrintf(ds, "%s", otherChrom);
         else
             {
             char buf[4096];
             sprintLongWithCommas(buf, inter->chromEnd - inter->chromStart);
             dyStringPrintf(ds, "%s bp", buf);
             }
         }
     else
         dyStringPrintf(ds, "%s", inter->name);
     if (inter->score)
         dyStringPrintf(ds, " %d", inter->score);
     if (inter->value != 0.0)