preCICE v3.2.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Statistics.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <boost/accumulators/accumulators.hpp>
4#include <boost/accumulators/statistics/count.hpp>
5#include <boost/accumulators/statistics/max.hpp>
6#include <boost/accumulators/statistics/mean.hpp>
7#include <boost/accumulators/statistics/min.hpp>
8#include <boost/accumulators/statistics/stats.hpp>
9#include <boost/accumulators/statistics/variance.hpp>
10#include <fmt/ostream.h>
11#include <iosfwd>
12
14
19public:
21 void operator()(double value)
22 {
23 _acc(value);
24 }
25
27 double min() const
28 {
29 return empty() ? std::nan("") : boost::accumulators::extract::min(_acc);
30 }
31
33 double max() const
34 {
35 return empty() ? std::nan("") : boost::accumulators::extract::max(_acc);
36 }
37
39 double mean() const
40 {
41 return empty() ? std::nan("") : boost::accumulators::extract::mean(_acc);
42 }
43
45 double variance() const
46 {
47 return empty() ? std::nan("") : boost::accumulators::extract::variance(_acc);
48 }
49
52 {
53 return boost::accumulators::extract::count(_acc);
54 }
55
57 bool empty() const
58 {
59 return count() == 0;
60 }
61
62private:
63 boost::accumulators::accumulator_set<double, boost::accumulators::stats<
64 boost::accumulators::tag::min,
65 boost::accumulators::tag::max,
66 boost::accumulators::tag::mean,
67 boost::accumulators::tag::lazy_variance>>
69};
70
72{
73 if (accumulator.empty()) {
74 out << "empty";
75 } else {
76 out << "min:" << accumulator.min()
77 << " max:" << accumulator.max()
78 << " avg: " << accumulator.mean()
79 << " var: " << accumulator.variance()
80 << " cnt: " << accumulator.count();
81 }
82 return out;
83}
84
85} // namespace precice::utils::statistics
86
87template <>
88struct fmt::formatter<precice::utils::statistics::DistanceAccumulator> : ostream_formatter {
89};
std::ostream & out
double min() const
Returns the minimum of all accumulated values.
double mean() const
Returns the mean of all accumulated values.
boost::accumulators::accumulator_set< double, boost::accumulators::stats< boost::accumulators::tag::min, boost::accumulators::tag::max, boost::accumulators::tag::mean, boost::accumulators::tag::lazy_variance > > _acc
void operator()(double value)
Accumulates value.
double max() const
Returns the maximum of all accumulated values.
double variance() const
Returns the sample variance based on all accumulated values.
bool empty() const
Returns count == 0.
std::size_t count() const
Returns how many values have been accumulated.
std::ostream & operator<<(std::ostream &out, const DistanceAccumulator &accumulator)
Main namespace of the precice library.
T nan(T... args)