[ROOT] ROOT 2.23.12: bug in TF1 and TF2 when calling compiled function

From: Matthew D. Langston (langston@SLAC.stanford.edu)
Date: Tue Apr 04 2000 - 09:35:18 MEST


I believe I have found a bug in ROOT 2.23.12 with TF1 and TF2.  It
appears that a TF1 or a TF2 can't call a user defined function that is
loaded from a shared library under Linux.

For example, when I take the example out of the class description for
TF1 (see http://root.cern.ch/root/html/TF1.html#TF1:description) and run
it only through the CINT interpreter, the example works properly,
However, when I compile the function "myfunction" and put it into a
shared library, then ROOT segvios (i.e. the error message is ubiquitous
" *** Break *** segmentation violation").

For reference, I have cut-and_pasted the example from the class
description for TF1 here.  Has anyone else seen this problem?  It seems
like it could be a significant problem if one needed to use a compiled
function to do a fit using Minuit (which is my case).

-------------macro myfunc.C-----------------------------
Double_t myfunction(Double_t *x, Double_t *par)
{
   Float_t xx =x[0];
   Double_t f = TMath::Abs(par[0]*sin(par[1]*xx)/xx);
   return f;
}
void myfunc()
{
   TF1 *f1 = new TF1("myfunc",myfunction,0,10,2);
   f1->SetParameters(2,1);
   f1->SetParNames("constant","coefficient");
   f1->Draw();
}
void myfit()
{
   TH1F *h1=new TH1F("h1","test",100,0,10);
   h1->FillRandom("myfunc",20000);
   TF1 *f1=gROOT->GetFunction("myfunc");
   f1->SetParameters(800,1);
   h1.Fit("myfunc");
}
--------end of macro myfunc.C---------------------------------

 In an interactive session you can do:
   Root > .L myfunc.C
   Root > myfunc();
   Root > myfit();

--
Matthew D. Langston
SLD, Stanford Linear Accelerator Center
langston@SLAC.Stanford.EDU
650.926.3279



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:22 MET