21#include <initializer_list>
34template <std::ranges::input_range R>
35 requires std::is_arithmetic_v<std::ranges::range_value_t<R>>
39 for (
auto x : xs) acc +=
static_cast<double>(x) *
static_cast<double>(x);
40 return std::sqrt(acc);
46 for (
auto x : xs) acc += x * x;
47 return std::sqrt(acc);
61 double x_std,
double sigma_std,
62 double x_var,
double sigma_var)
64 const double s2 = sigma_std * sigma_std;
65 const double v2 = sigma_var * sigma_var;
66 const double denom = std::sqrt(std::fabs(s2 - v2));
67 if (denom == 0.0)
return std::nan(
"");
68 return (x_std - x_var) / denom;
73 double x_std,
double sigma_std,
74 double x_var,
double sigma_var,
75 double threshold = 1.0)
78 if (std::isnan(t))
return true;
79 return std::fabs(t) <= threshold;
95 requires std::is_arithmetic_v<T>
98 std::size_t removed = 0;
102 if (xs.size() < 2)
return removed;
105 for (
auto v : xs) mean +=
static_cast<double>(v);
106 mean /=
static_cast<double>(xs.size());
110 const double d =
static_cast<double>(v) - mean;
113 var /=
static_cast<double>(xs.size());
114 const double sd = std::sqrt(var);
115 if (sd == 0.0)
return removed;
117 const double cut = n_sigma * sd;
118 for (
auto it = xs.begin(); it != xs.end();) {
119 if (std::fabs(
static_cast<double>(*it) - mean) >= cut) {
138[[nodiscard]]
inline std::array<double, 2>
140 double clip_nsigma = 10.0)
142 const double nan = std::nan(
"");
143 std::vector<double> values;
144 values.reserve(measurements.size());
145 for (
const auto& m : measurements) values.push_back(m[0]);
148 if (values.empty())
return {nan, nan};
151 for (
const double v : values) sum += v;
152 const double mean = sum /
static_cast<double>(values.size());
155 for (
const double v : values) {
156 const double d = v - mean;
159 var /=
static_cast<double>(values.size());
160 return {mean, std::sqrt(var)};
bool barlow_passes(double x_std, double sigma_std, double x_var, double sigma_var, double threshold=1.0)
Definition stats.h:72
std::size_t clip_outliers_nsigma(std::vector< T > &xs, double n_sigma=10.0)
Definition stats.h:96
double quadrature_sum(R &&xs)
Definition stats.h:36
std::array< double, 2 > weighted_mean_rms(const std::vector< std::array< double, 2 > > &measurements, double clip_nsigma=10.0)
Definition stats.h:139
double barlow_parameter(double x_std, double sigma_std, double x_var, double sigma_var)
Definition stats.h:60