13 #ifndef ROOT_Fit_ParameterSettings 
   14 #define ROOT_Fit_ParameterSettings 
   36 class ParameterSettings {
 
   43    ParameterSettings () :
 
   44     fValue(0.), fStepSize(0.1), fFix(false),
 
   45     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false),
 
   51    ParameterSettings(
const std::string & name, 
double val, 
double err) :
 
   52     fValue(val), fStepSize(err), fFix(false),
 
   53     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false),
 
   58    ParameterSettings(
const std::string &  name, 
double val, 
double err,
 
   59                      double min, 
double max) :
 
   60       fValue(val), fStepSize(err), fFix(false),
 
   61       fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false),
 
   68    ParameterSettings(
const std::string &  name, 
double val) :
 
   69     fValue(val), fStepSize(0), fFix(true),
 
   70     fLowerLimit(0.), fUpperLimit(0.), fHasLowerLimit(false), fHasUpperLimit(false),
 
   78    void Set(
const std::string & name, 
double value, 
double step) {
 
   85    void Set(
const std::string & name, 
double value, 
double step, 
double lower, 
double upper ) {
 
   89       SetLimits(lower,upper);
 
   93    void Set(
const std::string & name, 
double value) {
 
  103    ~ParameterSettings ()  {}
 
  110    double Value()
 const { 
return fValue; }
 
  112    double StepSize()
 const { 
return fStepSize; }
 
  114    double LowerLimit()
 const {
return fLowerLimit;}
 
  116    double UpperLimit()
 const {
return fUpperLimit;}
 
  118    bool IsFixed()
 const { 
return fFix; }
 
  120    bool HasLowerLimit()
 const {
return fHasLowerLimit; }
 
  122    bool HasUpperLimit()
 const {
return fHasUpperLimit; }
 
  124    bool IsBound()
 const {   
return fHasLowerLimit || fHasUpperLimit;  }
 
  126    bool IsDoubleBound()
 const { 
return fHasLowerLimit && fHasUpperLimit;  }
 
  128    const std::string & Name()
 const { 
return fName; }
 
  133    void SetName(
const std::string & name ) { fName = name; }
 
  136    void Fix() {fFix = 
true;}
 
  138    void Release() {fFix = 
false;}
 
  140    void SetValue(
double val) {fValue = val;}
 
  142    void SetStepSize(
double err) {fStepSize = err;}
 
  147    void SetLimits(
double low, 
double up) {
 
  153       if (low == up && low == fValue) {
 
  157       if (low > fValue || up < fValue) {
 
  158          MATH_INFO_MSG(
"ParameterSettings",
"lower/upper bounds outside current parameter value. The value will be set to (low+up)/2 ");
 
  159          fValue = 0.5 * (up+low);
 
  163       fHasLowerLimit = 
true;
 
  164       fHasUpperLimit = 
true;
 
  167    void SetUpperLimit(
double up) {
 
  170     fHasLowerLimit = 
false;
 
  171     fHasUpperLimit = 
true;
 
  174    void SetLowerLimit(
double low) {
 
  177       fHasLowerLimit = 
true;
 
  178       fHasUpperLimit = 
false;
 
  182    void RemoveLimits() {
 
  185       fHasLowerLimit = 
false;
 
  186       fHasUpperLimit = 
false;