22 void Parameters::add(
const Parameter& par)
24 if (exists(par.name()))
25 throw std::runtime_error(
"Parameters::add() -> Error. Parameter with the name '"
26 + par.name() +
"' already exists.");
28 m_parameters.push_back(par);
31 Parameters::const_iterator Parameters::begin()
const
33 return m_parameters.begin();
36 Parameters::const_iterator Parameters::end()
const
38 return m_parameters.end();
41 Parameters::iterator Parameters::begin()
43 return m_parameters.begin();
46 Parameters::iterator Parameters::end()
48 return m_parameters.end();
51 size_t Parameters::size()
const
53 return m_parameters.size();
56 std::vector<double> Parameters::values()
const
58 std::vector<double> result;
59 for (
const auto& par : m_parameters)
60 result.push_back(par.value());
64 void Parameters::setValues(
const std::vector<double>& values)
66 check_array_size(values);
69 for (
auto& par : m_parameters) {
70 if (std::isnan(values[index]))
71 throw std::runtime_error(
"Parameters::setValues() -> Error."
72 " Attempt to set nan '"
74 if (std::isinf(values[index]))
75 throw std::runtime_error(
"Parameters::setValues() -> Error. Attempt to set inf '"
77 par.setValue(values[index]);
82 std::vector<double> Parameters::errors()
const
84 std::vector<double> result;
85 for (
const auto& par : m_parameters)
86 result.push_back(par.error());
90 void Parameters::setErrors(
const std::vector<double>& errors)
92 check_array_size(errors);
94 for (
auto& par : m_parameters)
95 par.setError(errors[index++]);
98 const Parameter& Parameters::operator[](
const std::string& name)
const
100 for (
const auto& par : m_parameters)
101 if (par.name() == name)
104 std::ostringstream ostr;
105 ostr <<
"Parameters::operator[] -> Error. No parameter with name '" << name <<
"'. ";
106 ostr <<
"Existing names:\n";
107 for (
const auto& par : m_parameters)
108 ostr << par.name() <<
"\n";
109 throw std::runtime_error(ostr.str());
112 const Parameter& Parameters::operator[](
size_t index)
const
114 return m_parameters[check_index(index)];
117 Parameters::corr_matrix_t Parameters::correlationMatrix()
const
119 return m_corr_matrix;
122 void Parameters::setCorrelationMatrix(
const Parameters::corr_matrix_t& matrix)
124 if (matrix.size() != size())
125 throw std::runtime_error(
"Parameters::setCorrelationMatrix() -> Error. Wrong "
126 "dimension of correlation matrix.");
127 m_corr_matrix = matrix;
135 for (
const auto& par : m_parameters)
136 if (!par.limits().isFixed())
141 bool Parameters::exists(
const std::string& name)
const
143 for (
const auto& par : m_parameters)
144 if (par.name() == name)
149 void Parameters::check_array_size(
const std::vector<double>& values)
const
151 if (values.size() != m_parameters.size()) {
152 std::ostringstream ostr;
153 ostr <<
"Parameters::check_array_size() -> Error. Size of input array " << values.size()
154 <<
" doesn't mach number of fit parameters " << m_parameters.size() <<
"."
156 throw std::runtime_error(ostr.str());
160 size_t Parameters::check_index(
size_t index)
const
162 if (index >= m_parameters.size())
163 throw std::runtime_error(
"Parameters::check_index() -> Index out of bounds");
Defines class Parameters.
A fittable parameter with value, error, step, and limits.
size_t freeParameterCount() const
Returns number of free parameters.
Objective function types.