GeoModel - GeoModelCore
Parameter.cpp
1 //==========================================================================//
2 // Imported from the QAT library (qat.pitt.edu) by the copyright holder //
3 // Joe Boudreau. Software licensed under the terms and conditions of the //
4 // GNU Lesser Public License v3. //
5 //==========================================================================//
6 
7 #include "GeoGenericFunctions/Parameter.h"
8 
9 namespace GeoGenfun {
10 PARAMETER_OBJECT_IMP(Parameter)
11 
12 Parameter::Parameter(std::string name, double value, double lowerLimit, double upperLimit):
13  _name(name),_value(value),_lowerLimit(lowerLimit),_upperLimit(upperLimit),_sourceParameter(NULL)
14 {
15 }
16 
17 Parameter::~Parameter() {
18 }
19 
20 std::ostream & operator << ( std::ostream & o, const Parameter & p) {
21  return o << p.getName() << "\t" << " value = "
22  << p.getValue() << "\t" <<" limits: ["
23  << p.getLowerLimit() << ","
24  << p.getUpperLimit() << "]" << std::endl;
25 }
26 
27 const std::string & Parameter::getName() const {
28  return _name;
29 }
30 
31 double Parameter::getValue() const
32 {
33  if (_sourceParameter) {
34  return _sourceParameter->getValue();
35  }
36  else {
37  return _value;
38  }
39 }
40 
41 double Parameter::getLowerLimit() const
42 {
43  if (_sourceParameter) {
44  return -1E-100;
45  }
46  else {
47  return _lowerLimit;
48  }
49 }
50 
51 double Parameter::getUpperLimit() const
52 {
53  if (_sourceParameter) {
54  return 1E100;
55  }
56  else {
57  return _upperLimit;
58  }
59 }
60 
61 void Parameter::setValue(double value)
62 {
63  if (_sourceParameter) {
64  std::cerr
65  << "Warning: Parameter is connected. Function has no effect."
66  << std::endl;
67  }
68  else {
69  _value=value;
70  }
71 }
72 
73 void Parameter::setLowerLimit(double lowerLimit)
74 {
75  if (_sourceParameter) {
76  std::cerr
77  << "Warning: Parameter is connected. Function has no effect."
78  << std::endl;
79  }
80  else {
81  _lowerLimit=lowerLimit;
82  }
83 }
84 
85 void Parameter::setUpperLimit(double upperLimit)
86 {
87  if (_sourceParameter) {
88  std::cerr
89  << "Warning: Parameter is connected. Function has no effect."
90  << std::endl;
91  }
92  else {
93  _upperLimit=upperLimit;
94  }
95 }
96 
97 void Parameter::connectFrom(const AbsParameter * source)
98 {
99  const Parameter *sp = source->parameter();
100  if (sp && sp->_sourceParameter) {
101  connectFrom(sp->_sourceParameter);
102  }
103  else {
104  _sourceParameter = source;
105  }
106 }
107 
108 
109 Parameter::Parameter(const Parameter & right):
110  AbsParameter(right),
111  _name(right._name),
112  _value(right._value),
113  _lowerLimit(right._lowerLimit),
114  _upperLimit(right._upperLimit),
115  _sourceParameter(right._sourceParameter)
116 {
117 }
118 
119 const Parameter & Parameter::operator=(const Parameter &right) {
120  if (this != &right) {
121  _name=right._name;
122  _value=right._value;
123  _lowerLimit=right._lowerLimit;
124  _upperLimit=right._upperLimit;
125  _sourceParameter=right._sourceParameter;
126  }
127  return *this;
128 }
129 
130 } // namespace GeoGenfun
Definition: Abs.h:15