21 #ifndef yap_Parameter_h
22 #define yap_Parameter_h
24 #include "fwd/Parameter.h"
58 virtual const size_t size()
const = 0;
61 virtual void setValue(
const std::vector<double>& V) = 0;
71 template <
typename IterType>
74 return std::any_of(first, last,
75 [](
const std::shared_ptr<ParameterBase>& p)
113 virtual typename std::conditional<std::is_fundamental<T>::value,
const T,
const T&>::type
120 virtual void setValue(
typename std::conditional<std::is_fundamental<T>::value,
const T,
const T&>::type val)
131 Parameter&
operator=(
typename std::conditional<std::is_fundamental<T>::value,
const T,
const T&>::type t)
143 template <
typename T>
157 const size_t size()
const {
return 1;}
165 using Parameter::operator=;
178 const size_t size()
const {
return 2;}
184 {
setValue(std::complex<double>(V[0], V[1])); }
186 using Parameter::operator=;
210 std::shared_ptr<ComplexParameter>
parent()
213 using RealParameter::operator=;
218 virtual double component(
const std::complex<double>& c)
const = 0;
221 virtual std::complex<double>
setComponent(
const std::complex<double>& c,
double v)
const = 0;
242 using ComplexComponentParameter::operator=;
247 double component(
const std::complex<double>& c)
const override
251 virtual std::complex<double>
setComponent(
const std::complex<double>& c,
double v)
const override
252 {
return std::complex<double>(v,
imag(c)); }
268 using ComplexComponentParameter::operator=;
273 double component(
const std::complex<double>& c)
const override
277 virtual std::complex<double>
setComponent(
const std::complex<double>& c,
double v)
const override
278 {
return std::complex<double>(
real(c), v); }
283 inline const size_t size(
const ParameterVector& V)
284 {
return std::accumulate(V.begin(), V.end(), size_t(0), [](
size_t& s,
const ParameterVector::value_type & p) {
return s += p->size();}); }
289 template <
class InputIt>
291 { std::vector<double> V(first, first + P.
size()); P.
setValue(V);
return first += (P.
size() - 1); }
294 template <
class InputIt>
295 void set_values(ParameterVector::iterator first_par, ParameterVector::iterator last_par, InputIt first_val, InputIt last_val)
297 while (first_par != last_par and first_val != last_val) {
298 first_val =
set_value(**first_par, first_val);
302 if (first_par != last_par)
307 inline void set_values(ParameterVector& pars,
const std::vector<double>& vals)
308 {
set_values(pars.begin(), pars.end(), vals.begin(), vals.end()); }
ComplexComponentParameter(std::shared_ptr< ComplexParameter > par)
Definition: Parameter.cxx:6
RealIntegralElement real(const ComplexIntegralElement &Z)
Definition: IntegralElement.h:144
double component(const std::complex< double > &c) const override
Definition: Parameter.h:273
VariableStatus VariableStatus_
Status of variable.
Definition: Parameter.h:66
const size_t size() const
Definition: Parameter.h:157
Class holding basic properties of a parameter, but not a value!
Definition: Parameter.h:40
ComplexParameter(const std::complex< double > &t=0)
constructor
Definition: Parameter.h:175
std::string to_string(const Parameter< T > &P)
Definition: Parameter.h:144
VariableStatus
Definition: VariableStatus.h:29
const double value() const override
Definition: Parameter.h:201
Variable is free and has been changed.
const size_t size() const
Definition: Parameter.h:178
Parameter & operator=(typename std::conditional< std::is_fundamental< T >::value, const T, const T & >::type t)
set value by operator
Definition: Parameter.h:131
virtual std::conditional< std::is_fundamental< T >::value, const T, const T & >::type value() const
Definition: Parameter.h:114
virtual double component(const std::complex< double > &c) const =0
T ParameterValue_
Value stored.
Definition: Parameter.h:138
constexpr VariableStatus variable_status(IterType first, IterType last)
Definition: Parameter.h:72
virtual std::complex< double > setComponent(const std::complex< double > &c, double v) const override
Definition: Parameter.h:251
Abstract base allowing access to the components of a ComplexParameter as a RealParameter.
Definition: Parameter.h:193
double component(const std::complex< double > &c) const override
Definition: Parameter.h:247
const VariableStatus variableStatus() const
Definition: Parameter.h:54
RealParameter(double t=0)
constructor
Definition: Parameter.h:154
ImaginaryComponentParameter(std::shared_ptr< ComplexParameter > par)
Definition: Parameter.h:265
void setValue(double val) override
set value by accessing parent
Definition: Parameter.cxx:16
void setValue(const std::vector< double > &V)
Set value from vector.
Definition: Parameter.h:183
const size_t size(const ParameterVector &V)
Definition: Parameter.h:283
std::shared_ptr< ComplexParameter > Parent_
ComplexParameter this object points to a component of.
Definition: Parameter.h:226
RealComponentParameter(std::shared_ptr< ComplexParameter > par)
Definition: Parameter.h:239
std::shared_ptr< ComplexParameter > parent()
Definition: Parameter.h:210
virtual void setValue(typename std::conditional< std::is_fundamental< T >::value, const T, const T & >::type val)
set value
Definition: Parameter.h:120
std::vector< double >::const_iterator set_value(ParameterBase &P, InputIt first)
Definition: Parameter.h:290
Base class for handling YAP exceptions.
Definition: Exceptions.h:39
virtual const size_t size() const =0
ImaginaryParameter accessing imaginary component of ComplexParameter.
Definition: Parameter.h:259
void setValue(const std::vector< double > &V)
Set value from vector.
Definition: Parameter.h:162
virtual void setValue(const std::vector< double > &V)=0
Set value from vector.
virtual std::complex< double > setComponent(const std::complex< double > &c, double v) const =0
Variable is free but has not been changed.
VariableStatus & variableStatus()
Definition: Parameter.h:50
virtual std::complex< double > setComponent(const std::complex< double > &c, double v) const override
Definition: Parameter.h:277
std::string to_string(const CachedValue::Status &S)
streaming operator for CachedValue::Status
Definition: CachedValue.cxx:27
Definition: Parameter.h:170
RealParameter accessing real component of ComplexParameter.
Definition: Parameter.h:233
void set_values(ParameterVector::iterator first_par, ParameterVector::iterator last_par, InputIt first_val, InputIt last_val)
set values in ParameterVector from iterators
Definition: Parameter.h:295
Definition: Parameter.h:149
ParameterBase()
Constructor.
Definition: Parameter.h:45
Template class holding also a value for a parameter.
Definition: Parameter.h:86
Definition: Exceptions.h:99
Parameter & operator=(const Parameter &)=default
copy assignment defaulted
~Parameter()=default
virtual destructor defaulted
RealIntegralElement imag(const ComplexIntegralElement &Z)
Definition: IntegralElement.h:148
Parameter(T t)
Value-assigning constructor.
Definition: Parameter.h:94
Parameter()=default
Default constructor.