Logo ROOT   6.07/09
Reference Guide
splines_test.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_graphs
3 /// \notebook
4 /// Examples of use of the spline classes.
5 ///
6 /// \macro_image
7 /// \macro_code
8 ///
9 /// \author Federico Carminati
10 
11 void splines_test(Int_t np=23, Double_t a=-0.5, Double_t b=31)
12 {
13  // array of points
14  Double_t *xx=0, *yy=0;
15  TSpline3 *spline3=0;
16  TSpline5 *spline5=0;
17  TLine *line5, *line3;
18  TText *text5, *text3, *textn;
19  char text[20];
20  const Double_t power=0.75;
21 
22  // Define the original function
23  TF1 *f=new TF1("f","sin(x)*sin(x/10)",
24  a-0.05*(b-a),b+0.05*(b-a));
25  // Draw function
26  f->Draw("lc");
27 
28  // Create text and legend
29  Double_t xx1, yy1, xx2, yy2, dx, dy;
30  gPad->Update();
31  gPad->GetRangeAxis(xx1,yy1,xx2,yy2);
32  dx = xx2-xx1;
33  dy = yy2-yy1;
34  line5=new TLine(xx1+dx*0.3,yy1+dy*1.02,
35  xx1+dx*0.38,yy1+dy*1.02);
36  line5->SetLineColor(kRed);
37  line5->SetLineWidth(2);
38  text5 = new TText(xx1+dx*0.4,
39  yy1+dy*1.03,"quintic spline");
40  text5->SetTextAlign(12);
41  text5->SetTextSize(0.04);
42  line3=new TLine(xx1+dx*0.67,yy1+dy*1.02,
43  xx1+dx*0.75,yy1+dy*1.02);
44  line3->SetLineColor(kGreen);
45  line3->SetLineWidth(2);
46  text3 = new TText(xx1+dx*0.77,
47  yy1+dy*1.03,"third spline");
48  text3->SetTextAlign(12);
49  text3->SetTextSize(0.04);
50  textn = new TText(xx1+dx*0.8,yy1+dy*0.91," ");
51  textn->SetTextAlign(12);
52  textn->SetTextSize(0.04);
53  textn->Draw();
54 
55  // Draw legenda
56  line5->Draw();
57  text5->Draw();
58  line3->Draw();
59  text3->Draw();
60 
61  for(Int_t nnp=2; nnp<=np; ++nnp) {
62 
63  // Calculate the knots
64  if(xx) delete[] xx;
65  xx = new Double_t[nnp];
66  if(yy) delete[] yy;
67  yy = new Double_t[nnp];
68  for (Int_t i=0; i<nnp; ++i) {
69  xx[i]=a+(b-a)*TMath::Power(i/Double_t (nnp-1),power);
70  yy[i]=f->Eval(xx[i]);
71  }
72 
73  // Evaluate fifth spline coefficients
74  Double_t eps=(b-a)*1.e-5;
75  if(spline5) delete spline5;
76  spline5 = new TSpline5("Test",xx,f,nnp,"b1e1b2e2",
77  f->Derivative(a),f->Derivative(b),
78  (f->Derivative(a+eps)-f->Derivative(a))/eps,
79  (f->Derivative(b)-f->Derivative(b-eps))/eps);
80 
81  spline5->SetLineColor(kRed);
82  spline5->SetLineWidth(3);
83 
84  // Draw the quintic spline
85  spline5->Draw("lcsame");
86 
87  // Evaluate third spline coefficients
88  if(spline3) delete spline3;
89  spline3 = new TSpline3("Test",xx,yy,nnp,"b1e1",
90  f->Derivative(a),f->Derivative(b));
91 
92  spline3->SetLineColor(kGreen);
93  spline3->SetLineWidth(3);
94  spline3->SetMarkerColor(kBlue);
95  spline3->SetMarkerStyle(20);
96  spline3->SetMarkerSize(1.5);
97 
98  // Draw the third spline
99  spline3->Draw("lcpsame");
100 
101  sprintf(text,"%3d knots",nnp);
102  textn->SetTitle(text);
103  gPad->Update();
104 
105  //
106  gSystem->Sleep(500);
107  }
108 }
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:49
Definition: Rtypes.h:61
int Int_t
Definition: RtypesCore.h:41
TArc * a
Definition: textangle.C:12
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
Definition: TF1.cxx:1081
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition: TObject.cxx:255
Definition: Rtypes.h:61
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Definition: TMath.h:501
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
Definition: TSystem.cxx:442
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:43
Base class for several text objects.
Definition: TText.h:33
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
Definition: TAttText.h:47
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:46
R__EXTERN TSystem * gSystem
Definition: TSystem.h:549
A simple line.
Definition: TLine.h:33
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition: TAttMarker.h:45
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition: TAttMarker.h:46
virtual Double_t Derivative(Double_t x, Double_t *params=0, Double_t epsilon=0.001) const
Returns the first derivative of the function at point x, computed by Richardson&#39;s extrapolation metho...
Definition: TF1.cxx:858
double f(double x)
double Double_t
Definition: RtypesCore.h:55
TText * text
virtual void Draw(Option_t *option="")
Draw this function with its current attributes.
Definition: TSpline.cxx:100
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
Definition: TRolke.cxx:630
1-Dim function class
Definition: TF1.h:149
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Evaluate this function.
Definition: TF1.cxx:1191
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
#define gPad
Definition: TVirtualPad.h:289
Definition: Rtypes.h:61
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Definition: TAttText.h:52
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition: TNamed.cxx:155