File indexing completed on 2025-10-31 09:15:39
0001 
0002 
0003 
0004 
0005 
0006 
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 
0031 
0032 
0033 
0034 
0035 
0036 class MnApplication {
0037 
0038 public:
0039    
0040    MnApplication(const FCNBase &fcn, const MnUserParameterState &state, const MnStrategy &stra, unsigned int nfcn = 0);
0041 
0042    virtual ~MnApplication() {}
0043 
0044    
0045 
0046 
0047 
0048 
0049 
0050 
0051 
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    const MnUserParameterState &State() const { return fState; }
0060    const MnUserParameters &Parameters() const { return fState.Parameters(); }
0061    const MnUserCovariance &Covariance() const { return fState.Covariance(); }
0062    virtual const FCNBase &Fcnbase() const { return fFCN; }
0063    const MnStrategy &Strategy() const { return fStrategy; }
0064    unsigned int NumOfCalls() const { return fNumCall; }
0065 
0066 protected:
0067    const FCNBase &fFCN;
0068    MnUserParameterState fState;
0069    MnStrategy fStrategy;
0070    unsigned int fNumCall;
0071 
0072 public:
0073    
0074    
0075 
0076    
0077    const std::vector<ROOT::Minuit2::MinuitParameter> &MinuitParameters() const;
0078    
0079    std::vector<double> Params() const;
0080    std::vector<double> Errors() const;
0081 
0082    
0083    const MinuitParameter &Parameter(unsigned int i) const;
0084 
0085    
0086    void Add(const char *Name, double val, double err);
0087    
0088    void Add(const char *Name, double val, double err, double, double);
0089    
0090    void Add(const char *, double);
0091 
0092    
0093    void Fix(unsigned int);
0094    void Release(unsigned int);
0095    void SetValue(unsigned int, double);
0096    void SetError(unsigned int, double);
0097    void SetLimits(unsigned int, double, double);
0098    void RemoveLimits(unsigned int);
0099 
0100    double Value(unsigned int) const;
0101    double Error(unsigned int) const;
0102 
0103    
0104    void Fix(const char *);
0105    void Release(const char *);
0106    void SetValue(const char *, double);
0107    void SetError(const char *, double);
0108    void SetLimits(const char *, double, double);
0109    void RemoveLimits(const char *);
0110    void SetPrecision(double);
0111 
0112    double Value(const char *) const;
0113    double Error(const char *) const;
0114 
0115    
0116    unsigned int Index(const char *) const;
0117    
0118    const char *Name(unsigned int) const;
0119 
0120    
0121    double Int2ext(unsigned int, double) const;
0122    double Ext2int(unsigned int, double) const;
0123    unsigned int IntOfExt(unsigned int) const;
0124    unsigned int ExtOfInt(unsigned int) const;
0125    unsigned int VariableParameters() const;
0126 };
0127 
0128 } 
0129 
0130 } 
0131 
0132 #endif