def main():
    '''This is the entry point to execution.'''
    print 'Welcome to parameterized_keys_pdf_fit_example!'
    global data, model, x, fitresult
    data = getdata()
    data.SetName('zeeDataYong')
    ## Reduce data for debugging
    data = data.reduce(roo.EventRange(0, 1000))
    x = data.get()[variable]
    initialize_fit_parameters(data, x)
    old_precision = set_default_integrator_precision(1e-8, 1e-8)
    model = ParameterizedKeysPdf('model',
                                 'model',
                                 x,
                                 mode,
                                 effsigma,
                                 data,
                                 rho=1,
                                 forcerange=True)

    fitresult = model.fitTo(data, roo.SumW2Error(True), roo.NumCPU(8),
                            roo.Strategy(2), roo.Save())
    set_default_integrator_precision(*old_precision)
    make_plot(x, data, model)
    print '\n==  Fitted parameters =='
    mode.Print()
    effsigma.Print()
    save_result(fitresult)
    print '\nExiting parameterized_keys_pdf_fit_example with success.'
示例#2
0
    def __init__(self, data, rho=1.5, printlevel=-1, option='monolithic'):
        if data.get().getSize() != 1:
            raise RuntimeError, 'Data must contain just one variable!'
        
        self.w = ROOT.RooWorkspace('KeysResponseFitter',
                                   'KeysResponseFitter Workspace')
        self.w.Import(data)
        self.data = self.w.data(data.GetName())
        self.data.SetName('data')      

        self.x = self.w.var(data.get().first().GetName())
        self.x.SetName('x')
        
        self.rho = rho        
        self.printlevel = printlevel

        ## Define mode and effsigma.
        self.mode = self.w.factory('mode[0, -50, 50]')
        self.effsigma = self.w.factory('effsigma[1, 0.01, 50]')
        for x in 'mode effsigma'.split():
            getattr(self, x).setUnit(self.x.getUnit())

        self.option = option
        
        if option == 'monolithic':
            self.model = ParameterizedKeysPdf('model', 'model', self.x,
                                              self.mode,
                                              self.effsigma, self.data, rho=rho,
                                              forcerange=True)
        elif 'split' in option:
            self.initsplit()
        else:
            raise RuntimeError, 'Unknown option: %s' % option
示例#3
0
 def initsplit(self):
     '''
     Splits the dataset in two and builds a model for each half.
     '''
     global arg
     self.resampler = Resampler(self.data)
     self.subdata = []
     self.submodel = []
     if not self.option.replace('split', ''):
         self.nsplit = 2
     else:
         self.nsplit = int(self.option.replace('split', ''))
     self.part = ROOT.RooCategory('part', 'part')
     self.model = ROOT.RooSimultaneous('model', 'model', self.part)
     for i in range(self.nsplit):
         cat = str(i)
         name = 'subdata%d' % i
         self.part.defineType(cat)
         self.subdata.append(self.resampler.prescale(self.nsplit, [i], name, name))
         name = 'submodel%d' % i
         self.submodel.append(
             ParameterizedKeysPdf(
                 name, name, self.x, self.mode, self.effsigma,
                 self.subdata[i], rho=self.rho, forcerange=True
             )
         )
         self.model.addPdf(self.submodel[i], cat)
     # Now shuffle the subdata and the categories
     args = [roo.Index(self.part)]
     cats = [str(i) for i in range(self.nsplit)]
     cats.reverse()
     for cat, subdata in zip(cats, self.subdata):
         args.append(roo.Import(cat, subdata))
     self.data = ROOT.RooDataSet('data', 'data', ROOT.RooArgSet(self.x),
                                 *args)
示例#4
0
def main():
    '''This is the entry point to execution.'''
    print 'Welcome to test_pkeys - test of the mode and effective sigma'
    print 'extraction for a generic distribution using ParametrizedKeysPdf.'

    w = ROOT.RooWorkspace('w', 'w')

    truepdf = w.factory('Gaussian::truepdf(x[-5,5],m[0],s[1])')
    data = truepdf.generate(ROOT.RooArgSet(w.var('x')), 10000)
    canvases.next('truepdf')
    plot = w.var('x').frame()
    data.plotOn(plot)
    truepdf.plotOn(plot)
    plot.Draw()

    toypdf = ParameterizedKeysPdf('toypdf',
                                  'toypdf',
                                  w.var('x'),
                                  w.factory('mtoy[0,-5,5]'),
                                  w.factory('stoy[1,0.1,5]'),
                                  data,
                                  rho=3)
    toypdf.shape.plotOn(plot, roo.LineColor(ROOT.kRed))
    toypdf.fitTo(data)
    toypdf.plotOn(plot, roo.LineColor(ROOT.kGreen))
    plot.Draw()

    canvases.update()
    print 'Exiting test_pkeys with success!'
示例#5
0
 def run(self):
     ## Set the range of deltaE to cover all the date plus a small margin.
     mi = self.modal_interval
     mi.setFraction(1.)
     self.deltaE.setRange(mi.lowerBound() - 1, mi.upperBound() + 1)
     self.model = ParameterizedKeysPdf(self.name + '_model',
                                       self.name + '_model',
                                       self.deltaE,
                                       self.mode,
                                       self.effsigma,
                                       self.train_data,
                                       rho=2)
     mit = self.modal_interval_training
     mit.setFraction(0.99)
     fitrange = roo.Range(mit.lowerBound(), mit.upperBound())
     self.fit_result = self.model.fitTo(self.fit_data, roo.NumCPU(8),
                                        roo.Save(), fitrange)
     self.fit_result.SetName(self.name + '_fit_result')
     self.make_log_plot()
     self.make_zoom_plot()
     self.make_fixed_range_log_plot()
     self.make_fixed_range_zoom_plot()
     canvases.update()