Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:10:23

0001 // @(#)root/minuit2:$Id$
0002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005
0003 
0004 /**********************************************************************
0005  *                                                                    *
0006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
0007  *                                                                    *
0008  **********************************************************************/
0009 
0010 #ifndef ROOT_Minuit2_FumiliErrorUpdator
0011 #define ROOT_Minuit2_FumiliErrorUpdator
0012 
0013 #include "Minuit2/MinimumErrorUpdator.h"
0014 
0015 namespace ROOT {
0016 
0017 namespace Minuit2 {
0018 
0019 class MinimumState;
0020 class MinimumParameters;
0021 class GradientCalculator;
0022 class FumiliFCNBase;
0023 class FunctionGradient;
0024 
0025 /**
0026 
0027 In the case of the Fumili algorithm the Error matrix (or the Hessian
0028 matrix containing the (approximate) second derivatives) is calculated
0029 using a linearization of the model function negleting second
0030 derivatives. (In some sense the Name Updator is a little bit misleading
0031 as the Error matrix is not calculated by iteratively updating, like
0032 in Davidon's or other similar variable metric methods, but by
0033 recalculating each time).
0034 
0035 
0036 @author  Andras Zsenei and Lorenzo Moneta, Creation date: 28 Sep 2004
0037 
0038 @see <A HREF="http://www.cern.ch/winkler/minuit/tutorial/mntutorial.pdf">MINUIT Tutorial</A> on function minimization,
0039 section 5
0040 
0041 @see DavidonErrorUpdator
0042 
0043 @ingroup Minuit
0044 
0045 */
0046 
0047 class FumiliErrorUpdator : public MinimumErrorUpdator {
0048 
0049 public:
0050    FumiliErrorUpdator() {}
0051 
0052    ~FumiliErrorUpdator() override {}
0053 
0054    /**
0055 
0056    Member function that calculates the Error matrix (or the Hessian
0057    matrix containing the (approximate) second derivatives) using a
0058    linearization of the model function negleting second derivatives.
0059 
0060    @param fMinimumState used to calculate the change in the covariance
0061    matrix between the two iterations
0062 
0063    @param fMinimumParameters the parameters at the present iteration
0064 
0065    @param fGradientCalculator the Gradient calculator used to retrieved the Parameter transformation
0066 
0067    @param lambda the Marquard lambda factor
0068 
0069 
0070    \todo Some nice latex mathematical formuli...
0071 
0072    */
0073 
0074    virtual MinimumError Update(const MinimumState &fMinimumState, const MinimumParameters &fMinimumParameters,
0075                                const GradientCalculator &fGradientCalculator, double lambda) const;
0076 
0077    /**
0078 
0079    Member function which is only present due to the design already in place
0080    of the software. As all classes calculating the Error matrix are supposed
0081    inherit from the MinimumErrorUpdator they must inherit this method. In some
0082    methods calculating the aforementioned matrix some of these parameters are
0083    not needed and other parameters are necessary... Hopefully, a more elegant
0084    solution will be found in the future.
0085 
0086    \todo How to get rid of this dummy method which is only due to the inheritance
0087 
0088    */
0089 
0090    MinimumError Update(const MinimumState &, const MinimumParameters &, const FunctionGradient &) const override;
0091 
0092 private:
0093 };
0094 
0095 } // namespace Minuit2
0096 
0097 } // namespace ROOT
0098 
0099 #endif // ROOT_Minuit2_FumiliErrorUpdator