Logo ROOT   6.12/07
Reference Guide
approx.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_graphs
3 /// \notebook -js
4 /// Macro to test interpolation function Approx
5 ///
6 /// \macro_image
7 /// \macro_code
8 ///
9 /// \author Christian Stratowa, Vienna, Austria.
10 
11 TCanvas *vC1;
12 TGraph *grxy, *grin, *grout;
13 
14 void DrawSmooth(Int_t pad, const char *title, const char *xt, const char *yt)
15 {
16  vC1->cd(pad);
17  TH1F *vFrame = gPad->DrawFrame(0,0,15,150);
18  vFrame->SetTitle(title);
19  vFrame->SetTitleSize(0.2);
20  vFrame->SetXTitle(xt);
21  vFrame->SetYTitle(yt);
22  grxy->SetMarkerColor(kBlue);
23  grxy->SetMarkerStyle(21);
24  grxy->SetMarkerSize(0.5);
25  grxy->Draw("P");
26  grin->SetMarkerColor(kRed);
27  grin->SetMarkerStyle(5);
28  grin->SetMarkerSize(0.7);
29  grin->Draw("P");
30  grout->DrawClone("LP");
31 }
32 
33 void approx()
34 {
35 // Test data (square)
36  Int_t n = 11;
37  Double_t x[] = {1,2,3,4,5,6,6,6,8,9,10};
38  Double_t y[] = {1,4,9,16,25,25,36,49,64,81,100};
39  grxy = new TGraph(n,x,y);
40 
41 // X values, for which y values should be interpolated
42  Int_t nout = 14;
43  Double_t xout[] =
44  {1.2,1.7,2.5,3.2,4.4,5.2,5.7,6.5,7.6,8.3,9.7,10.4,11.3,13};
45 
46 // Create Canvas
47  vC1 = new TCanvas("vC1","square",200,10,700,700);
48  vC1->Divide(2,2);
49 
50 // Initialize graph with data
51  grin = new TGraph(n,x,y);
52 // Interpolate at equidistant points (use mean for tied x-values)
53  TGraphSmooth *gs = new TGraphSmooth("normal");
54  grout = gs->Approx(grin,"linear");
55  DrawSmooth(1,"Approx: ties = mean","X-axis","Y-axis");
56 
57 // Re-initialize graph with data
58 // (since graph points were set to unique vales)
59  grin = new TGraph(n,x,y);
60 // Interpolate at given points xout
61  grout = gs->Approx(grin,"linear", 14, xout, 0, 130);
62  DrawSmooth(2,"Approx: ties = mean","","");
63 
64 // Print output variables for given values xout
65  Int_t vNout = grout->GetN();
66  Double_t vXout, vYout;
67  for (Int_t k=0;k<vNout;k++) {
68  grout->GetPoint(k, vXout, vYout);
69  cout << "k= " << k << " vXout[k]= " << vXout
70  << " vYout[k]= " << vYout << endl;
71  }
72 
73 // Re-initialize graph with data
74  grin = new TGraph(n,x,y);
75 // Interpolate at equidistant points (use min for tied x-values)
76 // _grout = gs->Approx(grin,"linear", 50, 0, 0, 0, 1, 0, "min");_
77  grout = gs->Approx(grin,"constant", 50, 0, 0, 0, 1, 0.5, "min");
78  DrawSmooth(3,"Approx: ties = min","","");
79 
80 // Re-initialize graph with data
81  grin = new TGraph(n,x,y);
82 // Interpolate at equidistant points (use max for tied x-values)
83  grout = gs->Approx(grin,"linear", 14, xout, 0, 0, 2, 0, "max");
84  DrawSmooth(4,"Approx: ties = max","","");
85 
86 // Cleanup
87  delete gs;
88 }
89 
virtual TObject * DrawClone(Option_t *option="") const
Draw a clone of this object in the current selected pad for instance with: gROOT->SetSelectedPad(gPad...
Definition: TObject.cxx:219
Definition: Rtypes.h:59
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad.
Definition: TCanvas.cxx:688
1-D histogram with a float per channel (see TH1 documentation)}
Definition: TH1.h:567
int Int_t
Definition: RtypesCore.h:41
virtual void SetYTitle(const char *title)
Definition: TH1.h:406
A helper class to smooth TGraph.
Definition: TGraphSmooth.h:36
virtual void Draw(Option_t *chopt="")
Draw this graph with its current attributes.
Definition: TGraph.cxx:745
Double_t x[n]
Definition: legend1.C:17
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
Definition: TAttMarker.h:38
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const
Get x and y values for point number i.
Definition: TGraph.cxx:1580
Int_t GetN() const
Definition: TGraph.h:122
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
Definition: TAttMarker.h:40
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Definition: TAttMarker.h:41
The Canvas class.
Definition: TCanvas.h:31
double Double_t
Definition: RtypesCore.h:55
virtual void SetTitleSize(Float_t size=0.02, Option_t *axis="X")
Set the axis&#39; title size.
Definition: Haxis.cxx:365
Double_t y[n]
Definition: legend1.C:17
TGraph * Approx(TGraph *grin, Option_t *option="linear", Int_t nout=50, Double_t *xout=0, Double_t yleft=0, Double_t yright=0, Int_t rule=0, Double_t f=0, Option_t *ties="mean")
Approximate data points.
virtual void SetXTitle(const char *title)
Definition: TH1.h:405
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:1153
A Graph is a graphics object made of two arrays X and Y with npoints each.
Definition: TGraph.h:41
#define gPad
Definition: TVirtualPad.h:285
Definition: Rtypes.h:59
virtual void SetTitle(const char *title)
See GetStatOverflows for more information.
Definition: TH1.cxx:6154
const Int_t n
Definition: legend1.C:16