## \file
## \ingroup tutorial_math
## \notebook
## Show the different kinds of Bessel functions available in ROOT
## To execute the macro type in:
##
## ~~~{.cpp}
## root[0] .x Bessel.C
## ~~~
##
## It will create one canvas with the representation
## of the cylindrical and spherical Bessel functions
## regular and modified
##
## Based on Bessel.C by Magdalena Slawinska
##
## \macro_image
## \macro_code
##
## \author Juan Fernando Jaramillo Botero
from ROOT import TCanvas, TF1, gSystem, gPad, TLegend, TPaveLabel, kBlack
gSystem.Load("libMathMore")
DistCanvas = TCanvas("DistCanvas", "Bessel functions example", 10, 10, 800, 600)
DistCanvas.SetFillColor(17)
DistCanvas.Divide(2, 2)
DistCanvas.cd(1)
gPad.SetGrid()
gPad.SetFrameFillColor(19)
leg = TLegend(0.75, 0.7, 0.89, 0.89)
# Drawing the set of Bessel J functions
#
# n is the number of functions in each pad
n = 5
JBessel = []
for nu in range(n):
jbessel = TF1("J_0", "ROOT::Math::cyl_bessel_j([0],x)", 0, 10)
jbessel.SetParameters(nu, 0.0)
jbessel.SetTitle("")
jbessel.SetLineStyle(1)
jbessel.SetLineWidth(3)
jbessel.SetLineColor(nu + 1)
JBessel.append(jbessel)
# Setting x axis for JBessel
xaxis = JBessel[0].GetXaxis()
xaxis.SetTitle("x")
xaxis.SetTitleSize(0.06)
xaxis.SetTitleOffset(.7)
# setting the title in a label style
p1 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel J functions", "NDC")
p1.SetFillColor(0)
p1.SetTextFont(22)
p1.SetTextColor(kBlack)
# setting the legend
leg.AddEntry(JBessel[0].DrawCopy(), " J_0(x)", "l")
leg.AddEntry(JBessel[1].DrawCopy("same"), " J_1(x)", "l")
leg.AddEntry(JBessel[2].DrawCopy("same"), " J_2(x)", "l")
leg.AddEntry(JBessel[3].DrawCopy("same"), " J_3(x)", "l")
leg.AddEntry(JBessel[4].DrawCopy("same"), " J_4(x)", "l")
leg.Draw()
p1.Draw()
# Set canvas 2
DistCanvas.cd(2)
gPad.SetGrid()
gPad.SetFrameFillColor(19)
leg2 = TLegend(0.75, 0.7, 0.89, 0.89)
# Drawing Bessel k
KBessel = []
for nu in range(n):
kbessel = TF1("J_0", "ROOT::Math::cyl_bessel_k([0],x)", 0, 10)
kbessel.SetParameters(nu, 0.0)
kbessel.SetTitle("Bessel K functions")
kbessel.SetLineStyle(1)
kbessel.SetLineWidth(3)
kbessel.SetLineColor(nu+1)
KBessel.append(kbessel)
kxaxis = KBessel[0].GetXaxis()
kxaxis.SetTitle("x")
kxaxis.SetTitleSize(0.06)
kxaxis.SetTitleOffset(.7)
# setting title
p2 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel K functions", "NDC")
p2.SetFillColor(0)
p2.SetTextFont(22)
p2.SetTextColor(kBlack)
# setting legend
leg2.AddEntry(KBessel[0].DrawCopy(), " K_0(x)", "l")
leg2.AddEntry(KBessel[1].DrawCopy("same"), " K_1(x)", "l")
leg2.AddEntry(KBessel[2].DrawCopy("same"), " K_2(x)", "l")
leg2.AddEntry(KBessel[3].DrawCopy("same"), " K_3(x)", "l")
leg2.AddEntry(KBessel[4].DrawCopy("same"), " K_4(x)", "l")
leg2.Draw()
p2.Draw()
# Set canvas 3
DistCanvas.cd(3)
gPad.SetGrid()
gPad.SetFrameFillColor(19)
leg3 = TLegend(0.75, 0.7, 0.89, 0.89)
# Drawing Bessel i
iBessel = []
for nu in range(5):
ibessel = TF1("J_0", "ROOT::Math::cyl_bessel_i([0],x)", 0, 10)
ibessel.SetParameters(nu, 0.0)
ibessel.SetTitle("Bessel I functions")
ibessel.SetLineStyle(1)
ibessel.SetLineWidth(3)
ibessel.SetLineColor(nu + 1)
iBessel.append(ibessel)
iaxis = iBessel[0].GetXaxis()
iaxis.SetTitle("x")
iaxis.SetTitleSize(0.06)
iaxis.SetTitleOffset(.7)
# setting title
p3 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel I functions", "NDC")
p3.SetFillColor(0)
p3.SetTextFont(22)
p3.SetTextColor(kBlack)
# setting legend
leg3.AddEntry(iBessel[0].DrawCopy(), " I_0", "l")
leg3.AddEntry(iBessel[1].DrawCopy("same"), " I_1(x)", "l")
leg3.AddEntry(iBessel[2].DrawCopy("same"), " I_2(x)", "l")
leg3.AddEntry(iBessel[3].DrawCopy("same"), " I_3(x)", "l")
leg3.AddEntry(iBessel[4].DrawCopy("same"), " I_4(x)", "l")
leg3.Draw()
p3.Draw()
# Set canvas 4
DistCanvas.cd(4)
gPad.SetGrid()
gPad.SetFrameFillColor(19)
leg4 = TLegend(0.75, 0.7, 0.89, 0.89)
# Drawing sph_bessel
jBessel = []
for nu in range(5):
jbessel = TF1("J_0", "ROOT::Math::sph_bessel([0],x)", 0, 10)
jbessel.SetParameters(nu, 0.0)
jbessel.SetTitle("Bessel j functions")
jbessel.SetLineStyle(1)
jbessel.SetLineWidth(3)
jbessel.SetLineColor(nu+1)
jBessel.append(jbessel)
jaxis = jBessel[0].GetXaxis()
jaxis.SetTitle("x")
jaxis.SetTitleSize(0.06)
jaxis.SetTitleOffset(.7)
# setting title
p4 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel j functions", "NDC")
p4.SetFillColor(0)
p4.SetTextFont(22)
p4.SetTextColor(kBlack)
# setting legend
leg4.AddEntry(jBessel[0].DrawCopy(), " j_0(x)", "l")
leg4.AddEntry(jBessel[1].DrawCopy("same"), " j_1(x)", "l")
leg4.AddEntry(jBessel[2].DrawCopy("same"), " j_2(x)", "l")
leg4.AddEntry(jBessel[3].DrawCopy("same"), " j_3(x)", "l")
leg4.AddEntry(jBessel[4].DrawCopy("same"), " j_4(x)", "l")
leg4.Draw()
p4.Draw()
DistCanvas.cd()