#!/usr/bin/env python # coding: utf-8 # # Bessel # 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 # # # # # **Author:** Juan Fernando Jaramillo Botero # This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, May 15, 2024 at 09:47 AM. # In[1]: 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 # In[2]: 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 # In[3]: xaxis = JBessel[0].GetXaxis() xaxis.SetTitle("x") xaxis.SetTitleSize(0.06) xaxis.SetTitleOffset(.7) # setting the title in a label style # In[4]: p1 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel J functions", "NDC") p1.SetFillColor(0) p1.SetTextFont(22) p1.SetTextColor(kBlack) # setting the legend # In[5]: 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 # In[6]: DistCanvas.cd(2) gPad.SetGrid() gPad.SetFrameFillColor(19) leg2 = TLegend(0.75, 0.7, 0.89, 0.89) # Drawing Bessel k # In[7]: 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 # In[8]: p2 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel K functions", "NDC") p2.SetFillColor(0) p2.SetTextFont(22) p2.SetTextColor(kBlack) # setting legend # In[9]: 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 # In[10]: DistCanvas.cd(3) gPad.SetGrid() gPad.SetFrameFillColor(19) leg3 = TLegend(0.75, 0.7, 0.89, 0.89) # Drawing Bessel i # In[11]: 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 # In[12]: p3 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel I functions", "NDC") p3.SetFillColor(0) p3.SetTextFont(22) p3.SetTextColor(kBlack) # setting legend # In[13]: 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 # In[14]: DistCanvas.cd(4) gPad.SetGrid() gPad.SetFrameFillColor(19) leg4 = TLegend(0.75, 0.7, 0.89, 0.89) # Drawing sph_bessel # In[15]: 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 # In[16]: p4 = TPaveLabel(.0, .90, .0 + .50, .90 + .10, "Bessel j functions", "NDC") p4.SetFillColor(0) p4.SetTextFont(22) p4.SetTextColor(kBlack) # setting legend # In[17]: 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() # Draw all canvases # In[18]: from ROOT import gROOT gROOT.GetListOfCanvases().Draw()