Hi,
I am fitting a TF2 to a TGraph2D, and it used to work out just fine:
for (int i=0;i<_nx;i++) {
for (int j=0;j<_nmtop;j++) {
...
_grfit2d->SetPoint(i*_nmtop+j,x_clb,mtop_clb,_logl[i][j]);
}
}
_fncfit2d=new TF2("fncfit2d","[0]+[1]*x+[2]*y+[3]*x*y+[4]*x*x+[5]*y*y",
fitxmin2d,fitxmax2d,fitmtopmin2d,fitmtopmax2d);
_fncfit2d->SetParameter(0,1.0);
_fncfit2d->SetParameter(1,1.0);
_fncfit2d->SetParameter(2,1.0);
_fncfit2d->SetParameter(3,1.0);
_fncfit2d->SetParameter(4,1.0);
_fncfit2d->SetParameter(5,1.0);
_grfit2d->Fit(_fncfit2d,"RQ0");
Now I have to switch from root-v4.01.04a to root-v4.04.02g, and all of a suden I get a segfault (The gdb backtrace is shown):
** 1 **SET ERR 1
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 p0 1.00000e+00 3.00000e-01 no limits
2 p1 1.00000e+00 3.00000e-01 no limits
3 p2 1.00000e+00 3.00000e-01 no limits
4 p3 1.00000e+00 3.00000e-01 no limits
5 p4 1.00000e+00 3.00000e-01 no limits
6 p5 1.00000e+00 3.00000e-01 no limits
** 2 **SET PRINT 0
** 3 **MIGRAD 5000 0.000441
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 32626)]
0x4071b691 in vtable for TString () from /home/Schieferd/software/root-v4.04.02g/lib/libCore.so
(gdb) bt
#0 0x4071b691 in vtable for TString () from /home/Schieferd/software/root-v4.04.02g/lib/libCore.so
#1 0xbfff60f8 in ?? ()
#2 0x426a08d8 in TMinuit::mnamin() (this=0xbfff6148) at minuit/src/TMinuit.cxx:959
#3 0x426b11c8 in TMinuit::mnmigr() (this=0x95f7940) at minuit/src/TMinuit.cxx:5070
#4 0x426a7d34 in TMinuit::mnexcm(char const*, double*, int, int&) (this=0x95f7940, command=0x40e3d482 “MIGRAD”, plist=0xa058528,
llist=2, ierflg=@0xbfff6af0) at minuit/src/TMinuit.cxx:2828
#5 0x42692234 in TFitter::ExecuteCommand(char const*, double*, int) (this=0xaa792c8, command=0x40e3d482 “MIGRAD”, args=0xa058528,
nargs=2) at minuit/src/TFitter.cxx:84
#6 0x40c60651 in TGraph2D::Fit(TF2*, char const*, char const*) (this=0x975d750, f2=0xad95660, option=0x8081ba6 “RQ0”)
at hist/src/TGraph2D.cxx:816
I have also tried tutorials/graph2dfit.C, and it doesn’t work under the 4.04 version either, while it works just fine with v4.01. Can you tell me what changed and how I can adjut? Thanks![/quote]
brun
December 13, 2005, 12:19pm
2
Could you send the shortest possible RUNNING script reproducing your problem?
Rene
I attach the macro ‘graph2d.C’, which expects ‘graph2d.txt’ (attached as well). Under v4.01, it works. Under v4.04, the fit doesn’t converge (although it doesn’t segfault, I can’t for some reason reproduce the segfault with the CINT macro).
graph2d.txt (3.6 KB)
graph2d.C (1.48 KB)
brun
December 13, 2005, 1:51pm
4
I cannot reproduce your problem. Running your macro unchaged, I get
[code]Processing graph2d.C…
FCN=318.594 FROM MIGRAD STATUS=CONVERGED 256 CALLS 257 TOTAL
EDM=1.80804e-010 STRATEGY= 1 ERR MATRIX NOT POS-DE
EXT PARAMETER APPROXIMATE STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 6.32311e+003 5.78235e-001
2 p1 -2.95710e+003 6.51104e-001
3 p2 -2.02689e+001 3.75913e-003
4 p3 8.00485e+000 3.79352e-003
5 p4 7.85528e+002 5.39851e-001
6 p5 3.58890e-002 1.62869e-005[/code]
That is exactly what I see with v4.01.04a, but with v4.04.02b I get
root [0]
Processing graph2d.C...
**********
** 1 **SET ERR 1
**********
PARAMETER DEFINITIONS:
NO. NAME VALUE STEP SIZE LIMITS
1 p0 1.00000e+00 3.00000e-01 no limits
2 p1 1.00000e+00 3.00000e-01 no limits
3 p2 1.00000e+00 3.00000e-01 no limits
4 p3 1.00000e+00 3.00000e-01 no limits
5 p4 1.00000e+00 3.00000e-01 no limits
6 p5 1.00000e+00 3.00000e-01 no limits
**********
** 2 **SET PRINT 0
**********
**********
** 3 **MIGRAD 5000 0.000441
**********
EIGENVALUES OF SECOND-DERIVATIVE MATRIX:
-9.2823e-04 1.2002e+00 1.2002e+00 1.2002e+00 1.2002e+00 1.2002e+00
MINUIT WARNING IN MIGRAD
============== MATRIX FORCED POS-DEF BY ADDING 0.002128 TO DIAGONAL.
MINUIT WARNING IN HESSE
============== Negative diagonal element 1 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 2 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 3 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 4 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 5 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 6 in Error Matrix
MINUIT WARNING IN HESSE
============== 2.57431e+21 added to diagonal of error matrix
EIGENVALUES OF SECOND-DERIVATIVE MATRIX:
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
MINUIT WARNING IN HESSE
============== MATRIX FORCED POS-DEF BY ADDING 0.001000 TO DIAGONAL.
MINUIT WARNING IN HESSE
============== Matrix inversion fails.
MNHESS FAILS AND WILL RETURN DIAGONAL MATRIX.
MIGRAD TERMINATED WITHOUT CONVERGENCE.
FCN=2.122e-313 FROM MIGRAD STATUS=FAILED 168 CALLS 169 TOTAL
EDM=0.000320002 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 56.5 per cent
EXT PARAMETER APPROXIMATE STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
2 p1 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
3 p2 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
4 p3 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
5 p4 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
6 p5 -1.03795e+17 1.35401e+00 -0.00000e+00 5.16400e-03
**********
** 4 **HESSE
**********
MINUIT WARNING IN HESSE
============== Negative diagonal element 1 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 2 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 3 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 4 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 5 in Error Matrix
MINUIT WARNING IN HESSE
============== Negative diagonal element 6 in Error Matrix
MINUIT WARNING IN HESSE
============== 1 added to diagonal of error matrix
FCN=5.81674e+08 FROM HESSE STATUS=OK 52 CALLS 221 TOTAL
EDM=0.000305381 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER INTERNAL INTERNAL
NO. NAME VALUE ERROR STEP SIZE VALUE
1 p0 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
2 p1 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
3 p2 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
4 p3 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
5 p4 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
6 p5 -1.03795e+17 1.41421e+00 4.94933e+10 -1.03795e+17
**********
** 5 **MINOS
**********
FUNCTION MUST BE MINIMIZED BEFORE CALLING MINOs
MIGRAD MINIMIZATION HAS CONVERGED.
FCN=5.81674e+08 FROM MIGRAD STATUS=CONVERGED 13 CALLS 234 TOTAL
EDM=8.00005e-05 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER STEP FIRST
NO. NAME VALUE ERROR SIZE DERIVATIVE
1 p0 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
2 p1 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
3 p2 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
4 p3 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
5 p4 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
6 p5 -1.03795e+17 1.41421e+00 -0.00000e+00 5.16400e-03
FCN=5.81674e+08 FROM MINOS STATUS=PROBLEMS 0 CALLS 234 TOTAL
EDM=8.00005e-05 STRATEGY= 1 ERROR MATRIX ACCURATE
EXT PARAMETER PARABOLIC MINOS ERRORS
NO. NAME VALUE ERROR NEGATIVE POSITIVE
1 p0 -1.03795e+17 1.41421e+00 at limit at limit
2 p1 -1.03795e+17 1.41421e+00 at limit at limit
3 p2 -1.03795e+17 1.41421e+00 at limit at limit
4 p3 -1.03795e+17 1.41421e+00 at limit at limit
5 p4 -1.03795e+17 1.41421e+00 at limit at limit
6 p5 -1.03795e+17 1.41421e+00 at limit at limit
(int)0
(Before, I had referenced patch version ‘f’, but I did this in the current d0 sw environment now, which has ‘b’. I don’t think that’s it though).
BTW: Why is the output so verbose? Is there some default verbosity flag, the vale of which was changed between those versions?