def _updateRanges(self): tree = self.data.tree() n = tree.Draw(self.x.GetName(), '', 'goff') mi = ModalInterval(n, tree.GetV1()) if self.doAutoXRange: ## Determine the range as a modal interval if self.xRangeMode == 'SigmaLevel': mi.setSigmaLevel(self.xRangeSigmaLevel) elif self.xRangeMode == 'Fraction': mi.setFraction(self.xRangeFraction) elif self.xRangeMode == 'NumberOfEntries': mi.setNumberOfEntriesToCover(self.xRangeNumberOfEntries) else: message = "Illegal xRangeMode = '%s'" % self.xRangeMode raise RuntimeError, message xmargin = 0.1 * mi.length() self.xRange = (mi.lowerBound() - xmargin, mi.upperBound() + xmargin) else: ## If possible, shrink the range to cover the data plus a margin mi.setFraction(1.) xlo = mi.lowerBound() xhi = mi.upperBound() xmargin = 0.1 * mi.length() self.xRange = (max(xlo - xmargin, self.xRange[0]), min(xhi + xmargin, self.xRange[1])) if self.doAutoXRangeZoom: mi.setSigmaLevel(self.xRangeSigmaLevelZoom) self.xRangeZoom = tuple(mi.bounds()) if self.doAutoFitRange: ## Determine the range as a modal interval if self.fitRangeMode == 'SigmaLevel': mi.setSigmaLevel(self.fitRangeSigmaLevel) elif self.fitRangeMode == 'Fraction': mi.setFraction(self.fitRangeFraction) elif self.fitRangeMode == 'NumberOfEntries': mi.setNumberOfEntriesToCover(self.fitRangeNumberOfEntries) print "setting fit range number of entries:", mi.bounds() else: message = "Illegal fitRangeMode = '%s'" % self.fitRangeMode raise RuntimeError, message self.fitRange = tuple(mi.bounds()) print "++++ fit range changed to:", self.fitRange self.pullRange = getattr(self, self.pullRangeMode) self.residRange = getattr(self, self.residRangeMode)