8#include <framework/utilities/CalcMeanCov.h> 
   12#include <gtest/gtest.h> 
   22    constexpr int N = 10000;
 
   23    std::vector<double> values(N, 0);
 
   26    for (
double gmean : { -5.0, 0.0, 1.0, 3.5, 150.}) {
 
   27      for (
double gsigma : {0.1, 1.0, 4.2, 25.}) {
 
   28        double sum1(0), sum2(0), sum3(0);
 
   29        for (
int i = 0; i < N; ++i) {
 
   30          const double x = gRandom->Gaus(gmean, gsigma);
 
   35        const double mean = sum1 / N;
 
   36        for (
auto x : values) {
 
   37          const double d = x - mean;
 
   41        const double variance = (sum2 - sum3 * sum3 / N) / N;
 
   42        const double sigma = std::sqrt(variance);
 
   45        EXPECT_FLOAT_EQ(mean, meancov.
getMean());
 
   46        EXPECT_FLOAT_EQ(sigma, meancov.
getStddev());
 
   47        EXPECT_FLOAT_EQ(sum1, meancov.
getSum());
 
   60    constexpr int N = 10001;
 
   65    for (
int i = 0; i < N; ++i) {
 
   66      meancov.
add(i + 1, i + 13.5, N - i);
 
   68    const double sum1 = (N * N + N) / 2.;
 
   69    const double sum2 = sum1 + 12.5 * N;
 
   70    const double mean1 = (N + 1.0) / 2;
 
   71    const double mean2 = (13.5 + N + 12.5) / 2;
 
   72    const double varia = (N * N - 1.) / 12;
 
   73    const double sigma = std::sqrt(varia);
 
   76    EXPECT_DOUBLE_EQ(mean1, meancov.
getMean<0>());
 
   77    EXPECT_DOUBLE_EQ(mean2, meancov.
getMean<1>());
 
   78    EXPECT_DOUBLE_EQ(mean1, meancov.
getMean<2>());
 
   79    EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<0>());
 
   80    EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<1>());
 
   81    EXPECT_DOUBLE_EQ(sigma, meancov.
getStddev<2>());
 
   82    EXPECT_DOUBLE_EQ(sum1, meancov.
getSum<0>());
 
   83    EXPECT_DOUBLE_EQ(sum2, meancov.
getSum<1>());
 
   84    EXPECT_DOUBLE_EQ(sum1, meancov.
getSum<2>());
 
  102    for (
double n : {10, 13, 25}) {
 
  103      for (
double p : {0.1, 0.5, 0.75}) {
 
  104        for (
int k = 0; k <= n; ++k) {
 
  105          const double b = TMath::Binomial(n, k) * std::pow(p, k) * std::pow(1 - p, n - k);
 
  108        EXPECT_DOUBLE_EQ(1.0, meancov.
getEntries()) << 
"n: " << n << 
", p: " << p;
 
  109        EXPECT_DOUBLE_EQ(n * p, meancov.
getMean()) << 
"n: " << n << 
", p: " << p;
 
  110        EXPECT_DOUBLE_EQ(n * p * (1 - p), meancov.
getVariance()) << 
"n: " << n << 
", p: " << p;
 
  122    for (
int i = 0; i < 10000; ++i) {
 
  123      const double weight = gRandom->Uniform(0, 10);
 
  124      values[0] = gRandom->Gaus(0, 1);
 
  125      values[1] = gRandom->Gaus(values[0], 1);
 
  126      values[2] = gRandom->Uniform(-5, 5);
 
  127      templated.
addWeighted(weight, values[0], values[1], values[2]);
 
  149    constexpr int N = 10000;
 
  154    for (
double gmean : { -5.0, 0.0, 1.0, 3.5, 150.}) {
 
  155      for (
double gsigma : {0.1, 1.0, 4.2, 25.}) {
 
  156        for (
int i = 0; i < N; ++i) {
 
  157          const double x = gRandom->Gaus(gmean, gsigma);
 
Class to calculate mean and and covariance between a number of parameters on running data without sto...
void addWeighted(value_type weight, T... values)
Update mean and covariance by adding a new, weighted entry.
value_type getVariance(int i) const
Return the variance for parameter i.
value_type getCorrelation(int i, int j) const
Return the correlation coefficient between parameters i and j.
value_type getStddev(int i) const
Return the standard deviation for parameter i.
value_type getMean(int i) const
Return the mean for parameter i.
value_type getCovariance(int i, int j) const
Return the covariance between parameters i and j.
void addWeightedArray(value_type weight, value_type *values)
Update mean and covarianced by adding a new weighted entry.
value_type getSum(int i) const
Return the weighted sum values for parameter i.
void add(T... values)
Update mean and covariance by adding a new entry.
void clear()
Clear all values.
value_type getEntries() const
Return the number of entries.
Abstract base class for different kinds of events.