26 #include <boost/version.hpp>
27 #if BOOST_VERSION >= 106700
29 #if BOOST_VERSION >= 107000
30 #include <boost/math/differentiation/finite_difference.hpp>
31 namespace bmd = boost::math::differentiation;
33 #include <boost/math/tools/numerical_differentiation.hpp>
34 namespace bmd = boost::math::tools;
77 return std::make_shared<ManualParameter>(
m_value(source));
87 auto parameter = std::make_shared<EngineParameter>(initial_value,
std::move(converter));
102 template <
typename T>
103 double doubleResolver(
const T&) {
108 template<
typename ... Parameters>
110 FlexibleModelFittingParameterManager& parameter_manager,
111 const SourceInterface& source,
114 auto coordinate_system = source.getProperty<DetectionFrameCoordinates>().getCoordinateSystem();
116 auto calc = [value_calculator, coordinate_system] (decltype(doubleResolver(std::declval<Parameters>()))... params) ->
double {
118 return value_calculator(coordinate_system, materialized);
167 throw Elements::Exception() <<
"Dependent parameters can depend on maximum 10 other parameters";
177 for (
unsigned int i = 0; i < result.
size(); i++) {
179 auto f = [&](
double x) {
180 auto params = param_values;
185 #if BOOST_VERSION >= 106700
186 result[i] = bmd::finite_difference_derivative(f, param_values[i]);
201 for (
auto& dependee : dependees) {
208 assert(dependees.size() == partial_derivatives.size());
209 for (
unsigned int i = 0; i < partial_derivatives.size(); i++) {
210 auto dependee_sigma = dependees[i]->getSigma(parameter_manager, source, free_parameter_sigmas);
211 sigma += partial_derivatives[i] * partial_derivatives[i] * dependee_sigma * dependee_sigma;
static Elements::Logging logger
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
static Logging getLogger(const std::string &name="")
virtual double getValue() const
Class responsible for managing the parameters the least square engine minimizes.
void registerParameter(std::shared_ptr< EngineParameter > parameter)
Registers an EngineParameter to the EngineParameterManager.
T emplace_back(T... args)
std::shared_ptr< DependentParameter< Parameters... > > createDependentParameter(typename DependentParameter< Parameters... >::ValueCalculator value_calculator, Parameters... parameters)
T shared_from_this(T... args)