Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
import ROOT
from JPsi.MuMu.common.modalinterval import ModalInterval
from JPsi.MuMu.vector import vector

## Configuration
nSigmaCoverage = 1.
mean = 0.
sigma = 1.
n = 100000

## Get some toy data
print ("Sampling Gaussian PDF with mean=%g and sigma=%g "
       "%d times..." % (mean, sigma, n))
data = vector('double')()
data.reserve(n)
for i in range(n):
  data.push_back(ROOT.gRandom.Gaus(0,1))

## Create the ModalInterval object
mi = ModalInterval(data)

## Pring the full range of toy data
mi.setFraction(1.)
print "\nShortest interval covering all data:"
print "[%f, %f]" % tuple(mi.bounds())

## Print the range corresponding to n effective sigma
print "\nRange corresponding to +/-%g effective sigma:" % nSigmaCoverage
mi.setSigmaLevel(nSigmaCoverage)
print "[%f, %f]" % tuple(mi.bounds())