1 #ifndef NPSTAT_SAMPLEACCUMULATOR_HH_
2 #define NPSTAT_SAMPLEACCUMULATOR_HH_
16 #include "geners/ClassId.hh"
34 typename Precise=
typename PreciseType<Numeric>::type
39 typedef Numeric value_type;
40 typedef Precise precise_type;
45 inline unsigned long count()
const {
return data_.size();}
66 double cdf(Numeric value)
const;
69 unsigned long nBelow(Numeric value)
const;
78 inline Numeric rangeDown()
const
80 inline Numeric rangeUp()
const
89 {
return (
quantile(0.841344746068542949) -
90 quantile(0.158655253931457051))/
static_cast<Numeric
>(2);}
117 inline const Numeric*
data()
const
118 {
return data_.empty() ? 0 : &data_[0];}
137 template <
typename Numeric2,
typename Precise2>
140 template <
typename Num2,
typename Prec2>
154 {data_.push_back(value); sorted_ =
false;}
170 template<
typename Num2>
174 template<
typename Num2>
189 template<
typename Num2>
197 template<
typename Num2>
198 inline SampleAccumulator operator/(
const Num2& r)
const
200 SampleAccumulator acc(*
this);
207 inline void reset() {data_.clear(); sorted_=
true; neverSorted_=
true;}
210 inline void reserve(
const unsigned long n) {data_.reserve(n);}
214 inline gs::ClassId
classId()
const {
return gs::ClassId(*
this);}
215 bool write(std::ostream& of)
const;
218 static const char* classname();
219 static inline unsigned version() {
return 1;}
220 static void restore(
const gs::ClassId&
id, std::istream& in,
221 SampleAccumulator* acc);
225 std::vector<Numeric> data_;
231 inline SampleAccumulator mul2(
const double r)
const
232 {
return operator*(r);}
234 inline SampleAccumulator div2(
const double r)
const
235 {
return operator/(r);}
237 inline SampleAccumulator& imul2(
const double r)
238 {*
this *= r;
return *
this;}
240 inline SampleAccumulator& idiv2(
const double r)
241 {*
this /= r;
return *
this;}
243 inline double cov2(
const SampleAccumulator& other)
const
246 inline double corr2(
const SampleAccumulator& other)
const
247 {
return corr(other);}
249 inline double mean2()
const
252 inline double stdev2()
const
255 inline double meanUncertainty2()
const
258 inline double noThrowMean2(
double d)
const
261 inline double noThrowStdev2(
double d)
const
264 inline double noThrowMeanUncertainty2(
double d)
const
269 typedef SampleAccumulator<float,long double> FloatSampleAccumulator;
270 typedef SampleAccumulator<double,long double> DoubleSampleAccumulator;
273 #include "npstat/stat/SampleAccumulator.icc"
Compile-time deduction of an appropriate precise numeric type.
Definition: SampleAccumulator.hh:37
void accumulate(const Numeric *values, unsigned long n)
void accumulate(const Numeric &value)
Definition: SampleAccumulator.hh:153
unsigned long nBelow(Numeric value) const
void reserve(const unsigned long n)
Definition: SampleAccumulator.hh:210
Precise noThrowMean(const Precise &valueIfNoData) const
Numeric sigmaRange() const
Definition: SampleAccumulator.hh:88
bool operator==(const SampleAccumulator &r) const
unsigned long count() const
Definition: SampleAccumulator.hh:45
double cdf(Numeric value) const
gs::ClassId classId() const
Definition: SampleAccumulator.hh:214
SampleAccumulator & operator/=(const Num2 &r)
void accumulate(const SampleAccumulator &acc)
const Numeric * data() const
Definition: SampleAccumulator.hh:117
bool operator!=(const SampleAccumulator &r) const
Precise noThrowStdev(const Precise &valueIfNoData) const
Numeric quantile(double x) const
Precise noThrowMeanUncertainty(const Precise &valueIfNoData) const
Precise meanUncertainty() const
void reset()
Definition: SampleAccumulator.hh:207
Precise cov(const SampleAccumulator< Numeric2, Precise2 > &other) const
Numeric location() const
Definition: SampleAccumulator.hh:76
SampleAccumulator & operator*=(const Num2 &r)
Definition: AbsArrayProjector.hh:14