23 #ifndef MODELFITTING_DEPENDENTPARAMETER_H
24 #define MODELFITTING_DEPENDENTPARAMETER_H
31 namespace ModelFitting {
47 template<
typename... Parameters>
52 static constexpr
int PARAM_NO =
sizeof...(Parameters);
90 template<
typename First,
typename ... Rest>
96 template<
typename Last>
107 template <
typename... ParamValues>
119 template<
typename Param>
121 param->addObserver([
this](
double v){
130 template<
typename ... Parameters>
void update(decltype(std::declval< Parameters >() ->getValue())...values)
Implementation of a parameter depending on an arbitrary number of other parameters.
The parameter base class.
void update(ParamValues...values)
std::shared_ptr< ValueCalculator > m_calculator
function to calculate the dependent parameter value
void addParameterObserver(int i, Param ¶m)
virtual void setValue(const double new_value)
std::shared_ptr< DependentParameter< Parameters...> > createDependentParameter(typename DependentParameter< Parameters...>::ValueCalculator value_calculator, Parameters...parameters)
double getValue() const override
std::shared_ptr< std::array< std::shared_ptr< BasicParameter >, PARAM_NO > > m_params
virtual ~DependentParameter()=default
std::function< double(decltype(std::declval< Parameters >() ->getValue())...)> ValueCalculator
void inputParameterLoop(Last &last)
void inputParameterLoop(First &first, Rest &...rest)
DependentParameter(ValueCalculator calculator, Parameters...parameters)
static constexpr int PARAM_NO