a4a68e3810d949f7e454d97ea3c3eb44f67926aa braney Wed Oct 16 14:25:56 2019 -0700 bigBed number filters put message in longLabel about how many items were filtered diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c index 49f79d5..180ca43 100644 --- src/hg/hgTracks/bedTrack.c +++ src/hg/hgTracks/bedTrack.c @@ -77,51 +77,57 @@ struct hash *settings = tg->tdb->settingsHash; char *bigDataUrl = hashFindVal(settings, "bigDataUrl"); struct bedTabixFile *btf = bedTabixFileMayOpen(bigDataUrl, NULL, 0, 0); list = bedTabixReadBeds(btf, chromName, winStart, winEnd, loader); bedTabixFileClose(&btf); } else if (tg->isBigBed) { // avoid opening an unneeded db connection for bigBed; required not to use mysql for parallel fetch tracks struct lm *lm = lmInit(0); struct bigBedInterval *bb, *bbList = bigBedSelectRange(tg, chromName, winStart, winEnd, lm); struct bbiFile *bbi = fetchBbiForTrack(tg); char *bedRow[bbi->fieldCount]; char startBuf[16], endBuf[16]; struct bigBedFilter *filters = bigBedBuildFilters(cart, bbi, tg->tdb); - if (filters || compositeChildHideEmptySubtracks(cart, tg->tdb, NULL, NULL)) + if (compositeChildHideEmptySubtracks(cart, tg->tdb, NULL, NULL)) labelTrackAsFiltered(tg); if (tg->itemName == bedName && !trackDbSettingClosestToHomeOn(tg->tdb, "linkIdInName")) tg->itemName = bigBedItemName; bigBedLabelCalculateFields(cart, tg->tdb, bbi, &tg->labelColumns); + unsigned filtered = 0; for (bb = bbList; bb != NULL; bb = bb->next) { bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow)); if (!bigBedFilterInterval(bedRow, filters)) + { + filtered++; continue; + } bed = loader(bedRow); // FIXME BRANEY: either disable for all tracks with NUM_FIELDS > label field or better, // fix how label is stored so it doesn't trash custom bed field // BRANEY says: the loader should be returning bed structures which include the label field. if (differentString(tg->tdb->type, "bigInteract")) bed->label = bigBedMakeLabel(tg->tdb, tg->labelColumns, bb, chromName); slAddHead(&list, bed); } + if (filtered) + labelTrackAsFilteredNumber(tg, filtered); lmCleanup(&lm); } else { char *table = tg->table; struct customTrack *ct = tg->customPt; struct sqlConnection *conn = NULL; if (ct == NULL) conn = hAllocConnTrack(database, tg->tdb); else { conn = hAllocConn(CUSTOM_TRASH); table = ct->dbTableName; } struct sqlResult *sr = NULL;