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;