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
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
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)
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