MnUserParameterState.h

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: MnUserParameterState.h 34992 2010-08-25 10:36:11Z 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_MnUserParameterState
00011 #define ROOT_Minuit2_MnUserParameterState
00012 
00013 #include "Minuit2/MnUserParameters.h"
00014 #include "Minuit2/MnUserCovariance.h"
00015 #include "Minuit2/MnGlobalCorrelationCoeff.h"
00016 
00017 namespace ROOT {
00018 
00019    namespace Minuit2 {
00020 
00021 
00022 class MinimumState;
00023 
00024 //_____________________________________________________________________________
00025 /** 
00026     class which holds the external user and/or internal Minuit representation 
00027     of the parameters and errors; 
00028     transformation internal <-> external on demand;  
00029  */
00030 
00031 class MnUserParameterState {
00032 
00033 public:
00034 
00035    /// default constructor (invalid state)
00036    MnUserParameterState() : fValid(false), fCovarianceValid(false), fGCCValid(false), fFVal(0), fEDM(0), fNFcn(0), 
00037                             fParameters(MnUserParameters()), fCovariance(MnUserCovariance()), 
00038                             fIntParameters(std::vector<double>()), fIntCovariance(MnUserCovariance()) {} 
00039 
00040    /// construct from user parameters (before minimization)
00041    MnUserParameterState(const std::vector<double>&, const std::vector<double>&);
00042 
00043    MnUserParameterState(const MnUserParameters&);
00044 
00045    /// construct from user parameters + covariance (before minimization)
00046    MnUserParameterState(const std::vector<double>&, const std::vector<double>&, unsigned int);
00047 
00048    MnUserParameterState(const std::vector<double>&, const MnUserCovariance&);
00049 
00050    MnUserParameterState(const MnUserParameters&, const MnUserCovariance&);
00051 
00052    /// construct from internal parameters (after minimization)
00053    MnUserParameterState(const MinimumState&, double, const MnUserTransformation&);
00054 
00055    ~MnUserParameterState() {}
00056 
00057    MnUserParameterState(const MnUserParameterState& state) : fValid(state.fValid), fCovarianceValid(state.fCovarianceValid), fGCCValid(state.fGCCValid), fFVal(state.fFVal), fEDM(state.fEDM), fNFcn(state.fNFcn), fParameters(state.fParameters), fCovariance(state.fCovariance), fGlobalCC(state.fGlobalCC), fIntParameters(state.fIntParameters), fIntCovariance(state.fIntCovariance) {}
00058 
00059    MnUserParameterState& operator=(const MnUserParameterState& state) {
00060       fValid = state.fValid;
00061       fCovarianceValid = state.fCovarianceValid;
00062       fGCCValid = state.fGCCValid;
00063       fFVal = state.fFVal;
00064       fEDM = state.fEDM;
00065       fNFcn = state.fNFcn;
00066       fParameters = state.fParameters;
00067       fCovariance = state.fCovariance;
00068       fGlobalCC = state.fGlobalCC;
00069       fIntParameters = state.fIntParameters;
00070       fIntCovariance = state.fIntCovariance;
00071       return *this;
00072    }
00073 
00074    //user external representation
00075    const MnUserParameters& Parameters() const {return fParameters;}
00076    const MnUserCovariance& Covariance() const {return fCovariance;}
00077    const MnGlobalCorrelationCoeff& GlobalCC() const {return fGlobalCC;}
00078 
00079    //Minuit internal representation
00080    const std::vector<double>& IntParameters() const {return fIntParameters;}
00081    const MnUserCovariance& IntCovariance() const {return fIntCovariance;}
00082 
00083    //transformation internal <-> external
00084    const MnUserTransformation& Trafo() const {return fParameters.Trafo();}
00085 
00086    bool IsValid() const {return fValid;}
00087    bool HasCovariance() const {return fCovarianceValid;}
00088    bool HasGlobalCC() const {return fGCCValid;}
00089 
00090    double Fval() const {return fFVal;}
00091    double Edm() const {return fEDM;}
00092    unsigned int NFcn() const {return fNFcn;}  
00093 
00094 
00095 public:
00096 
00097    /** facade: forward interface of MnUserParameters and MnUserTransformation */
00098 
00099    //access to parameters (row-wise)
00100    const std::vector<ROOT::Minuit2::MinuitParameter>& MinuitParameters() const;
00101    //access to parameters and errors in column-wise representation 
00102    std::vector<double> Params() const;
00103    std::vector<double> Errors() const;
00104 
00105    //access to single Parameter
00106    const MinuitParameter& Parameter(unsigned int i) const;
00107 
00108    //add free Parameter
00109    void Add(const std::string & name, double val, double err);
00110    //add limited Parameter
00111    void Add(const std::string & name, double val, double err, double , double);
00112    //add const Parameter
00113    void Add(const std::string &, double);
00114 
00115    //interaction via external number of Parameter
00116    void Fix(unsigned int);
00117    void Release(unsigned int);
00118    void SetValue(unsigned int, double);
00119    void SetError(unsigned int, double);
00120    void SetLimits(unsigned int, double, double);
00121    void SetUpperLimit(unsigned int, double);
00122    void SetLowerLimit(unsigned int, double);
00123    void RemoveLimits(unsigned int);
00124 
00125    double Value(unsigned int) const;
00126    double Error(unsigned int) const;
00127   
00128    //interaction via Name of Parameter
00129    void Fix(const std::string &);
00130    void Release(const std::string &);
00131    void SetValue(const std::string &, double);
00132    void SetError(const std::string &, double);
00133    void SetLimits(const std::string &, double, double);
00134    void SetUpperLimit(const std::string &, double);
00135    void SetLowerLimit(const std::string &, double);
00136    void RemoveLimits(const std::string &);
00137 
00138    double Value(const std::string &) const;
00139    double Error(const std::string &) const;
00140   
00141    //convert Name into external number of Parameter
00142    unsigned int Index(const std::string &) const;
00143    //convert external number into Name of Parameter
00144    const std::string & GetName(unsigned int) const; 
00145    // mantain interface with const char * for backward compatibility
00146    const char* Name(unsigned int) const;
00147 
00148    // transformation internal <-> external
00149    double Int2ext(unsigned int, double) const;
00150    double Ext2int(unsigned int, double) const;
00151    unsigned int IntOfExt(unsigned int) const;
00152    unsigned int ExtOfInt(unsigned int) const;
00153    unsigned int VariableParameters() const;
00154    const MnMachinePrecision& Precision() const;
00155    void SetPrecision(double eps);
00156 
00157 
00158 private:
00159   
00160    bool fValid;
00161    bool fCovarianceValid;
00162    bool fGCCValid;
00163 
00164    double fFVal;
00165    double fEDM;
00166    unsigned int fNFcn;
00167 
00168    MnUserParameters fParameters;
00169    MnUserCovariance fCovariance;
00170    MnGlobalCorrelationCoeff fGlobalCC;
00171 
00172    std::vector<double> fIntParameters;
00173    MnUserCovariance fIntCovariance;
00174 
00175 };
00176 
00177   }  // namespace Minuit2
00178 
00179 }  // namespace ROOT
00180 
00181 #endif  // ROOT_Minuit2_MnUserParameterState

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