Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 09:11:24

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    /**
0051 
0052    Member function that calculates the Error matrix (or the Hessian
0053    matrix containing the (approximate) second derivatives) using a
0054    linearization of the model function negleting second derivatives.
0055 
0056    @param fMinimumState used to calculate the change in the covariance
0057    matrix between the two iterations
0058 
0059    @param fMinimumParameters the parameters at the present iteration
0060 
0061    @param fGradientCalculator the Gradient calculator used to retrieved the Parameter transformation
0062 
0063    @param lambda the Marquard lambda factor
0064 
0065 
0066    \todo Some nice latex mathematical formuli...
0067 
0068    */
0069 
0070    virtual MinimumError Update(const MinimumState &fMinimumState, const MinimumParameters &fMinimumParameters,
0071                                const GradientCalculator &fGradientCalculator, double lambda) const;
0072 
0073    /**
0074 
0075    Member function which is only present due to the design already in place
0076    of the software. As all classes calculating the Error matrix are supposed
0077    inherit from the MinimumErrorUpdator they must inherit this method. In some
0078    methods calculating the aforementioned matrix some of these parameters are
0079    not needed and other parameters are necessary... Hopefully, a more elegant
0080    solution will be found in the future.
0081 
0082    \todo How to get rid of this dummy method which is only due to the inheritance
0083 
0084    */
0085 
0086    MinimumError Update(const MinimumState &, const MinimumParameters &, const FunctionGradient &) const override;
0087 };
0088 
0089 } // namespace Minuit2
0090 
0091 } // namespace ROOT
0092 
0093 #endif // ROOT_Minuit2_FumiliErrorUpdator