00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00026
00027
00028
00029
00030
00031
00032
00033 class ParameterSettings {
00034
00035 public:
00036
00037
00038
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
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
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
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
00073 void Set(const std::string & name, double value, double step) {
00074 SetName(name);
00075 SetValue(value);
00076 SetStepSize(step);
00077 }
00078
00079
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
00088 void Set(const std::string & name, double value) {
00089 SetName(name);
00090 SetValue(value);
00091 Fix();
00092 }
00093
00094
00095
00096
00097
00098 ~ParameterSettings () {}
00099
00100
00101
00102 public:
00103
00104
00105 double Value() const { return fValue; }
00106
00107 double StepSize() const { return fStepSize; }
00108
00109 double LowerLimit() const {return fLowerLimit;}
00110
00111 double UpperLimit() const {return fUpperLimit;}
00112
00113 bool IsFixed() const { return fFix; }
00114
00115 bool HasLowerLimit() const {return fHasLowerLimit; }
00116
00117 bool HasUpperLimit() const {return fHasUpperLimit; }
00118
00119 bool IsBound() const { return fHasLowerLimit || fHasUpperLimit; }
00120
00121 bool IsDoubleBound() const { return fHasLowerLimit && fHasUpperLimit; }
00122
00123 const std::string & Name() const { return fName; }
00124
00125
00126
00127
00128 void SetName(const std::string & name ) { fName = name; }
00129
00130
00131 void Fix() {fFix = true;}
00132
00133 void Release() {fFix = false;}
00134
00135 void SetValue(double val) {fValue = val;}
00136
00137 void SetStepSize(double err) {fStepSize = err;}
00138
00139
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
00155 void SetUpperLimit(double up) {
00156 fLowerLimit = 0.;
00157 fUpperLimit = up;
00158 fHasLowerLimit = false;
00159 fHasUpperLimit = true;
00160 }
00161
00162 void SetLowerLimit(double low) {
00163 fLowerLimit = low;
00164 fUpperLimit = 0.;
00165 fHasLowerLimit = true;
00166 fHasUpperLimit = false;
00167 }
00168
00169
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;
00185 double fStepSize;
00186 bool fFix;
00187 double fLowerLimit;
00188 double fUpperLimit;
00189 bool fHasLowerLimit;
00190 bool fHasUpperLimit;
00191
00192 std::string fName;
00193
00194 };
00195
00196 }
00197
00198 }
00199
00200
00201 #endif