[root] / trunk / math / minuit / src / TMinuitMinimizer.cxx Repository:
ViewVC logotype

Diff of /trunk/math/minuit/src/TMinuitMinimizer.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 25485, Mon Sep 22 07:52:52 2008 UTC revision 25486, Mon Sep 22 12:43:03 2008 UTC
# Line 227  Line 227 
227     // By default Migrad is used.     // By default Migrad is used.
228     // Return true if the found minimum is valid and update internal chached values of     // Return true if the found minimum is valid and update internal chached values of
229     // minimum values, errors and covariance matrix.     // minimum values, errors and covariance matrix.
230       // Status of minimizer is set to:
231       // migradResult + 10*minosResult + 100*hesseResult + 1000*improveResult
232    
233    
234     assert(fMinuit != 0 );     assert(fMinuit != 0 );
235    
# Line 271  Line 274 
274    
275     }     }
276    
277       fStatus = ierr;
278    
279     // run improved if needed     // run improved if needed
280     if (ierr == 0 && fType == ROOT::Minuit::kMigradImproved)     if (ierr == 0 && fType == ROOT::Minuit::kMigradImproved) {
281        fMinuit->mnexcm("IMPROVE",arglist,1,ierr);        fMinuit->mnexcm("IMPROVE",arglist,1,ierr);
282          fStatus += 1000*ierr;
283       }
284    
285     // check if Hesse needs to be run     // check if Hesse needs to be run
286     if (ierr == 0 && IsValidError() ) {     if (ierr == 0 && IsValidError() ) {
287        fMinuit->mnexcm("HESSE",arglist,1,ierr);        fMinuit->mnexcm("HESSE",arglist,1,ierr);
288          fStatus += 100*ierr;
289     }     }
290    
291    
# Line 302  Line 310 
310     // store global min results (only if minimization is OK)     // store global min results (only if minimization is OK)
311     if (ierr == 0) {     if (ierr == 0) {
312        fCovar.resize(fDim*fDim);        fCovar.resize(fDim*fDim);
313          if (fNFree >= fDim) { // no fixed parameters
314        fMinuit->mnemat(&fCovar.front(), fDim);        fMinuit->mnemat(&fCovar.front(), fDim);
315          }
316          else {
317             // case of fixed params need to take care
318             if (fNFree > fDim) return true;
319             std::vector<double> tmpMat(fNFree*fNFree);
320             fMinuit->mnemat(&tmpMat.front(), fNFree);
321    
322    
323             unsigned int l = 0;
324             for (unsigned int i = 0; i < fDim; ++i) {
325    
326                if ( fMinuit->fNiofex[i] > 0 ) {  // not fixed ?
327                   unsigned int m = 0;
328                   for (unsigned int j = 0; j <= i; ++j) {
329                      if ( fMinuit->fNiofex[j] > 0 ) {  //not fixed
330                         fCovar[i*fDim + j] = tmpMat[l*fNFree + m];
331                         fCovar[j*fDim + i] = fCovar[i*fDim + j];
332                         m++;
333                      }
334                   }
335                   l++;
336                }
337             }
338    
339          }
340    
341        // need to re-run Minos again if requested        // need to re-run Minos again if requested
342        fMinosRun = false;        fMinosRun = false;
# Line 338  Line 372 
372    
373        int nargs = 2;        int nargs = 2;
374        fMinuit->mnexcm("MINOS",arglist,nargs,ierr);        fMinuit->mnexcm("MINOS",arglist,nargs,ierr);
375        if (ierr != 0 ) return false;        fStatus += 10*ierr;
376    
377        fMinosRun = true;        fMinosRun = true;
378    
379     }     }
380    
381     double errParab = 0;     double errParab = 0;
382     double gcor = 0;     double gcor = 0;
383     // what returns if parameter fixed or constant or at limit ?     // what returns if parameter fixed or constant or at limit ?
384     fMinuit->mnerrs(i,errUp,errLow, errParab, gcor);     fMinuit->mnerrs(i,errUp,errLow, errParab, gcor);
385    
386       if (fStatus%100 != 0 ) return false;
387     return true;     return true;
388    
389  }  }

Legend:
Removed from v.25485  
changed lines
  Added in v.25486

Subversion Admin
ViewVC Help
Powered by ViewVC 1.0.9