void splines_test (Int_t np=23, Double_t a=-0.5, Double_t b=31) { // examples of use of the spline classes //Author: Federico Carminati // array of points Double_t *xx=0, *yy=0; TSpline3 *spline3=0; TSpline5 *spline5=0; TLine *line5, *line3; TText *text5, *text3, *textn; char text[20]; const Double_t power=0.75; // Define the original function TF1 *f=new TF1("f","sin(x)*sin(x/10)", a-0.05*(b-a),b+0.05*(b-a)); // Draw function f->Draw("lc"); // Create text and legend Double_t xx1, yy1, xx2, yy2, dx, dy; gPad->Update(); gPad->GetRangeAxis(xx1,yy1,xx2,yy2); dx = xx2-xx1; dy = yy2-yy1; line5=new TLine(xx1+dx*0.3,yy1+dy*1.02, xx1+dx*0.38,yy1+dy*1.02); line5->SetLineColor(kRed); line5->SetLineWidth(2); text5 = new TText(xx1+dx*0.4, yy1+dy*1.03,"quintic spline"); text5->SetTextAlign(12); text5->SetTextSize(0.04); line3=new TLine(xx1+dx*0.67,yy1+dy*1.02, xx1+dx*0.75,yy1+dy*1.02); line3->SetLineColor(kGreen); line3->SetLineWidth(2); text3 = new TText(xx1+dx*0.77, yy1+dy*1.03,"third spline"); text3->SetTextAlign(12); text3->SetTextSize(0.04); textn = new TText(xx1+dx*0.8,yy1+dy*0.91," "); textn->SetTextAlign(12); textn->SetTextSize(0.04); textn->Draw(); // Draw legenda line5->Draw(); text5->Draw(); line3->Draw(); text3->Draw(); for(Int_t nnp=2; nnp<=np; ++nnp) { // Calculate the knots if(xx) delete[] xx; xx = new Double_t[nnp]; if(yy) delete[] yy; yy = new Double_t[nnp]; for (Int_t i=0; i<nnp; ++i) { xx[i]=a+(b-a)*TMath::Power(i/Double_t (nnp-1),power); yy[i]=f->Eval(xx[i]); } // Evaluate fifth spline coefficients Double_t eps=(b-a)*1.e-5; if(spline5) delete spline5; spline5 = new TSpline5("Test",xx,f,nnp,"b1e1b2e2", f->Derivative(a),f->Derivative(b), (f->Derivative(a+eps)-f->Derivative(a))/eps, (f->Derivative(b)-f->Derivative(b-eps))/eps); spline5->SetLineColor(kRed); spline5->SetLineWidth(3); // Draw the quintic spline spline5->Draw("lcsame"); // Evaluate third spline coefficients if(spline3) delete spline3; spline3 = new TSpline3("Test",xx,yy,nnp,"b1e1", f->Derivative(a),f->Derivative(b)); spline3->SetLineColor(kGreen); spline3->SetLineWidth(3); spline3->SetMarkerColor(kBlue); spline3->SetMarkerStyle(20); spline3->SetMarkerSize(1.5); // Draw the third spline spline3->Draw("lcpsame"); sprintf(text,"%3d knots",nnp); textn->SetTitle(text); gPad->Update(); // gSystem->Sleep(500); } } splines_test.C:1 splines_test.C:2 splines_test.C:3 splines_test.C:4 splines_test.C:5 splines_test.C:6 splines_test.C:7 splines_test.C:8 splines_test.C:9 splines_test.C:10 splines_test.C:11 splines_test.C:12 splines_test.C:13 splines_test.C:14 splines_test.C:15 splines_test.C:16 splines_test.C:17 splines_test.C:18 splines_test.C:19 splines_test.C:20 splines_test.C:21 splines_test.C:22 splines_test.C:23 splines_test.C:24 splines_test.C:25 splines_test.C:26 splines_test.C:27 splines_test.C:28 splines_test.C:29 splines_test.C:30 splines_test.C:31 splines_test.C:32 splines_test.C:33 splines_test.C:34 splines_test.C:35 splines_test.C:36 splines_test.C:37 splines_test.C:38 splines_test.C:39 splines_test.C:40 splines_test.C:41 splines_test.C:42 splines_test.C:43 splines_test.C:44 splines_test.C:45 splines_test.C:46 splines_test.C:47 splines_test.C:48 splines_test.C:49 splines_test.C:50 splines_test.C:51 splines_test.C:52 splines_test.C:53 splines_test.C:54 splines_test.C:55 splines_test.C:56 splines_test.C:57 splines_test.C:58 splines_test.C:59 splines_test.C:60 splines_test.C:61 splines_test.C:62 splines_test.C:63 splines_test.C:64 splines_test.C:65 splines_test.C:66 splines_test.C:67 splines_test.C:68 splines_test.C:69 splines_test.C:70 splines_test.C:71 splines_test.C:72 splines_test.C:73 splines_test.C:74 splines_test.C:75 splines_test.C:76 splines_test.C:77 splines_test.C:78 splines_test.C:79 splines_test.C:80 splines_test.C:81 splines_test.C:82 splines_test.C:83 splines_test.C:84 splines_test.C:85 splines_test.C:86 splines_test.C:87 splines_test.C:88 splines_test.C:89 splines_test.C:90 splines_test.C:91 splines_test.C:92 splines_test.C:93 splines_test.C:94 splines_test.C:95 splines_test.C:96 splines_test.C:97 splines_test.C:98 splines_test.C:99 splines_test.C:100 splines_test.C:101 splines_test.C:102 |
|