00001 // @(#)root/minuit2:$Id: NegativeG2LineSearch.h 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 #ifndef ROOT_Minuit2_NegativeG2LineSearch 00011 #define ROOT_Minuit2_NegativeG2LineSearch 00012 00013 namespace ROOT { 00014 00015 namespace Minuit2 { 00016 00017 00018 class MnFcn; 00019 class MinimumState; 00020 class GradientCalculator; 00021 class MnMachinePrecision; 00022 class FunctionGradient; 00023 00024 /** In case that one of the components of the second derivative g2 calculated 00025 by the numerical Gradient calculator is negative, a 1dim line search in 00026 the direction of that component is done in order to find a better position 00027 where g2 is again positive. 00028 */ 00029 00030 class NegativeG2LineSearch { 00031 00032 public: 00033 00034 NegativeG2LineSearch() {} 00035 00036 ~NegativeG2LineSearch() {} 00037 00038 MinimumState operator()(const MnFcn&, const MinimumState&, const GradientCalculator&, const MnMachinePrecision&) const; 00039 00040 bool HasNegativeG2(const FunctionGradient&, const MnMachinePrecision&) const; 00041 00042 private: 00043 00044 }; 00045 00046 } // namespace Minuit2 00047 00048 } // namespace ROOT 00049 00050 #endif // ROOT_Minuit2_NegativeG2LineSearch