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)