Re: [ROOT] Spline, tgraph and function fit

From: Kevin Reil (reil@slac.stanford.edu)
Date: Wed Mar 17 2004 - 07:37:38 MET


Hi all,

Adding to my prior question...

The TGraph::Draw "L" option draws a simple polyline between
each pair of points. Are these polylines collected into an object (XX) so
that I could

gr->Draw("L");
TObjectXX* s = (TObjectXX*)gROOT->FindObject("stemp");
s->Eval(52.3);

The problem is that I am graphing a signal versus time. The signal turns
off for periods of time and TSpline3/5 "misbehave" at the gaps. I could
try to do things piecewise or I could write my own gr->EvalSpline(52.3)
routine but hoping its done.

Cheers,
Kevin

>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