Hi Pietro,
In your example, replace the line;
TF1 *sigma_hyp = new TF1("sigma_hyp","tanh(x-[0])",min,max,1);
by
TF1 *sigma_hyp = new TF1("sigma_hyp","tanh(x-[0])",min,max);
The constructor where the number of parameters is given is for
CINT interpreted functions, not for basic functions.
Rene Brun
On Mon, 12 Aug 2002, Pietro Govoni wrote:
> Dear rooters,
> I am creating some TF1 functions with a very simple macro; I cannot get
> why one of them does not compile when I run the macro, while if I try to
> create and plot it with on line commands I don't get any problem:
>
> this is the error message:
> --------------------------
>
> >root functions.C
> *******************************************
> * *
> * W E L C O M E to R O O T *
> * *
> * Version 3.03/07 18 July 2002 *
> * *
> * You are welcome to visit our Web site *
> * http://root.cern.ch *
> * *
> *******************************************
>
> Compiled for linux with thread support.
>
> CINT/ROOT C/C++ Interpreter version 5.15.50, July 7 2002
> Type ? for help. Commands must be C++ statements.
> Enclose multiple statements between { }.
> root [0]
> Processing functions.C...
> Function:sigma_hyp cannot be compiled
>
>
>
> this is the code:
> -----------------
>
> Double_t theta(Double_t *x, Double_t *par)
> {
> if (x[0] > par[0]) return 1;
> else return 0;
> }
>
> void functions()
> {
>
> Double_t min = -10.; // minimum of the formulas range
> Double_t max = +10.; // maximum of the formulas range
> Double_t thres = 0.; // coordinate of the formula half value point
>
> // the theta (step) function
>
> TF1 *step = new TF1("step",theta,min,max,1);
> step->SetParameter(0,thres);
> step->SetParNames("Threshold");
>
> // the sigma function with the hyperbolic tangent
>
> TF1 *sigma_hyp = new TF1("sigma_hyp","tanh(x-[0])",min,max,1);
> sigma_hyp->SetParameter(0,thres);
> sigma_hyp->SetParNames("Threshold");
>
>
> // the sigma function with the exponential
>
> TF1 *sigma_exp = new TF1("sigma_exp","1/(exp(-1*x-1+[0])+1)",min,max);
> sigma_exp->SetParameter(0,thres);
> sigma_exp->SetParNames("Threshold");
>
> // graphics
>
> TCanvas *c1= new TCanvas("c1","functions",10,10,400,400);
> c1->Divide(2,2);
> c1->cd(1);
> step->Draw();
> c1->cd(2);
> sigma_hyp->Draw();
> c1->cd(3);
> sigma_exp->Draw();
> }
>
>
> Do anybody have an explanation for this behaviour?
> Thanks in advance, regards
>
> pietro
>
>
>
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:04 MET