Logo ROOT  
Reference Guide
rf710_roopoly.py
Go to the documentation of this file.
1## \file
2## \ingroup tutorial_roofit
3## \notebook
4## Taylor expansion of RooFit functions using the taylorExpand function
5##
6## \macro_image
7## \macro_output
8## \macro_code
9##
10## \date November 2021
11## \author Rahul Balasubramanian
12
13import ROOT
14
15# Create functions
16# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
17
18x = ROOT.RooRealVar("x", "x", 0.0, -3, 10)
19
20# RooPolyFunc polynomial
21# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
22# x ^ 4 - 5x ^ 3 + 5x ^ 2 + 5x - 6
23# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
24f = ROOT.RooPolyFunc("f", "f", ROOT.RooArgList(x))
25f.addTerm(+1, x, 4)
26f.addTerm(-5, x, 3)
27f.addTerm(+5, x, 2)
28f.addTerm(+5, x, 1)
29f.addTerm(-6, x, 0)
30
31f = ROOT.RooFormulaVar("f", "f", "pow(@0,4) -5 * pow(@0,3) +5 * pow(@0,2) + 5 * pow(@0,1) - 6", [x])
32# taylor expand around x0 = 0
33# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
34x0 = 2.0
35taylor_o1 = ROOT.RooPolyFunc.taylorExpand("taylorfunc_o1", "taylor expansion order 1", f, ROOT.RooArgSet(x), x0, 1)
36taylor_o2 = ROOT.RooPolyFunc.taylorExpand("taylorfunc_o2", "taylor expansion order 2", f, ROOT.RooArgSet(x), x0, 2)
37frame = x.frame(Title="x^{4} - 5x^{3} + 5x^{2} + 5x - 6")
38c = ROOT.TCanvas("c", "c", 400, 400)
39
40f.plotOn(frame, Name="f")
41taylor_o1.plotOn(frame, Name="taylor_o1", LineColor="kRed", LineStyle="kDashed")
42taylor_o2.plotOn(frame, Name="taylor_o2", LineColor="kRed - 9", LineStyle="kDotted")
43
44c.cd()
45frame.SetMinimum(-8.0)
46frame.SetMaximum(+8.0)
47frame.SetYTitle("function value")
48frame.Draw()
49
50legend = ROOT.TLegend(0.53, 0.73, 0.86, 0.87)
51legend.SetFillColor(ROOT.kWhite)
52legend.SetLineColor(ROOT.kWhite)
53legend.SetTextSize(0.02)
54legend.AddEntry("taylor_o1", "Taylor expansion upto first order", "L")
55legend.AddEntry("taylor_o2", "Taylor expansion upto second order", "L")
56legend.AddEntry("f", "Polynomial of fourth order", "L")
57legend.Draw()
58
59c.Draw()
60c.SaveAs("rf710_roopoly.png")