CombinedMinimumBuilder.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: CombinedMinimumBuilder.cxx 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #include "Minuit2/CombinedMinimumBuilder.h"
00011 #include "Minuit2/FunctionMinimum.h"
00012 #include "Minuit2/MnStrategy.h"
00013 
00014 #if defined(DEBUG) || defined(WARNINGMSG)
00015 #include "Minuit2/MnPrint.h" 
00016 #endif
00017 
00018 
00019 namespace ROOT {
00020 
00021    namespace Minuit2 {
00022 
00023 
00024 FunctionMinimum CombinedMinimumBuilder::Minimum(const MnFcn& fcn, const GradientCalculator& gc, const MinimumSeed& seed, const MnStrategy& strategy, unsigned int maxfcn, double edmval) const {
00025    // find minimum using combined method 
00026    // (Migrad then if fails try Simplex and then Migrad again) 
00027    
00028    FunctionMinimum min = fVMMinimizer.Minimize(fcn, gc, seed, strategy, maxfcn, edmval);
00029    
00030    if(!min.IsValid()) {
00031 #ifdef WARNINGMSG
00032       MN_INFO_MSG("CombinedMinimumBuilder: migrad method fails, will try with simplex method first."); 
00033 #endif
00034       MnStrategy str(2);
00035       FunctionMinimum min1 = fSimplexMinimizer.Minimize(fcn, gc, seed, str, maxfcn, edmval);
00036       if(!min1.IsValid()) {
00037 #ifdef WARNINGMSG
00038          MN_INFO_MSG("CombinedMinimumBuilder: both migrad and simplex method fail.");
00039 #endif
00040          return min1;
00041       }
00042       MinimumSeed seed1 = fVMMinimizer.SeedGenerator()(fcn, gc, min1.UserState(), str);
00043       
00044       FunctionMinimum min2 = fVMMinimizer.Minimize(fcn, gc, seed1, str, maxfcn, edmval);
00045       if(!min2.IsValid()) {
00046 #ifdef WARNINGMSG
00047          MN_INFO_MSG("CombinedMinimumBuilder: both migrad and method fails also at 2nd attempt.");
00048          MN_INFO_MSG("CombinedMinimumBuilder: return simplex Minimum.");
00049 #endif
00050          return min1;
00051       }
00052       
00053       return min2;
00054    }
00055    
00056    return min;
00057 }
00058 
00059    }  // namespace Minuit2
00060 
00061 }  // namespace ROOT

Generated on Tue Jul 5 14:36:48 2011 for ROOT_528-00b_version by  doxygen 1.5.1