forked from root-project/root
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnormalDist.py
More file actions
116 lines (102 loc) · 3.45 KB
/
normalDist.py
File metadata and controls
116 lines (102 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
## \file
## \ingroup tutorial_math
## \notebook
## Tutorial illustrating the new statistical distributions functions (pdf, cdf and quantile)
##
## based on Anna Kreshuk's normalDist.C
##
## \macro_image
## \macro_code
##
## \author Juan Fernando Jaramillo Botero
from ROOT import TF1, TCanvas, TSystem, TAxis, TLegend
from ROOT import kRed, kGreen, kBlue
# Create the one dimentional functions for normal distribution.
pdfunc = TF1("pdf","ROOT::Math::normal_pdf(x, [0],[1])", -5, 5)
cdfunc = TF1("cdf","ROOT::Math::normal_cdf(x, [0],[1])", -5, 5)
ccdfunc = TF1("cdf_c","ROOT::Math::normal_cdf_c(x, [0])", -5, 5)
qfunc = TF1("quantile","ROOT::Math::normal_quantile(x, [0])", 0, 1)
cqfunc = TF1("quantile_c","ROOT::Math::normal_quantile_c(x, [0])", 0, 1)
# Set the parameters for the normal distribution with sigma to 1 and mean to
# zero. And set the color to blue and title to none.
pdfunc.SetParameters(1.0, 0.0)
pdfunc.SetTitle("")
pdfunc.SetLineColor(kBlue)
# Set the configuration for the X and Y axis.
Xaxis = pdfunc.GetXaxis()
Yaxis = pdfunc.GetYaxis()
Xaxis.SetLabelSize(0.06)
Xaxis.SetTitle("x")
Xaxis.SetTitleSize(0.07)
Xaxis.SetTitleOffset(0.55)
Yaxis.SetLabelSize(0.06)
# Set sigma to 1 and mean to zero, for the cumulative normal distribution, and
# set the color to red and title to none.
cdfunc.SetParameters(1.0, 0.0)
cdfunc.SetTitle("")
cdfunc.SetLineColor(kRed)
# Set the configuration for the X and Y axis for the cumulative normal
# distribution.
cdXaxis = cdfunc.GetXaxis()
cdYaxis = cdfunc.GetYaxis()
cdXaxis.SetLabelSize(0.06)
cdXaxis.SetTitle("x")
cdXaxis.SetTitleSize(0.07)
cdXaxis.SetTitleOffset(0.55)
cdYaxis.SetLabelSize(0.06)
cdYaxis.SetTitle("p")
cdYaxis.SetTitleSize(0.07)
cdYaxis.SetTitleOffset(0.55)
# Set sigma to 1 and mean to zero, for the survival function of normal
# distribution, and set the color to green and title to none
ccdfunc.SetParameters(1.0, 0.0)
ccdfunc.SetTitle("")
ccdfunc.SetLineColor(kGreen)
# Set sigma to 1 and mean to zero, for the quantile of normal distribution
# To get more precision for p close to 0 or 1, set Npx to 1000
qfunc.SetParameter(0, 1.0)
qfunc.SetTitle("")
qfunc.SetLineColor(kRed)
qfunc.SetNpx(1000)
# Set the configuration of X and Y axis
qfXaxis = qfunc.GetXaxis()
qfYaxis = qfunc.GetYaxis()
qfXaxis.SetLabelSize(0.06)
qfXaxis.SetTitle("p")
qfYaxis.SetLabelSize(0.06)
qfXaxis.SetTitleSize(0.07)
qfXaxis.SetTitleOffset(0.55)
qfYaxis.SetTitle("x")
qfYaxis.SetTitleSize(0.07)
qfYaxis.SetTitleOffset(0.55)
# Set sigma to 1 and mean to zero of survival function of quantile of normal
# distribution, and set color to green and title to none.
cqfunc.SetParameter(0, 1.0)
cqfunc.SetTitle("")
cqfunc.SetLineColor(kGreen)
cqfunc.SetNpx(1000)
# Create canvas and divide in three parts
c1 = TCanvas("c1", "Normal Distributions", 100, 10, 600, 800)
c1.Divide(1, 3)
c1.cd(1)
# Draw the normal distribution
pdfunc.Draw()
legend1 = TLegend(0.583893, 0.601973, 0.885221, 0.854151)
legend1.AddEntry(pdfunc, "normal_pdf", "l")
legend1.Draw()
# Draw the cumulative normal distribution
c1.cd(2)
cdfunc.Draw()
ccdfunc.Draw("same")
legend2 = TLegend(0.585605, 0.462794, 0.886933, 0.710837)
legend2.AddEntry(cdfunc, "normal_cdf", "l")
legend2.AddEntry(ccdfunc, "normal_cdf_c", "l")
legend2.Draw()
# Draw the normal quantile of normal distribution
c1.cd(3)
qfunc.Draw()
cqfunc.Draw("same")
legend3 = TLegend(0.315094, 0.633668, 0.695179, 0.881711)
legend3.AddEntry(qfunc, "normal_quantile", "l")
legend3.AddEntry(cqfunc, "normal_quantile_c", "l")
legend3.Draw()