23 namespace ModelFitting {
25 template <
typename DataType,
typename ModelType,
typename WeightType,
typename Comparator>
27 DataType data, ModelType model, WeightType weight, Comparator comparator)
29 m_comparator(
std::move(comparator)), m_residual_no{DataTraits::size(m_data)} {
30 if (DataTraits::size(m_data) != ModelTraits::size(m_model)) {
32 <<
") is different than model size (" << ModelTraits::size(m_model) <<
")";
34 if (DataTraits::size(m_data) != WeightTraits::size(m_weight)) {
36 <<
") is different than weight size (" << WeightTraits::size(m_weight) <<
")";
40 template <
typename DataType,
typename ModelType,
typename WeightType,
typename Comparator>
43 template <
typename DataType,
typename ModelType,
typename WeightType,
typename Comparator>
48 template <
typename DataType,
typename ModelType,
typename WeightType,
typename Comparator>
50 auto data_iter = DataTraits::begin(m_data);
51 auto model_iter = ModelTraits::begin(m_model);
52 auto weight_iter = WeightTraits::begin(m_weight);
55 for (; data_iter!=DataTraits::end(m_data); ++data_iter, ++model_iter, ++weight_iter, ++output_iter) {
56 *output_iter = m_comparator(*data_iter, *model_iter, *weight_iter);
111 template <
typename DataType,
typename ModelType,
typename WeightType,
typename Comparator>
117 WeightType&& weight, Comparator&& comparator) {
124 typename std::remove_reference<ModelType>::type,
125 typename std::remove_reference<WeightType>::type,
127 std::forward<DataType>(data), std::forward<ModelType>(model),
128 std::forward<WeightType>(weight), std::forward<Comparator>(comparator)
std::size_t numberOfResiduals() const override
void populateResidualBlock(IterType output_iter) override
Updates the values where the iterator points with the residuals.
virtual ~DataVsModelResiduals()
Destructor.
DataVsModelResiduals(DataType data, ModelType model, WeightType weight, Comparator comparator)
Constructs a new instance of DataVsModelResiduals.
std::unique_ptr< DataVsModelResiduals< typename std::remove_reference< DataType >::type, typename std::remove_reference< ModelType >::type, typename std::remove_reference< WeightType >::type, typename std::remove_reference< Comparator >::type > > createDataVsModelResiduals(DataType &&data, ModelType &&model, WeightType &&weight, Comparator &&comparator)
ResidualBlockProvider for weighted comparison between data and a model.