Hi rooters, I have a problem since some days concerning Minuit in root. I have written a small testfile to explain my problems. // testfit.C void testfit() { Double_t x1[] = {1000,16100,83000,223426,425938}; Double_t y1[] = {0.0194932,0.00299029,0.00168717,0.00167152,0.00134782}; Double_t ex1[] = {40,500,1000,1574.5,3062.5}; Double_t ey1[] = {0.00232989,0.000269625,0.000142085,0.000110943,7.1839e-05}; TGraphErrors *fluxbkg = new TGraphErrors(5,x1,y1,ex1,ey1); fluxbkg->Print(); TF1 *fitFcn = new TF1("fitFcn",Background,0,450000,3); fitFcn->SetParameters(0.,1.,-0.5.); fitFcn->Draw(); fluxbkg->Fit("fitFcn"); double matrix[3][3]; gMinuit->mnemat(matrix,3); } Double_t Background(Double_t *x, Double_t *par) { Double_t fitval = TMath::Power(x[0],par[2]); return(par[0]+par[1]*fitval); } When I load this file (.L testfit.C) and I execute it I got a segmentation violation error after the fit. [root][1] .L testfit.C [root][2] testfit(); x[0]=1000, y[0]=0.0194932, ex[0]=40, ey[0]=0.00232989 x[1]=16100, y[1]=0.00299029, ex[1]=500, ey[1]=0.000269625 x[2]=83000, y[2]=0.00168717, ex[2]=1000, ey[2]=0.000142085 x[3]=223426, y[3]=0.00167152, ex[3]=1574.5, ey[3]=0.000110943 x[4]=425938, y[4]=0.00134782, ex[4]=3062.5, ey[4]=7.1839e-05 <TCanvas::MakeDefCanvas>: created default TCanvas with name c1 ********** ** 1 **SET ERR 1 ********** ********** ** 5 **MIGRAD 5000 5.539e-12 ********** MACHINE ACCURACY LIMITS FURTHER IMPROVEMENT. MIGRAD MINIMIZATION HAS CONVERGED. FCN=3.59539 FROM MIGRAD STATUS=CONVERGED 258 CALLS 259 TOTAL EDM=6.36245e-15 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 1.6 per cent EXT PARAMETER STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 p0 1.30041e-03 8.98106e-05 -0.00000e+00 1.21824e-03 2 p1 6.12043e+00 3.81528e+00 0.00000e+00 -1.66377e-07 3 p2 -8.43509e-01 7.80422e-02 -0.00000e+00 -6.64307e-06 FCN=3.59539 FROM MIGRAD STATUS=CONVERGED 258 CALLS 259 TOTAL EDM=6.36245e-15 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 1.6 per cent EXT PARAMETER STEP FIRST NO. NAME VALUE ERROR SIZE DERIVATIVE 1 p0 1.30041e-03 8.98106e-05 -0.00000e+00 1.21824e-03 2 p1 6.12043e+00 3.81528e+00 0.00000e+00 -1.66377e-07 3 p2 -8.43509e-01 7.80422e-02 -0.00000e+00 -6.64307e-06 *** Break *** segmentation violation Root > Function testfit() busy flag cleared The starnge thing is if I type all the instruction one by one in the root session I got no error, except it I don't type the line fitFcn->Draw(); before. example if I type ... [root] TF1 *fitFcn = new TF1("fitFcn",Background,0,450000,3); [root] fitFcn->SetParameters(0.,1.,-0.5.); [root] fitFcn->Draw(); [root] fluxbkg->Fit("fitFcn"); .... I have no no segvi error. But if I type [root] TF1 *fitFcn = new TF1("fitFcn",Background,0,450000,3); [root] fitFcn->SetParameters(0.,1.,-0.5.); [root] fluxbkg->Fit("fitFcn"); I got a *** Break *** segmentation violation The other thing is about the mnemat call. When thing are working well I got an error when retrieveing the matrix. [root] double matrix[3][3]; [root] gMinuit->mnemat(matrix,3); Error: Can't call TMinuit::mnemat(matrix,3) in current scope FILE:/tmp/fileOCWcoy_cint LINE:1 Possible candidates are... filename line:size busy function type and name (in TMinuit) (compiled) 0:0 0 public: virtual void mnemat(Double_t* emat,Int_t ndim); filename line:size busy function type and name (in TNamed) filename line:size busy function type and name (in TObject) *** Interpreter error recovered *** Could please someone tell me what is wrong ? I surely made a mistake but I can't figure out which. Thanks in advance.
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:54 MET