Fit function

Laurent Mirabito (mirabito@in2p3.fr)
Fri, 27 Mar 1998 10:38:13 +0100 (MET)


Hello all,

I tried to define a fit function to a Landau distribution using denlan
from the Cernlib. To do this I recompile the root application linking
denlan. It works fine if I define my fit function fitlan.C with a macro.
If I try to link it also I cannot use it in a TF1 definition.
(I'm running on a PC-Linux Debian 1.3 with root 2.02)
Any Ideas ?
Best regards
Laurent

Exemple:

[/users/delphi/mirabito/root/me] myroot
0.039163
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 2.00/02 23 March 1998 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************

CINT/ROOT C/C++ Interpreter version 5.13.45, Mar 17 1998
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] Double_t x[1]={200.};
root [1] Double_t par[3]={1000.,200.,50.};
root [2] printf("%f \n",fitlan(x,par));
178.854167
root [3] TF1* l = new TF1("fitlan",fitlan,0,2000,3);
root [4] l->SetParameters(1000.,200.,50.)
root [5] l->SetParNames("Sum","Maximum of Probability","Width")
root [6] l->Draw()
Warning in <MakeDefCanvas>: creating a default canvas with name c1

*** Break *** segmentation violation

*** Break *** segmentation violation

-- myroot.h
extern "C" Double_t denlan_(Float_t *x);
extern Double_t fitlan(Double_t *x,Double_t *par);

-- myroot.C
///////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// RMain
//
//
//
// Main program used to create ROOT application.
//
//
//
//////////////////////////////////////////////////////////////////////////

#include "TROOT.h"
#include "TRint.h"
#include "myroot.h"
#include <TApplication.h>
#include <TGClient.h>

extern void InitGui();
VoidFuncPtr_t initfuncs[] = { InitGui, 0 };

TROOT root("Rint","The ROOT Interactive Interface", initfuncs);

//______________________________________________________________________________
int main(int argc, char **argv)
{
Float_t tt = 5.0;
printf("%f \n",denlan_(&tt));
TRint *theApp = new TRint("Rint", &argc, argv, 0, 0);
// TApplication *theApp= new TApplication("App", &argc, argv);
// Init Intrinsics, build all windows, and enter event loop
theApp->Run();

delete theApp;

return(0);
}

-- fitlan.C

//extern Double_t denlan(Double_t*);

#include "TROOT.h"
#include "TMath.h"
#include "myroot.h"

Double_t fitlan(Double_t *x,Double_t *par)
{
/* System generated locals */
Float_t r__1;
Double_t ret_val;
/* Local variables */

ret_val = 0.;
r__1 = (x[0] - TMath::Abs(par[1])) / TMath::Abs(par[2]);
ret_val = par[0] * (denlan_(&r__1));
return ret_val;
} /* fitlan*/

Laurent Mirabito
IPN Lyon