1 #ifndef NPSTAT_WEIGHTEDSAMPLEACCUMULATOR_HH_
2 #define NPSTAT_WEIGHTEDSAMPLEACCUMULATOR_HH_
19 #include "geners/ClassId.hh"
30 typename Precise=
typename PreciseType<Numeric>::type
35 typedef Numeric value_type;
36 typedef Precise precise_type;
41 inline double maxWeight()
const {
return maxWeight_;}
48 inline unsigned long ncalls()
const {
return callCount_;}
54 inline unsigned long nfills()
const {
return data_.size();}
81 double cdf(Numeric value)
const;
93 inline Numeric rangeDown()
const
95 inline Numeric rangeUp()
const
104 {
return (
quantile(0.841344746068542949) -
105 quantile(0.158655253931457051))/
static_cast<Numeric
>(2);}
143 inline const std::pair<Numeric,double>*
data()
const
144 {
return data_.empty() ? 0 : &data_[0];}
167 template<
typename Pair>
170 template<
typename Pair>
174 template<
typename Pair>
176 {
accumulate(pair.first, pair.second);
return *
this;}
188 template<
typename Num2>
195 template<
typename Num2>
211 template<
typename Num2>
219 template<
typename Num2>
220 inline WeightedSampleAccumulator operator/(
const Num2& r)
const
222 WeightedSampleAccumulator acc(*
this);
239 inline void reserve(
const unsigned long n) {data_.reserve(n);}
243 inline gs::ClassId
classId()
const {
return gs::ClassId(*
this);}
244 bool write(std::ostream& of)
const;
247 static const char* classname();
248 static inline unsigned version() {
return 1;}
249 static void restore(
const gs::ClassId&
id, std::istream& in,
250 WeightedSampleAccumulator* acc);
253 Precise stdev2(
bool isMeanUncertainty)
const;
255 std::vector<std::pair<Numeric,double> > data_;
259 unsigned long callCount_;
264 inline WeightedSampleAccumulator mul2(
const double r)
const
265 {
return operator*(r);}
267 inline WeightedSampleAccumulator div2(
const double r)
const
268 {
return operator/(r);}
270 inline WeightedSampleAccumulator& imul2(
const double r)
271 {*
this *= r;
return *
this;}
273 inline WeightedSampleAccumulator& idiv2(
const double r)
274 {*
this /= r;
return *
this;}
276 inline WeightedSampleAccumulator& operator+=(
277 const std::pair<Numeric,double>& pair)
278 {
accumulate(pair.first, pair.second);
return *
this;}
280 inline void accumulate(
const std::pair<Numeric,double>* values,
281 const unsigned long n)
286 data_.reserve(data_.size() + n);
287 for (
unsigned long i=0; i<n; ++i)
288 accumulate(values[i].first, values[i].second);
292 inline void accumulate(
const std::vector<std::pair<Numeric,double> >& values)
294 const unsigned long n = values.size();
297 data_.reserve(data_.size() + n);
298 for (
unsigned long i=0; i<n; ++i)
299 accumulate(values[i].first, values[i].second);
305 typedef WeightedSampleAccumulator<float,long double> FloatWeightedSampleAccumulator;
306 typedef WeightedSampleAccumulator<double,long double> DoubleWeightedSampleAccumulator;
309 #include "npstat/stat/WeightedSampleAccumulator.icc"
Compile-time deduction of an appropriate precise numeric type.
Definition: WeightedSampleAccumulator.hh:33
void accumulate(const WeightedSampleAccumulator &acc)
double cdf(Numeric value) const
Precise noThrowStdev(const Precise &valueIfNoData) const
WeightedSampleAccumulator & scaleWeights(double r)
Numeric sigmaRange() const
Definition: WeightedSampleAccumulator.hh:103
Precise noThrowMeanUncertainty(const Precise &valueIfNoData) const
double weightBelow(Numeric value) const
Numeric location() const
Definition: WeightedSampleAccumulator.hh:91
void accumulate(const Numeric &value, double weight)
WeightedSampleAccumulator & operator+=(const WeightedSampleAccumulator &r)
Definition: WeightedSampleAccumulator.hh:180
double maxWeight() const
Definition: WeightedSampleAccumulator.hh:41
unsigned long nfills() const
Definition: WeightedSampleAccumulator.hh:54
WeightedSampleAccumulator & operator/=(const Num2 &r)
double sumOfSquaredWeights() const
double averageWeight() const
void accumulate(const Pair *values, unsigned long n)
void reserve(const unsigned long n)
Definition: WeightedSampleAccumulator.hh:239
gs::ClassId classId() const
Definition: WeightedSampleAccumulator.hh:243
Precise noThrowMean(const Precise &valueIfNoData) const
unsigned long ncalls() const
Definition: WeightedSampleAccumulator.hh:48
bool operator!=(const WeightedSampleAccumulator &r) const
WeightedSampleAccumulator & operator*=(const Num2 &r)
double sumOfWeights() const
bool operator==(const WeightedSampleAccumulator &r) const
const std::pair< Numeric, double > * data() const
Definition: WeightedSampleAccumulator.hh:143
Numeric quantile(double x) const
Precise meanUncertainty() const
Definition: AbsArrayProjector.hh:14