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. 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(); }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:08 MET