could we just avoid all the math in granularityFromPointsLinear and start with FULL and work our way up?  It seems like a simpler calculation than trying to find the right starting point and working from there.