StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ConstrainedParameter.h
1 #if !defined(CONSTRAINEDPARAMETER_H__5B75CCD2_01CA_4993_8BD6_836465B6A0E1__INCLUDED_)
2 #define CONSTRAINEDPARAMETER_H__5B75CCD2_01CA_4993_8BD6_836465B6A0E1__INCLUDED_
3 
4 #include <cassert>
5 #if _MSC_VER > 1000
6 #pragma once
7 #endif // _MSC_VER > 1000
8 
9 #include "Parameter.h"
10 
12 {
13 public:
15  ConstrainedParameter(const string & name, const string & description,
16  double value, double defaultValue,
17  double min, double max, int type=Double, int key=0);
18  ConstrainedParameter(const string & name, const string & description,
19  bool * value, bool defaultValue, int key=0);
20  ConstrainedParameter(const string & name, const string & description,
21  int * value, int defaultValue, int min, int max, int key=0);
22  ConstrainedParameter(const string & name, const string & description,
23  float* value, float defaultValue,float min, float max, int key=0);
24  ConstrainedParameter(const string & name, const string & description,
25  double * value, double defaultValue, double min, double max, int key=0);
26 
27  ConstrainedParameter(const ConstrainedParameter & parameter);
28  virtual ~ConstrainedParameter();
29 
30  const ConstrainedParameter & operator=(const ConstrainedParameter & parameter);
31 
32  double getMinimum() const;
33  double getMaximum() const;
34  double getDefault() const;
35  void setMinimum(double min);
36  void setMaximum(double max);
37  void setDefault(double value);
38  void setValue(double value);
39  void set(const string & name,const string & description,
40  double value, double defaultValue, double min, double max, int type=Double, int key=0);
41  void set(const string & name,const string & description,bool*value, bool defaultValue, int key=0);
42  void set(const string & name,const string & description,int *value, int defaultValue, int min, int max, int key=0);
43  void set(const string & name,const string & description,float*value, float defaultValue, float min, float max, int key=0);
44  void set(const string & name,const string & description,double*value, double defaultValue, double min, double max, int key=0);
45  void reset();
46 
47 protected:
48 
49  double _minimum;
50  double _maximum;
51  double _default;
52 
53 };
54 
55 inline const ConstrainedParameter & ConstrainedParameter::operator=(const ConstrainedParameter & parameter)
56 {
57  if (&parameter==this)
58  return *this;
59  _key = parameter._key;
60  _type = parameter._type;
61  _value = parameter._value;
62  _minimum = parameter._minimum;
63  _maximum = parameter._maximum;
64  _default = parameter._default;
65  return *this;
66 }
67 
68 inline double ConstrainedParameter::getMinimum() const
69 {
70  return _minimum;
71 }
72 
73 inline double ConstrainedParameter::getMaximum() const
74 {
75  return _maximum;
76 }
77 
78 inline double ConstrainedParameter::getDefault() const
79 {
80  return _default;
81 }
82 
83 inline void ConstrainedParameter::setMinimum(double min)
84 {
85  _minimum = min;
86  if (_value<_minimum)
87  _value = _minimum;
88  if (_default<_minimum)
89  _default = _minimum;
90 }
91 
92 inline void ConstrainedParameter::setMaximum(double max)
93 {
94  _maximum = max;
95  if (_value>_maximum)
96  _value = _maximum;
97  if (_default>_maximum)
98  _default = _maximum;
99 }
100 
101 inline void ConstrainedParameter::setDefault(double value)
102 {
103  if (value<_minimum)
104  _default = _minimum;
105  else if (value>_maximum)
106  _default = _maximum;
107  else
108  _default = value;
109 }
110 
111 inline void ConstrainedParameter::setValue(double value)
112 {
113  if (value<_minimum)
114  Parameter::setValue(_minimum);
115  else if (value>_maximum)
116  Parameter::setValue(_maximum);
117  else
118  Parameter::setValue(value);
119 }
120 
125 {
126  _value = _default;
127 }
128 
129 inline void ConstrainedParameter::set(const string & name,
130  const string & description,
131  double value,
132  double defaultValue,
133  double min,
134  double max,
135  int type,
136  int key)
137 {
138  Parameter::set(name,description,value,type,key);
139  assert(min<=max);
140  if (type==Double || type==Integer)
141  {
142  _minimum = min;
143  _maximum = max;
144  setDefault(defaultValue);
145  setValue(value);
146  }
147  else // Boolean
148  {
149  _minimum = 0;
150  _maximum = 1;
151  _default = (defaultValue!=0);
152  _value = (value!=0);
153  _type = Boolean;
154  }
155 }
156 
157 inline void ConstrainedParameter::set(const string & name,const string & description,
158  bool*value, bool defaultValue, int key)
159 {
160  Parameter::set(name,description,value,key);
161  _default = defaultValue;
162  _minimum = 0;
163  _maximum = 1;
164 }
165 
166 inline void ConstrainedParameter::set(const string & name,const string & description,
167  int *value, int defaultValue, int min, int max, int key)
168 {
169  Parameter::set(name,description,value,key);
170  _default = defaultValue;
171  _minimum = min;
172  _maximum = max;
173 }
174 
175 inline void ConstrainedParameter::set(const string & name,const string & description,
176  float*value, float defaultValue, float min, float max, int key)
177 {
178  Parameter::set(name,description,value,key);
179  _default = defaultValue;
180  _minimum = min;
181  _maximum = max;
182 }
183 
184 inline void ConstrainedParameter::set(const string & name,const string & description,
185  double*value, double defaultValue, double min, double max, int key)
186 {
187  Parameter::set(name,description,value,key);
188  _default = defaultValue;
189  _minimum = min;
190  _maximum = max;
191 }
192 
193 #endif // !defined(CONSTRAINEDPARAMETER_H__5B75CCD2_01CA_4993_8BD6_836465B6A0E1__INCLUDED_)
194