// @(#)root/minuit2:$Id$ // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei 2003-2005 /********************************************************************** * * * Copyright (c) 2005 LCG ROOT Math team, CERN/PH-SFT * * * **********************************************************************/ #ifndef ROOT_Minuit2_FumiliBuilder #define ROOT_Minuit2_FumiliBuilder #include "Minuit2/MinimumBuilder.h" #include "Minuit2/VariableMetricEDMEstimator.h" #include "Minuit2/FumiliErrorUpdator.h" #include "Minuit2/MnFcn.h" #include "Minuit2/FunctionMinimum.h" #include namespace ROOT { namespace Minuit2 { /** Builds the FunctionMinimum using the Fumili method. @author Andras Zsenei, Creation date: 29 Sep 2004 @see MINUIT Tutorial on function minimization, section 5 @ingroup Minuit \todo the role of the strategy in Fumili */ class FumiliBuilder : public MinimumBuilder { public: FumiliBuilder() : fEstimator(VariableMetricEDMEstimator()), fErrorUpdator(FumiliErrorUpdator()) {} ~FumiliBuilder() override {} /** Class the member function calculating the Minimum and verifies the result depending on the strategy. @param fMnFcn the function to be minimized. @param fGradienCalculator not used in Fumili. @param fMinimumSeed the seed generator. @param fMnStrategy the strategy describing the number of function calls allowed for Gradient calculations. @param maxfcn maximum number of function calls after which the calculation will be stopped even if it has not yet converged. @param edmval expected vertical distance to the Minimum. @return Returns the function Minimum found. \todo Complete the documentation by understanding what is the reason to have two Minimum methods. */ FunctionMinimum Minimum(const MnFcn &fMnFcn, const GradientCalculator &fGradienCalculator, const MinimumSeed &fMinimumSeed, const MnStrategy &fMnStrategy, unsigned int maxfcn, double edmval) const override; /** Calculates the Minimum based on the Fumili method @param fMnFcn the function to be minimized. @param fGradienCalculator not used in Fumili @param fMinimumSeed the seed generator. @param states vector containing the state result of each iteration @param maxfcn maximum number of function calls after which the calculation will be stopped even if it has not yet converged. @param edmval expected vertical distance to the Minimum @return Returns the function Minimum found. @see MINUIT Tutorial on function minimization, section 5 \todo some nice Latex based formula here... */ FunctionMinimum Minimum(const MnFcn &fMnFcn, const GradientCalculator &fGradienCalculator, const MinimumSeed &fMinimumSeed, std::vector &states, unsigned int maxfcn, double edmval) const; /** Accessor to the EDM (expected vertical distance to the Minimum) estimator. @return The EDM estimator used in the builder. \todo Maybe a little explanation concerning EDM in all relevant classes. */ const VariableMetricEDMEstimator &Estimator() const { return fEstimator; } /** Accessor to the Error updator of the builder. @return The FumiliErrorUpdator used by the FumiliBuilder. */ const FumiliErrorUpdator &ErrorUpdator() const { return fErrorUpdator; } private: VariableMetricEDMEstimator fEstimator; FumiliErrorUpdator fErrorUpdator; }; } // namespace Minuit2 } // namespace ROOT #endif // ROOT_Minuit2_FumiliBuilder