Example #1
0
    def save_fit(self,
                 sampMan=None,
                 workspace=None,
                 logy=False,
                 stats_pos='right'):

        if sampMan is not None:

            for name, param in self.fit_params.iteritems():
                param.SetName(name)

            can = ROOT.TCanvas(str(uuid.uuid4()), '')
            frame = self.xvar.frame()
            self.datahist.plotOn(frame)
            self.func_pdf.plotOn(frame)
            if stats_pos == 'left':
                self.func_pdf.paramOn(frame, rf.ShowConstants(True),
                                      rf.Layout(0.1, 0.5, 0.9),
                                      rf.Format("NEU", rf.AutoPrecision(3)))
            if stats_pos == 'right':
                self.func_pdf.paramOn(frame, rf.ShowConstants(True),
                                      rf.Layout(0.5, 0.9, 0.9),
                                      rf.Format("NEU", rf.AutoPrecision(2)))
            frame.Draw()
            if logy:
                ymax = frame.GetMaximum()
                frame.SetMinimum(0.001)
                frame.SetMaximum(ymax * 10)
                can.SetLogy()
                can.SetLogx()

            sampMan.outputs[self.label] = can
Example #2
0
    def plot_fit_params(self, wsp):
        """
        Plot all free fit parameters onto canvas
        Args:
        wsp (ROOT.RooWorkspace): workspace where the model is stored
        """
        fit_var = get_var(wsp, self.fit_var)

        cans = OrderedDict()

        for bin_name in self.bins:
            frame = fit_var.frame(rf.Title('Fit Results'))

            plotname = '{}_{}'.format(self.full_model, bin_name)
            full_pdf = wsp.pdf(plotname)

            full_pdf.paramOn(frame, rf.Layout(0.1, 0.9, 0.9),
                             rf.Format('NEU', rf.AutoPrecision(2)))

            can = r.TCanvas(create_random_str(32), 'rcan', 600, 600)
            can.cd()
            frame.findObject('{}_paramBox'.format(full_pdf.GetName())).Draw()

            cans[bin_name] = can
        #can.SaveAs(pdfname)

        # returns fit params for each fit

        return cans
Example #3
0
    def plot_fit_params(self, wsp, pdfname, snapname=''):
        """
        Plot all free fit parameters onto canvas and save as a pdf.

        Args:
            wsp (ROOT.RooWorkspace): workspace where the model is stored
            pdfname (str): Name of the created pdf under which the plot will be
                stored
            snapname (str, optional): Name of snapshot that will be loaded
                before plotting
        """
        if snapname:
            wsp.loadSnapshot(snapname)
        frame = get_var(wsp, self.mname).frame(rf.Title('Fit Results'))
        full_pdf = wsp.pdf(self.full_model)

        full_pdf.paramOn(frame, rf.Layout(0.1, 0.9, 0.9),
                         rf.Format('NEU', rf.AutoPrecision(2)))

        can = r.TCanvas(create_random_str(32), 'rcan', 600, 600)
        can.cd()
        frame.findObject('{}_paramBox'.format(full_pdf.GetName())).Draw()
        can.SaveAs(pdfname)
Example #4
0
mean = RooRealVar("mean", "MeanofGaussian", 0, -10, 10)
sigma = RooRealVar("sigma", "WidthofGaussian", 3, -10, 10)
gauss = RooGaussian("gauss", "gauss(x,mean,sigma)", x, mean, sigma)
g1sig = RooRealVar("g1sig", "fraction of gauss1", 10, 0, 100000.0)

# Build signal PDF: f1
signalPDF = RooAddPdf("signalPDF", "g1sig * g1", RooArgList(gauss),
                      RooArgList(g1sig))

#mean.setConstant(kTRUE); #fix mean
sigma.setRange(0.1, 3)
# change range for sigma
gauss.fitTo(data, RooFit.PrintLevel(-1))
# ffit gauss on data
signalPDF.fitTo(data, RooFit.PrintLevel(-1))
#PrintLevel(-1) almost no output
# Minos(kTRUE)?

mean.Print()
sigma.Print()

#Show parameters on plot
signalPDF.paramOn(xframe, RooFit.Layout(0.55, 0.9, 0.9),
                  RooFit.Format("NEU", RooFit.AutoPrecision(1)))
signalPDF.plotOn(xframe)

xframe.Draw()
chi2txt = TLatex()
chi2txt.SetNDC()
chi2txt.DrawLatex(0.13, 0.83, "\chi^2/n.d.f = %0.3f" %
                  xframe.chiSquare())  #Put chi² on plot