Hello!
I’m trying to use the method Integral by ROOT. The fit is drawn but the terminal says “Error in : Error 18 in qags.c at 547 : cannot reach tolerance because of roundoff error”.
How can I do? I tried to modify the tolerance but nothing changes.
My code is:
#include <iostream>
#include <fstream>
#include "TMath.h"
#include "TGraph.h"
Double_t gaussian1d(Double_t *x, Double_t *par)
{
Float_t xx =x[0];
Float_t yy = x[1];
Double_t f = par[2]*((exp(-0.5*((xx-par[0])/par[1])*((xx-par[0])/par[1]))));
return f;
}
Double_t gaussian1d_integral(Double_t *x, Double_t *par)
{
TF1 *mygaussian1d = new TF1("mygaussian1d",gaussian1d,-15,15,3); //gaussiana 1d dipende da 3 parametri
mygaussian1d->SetParameter(0,x[0]);
mygaussian1d->SetParameter(1,par[0]);
mygaussian1d->SetParameter(2,par[1]);
// mygaussian2d->SetParameter(3,par[2]);
Double_t f_1 = mygaussian1d->Integral(-par[2],par[2]);
delete mygaussian1d;
return f_1;
}
void Gauss_random1D(){
TF1 *mygaussian1d_rnd = new TF1("mygaussian1d_rnd",gaussian1d,-15,15,3);
TF1 *mygaussian1d_int = new TF1("mygaussian1d_int",gaussian1d_integral,-15,15,3);
TF1 *mygaussian1d_fit = new TF1("mygaussian1d_fit",gaussian1d_integral,-15,15,3);
mygaussian1d_int->SetParameter(0,1);
mygaussian1d_int->SetParameter(1,1000);
mygaussian1d_int->SetParameter(2,10);
TH1F *h2=new TH1F("h2","test",400,-15,15);
h2->FillRandom("mygaussian1d_int",10000000);
TCanvas *can = new TCanvas();
mygaussian1d_int->Draw();
}