Re: [ROOT] Spline, tgraph and function fit

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Mar 17 2004 - 08:56:25 MET


Hi Kevin,

I have added a new function in TGraph to make a spline interpolation between
points

Double_t Eval(Double_t x, TSpline *spline=0) const;
// Interpolate points in this graph at x using a TSpline
//  -if spline==0 a TSpline3 object is created using this graph
//   and the interpolated value from the spline is returned.
//   the internally created spline is deleted on return.
//  -if spline is specified, it is used to return the interpolated value.

Now in CVS

Rene Brun

Kevin Reil wrote:
> 
> Hi all,
> 
> I've attached below a dialogue I had before about TSpline::Eval. The
> method described has worked great.
> 
> However, I want to get a pointer to a TSpline (simple spline not TSpline3
> or TSpline5).
> 
> If I have a graph (and assume it has some points filled x=0 to x=100)
> and if I draw the graph telling it to connect the dots "L" I get a simple
> spline.
> 
> TGraph *gr;
> gr->Draw("L");
> 
> Is there in fact an object created so I could do something like.
> 
> TGraph *gr;
> gr->Draw("L");
> TSpline *s = (TSpline*)gROOT->FindObject("stemp");
> // analagous to htemp from nt-Draw();
> s->Eval(52.3);
> 
> instead of
> 
> TGraph *gr;
> gr->Draw("L");
> TSpline3 *s = new TSpline3("grs",gr);
> s->Eval(52.3);
> 
> Thanks,
> Kevin
> 
> -----------------------------------------------------------------------------
> 
> Hi Kevin,
> 
> You can use for example the TSpline class. Here is an example:
> You can use TSpline::Eval to evaluate the spline at a point x.
> 
> {
>    gROOT->Reset();
>    c1 = new TCanvas("c1","gerrors2",200,10,700,500);
>    c1->SetFillColor(42);
>    c1->SetGrid();
> 
>       // draw a frame to define the range
>    TH1F *hr = c1->DrawFrame(-0.4,0,1.2,12);
>    hr->SetXTitle("X title");
>    hr->SetYTitle("Y title");
>    c1->GetFrame()->SetFillColor(21);
>    c1->GetFrame()->SetBorderSize(12);
> 
>       // create first graph
>    Int_t n1 = 9;
>    Double_t x1[]  = {-0.22, 0.05, 0.25, 0.35, 0.61,0.7,0.85,0.89,0.95};
>    Double_t y1[]  = {1,2.9,5.6,7.4,9.6,8.7,6.3,4.5,2};
>    Double_t ex1[] = {.05,.1,.07,.07,.05,.06,.07,.08,.05};
>    Double_t ey1[] = {.8,.7,.6,.5,.4,.5,.6,.7,.8};
>    gr1 = new TGraphErrors(n1,x1,y1,ex1,ey1);
>    gr1->SetMarkerColor(kBlue);
>    gr1->SetMarkerStyle(21);
>    gr1->Draw("LP");
> 
>      // use a cubic spline to smooth the graph
>    TSpline3 *s = new TSpline3("grs",gr1);
>    s->SetLineColor(kRed);
>    s->Draw("same");
> }
> 
> See also class TGraphSmooth
> 
> Rene Brun
> 
> Kevin Reil wrote:
> >
> > Hi,
> >
> > I was wondering if it is possible to Eval a spline fit.
> >
> > TGraph *gr = new TGraph(100,*x, *y);
> > gr->Draw("apl");
> >
> > The l has made a nice spline fit from x=0 to x=100 for example.
> >
> > Now, I want to get the value from the spline line at say x=53.2
> > Something like:
> > gr->FindObject("spline")->Eval(53.2);
> >
> > Thank you,
> > Kevin
> >
> > -------------------------------------------
> > - Kevin Reil                              -
> > - #244A INSCC                             -
> > - http://www.physics.utah.edu/~reil       -
> > - reil@physics.utah.edu                   -
> > -------------------------------------------
> > - And my father dwelt in a tent.          -
> > -------------------------------------------
> 
> |------------------------------------|---------------------------------|
> | Kevin Reil                         | 2575 Sand Hill Road, MS 26      |
> | X2447, 103D A&E Bldg. 041          | Menlo Park, CA 94025            |
> |------------------------------------|---------------------------------|
> | http://www.slac.stanford.edu/~reil | Office (650) 926-2447           |
> | reil@slac.stanford.edu             | Home   (650) 938-1767           |
> | http://reil.no-ip.org              | Fax    (650) 926-5368           |
> |----------------------------------------------------------------------|
> |                    And my father dwelt in a tent.                    |
> |----------------------------------------------------------------------|
> 
> On Tue, 16 Mar 2004, Frank Winklmeier wrote:
> 
> >Hi,
> >
> >I get the following error message on using TChain::GetEntry()
> >
> >root [28] chain.GetEntry(1,0)  Error in <TBranch::GetBasket>: File:
> >BBbar-41.root at byte:0, branch:event, entry:-1
> >(Int_t)(-1)
> >
> >Can somebody explain me what this error means and where it originally
> >comes from (it's not in TBranch::GetBasket)? How can I find out what's
> >wrong with this root file?
> >
> >Thanks,
> >Frank
> >
> >
> >



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET