File indexing completed on 2026-08-06 09:24:28
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef HERWIG_Statistic_H
0010 #define HERWIG_Statistic_H
0011 #include <cmath>
0012
0013
0014
0015
0016
0017 namespace Herwig {
0018
0019
0020
0021
0022
0023 class Statistic {
0024
0025 public:
0026
0027
0028
0029
0030 Statistic() : _n(0), _xsum(0.), _x2sum(0.),
0031 _min(-1e100), _max(1e100) {}
0032
0033
0034
0035
0036 double minimum() const { return _min; }
0037
0038
0039
0040
0041 double maximum() const { return _max; }
0042
0043
0044
0045
0046 void operator+=(double input)
0047 {
0048 ++_n;
0049 _xsum += input;
0050 _x2sum += input * input;
0051 if (_min > input || _n == 1) _min = input;
0052 if (_max < input || _n == 1) _max = input;
0053 }
0054
0055
0056
0057
0058 unsigned int numberOfPoints() const { return _n; }
0059
0060
0061
0062
0063 double mean() const
0064 {
0065 return _n > 0 ? _xsum / _n : 0.;
0066 }
0067
0068
0069
0070
0071
0072
0073
0074
0075 double mean_stdDev() const { return std::sqrt(mean_var()); }
0076
0077
0078
0079
0080
0081
0082
0083
0084 double mean_var() const
0085 {
0086 return _n > 1 ? var() / _n : 0.;
0087 }
0088
0089
0090
0091
0092 double stdDev() const { return std::sqrt(var()); }
0093
0094
0095
0096
0097 double var() const
0098 {
0099 return _n > 1 ? ( _x2sum - _xsum*_xsum/_n ) / ( _n - 1 ) : 0.;
0100 }
0101
0102
0103
0104
0105 double total() const { return _xsum; }
0106
0107 private:
0108
0109
0110
0111
0112 unsigned int _n;
0113
0114
0115
0116
0117 double _xsum;
0118
0119
0120
0121
0122 double _x2sum;
0123
0124
0125
0126
0127 double _min;
0128
0129
0130
0131
0132 double _max;
0133 };
0134
0135 }
0136
0137 #endif