2#include <Math/Functor.h>
3#include <Math/Minimizer.h>
4#include <Math/ProbFuncMathCore.h>
28 auto functor = ROOT::Math::Functor{ [&](
const double* raw_pars) ->
double {
return calculate_loss(raw_pars); },
72 auto chi_square_view = std::views::zip_transform(
73 [&](
auto x_val,
auto y_val,
auto y_err) ->
double
81 return residual * residual / y_err / scale;
86 const auto chi_square = std::ranges::fold_left(chi_square_view, 0., std::plus{});
87 return ROOT::Math::chisquared_cdf_c(chi_square,
static_cast<double>(y_errs.size() - 1));
91 -> std::pair<bool, double>
93 const auto residual = std::abs(y_val - (x_val * weight_bias.first) - weight_bias.second);
94 return std::make_pair(residual >
sigma_, residual);
105 const auto weight =
result_.weight.value;
106 const auto bias =
result_.bias.value;
108 return std::ranges::fold_left(std::views::zip_transform(
109 [&](
auto x_val,
auto y_val) ->
double
111 const auto residual = std::abs(y_val - (x_val * weight) - bias);
116 return residual * residual / 2;
HuberRegressor(Config config=Config{}, std::unique_ptr< ROOT::Math::Minimizer > minimizer=std::unique_ptr< ROOT::Math::Minimizer >{ ROOT::Math::Factory::CreateMinimizer("Minuit2") })
std::unique_ptr< ROOT::Math::Minimizer > minimizer_
auto train_from_data(const std::vector< double > &x_vals, const std::vector< double > &y_vals) -> bool
std::span< const double > x_vals_
static constexpr auto n_pars
std::span< const double > y_vals_
void set_par_errors(const double *raw_error_ptr)
auto check_outlier(double x_val, double y_val) const -> std::pair< bool, double >
auto calculate_p_value(const std::vector< double > &y_errs, double scale=1.) -> double
void set_par_values(const double *raw_pars_ptr)
auto calculate_loss(const double *raw_pars) -> double
HuberRegressorConfig Config