Re: [ROOT] fitting gaussian+landau

From: Aaron Dominguez (DADominguez@lbl.gov)
Date: Thu Dec 13 2001 - 14:48:23 MET


Hi Tahsina,

I'm not sure of your application, but if you want to fit a Landau _convoluted_ with
a gaussian, eg each dEdx measurement is smeared with a gaussian, then you can use
the "langau" function found here:
http://www4.rcf.bnl.gov/~phobos/PhatSrc/src/TPhdEdxFunctions.cxx.html

If you really want to fit a Landau _plus_ a gaussian, then what Rene said below is
correct.

Cheers,
Aaron.


Rene Brun wrote:

> Hi Tahsina,
>
> Your definition of "total" is not correct. Instead of:
>    total = new TF1("total","landau(0)+gaus(0)",-20,200);
> it should be:
>    total = new TF1("total","gaus(0)+landau(3)",-20,200);
>
> Look again as it is defined in multifit.C
>
> Rene Brun
>
> Tahsina Ferdousi wrote:
> >
> > Hi Rooters,
> >
> > I was trying to fit a histogram with a gaussian+landau. My intention was
> > as follows. The histogram ranges from -20 to 200. I want to fit the range
> > from -20 to 10 with a gaussian and from 10 to 200 with a landau. Then I
> > add the two fitting functions (gaus+landau) to fit the overall
> > distribution. Here comes my problem I want the overall fit (which from now
> > on we call "total") to follow a gaussian shape between -20 and 10 and then
> > a landau shape between 10 and 200. But instead what I get is a continuous
> > fitting shape (with no dip at 10 and no bump at 15, where the MPV of the
> > landau is). I was following the "How to fit in a sub-range of an
> > histogram" from the ROOT tutorial.
> >
> > I would appreciate if someone could kindly point me where I am doing wrong
> > (or should I try some other procedure as $ROOTSYS/tutorials/FittingDemo.C
> > where I define my own function).
> >
> > I am attaching the code I used (which is
> > really $ROOTSYS/tutorials/multifit.C)
> >
> > //*************************
> >    TFile *f = new TFile("ADC_final.root");
> >    adc_high_cent4 = (TH1F*)f->Get("adc_high_cent4");
> >
> >    g2 = new TF1("g2","landau",10,200);
> >    g1 = new TF1("g1","gaus",-20,10);
> >    total = new TF1("total","landau(0)+gaus(0)",-20,200);
> >    total->SetLineColor(2);
> >    g1->SetLineColor(4);
> >    adc_high_cent4->Fit("g1","R0");
> >    g1->GetParameters(&par[0]);
> >    adc_high_cent4->Fit("g2","R0+");
> >    g2->GetParameters(&par[3]);
> >    total->SetParameters(par);
> >    adc_high_cent4->Fit("total","R0+");
> >    adc_high_cent4->Draw();
> >    g1->Draw("same");
> >    g2->Draw("same");
> >    total->Draw("same");
> > //*************************
> >
> > Best Regards,
> >
> > -tahsina



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:11 MET