00001 // @(#)root/minuit2:$Id: MnStrategy.h 21530 2007-12-20 11:14:35Z moneta $ 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 #ifndef ROOT_Minuit2_MnStrategy 00011 #define ROOT_Minuit2_MnStrategy 00012 00013 namespace ROOT { 00014 00015 namespace Minuit2 { 00016 00017 //_________________________________________________________________________ 00018 /** 00019 API class for defining three levels of strategies: low (0), medium (1), 00020 high (>=2); 00021 acts on: Migrad (behavioural), 00022 Minos (lowers strategy by 1 for Minos-own minimization), 00023 Hesse (iterations), 00024 Numerical2PDerivative (iterations) 00025 */ 00026 00027 class MnStrategy { 00028 00029 public: 00030 00031 //default strategy 00032 MnStrategy(); 00033 00034 //user defined strategy (0, 1, >=2) 00035 explicit MnStrategy(unsigned int); 00036 00037 ~MnStrategy() {} 00038 00039 unsigned int Strategy() const {return fStrategy;} 00040 00041 unsigned int GradientNCycles() const {return fGradNCyc;} 00042 double GradientStepTolerance() const {return fGradTlrStp;} 00043 double GradientTolerance() const {return fGradTlr;} 00044 00045 unsigned int HessianNCycles() const {return fHessNCyc;} 00046 double HessianStepTolerance() const {return fHessTlrStp;} 00047 double HessianG2Tolerance() const {return fHessTlrG2;} 00048 unsigned int HessianGradientNCycles() const {return fHessGradNCyc;} 00049 00050 bool IsLow() const {return fStrategy == 0;} 00051 bool IsMedium() const {return fStrategy == 1;} 00052 bool IsHigh() const {return fStrategy >= 2;} 00053 00054 void SetLowStrategy(); 00055 void SetMediumStrategy(); 00056 void SetHighStrategy(); 00057 00058 void SetGradientNCycles(unsigned int n) {fGradNCyc = n;} 00059 void SetGradientStepTolerance(double stp) {fGradTlrStp = stp;} 00060 void SetGradientTolerance(double toler) {fGradTlr = toler;} 00061 00062 void SetHessianNCycles(unsigned int n) {fHessNCyc = n;} 00063 void SetHessianStepTolerance(double stp) {fHessTlrStp = stp;} 00064 void SetHessianG2Tolerance(double toler) {fHessTlrG2 = toler;} 00065 void SetHessianGradientNCycles(unsigned int n) {fHessGradNCyc = n;} 00066 00067 private: 00068 00069 unsigned int fStrategy; 00070 00071 unsigned int fGradNCyc; 00072 double fGradTlrStp; 00073 double fGradTlr; 00074 unsigned int fHessNCyc; 00075 double fHessTlrStp; 00076 double fHessTlrG2; 00077 unsigned int fHessGradNCyc; 00078 }; 00079 00080 } // namespace Minuit2 00081 00082 } // namespace ROOT 00083 00084 #endif // ROOT_Minuit2_MnStrategy