ParameterSettings.h

Go to the documentation of this file.
00001 // @(#)root/mathcore:$Id: ParameterSettings.h 25486 2008-09-22 12:43:03Z moneta $
00002 // Author: L. Moneta Thu Sep 21 16:21:48 2006
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2006  LCG ROOT Math Team, CERN/PH-SFT                *
00007  *                                                                    *
00008  *                                                                    *
00009  **********************************************************************/
00010 
00011 // Header file for class ParameterSettings
00012 
00013 #ifndef ROOT_Fit_ParameterSettings
00014 #define ROOT_Fit_ParameterSettings
00015 
00016 #include <string>
00017 
00018 namespace ROOT { 
00019 
00020    namespace Fit { 
00021 
00022 
00023 //___________________________________________________________________________________
00024 /** 
00025    Class, describing value, limits and step size of the parameters 
00026    Provides functionality also to set/retrieve values, step sizes, limits and fix the 
00027    parameters. 
00028 
00029    To be done: add constraints (equality and inequality) as functions of the parameters
00030 
00031    @ingroup FitMain
00032 */ 
00033 class ParameterSettings {
00034 
00035 public: 
00036 
00037    /** 
00038       Default constructor
00039    */ 
00040    ParameterSettings () :  
00041     fValue(0.), fStepSize(0.1), fFix(false), 
00042     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false), 
00043     fName("") 
00044    {}
00045 
00046   
00047   ///constructor for unlimited named Parameter
00048    ParameterSettings(const std::string & name, double val, double err) :
00049     fValue(val), fStepSize(err), fFix(false), 
00050     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false), 
00051     fName(name) 
00052    {}
00053   
00054    ///constructor for double limited Parameter
00055    ParameterSettings(const std::string &  name, double val, double err, 
00056                   double min, double max) : 
00057       fValue(val), fStepSize(err), fFix(false), fName(name) 
00058    { 
00059       SetLimits(min,max); 
00060    }
00061 
00062    ///constructor for fixed Parameter
00063    ParameterSettings(const std::string &  name, double val) : 
00064     fValue(val), fStepSize(0), fFix(true), 
00065     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false), 
00066     fName(name)  
00067    {}
00068 
00069 
00070 
00071 
00072    /// set value and name (unlimited parameter) 
00073    void Set(const std::string & name, double value, double step) { 
00074       SetName(name); 
00075       SetValue(value); 
00076       SetStepSize(step);
00077    }
00078 
00079    /// set a limited parameter
00080    void Set(const std::string & name, double value, double step, double lower, double upper ) { 
00081       SetName(name); 
00082       SetValue(value); 
00083       SetStepSize(step);
00084       SetLimits(lower,upper);  
00085    }
00086 
00087    /// set a fixed parameter
00088    void Set(const std::string & name, double value) { 
00089       SetName(name); 
00090       SetValue(value); 
00091       Fix();
00092    }
00093 
00094 
00095    /** 
00096       Destructor (no operations)
00097    */ 
00098    ~ParameterSettings ()  {}  
00099 
00100    /// copy constructor and assignment operators (leave them to the compiler) 
00101 
00102 public: 
00103 
00104    /// return parameter value
00105    double Value() const { return fValue; } 
00106    /// return step size 
00107    double StepSize() const { return fStepSize; } 
00108    /// return lower limit value
00109    double LowerLimit() const {return fLowerLimit;}
00110    /// return lower limit value
00111    double UpperLimit() const {return fUpperLimit;}
00112    /// check if is fixed 
00113    bool IsFixed() const { return fFix; }
00114    /// check if parameter has lower limit
00115    bool HasLowerLimit() const {return fHasLowerLimit; }
00116    /// check if parameter has upper limit
00117    bool HasUpperLimit() const {return fHasUpperLimit; }
00118    /// check if is bound
00119    bool IsBound() const { return fHasLowerLimit || fHasUpperLimit;  } 
00120    /// check if is double bound (upper AND lower limit) 
00121    bool IsDoubleBound() const { return fHasLowerLimit && fHasUpperLimit;  } 
00122    /// return name 
00123    const std::string & Name() const { return fName; }  
00124 
00125    /** interaction **/
00126 
00127    /// set name
00128    void SetName(const std::string & name ) { fName = name; }
00129 
00130    /// fix  the parameter
00131    void Fix() {fFix = true;}
00132    /// release the parameter
00133    void Release() {fFix = false;}
00134    /// set the value
00135    void SetValue(double val) {fValue = val;}
00136    /// set the step size 
00137    void SetStepSize(double err) {fStepSize = err;}
00138    /// set a double side limit, 
00139    /// if low == up the parameter is fixedm if low > up the limits are removed
00140    void SetLimits(double low, double up) {
00141       if (low == up) { 
00142          Fix();           
00143          return; 
00144       }
00145       else if ( low > up ) { 
00146          RemoveLimits(); 
00147          return; 
00148       }
00149       fLowerLimit = low; 
00150       fUpperLimit = up;
00151       fHasLowerLimit = true; 
00152       fHasUpperLimit = true;
00153    }
00154    /// set a single upper limit
00155    void SetUpperLimit(double up) {
00156     fLowerLimit = 0.; 
00157     fUpperLimit = up;
00158     fHasLowerLimit = false; 
00159     fHasUpperLimit = true;
00160    }
00161    /// set a single lower limit 
00162    void SetLowerLimit(double low) {
00163       fLowerLimit = low; 
00164       fUpperLimit = 0.;
00165       fHasLowerLimit = true; 
00166       fHasUpperLimit = false;
00167    }
00168 
00169    /// remove all limit
00170    void RemoveLimits() {
00171       fLowerLimit = 0.; 
00172       fUpperLimit = 0.;
00173       fHasLowerLimit = false; 
00174       fHasUpperLimit = false;
00175    }
00176   
00177       
00178 
00179 protected: 
00180 
00181 
00182 private: 
00183 
00184    double fValue;        // parameter value
00185    double fStepSize;     // parameter step size (used by minimizer)
00186    bool fFix;            // flag to control if parameter is fixed 
00187    double fLowerLimit;   // lower parameter limit
00188    double fUpperLimit;   // upper parameter limit
00189    bool fHasLowerLimit;  // flag to control lower parameter limit
00190    bool fHasUpperLimit;  // flag to control upper parameter limit
00191 
00192    std::string fName;    // parameter name
00193 
00194 }; 
00195 
00196    } // end namespace Fit
00197 
00198 } // end namespace ROOT
00199 
00200 
00201 #endif /* ROOT_Fit_ParameterSettings */

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