3eeaab88be2ac3f2670aef02638ca25b63fefa54
kent
  Fri Feb 17 14:38:24 2012 -0800
Fixing bug in min/max logic where min/max was just taken from first region.
diff --git src/hg/hgTables/bigWig.c src/hg/hgTables/bigWig.c
index e98bfcf..737540b 100644
--- src/hg/hgTables/bigWig.c
+++ src/hg/hgTables/bigWig.c
@@ -235,52 +235,66 @@
 bits64 validCount = 0;
 
 if (!anyFilter() && !anyIntersection())
     {
     for (region = regionList; region != NULL; region = region->next)
 	{
 	struct bbiSummaryElement sum;
 	if (bbiSummaryArrayExtended(bwf, region->chrom, region->start, region->end,
 		bigWigIntervalQuery, 1, &sum))
 	    {
 	    if (validCount == 0)
 		{
 		minVal = sum.minVal;
 		maxVal = sum.maxVal;
 		}
+	    else
+	        {
+		if (sum.minVal < minVal)
+		    minVal = sum.minVal;
+		if (sum.maxVal > maxVal)
+		    maxVal = sum.maxVal;
+		}
 	    sumData += sum.sumData;
 	    sumSquares += sum.sumSquares;
 	    validCount += sum.validCount;
 	    }
 	}
     }
 else
     {
     double ll, ul;
     enum wigCompare cmp;
     getWigFilter(database, curTable, &cmp, &ll, &ul);
     for (region = regionList; region != NULL; region = region->next)
         {
 	struct lm *lm = lmInit(0);
 	struct bbiInterval *iv, *ivList;
 	ivList = intersectedFilteredBbiIntervalsOnRegion(conn, bwf, region, cmp, ll, ul, lm);
 	for (iv = ivList; iv != NULL; iv = iv->next)
 	    {
 	    double val = iv->val;
 	    double size = iv->end - iv->start;
 	    if (validCount == 0)
 		minVal = maxVal = val;
+	    else
+	        {
+		if (val < minVal)
+		    minVal = val;
+		if (val > maxVal)
+		    maxVal = val;
+		}
 	    sumData += size*val;
 	    sumSquares += size*val*val;
 	    validCount += size;
 	    }
 	lmCleanup(&lm);
 	}
     }
 
 hTableStart();
 floatStatRow("mean", sumData/validCount);
 floatStatRow("min", minVal);
 floatStatRow("max", maxVal);
 floatStatRow("standard deviation", calcStdFromSums(sumData, sumSquares, validCount));
 numberStatRow("bases with data", validCount);
 long long regionSize = basesInRegion(regionList,0);