CLHEP VERSION Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // -*- C++ -*- 00002 // $Id: Parameter.cc,v 1.3 2003/09/06 14:04:14 boudreau Exp $ 00003 #include "CLHEP/GenericFunctions/Parameter.hh" 00004 00005 namespace Genfun { 00006 PARAMETER_OBJECT_IMP(Parameter) 00007 00008 Parameter::Parameter(std::string name, double value, double lowerLimit, double upperLimit): 00009 _name(name),_value(value),_lowerLimit(lowerLimit),_upperLimit(upperLimit),_sourceParameter(NULL) 00010 { 00011 } 00012 00013 Parameter::~Parameter() { 00014 } 00015 00016 std::ostream & operator << ( std::ostream & o, const Parameter & p) { 00017 return o << p.getName() << "\t" << " value = " 00018 << p.getValue() << "\t" <<" limits: [" 00019 << p.getLowerLimit() << "," 00020 << p.getUpperLimit() << "]" << std::endl; 00021 } 00022 00023 const std::string & Parameter::getName() const { 00024 return _name; 00025 } 00026 00027 double Parameter::getValue() const 00028 { 00029 if (_sourceParameter) { 00030 return _sourceParameter->getValue(); 00031 } 00032 else { 00033 return _value; 00034 } 00035 } 00036 00037 double Parameter::getLowerLimit() const 00038 { 00039 if (_sourceParameter) { 00040 return -1E-100; 00041 } 00042 else { 00043 return _lowerLimit; 00044 } 00045 } 00046 00047 double Parameter::getUpperLimit() const 00048 { 00049 if (_sourceParameter) { 00050 return 1E100; 00051 } 00052 else { 00053 return _upperLimit; 00054 } 00055 } 00056 00057 void Parameter::setValue(double value) 00058 { 00059 if (_sourceParameter) { 00060 std::cerr 00061 << "Warning: Parameter is connected. Function has no effect." 00062 << std::endl; 00063 } 00064 else { 00065 _value=value; 00066 } 00067 } 00068 00069 void Parameter::setLowerLimit(double lowerLimit) 00070 { 00071 if (_sourceParameter) { 00072 std::cerr 00073 << "Warning: Parameter is connected. Function has no effect." 00074 << std::endl; 00075 } 00076 else { 00077 _lowerLimit=lowerLimit; 00078 } 00079 } 00080 00081 void Parameter::setUpperLimit(double upperLimit) 00082 { 00083 if (_sourceParameter) { 00084 std::cerr 00085 << "Warning: Parameter is connected. Function has no effect." 00086 << std::endl; 00087 } 00088 else { 00089 _upperLimit=upperLimit; 00090 } 00091 } 00092 00093 void Parameter::connectFrom(const AbsParameter * source) 00094 { 00095 const Parameter *sp = source->parameter(); 00096 if (sp && sp->_sourceParameter) { 00097 connectFrom(sp->_sourceParameter); 00098 } 00099 else { 00100 _sourceParameter = source; 00101 } 00102 } 00103 00104 00105 Parameter::Parameter(const Parameter & right): 00106 AbsParameter(right), 00107 _name(right._name), 00108 _value(right._value), 00109 _lowerLimit(right._lowerLimit), 00110 _upperLimit(right._upperLimit), 00111 _sourceParameter(right._sourceParameter) 00112 { 00113 } 00114 00115 const Parameter & Parameter::operator=(const Parameter &right) { 00116 if (this != &right) { 00117 _name=right._name; 00118 _value=right._value; 00119 _lowerLimit=right._lowerLimit; 00120 _upperLimit=right._upperLimit; 00121 _sourceParameter=right._sourceParameter; 00122 } 00123 return *this; 00124 } 00125 00126 } // namespace Genfun