1 #include <framework/utilities/TestHelpers.h>
2 #include <framework/utilities/CalcMeanCov.h>
6 #include <gtest/gtest.h>
16 constexpr
int N = 10000;
17 std::vector<double> values(N, 0);
20 for (
double gmean : { -5.0, 0.0, 1.0, 3.5, 150.}) {
21 for (
double gsigma : {0.1, 1.0, 4.2, 25.}) {
22 double sum1(0), sum2(0), sum3(0);
23 for (
int i = 0; i < N; ++i) {
24 const double x = gRandom->Gaus(gmean, gsigma);
29 const double mean = sum1 / N;
30 for (
auto x : values) {
31 const double d = x - mean;
35 const double variance = (sum2 - sum3 * sum3 / N) / N;
36 const double sigma = std::sqrt(variance);
39 EXPECT_FLOAT_EQ(mean, meancov.
getMean());
40 EXPECT_FLOAT_EQ(sigma, meancov.
getStddev());
41 EXPECT_FLOAT_EQ(sum1, meancov.
getSum());
54 constexpr
int N = 10001;
59 for (
int i = 0; i < N; ++i) {
60 meancov.
add(i + 1, i + 13.5, N - i);
62 const double sum1 = (N * N + N) / 2.;
63 const double sum2 = sum1 + 12.5 * N;
64 const double mean1 = (N + 1.0) / 2;
65 const double mean2 = (13.5 + N + 12.5) / 2;
66 const double varia = (N * N - 1.) / 12;
67 const double sigma = std::sqrt(varia);
70 EXPECT_DOUBLE_EQ(mean1, meancov.
getMean<0>());
71 EXPECT_DOUBLE_EQ(mean2, meancov.
getMean<1>());
72 EXPECT_DOUBLE_EQ(mean1, meancov.
getMean<2>());
73 EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<0>());
74 EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<1>());
75 EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<2>());
76 EXPECT_DOUBLE_EQ(sum1, meancov.
getSum<0>());
77 EXPECT_DOUBLE_EQ(sum2, meancov.
getSum<1>());
78 EXPECT_DOUBLE_EQ(sum1, meancov.
getSum<2>());
96 for (
double n : {10, 13, 25}) {
97 for (
double p : {0.1, 0.5, 0.75}) {
98 for (
int k = 0; k <= n; ++k) {
99 const double b = TMath::Binomial(n, k) * std::pow(p, k) * std::pow(1 - p, n - k);
102 EXPECT_DOUBLE_EQ(1.0, meancov.
getEntries()) <<
"n: " << n <<
", p: " << p;
103 EXPECT_DOUBLE_EQ(n * p, meancov.
getMean()) <<
"n: " << n <<
", p: " << p;
104 EXPECT_DOUBLE_EQ(n * p * (1 - p), meancov.
getVariance()) <<
"n: " << n <<
", p: " << p;
116 for (
int i = 0; i < 10000; ++i) {
117 const double weight = gRandom->Uniform(0, 10);
118 values[0] = gRandom->Gaus(0, 1);
119 values[1] = gRandom->Gaus(values[0], 1);
120 values[2] = gRandom->Uniform(-5, 5);
121 templated.
addWeighted(weight, values[0], values[1], values[2]);
143 constexpr
int N = 10000;
148 for (
double gmean : { -5.0, 0.0, 1.0, 3.5, 150.}) {
149 for (
double gsigma : {0.1, 1.0, 4.2, 25.}) {
150 for (
int i = 0; i < N; ++i) {
151 const double x = gRandom->Gaus(gmean, gsigma);
160 EXPECT_FLOAT_EQ(sum.getEntries(), meancov.
getEntries());
161 EXPECT_FLOAT_EQ(sum.getMean(), meancov.
getMean());
162 EXPECT_FLOAT_EQ(sum.getStddev(), meancov.
getStddev());
163 EXPECT_FLOAT_EQ(sum.getSum(), meancov.
getSum());