Hi rooters ,
Thanks a lot for this very nice tool that I appreciate a lot but
I spend a lot of time sometimes to try to unserstand what is going
on (I am also a C++ beginner) , I would like to present you one of
my problem today :
(I want to precise that I am used to fit histograms/profile with
user function and up to know never got any problems)
I get a profile on a root file that I read and store with the
following way :
>TH1D *h1=new TH1D( name, title, numbin,xmin,xmax);
> for(int j=nmini;j<nmaxi;j++) h1->Fill( (Double_t)j*step+step/2., *(pf+j) );
This is fine , h1 is filled and OK.
Then I declare a user function :
>TF1 *funtofit= new TF1("lastShape",lastShape,xfitmin,xfitmax,4) ;
Which should be used to fit histogram h1 ...
I set the parameters after initialization :
>> par[0] = 1.00 ;
>> par[1] = 8.60 ;
>> par[2] = 1.27 ;
>> par[3] = 4.0 ;
>> funtofit->SetParameters(par) ;
>> funtofit->SetParNames("b1","b2","alpha","beta") ;
fine ...
But when I try :
>> h1->Fit("lastShape") ;
------> I get a segmentation violation !.
The only way to go out from this is to set :
>> h1->Fit("lastShape","+WNR") ;
Then it works fine !!! ( my first question is why ? due to errors missing ?)
BUT in the following step , I want to read fitted parameters :
>> funtofit->GetParameters(par) ;
It works fine ( I get right values ) for the first call to the
function with the first histogram ... but then for the second
histogram fitted and all the others : the fitted parameters are
the same than before the fit ( the one from SetParameters) !!!
All the fits are correct ( converged and seen in the minuit output) but
there is a problem with the output of the fitted parameters ...
I tried the very well known way :
>> TF1 *ffi=(TF1 *)h1->GetFunction("lastShape") ;
>> Double_t chi2=ffi->GetChisquare();
>> for(int ij=0;ij<4;ij++) {
>> parout[0][ij]=ffi->GetParameter(ij) ;
>> parout[1][ij]=ffi->GetParError(ij) ;
>>}
But in this case I get a segmentation fault when I ask the
chisquare ... ( second line )
The only way to get the right parameters in an array every time
that I call the function with a different histogram is to do :
> delete funtofit
at the end of the routine ...
As you can imagine I am not really happy just because I don't understand
what is going on , my low level in C++ must be the main reason ...
any Idea about this feature ?
Thanks a lot by advance
Patrick
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:05 MET