Hi Stanislas,
I have added TMath::Poisson in the CVS head.
Your example can now be run like shown below
Rene Brun
Double_t
poissonf(Double_t*x,Double_t*par)
{
return par[0]*TMath::Poisson(x[0],par[1]);
}
void poisson() {
TF1 pois("pois",poissonf,0,10,2); // x in [0;10], 2
parameters
pois->SetParName(0,"Const");
pois->SetParName(1,"#mu");
// Create histogram with poisson distribution
TH1F*testhi = new TH1F("testhi","Poisson distribution",100,0,5);
pois->SetParameter(0,3.75654);
pois->SetParameter(1,2.95437);
testhi->FillRandom("pois",20000);
// Fitting it
pois->SetParameter(0,1); // not the best shots
// 'cause we fill with 20000 events
// so constant will be in 1000 times bigger
pois->SetParameter(1,1); // :)
TCanvas *c1 = new TCanvas("c1","Canvas",600,600);
gStyle->SetOptStat(0);
gStyle->SetOptFit(111);
testhi->Fit("pois");
testhi->Draw();
}
Stanislav Nesterov wrote:
>
> dennis@physics.msuiit.edu.ph wrote:
>
> >Hi rooters!
> >
> >How can i use a user-defined function such as Poisson for fitting a
> >histogram? I tried using myfit.C of the tutorials but encountered
> >problems. I hope someone could give an example. This would be a great
> >help.
> >
> >Thanks
> >
> >
> >Dennis Arogancia
> >MSU-ILigan City
> >
> >
> >
> >
> Hi Dennis,
>
> It is very simple: exactly like in tutorial examples you should create
> wrapper function and put it in TF1 object.
>
> See example below (or attachment) for Poisson distribution:
>
> Double_t
> func(Double_t*x,Double_t*par)
> {
> Double_t res=0.,
> xx=x[0];
> if (xx<=0) return
> 0;
> // Poisson
> distribution
> // par[1] - distribution
> parameter
> return
> par[0]*TMath::Power(par[1],xx)/TMath::Gamma(xx+1)/TMath::Exp(par[1]);
> }
>
> void
> poisson()
> {
> TF1 pois("pois",func,0,10,2); // x in [0;10], 2
> parameters
>
> pois->SetParName(0,"Const");
>
> pois->SetParName(1,"#mu");
> // Create histogram with poisson
> distribution
> TH1F*testhi = new TH1F("testhi","Poisson
> distribution",100,0,5);
>
> pois->SetParameter(0,3.75654);
>
> pois->SetParameter(1,2.95437);
>
> testhi->FillRandom("pois",20000);
>
> // Fitting
> it
> pois->SetParameter(0,1); // not the best
> shots
> // 'cause we fill with 20000
> events
> // so constant will be in 1000 times
> bigger
> pois->SetParameter(1,1); //
> :)
> TCanvas *cc = new
> TCanvas("cc","Canvas",600,600);
>
> gStyle->SetOptStat(0);
> gStyle->SetOptFit(111);
>
> testhi->Fit("pois");
>
> testhi->Draw();
> }
>
> Best reagards,
>
> Stanislav.
>
> --------------------------------------------------------------------------------
> Name: poisson.C
> poisson.C Type: Plain Text (text/plain)
> Encoding: 7bit
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:08 MET