Logo ROOT   6.07/09
Reference Guide
Bessel.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_math
3 /// \notebook
4 /// Show the different kinds of Bessel functions available in ROOT
5 /// To execute the macro type in:
6 ///
7 /// ~~~{.cpp}
8 /// root[0] .x Bessel.C
9 /// ~~~
10 ///
11 /// It will create one canvas with the representation
12 /// of the cylindrical and spherical Bessel functions
13 /// regular and modified
14 ///
15 /// \macro_image
16 /// \macro_code
17 ///
18 /// \author Magdalena Slawinska
19 
20 #include "TMath.h"
21 #include "TF1.h"
22 #include "TCanvas.h"
23 
24 #include <Riostream.h>
25 #include "TLegend.h"
26 #include "TLegendEntry.h"
27 
28 #include "Math/IFunction.h"
29 #include <cmath>
30 #include "TSystem.h"
31 #include "TAxis.h"
32 #include "TPaveLabel.h"
33 
34 void Bessel()
35 {
36  gSystem->Load("libMathMore");
37 
38  TCanvas *DistCanvas = new TCanvas("DistCanvas", "Bessel functions example", 10, 10, 800, 600);
39  DistCanvas->SetFillColor(17);
40  DistCanvas->Divide(2, 2);
41  DistCanvas->cd(1);
42  gPad->SetGrid();
43  gPad->SetFrameFillColor(19);
44  TLegend *leg = new TLegend(0.75, 0.7, 0.89, 0.89);
45 
46  int n = 5; //number of functions in each pad
47  //drawing the set of Bessel J functions
48  TF1* JBessel[5];
49  for(int nu = 0; nu < n; nu++)
50  {
51  JBessel[nu]= new TF1("J_0", "ROOT::Math::cyl_bessel_j([0],x)", 0, 10);
52  JBessel[nu]->SetParameters(nu, 0.0);
53  JBessel[nu]->SetTitle(""); //Bessel J functions");
54  JBessel[nu]->SetLineStyle(1);
55  JBessel[nu]->SetLineWidth(3);
56  JBessel[nu]->SetLineColor(nu+1);
57  }
58  JBessel[0]->TF1::GetXaxis()->SetTitle("x");
59  JBessel[0]->GetXaxis()->SetTitleSize(0.06);
60  JBessel[0]->GetXaxis()->SetTitleOffset(.7);
61 
62  //setting the title in a label style
63  TPaveLabel *p1 = new TPaveLabel(.0,.90 , (.0+.50),(.90+.10) , "Bessel J functions", "NDC");
64  p1->SetFillColor(0);
65  p1->SetTextFont(22);
66  p1->SetTextColor(kBlack);
67 
68  //setting the legend
69  leg->AddEntry(JBessel[0]->DrawCopy(), " J_0(x)", "l");
70  leg->AddEntry(JBessel[1]->DrawCopy("same"), " J_1(x)", "l");
71  leg->AddEntry(JBessel[2]->DrawCopy("same"), " J_2(x)", "l");
72  leg->AddEntry(JBessel[3]->DrawCopy("same"), " J_3(x)", "l");
73  leg->AddEntry(JBessel[4]->DrawCopy("same"), " J_4(x)", "l");
74 
75  leg->Draw();
76  p1->Draw();
77 
78  //------------------------------------------------
79  DistCanvas->cd(2);
80  gPad->SetGrid();
81  gPad->SetFrameFillColor(19);
82 
83  TLegend *leg2 = new TLegend(0.75, 0.7, 0.89, 0.89);
84  //------------------------------------------------
85  //Drawing Bessel k
86  TF1* KBessel[5];
87  for(int nu = 0; nu < n; nu++){
88  KBessel[nu]= new TF1("J_0", "ROOT::Math::cyl_bessel_k([0],x)", 0, 10);
89  KBessel[nu]->SetParameters(nu, 0.0);
90  KBessel[nu]->SetTitle("Bessel K functions");
91  KBessel[nu]->SetLineStyle(1);
92  KBessel[nu]->SetLineWidth(3);
93  KBessel[nu]->SetLineColor(nu+1);
94  }
95  KBessel[0]->GetXaxis()->SetTitle("x");
96  KBessel[0]->GetXaxis()->SetTitleSize(0.06);
97  KBessel[0]->GetXaxis()->SetTitleOffset(.7);
98 
99  //setting title
100  TPaveLabel *p2 = new TPaveLabel(.0,.90 , (.0+.50),(.90+.10) , "Bessel K functions", "NDC");
101  p2->SetFillColor(0);
102  p2->SetTextFont(22);
103  p2->SetTextColor(kBlack);
104 
105  //setting legend
106  leg2->AddEntry(KBessel[0]->DrawCopy(), " K_0(x)", "l");
107  leg2->AddEntry(KBessel[1]->DrawCopy("same"), " K_1(x)", "l");
108  leg2->AddEntry(KBessel[2]->DrawCopy("same"), " K_2(x)", "l");
109  leg2->AddEntry(KBessel[3]->DrawCopy("same"), " K_3(x)", "l");
110  leg2->AddEntry(KBessel[4]->DrawCopy("same"), " K_4(x)", "l");
111  leg2->Draw();
112  p2->Draw();
113  //------------------------------------------------
114  DistCanvas->cd(3);
115  gPad->SetGrid();
116  gPad->SetFrameFillColor(19);
117  TLegend *leg3 = new TLegend(0.75, 0.7, 0.89, 0.89);
118  //------------------------------------------------
119  //Drawing Bessel i
120  TF1* iBessel[5];
121  for(int nu = 0; nu <= 4; nu++){
122  iBessel[nu]= new TF1("J_0", "ROOT::Math::cyl_bessel_i([0],x)", 0, 10);
123  iBessel[nu]->SetParameters(nu, 0.0);
124  iBessel[nu]->SetTitle("Bessel I functions");
125  iBessel[nu]->SetLineStyle(1);
126  iBessel[nu]->SetLineWidth(3);
127  iBessel[nu]->SetLineColor(nu+1);
128  }
129 
130  iBessel[0]->GetXaxis()->SetTitle("x");
131  iBessel[0]->GetXaxis()->SetTitleSize(0.06);
132  iBessel[0]->GetXaxis()->SetTitleOffset(.7);
133 
134  //setting title
135  TPaveLabel *p3 = new TPaveLabel(.0,.90 , (.0+.50),(.90+.10) ,"Bessel I functions", "NDC");
136  p3->SetFillColor(0);
137  p3->SetTextFont(22);
138  p3->SetTextColor(kBlack);
139 
140  //setting legend
141  leg3->AddEntry(iBessel[0]->DrawCopy(), " I_0", "l");
142  leg3->AddEntry(iBessel[1]->DrawCopy("same"), " I_1(x)", "l");
143  leg3->AddEntry(iBessel[2]->DrawCopy("same"), " I_2(x)", "l");
144  leg3->AddEntry(iBessel[3]->DrawCopy("same"), " I_3(x)", "l");
145  leg3->AddEntry(iBessel[4]->DrawCopy("same"), " I_4(x)", "l");
146  leg3->Draw();
147  p3->Draw();
148  //------------------------------------------------
149  DistCanvas->cd(4);
150  gPad->SetGrid();
151  gPad->SetFrameFillColor(19);
152  TLegend *leg4 = new TLegend(0.75, 0.7, 0.89, 0.89);
153  //------------------------------------------------
154  //Drawing sph_bessel
155  TF1* jBessel[5];
156  for(int nu = 0; nu <= 4; nu++){
157  jBessel[nu]= new TF1("J_0", "ROOT::Math::sph_bessel([0],x)", 0, 10);
158  jBessel[nu]->SetParameters(nu, 0.0);
159  jBessel[nu]->SetTitle("Bessel j functions");
160  jBessel[nu]->SetLineStyle(1);
161  jBessel[nu]->SetLineWidth(3);
162  jBessel[nu]->SetLineColor(nu+1);
163  }
164  jBessel[0]->GetXaxis()->SetTitle("x");
165  jBessel[0]->GetXaxis()->SetTitleSize(0.06);
166  jBessel[0]->GetXaxis()->SetTitleOffset(.7);
167 
168  //setting title
169  TPaveLabel *p4 = new TPaveLabel(.0,.90 , (.0+.50),(.90+.10) ,"Bessel j functions", "NDC");
170  p4->SetFillColor(0);
171  p4->SetTextFont(22);
172  p4->SetTextColor(kBlack);
173 
174  //setting legend
175 
176  leg4->AddEntry(jBessel[0]->DrawCopy(), " j_0(x)", "l");
177  leg4->AddEntry(jBessel[1]->DrawCopy("same"), " j_1(x)", "l");
178  leg4->AddEntry(jBessel[2]->DrawCopy("same"), " j_2(x)", "l");
179  leg4->AddEntry(jBessel[3]->DrawCopy("same"), " j_3(x)", "l");
180  leg4->AddEntry(jBessel[4]->DrawCopy("same"), " j_4(x)", "l");
181 
182  leg4->Draw();
183  p4->Draw();
184 
185  DistCanvas->cd();
186 }
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title Offset is a correction factor with respect to the "s...
Definition: TAttAxis.cxx:262
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:49
virtual void SetParameters(const Double_t *params)
Definition: TF1.h:439
This class displays a legend box (TPaveText) containing several legend entries.
Definition: TLegend.h:27
static double p3(double t, double a, double b, double c, double d)
virtual void Draw(Option_t *option="")
Draw this legend with its current attributes.
Definition: TLegend.cxx:373
Definition: Rtypes.h:60
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
Definition: TCanvas.cxx:659
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library.
Definition: TSystem.cxx:1818
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
Definition: TAttText.h:51
static double p2(double t, double a, double b, double c)
A Pave (see TPave) with a text centered in the Pave.
Definition: TPaveLabel.h:24
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:46
R__EXTERN TSystem * gSystem
Definition: TSystem.h:549
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Definition: TAttFill.h:42
static double p1(double t, double a, double b)
virtual void SetTitleSize(Float_t size=0.04)
Set size of axis title The size is expressed in per cent of the pad width.
Definition: TAttAxis.cxx:272
virtual void SetTitle(const char *title="")
Set function title if title has the form "fffffff;xxxx;yyyy", it is assumed that the function title i...
Definition: TF1.cxx:3262
The Canvas class.
Definition: TCanvas.h:41
virtual void Draw(Option_t *option="")
Draw this pavelabel with its current attributes.
Definition: TPaveLabel.cxx:77
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend.
Definition: TLegend.cxx:280
leg
Definition: legend1.C:34
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Definition: TAttLine.h:48
TAxis * GetXaxis() const
Get x axis of the function.
Definition: TF1.cxx:2103
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division.
Definition: TPad.cxx:1089
1-Dim function class
Definition: TF1.h:149
#define gPad
Definition: TVirtualPad.h:289
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Definition: TAttText.h:49
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition: TNamed.cxx:155
const Int_t n
Definition: legend1.C:16