Re: segfault in fit

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Mar 08 2000 - 10:52:51 MET


Hi Nicolas,
You are may be hitting the same case reported by Robert (see me reply
today).
Add the statement (marked with <====) in your code below.
Let me know the result.
If this does not fix the problem, send me a working example that I can
use
to understand the problem.

Rene Brun


Nicolas Produit wrote:
> 
> Hi, I have an error message I dont understand followed by a segfault in
> a compiled code (fragment near error and error here under).
> 
> Perhaps this is relevant:
> The problem occur only the second time this code fragment is called.
> Between the first and the second call I do a lot of minuit fitting using
> TFitter constructor. So perhaps it could be interferance between fitting
> by hand with minuit and using histogram fitting.
> 
> peak is a TObjectArray
> 
>         cout<<"gag"<<endl;
>         TArrayD* a=(TArrayD *)(*peak)[i];
>         cout<<"gjkjlkd"<<endl;
>         if (a){
>             cout<<i<<endl;
>             Int_t xmin=TMath::Max(0,int(((*a)[2])-2));
>             Int_t xmax=TMath::Min(sky.Rows(),int(((*a)[2])+3));
>             Int_t ymin=TMath::Max(0,int(((*a)[3])-2));
>             Int_t ymax=TMath::Min(sky.Cols(),int(((*a)[3])+3));
>             TH2D* histo=new
> TH2D("forfit","forfit",xmax-xmin,xmin,xmax,ymax-ymin,ymin,ymax);
>             Double_t scale=1E4;
>             for (Int_t ii=xmin;ii<xmax;ii++){
>                 for (Int_t jj=ymin;jj<ymax;jj++){
>                     histo->Fill(ii,jj,sky(ii,jj)/scale);
>                     const Double_t rescale=30.0;
> 
> histo->SetBinError(histo->FindBin(ii,jj),sigma(ii,jj)/scale*rescale);
>                     //cout<<ii<<" "<<jj<<" "<<sky(ii,jj)<<" "<<sigma(ii,jj)<<endl;
>                 }
>             }
>             const Int_t npar=7;
>             cout<<"111"<<endl;
>             TF2 *func = new TF2("fitf",fitf,xmin,xmax,ymin,ymax,npar);
>             cout<<"222"<<endl;
>             // Sets initial values and parameter names
>             Double_t par[npar];
>             par[0]=0.0;
>             par[1]=histo->GetMaximum();//should be 1 if scale
>             par[2]=histo->GetMean(1);
>             par[3]=histo->GetMean(2);
>             par[4]=histo->GetRMS(1);
>             par[5]=histo->GetRMS(2);
>             par[6]=0.0;
>             func->SetParameters(par);
>             cout<<"333"<<endl;
>             //
> func->SetParNames("Back","Const","Mean_valuex","Mean_valuey","Varx","Vary","offd");
>             func->SetParLimits(2,xmin,xmax);
>             func->SetParLimits(3,ymin,ymax);
>             cout<<"444"<<endl;
              histo->GetListOfFunctions()->Delete(); //<===============
>             histo->Fit("fitf","Q0");
> 
> running it give:
> 
> gag
> gjkjlkd
> 0
> 111
> 222
> 333
> 444
> Error in <TList::AddAt>: argument is a null pointer
> 
>  *** Break *** segmentation violation
> Abort
> Exit 134
> 
> --
> Nicolas Produit
> INTEGRAL Science Data Center    Phone:  +41 22 950 91 40
> 16, Chemin d'Ecogia             Fax:    +41 22 950 91 33
> CH-1290 Versoix                 www:    http://isdc.unige.ch/



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:21 MET