Hi Folks, I am fighting with a seemingly TMinuit problem. I am using it within the aliroot context and root 2.23/08 on a Linux PC. He re is the error message: Fatal in <operator delete>: storage area overwritten It happens only after several call to the minimzation. Everything goes allright if I do not calculate my own gradient, i.e., remove le line : gMinuit->mnexcm("SET GRA", &p1, 1, ierflg) ; // force TMinuit to use my gradient Next you find the backtrace from the debugger and the relevant part of the source code. Help is welcome .... thanks ..... Yves ============= this is the part of the backtrace result ======= #0 0x441bf111 in __kill () #1 0x441bed66 in raise (sig=6) at ../sysdeps/posix/raise.c:27 #2 0x441c0447 in abort () at ../sysdeps/generic/abort.c:88 #3 0x42d613cd in TUnixSystem::Abort () #4 0x42c5159a in DefaultErrorHandler () #5 0x42c51650 in ErrorHandler () #6 0x42c51748 in Fatal () #7 0x42bbc0fa in __builtin_delete () #8 0x42bbc228 in __builtin_vec_delete () #9 0x43526ade in TMinuit::DeleteArrays () #10 0x43526017 in TMinuit::~TMinuit () #11 0x41883abb in AliPHOSTrackSegmentMakerv1::FindFit () #12 0x41884d93 in AliPHOSTrackSegmentMakerv1::UnfoldClusters () etc....... ============= this is part of the code relevant to TMinuit ======== TMinuit Minuit(NPar) ; gMinuit->SetPrintLevel(-1) ; // No Printout gMinuit->SetFCN(UnfoldingChiSquare) ; // To set the address of the minimization function gMinuit->SetObjectFit(emcRP) ; // To tranfer pointer to UnfoldingChiSquare gMinuit->mnparm(index, "x", x, 0.1, 0, 0, ierflg) ; index++ ; gMinuit->mnparm(index, "z", z, 0.1, 0, 0, ierflg) ; index++ ; gMinuit->mnparm(index, "Energy", Energy , 0.05*Energy, 0., 4.*Energy, ierflg) ; index++ ; Double_t p0 = 0.1 ; // "Tolerance" Evaluation stops when EDM = 0.0001*p0 ; The number of function call slightly // depends on it. Double_t p1 = 1.0 ; Double_t p2 = 0.0 ; gMinuit->mnexcm("SET STR", &p2, 0, ierflg) ; // force TMinuit to reduce function calls gMinuit->mnexcm("SET GRA", &p1, 1, ierflg) ; // force TMinuit to use my gradient gMinuit->SetMaxIterations(5); gMinuit->mnexcm("SET NOW", &p2 , 0, ierflg) ; // No Warnings gMinuit->mnexcm("MIGRAD", &p0, 0, ierflg) ; // minimize ============= this is part of the minimazation method relevant to the gradient calculation ====== void UnfoldingChiSquare(Int_t &NPar, Double_t *Grad, Double_t & fret, Double_t *x, Int_t iflag) { if(iflag == 2) for(iparam = 0 ; iparam < NPar ; iparam++) Grad[iparam] = 0 ; // Will evaluate gradient if(iflag == 2){ // calculate gradient while(iParam < NPar ){ Grad[iParam] = .... } etc ... } -- __________________________________________________________________ |Yves SCHUTZ (IN2P3 - CNRS) collaboration TAPS/WA98/ALICE | |SUBATECH | |Ecole des Mines de Nantes Telephone: (+33/0) 2 51 85 84 71 | |4, rue Alfred Kastler Fax : (+33/0) 2 51 85 84 79 | |F-44070 Nantes cedex 03 e-mail : yves.schutz@subatech.in2p3.fr| |__________________________________________________________________|
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:16 MET