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