MnApplication.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: MnApplication.h 25486 2008-09-22 12:43:03Z moneta $
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_MnApplication
00011 #define ROOT_Minuit2_MnApplication
00012 
00013 #include "Minuit2/MnUserParameterState.h"
00014 #include "Minuit2/MnStrategy.h"
00015 
00016 namespace ROOT {
00017 
00018    namespace Minuit2 {
00019 
00020 
00021 
00022 class FunctionMinimum;
00023 class MinuitParameter;
00024 class MnMachinePrecision;
00025 class ModularFunctionMinimizer;
00026 class FCNBase;
00027 class FCNGradientBase;
00028 
00029 //___________________________________________________________________________
00030 /** 
00031     application interface class for minimizers (migrad, simplex, Minimize, 
00032     Scan)
00033     User normally instantiates the derived class like ROOT::Minuit2::MnMigrad 
00034     for using Migrad for minimization
00035  */
00036 
00037 class MnApplication {
00038 
00039 public:
00040 
00041 
00042    /// constructor from non-gradient functions
00043    MnApplication(const FCNBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
00044 
00045    /// constructor from gradient function
00046    MnApplication(const FCNGradientBase& fcn, const MnUserParameterState& state, const MnStrategy& stra, unsigned int nfcn = 0);
00047 
00048    virtual ~MnApplication() { }
00049 
00050    /**
00051       Minimize the function
00052       @param maxfcn : max number of function calls (if = 0) default is used which is set to 
00053                      200 + 100 * npar + 5 * npar**2
00054       @param tolerance : value used for terminating iteration procedure. 
00055              For example, MIGRAD will stop iterating when edm (expected distance from minimum) will be: 
00056              edm < tolerance * 10**-3
00057              Default value of tolerance used is 0.1
00058    */
00059    virtual FunctionMinimum operator()(unsigned int maxfcn = 0, double tolerance = 0.1);
00060  
00061    virtual const ModularFunctionMinimizer& Minimizer() const = 0;
00062 
00063    const MnMachinePrecision& Precision() const {return fState.Precision();}
00064    const MnUserParameterState& State() const {return fState;}
00065    const MnUserParameters& Parameters() const {return fState.Parameters();}
00066    const MnUserCovariance& Covariance() const {return fState.Covariance();}
00067    virtual const FCNBase& Fcnbase() const {return fFCN;}
00068    const MnStrategy& Strategy() const {return fStrategy;}
00069    unsigned int NumOfCalls() const {return fNumCall;}
00070 
00071 protected:
00072 
00073    const FCNBase& fFCN;
00074    MnUserParameterState fState;
00075    MnStrategy fStrategy;
00076    unsigned int fNumCall;
00077    bool fUseGrad;
00078 
00079 public:  
00080 
00081 // facade: forward interface of MnUserParameters and MnUserTransformation
00082 // via MnUserParameterState
00083 
00084    //access to parameters (row-wise)
00085    const std::vector<ROOT::Minuit2::MinuitParameter>& MinuitParameters() const;
00086    //access to parameters and errors in column-wise representation 
00087    std::vector<double> Params() const;
00088    std::vector<double> Errors() const;
00089 
00090    //access to single Parameter
00091    const MinuitParameter& Parameter(unsigned int i) const;
00092 
00093    //add free Parameter
00094    void Add(const char* Name, double val, double err);
00095    //add limited Parameter
00096    void Add(const char* Name, double val, double err, double , double);
00097    //add const Parameter
00098    void Add(const char*, double);
00099 
00100    //interaction via external number of Parameter
00101    void Fix(unsigned int);
00102    void Release(unsigned int);
00103    void SetValue(unsigned int, double);
00104    void SetError(unsigned int, double);
00105    void SetLimits(unsigned int, double, double);
00106    void RemoveLimits(unsigned int);
00107 
00108    double Value(unsigned int) const;
00109    double Error(unsigned int) const;
00110   
00111    //interaction via Name of Parameter
00112    void Fix(const char*);
00113    void Release(const char*);
00114    void SetValue(const char*, double);
00115    void SetError(const char*, double);
00116    void SetLimits(const char*, double, double);
00117    void RemoveLimits(const char*);
00118    void SetPrecision(double);
00119 
00120    double Value(const char*) const;
00121    double Error(const char*) const;
00122   
00123    //convert Name into external number of Parameter
00124    unsigned int Index(const char*) const;
00125    //convert external number into Name of Parameter
00126    const char* Name(unsigned int) const;
00127 
00128    // transformation internal <-> external
00129    double Int2ext(unsigned int, double) const;
00130    double Ext2int(unsigned int, double) const;
00131    unsigned int IntOfExt(unsigned int) const;
00132    unsigned int ExtOfInt(unsigned int) const;
00133    unsigned int VariableParameters() const;
00134 
00135 };
00136 
00137   }  // namespace Minuit2
00138 
00139 }  // namespace ROOT
00140 
00141 #endif  // ROOT_Minuit2_MnApplication

Generated on Tue Jul 5 14:25:43 2011 for ROOT_528-00b_version by  doxygen 1.5.1