Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/root/Minuit2/MnApplication.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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_MnApplication
0011 #define ROOT_Minuit2_MnApplication
0012 
0013 #include "Minuit2/MnUserParameterState.h"
0014 #include "Minuit2/MnStrategy.h"
0015 
0016 #include <vector>
0017 
0018 namespace ROOT {
0019 
0020 namespace Minuit2 {
0021 
0022 class FunctionMinimum;
0023 class MinuitParameter;
0024 class MnMachinePrecision;
0025 class ModularFunctionMinimizer;
0026 class FCNBase;
0027 
0028 //___________________________________________________________________________
0029 /**
0030     application interface class for minimizers (migrad, simplex, Minimize,
0031     Scan)
0032     User normally instantiates the derived class like ROOT::Minuit2::MnMigrad
0033     for using Migrad for minimization
0034  */
0035 
0036 class MnApplication {
0037 
0038 public:
0039    /// constructor from non-gradient functions
0040    MnApplication(const FCNBase &fcn, const MnUserParameterState &state, const MnStrategy &stra, unsigned int nfcn = 0);
0041 
0042    virtual ~MnApplication() {}
0043 
0044    /**
0045       Minimize the function
0046       @param maxfcn : max number of function calls (if = 0) default is used which is set to
0047                      200 + 100 * npar + 5 * npar**2
0048       @param tolerance : value used for terminating iteration procedure.
0049              For example, MIGRAD will stop iterating when edm (expected distance from minimum) will be:
0050              edm < tolerance * 10**-3
0051              Default value of tolerance used is 0.1
0052    */
0053    virtual FunctionMinimum operator()(unsigned int maxfcn = 0, double tolerance = 0.1);
0054 
0055    virtual ModularFunctionMinimizer &Minimizer() = 0;
0056    virtual const ModularFunctionMinimizer &Minimizer() const = 0;
0057 
0058    const MnMachinePrecision &Precision() const { return fState.Precision(); }
0059    MnUserParameterState &State() { return fState; }
0060    const MnUserParameterState &State() const { return fState; }
0061    const MnUserParameters &Parameters() const { return fState.Parameters(); }
0062    const MnUserCovariance &Covariance() const { return fState.Covariance(); }
0063    virtual const FCNBase &Fcnbase() const { return fFCN; }
0064    const MnStrategy &Strategy() const { return fStrategy; }
0065    unsigned int NumOfCalls() const { return fNumCall; }
0066 
0067 protected:
0068    const FCNBase &fFCN;
0069    MnUserParameterState fState;
0070    MnStrategy fStrategy;
0071    unsigned int fNumCall;
0072 };
0073 
0074 } // namespace Minuit2
0075 
0076 } // namespace ROOT
0077 
0078 #endif // ROOT_Minuit2_MnApplication