f7f7228ed35dd46bee35b02558d72d57c7d9cce5 galt Mon Sep 10 14:28:40 2012 -0700 Making bigBed able to filter in dense when zoomed in by making it dynamic with regards to maxItems diff --git src/hg/hgTracks/bigBedTrack.c src/hg/hgTracks/bigBedTrack.c index a5d33c2..9324806 100644 --- src/hg/hgTracks/bigBedTrack.c +++ src/hg/hgTracks/bigBedTrack.c @@ -42,43 +42,37 @@ bbi = track->bbiFile = bigBedFileOpen(fileName); } return bbi; } struct bigBedInterval *bigBedSelectRange(struct track *track, char *chrom, int start, int end, struct lm *lm) /* Return list of intervals in range. */ { struct bigBedInterval *result = NULL; /* protect against temporary network error */ struct errCatch *errCatch = errCatchNew(); if (errCatchStart(errCatch)) { struct bbiFile *bbi = fetchBbiForTrack(track); - if (actualVisibility(track) != tvDense) // dense always avoids this expensive query - { - int maxItems = maximumTrackItems(track) + 1; - result = bigBedIntervalQuery(bbi, chrom, start, end, maxItems, lm); - if (slCount(result) >= maxItems) + int maxItems = max(BIGBEDMAXIMUMITEMS, maximumTrackItems(track)); // do not allow it to exceed BIGBEDMAXIMUMITEMS for bigBed + result = bigBedIntervalQuery(bbi, chrom, start, end, maxItems + 1, lm); + if (slCount(result) > maxItems) { track->limitedVis = tvDense; track->limitedVisSet = TRUE; result = NULL; - } - } - if (actualVisibility(track) == tvDense) - { AllocArray(track->summary, insideWidth); if (bigBedSummaryArrayExtended(bbi, chrom, start, end, insideWidth, track->summary)) { char *denseCoverage = trackDbSettingClosestToHome(track->tdb, "denseCoverage"); if (denseCoverage != NULL) { double endVal = atof(denseCoverage); if (endVal <= 0) { AllocVar(track->sumAll); *track->sumAll = bbiTotalSummary(bbi); } } } else