Hi Christian,
You will find a short example below that you can run via the interpreter or
compiler.
root > .x myfit.C
root > .x myfit.C++ (to run with the native compiler)
//--------------file myfit.C
#include "TH1.h"
#include "TF1.h"
Double_t fitf(Double_t *x, Double_t *par)
{
Double_t arg = 0;
if (par[2]) arg = (x[0] - par[1])/par[2];
Double_t fitval = par[0]*TMath::Exp(-0.5*arg*arg);
return fitval;
}
void myfit()
{
TH1F *hpx = new TH1F("hpx","px distribution",100,-4,4);
hpx->FillRandom("gaus",25000);
// Creates a Root function based on function fitf above
TF1 *func = new TF1("fitf",fitf,-2,2,3);
// Sets initial values and parameter names
func->SetParameters(100,0,1);
func->SetParNames("Constant","Mean_value","Sigma");
// Fit histogram in range defined by function
hpx->Fit("fitf","r");
}
Rene Brun
Christian Flacco wrote:
>
> Hello, Rooters,
>
> I am trying to use the user defined fit-function option to fit a TH1F in
> stand-alone compiled code. We are running on Linux, using ROOT version
> 2.25/03.
>
> I use several ROOT classes in this code, and include the following ROOT
> headers:
>
> #include "TRandom.h"
> #include "TF1.h"
> #include "TH1.h"
> #include "TMath.h"
>
> I declare the TF1 pointer:
>
> TF1 * scurvef = new TF1("scurve", fitf, -200, 200, 3);
>
> fitf is declared and defined as follows:
>
> Double_t fitf(Double_t*, Double_t*);
>
> Double_t fitf(Double_t *x, Double_t *par){
> double arg = 0;
> if (par[2]) arg = (x[0]-par[1])/(1.414*par[2]);
> double fitval = par[0]*0.5*TMath::Erfc(arg);
> return fitval;
> }
>
> I have also tried making the Double_ts into doubles.
>
> The program crashes at the instantiation of TF1 * scurvef, with a
> segmentation fault.
>
> Is there something else I need to do to use this method in compiled
> code? (It runs as a ROOT macro.) An additional include file needed?
> Any help would be appreciated.
>
> Thanks!
> --
> Christian J.P. Flacco ~ CJFlacco@LBL.gov ~ 510.486.5451
>
> http://www-physics.lbl.gov/~cflacco
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:47 MET