1 #ifndef NPSTAT_MULTIVARIATEWEIGHTEDSUMACCUMULATOR_HH_
2 #define NPSTAT_MULTIVARIATEWEIGHTEDSUMACCUMULATOR_HH_
27 template<
typename Precise =
long double>
31 typedef Precise precise_type;
35 : weightSum_(), maxWeight_(0.0), dim_(0), ncalls_(0) {}
38 inline Precise
weightSum()
const {
return weightSum_;}
41 inline unsigned long dim()
const {
return dim_;}
44 inline unsigned long ncalls()
const {
return ncalls_;}
47 inline double maxWeight()
const {
return maxWeight_;}
50 inline const Precise*
data()
const
51 {
return dim_ ? &data_[0] : (Precise*)0;}
56 if (!ncalls_)
throw std::runtime_error(
57 "In npstat::MultivariateWeightedSumAccumulator::averageWeight:"
58 " no data accumulated");
59 return weightSum_/ncalls_;
69 if (len != dim_)
throw std::invalid_argument(
70 "In npstat::MultivariateWeightedSumAccumulator::accumulate:"
71 " unexpected data length");
77 if (!len)
throw std::invalid_argument(
78 "In npstat::MultivariateWeightedSumAccumulator::accumulate:"
79 " data length must be positive");
83 if (w < 0.0)
throw std::invalid_argument(
84 "In npstat::MultivariateWeightedSumAccumulator::accumulate:"
85 " weight must be non-negative");
89 Precise* buf = &data_[0];
90 for (
unsigned long i=0; i<len; ++i)
103 weightSum_ = Precise();
110 inline const Precise&
sum(
const unsigned long i)
const
111 {
return data_.at(i);}
114 inline Precise
mean(
const unsigned long i)
const
116 if (weightSum_ == Precise())
throw std::runtime_error(
117 "In npstat::MultivariateWeightedSumAccumulator::mean:"
118 " no data accumulated");
119 return data_.at(i)/weightSum_;
125 if (weightSum_ == Precise())
throw std::runtime_error(
126 "In npstat::MultivariateWeightedSumAccumulator::meanVector:"
127 " no data accumulated");
128 std::vector<Precise> v(data_);
129 Precise* buf = &v[0];
130 for (
unsigned long i=0; i<dim_; ++i)
131 buf[i] /= weightSum_;
136 std::vector<Precise> data_;
140 unsigned long ncalls_;
Definition: MultivariateWeightedSumAccumulator.hh:29
Precise averageWeight() const
Definition: MultivariateWeightedSumAccumulator.hh:54
Precise weightSum() const
Definition: MultivariateWeightedSumAccumulator.hh:38
void accumulate(const T *data, const unsigned long len, const double w)
Definition: MultivariateWeightedSumAccumulator.hh:64
unsigned long ncalls() const
Definition: MultivariateWeightedSumAccumulator.hh:44
double maxWeight() const
Definition: MultivariateWeightedSumAccumulator.hh:47
void reset()
Definition: MultivariateWeightedSumAccumulator.hh:100
const Precise & sum(const unsigned long i) const
Definition: MultivariateWeightedSumAccumulator.hh:110
Precise mean(const unsigned long i) const
Definition: MultivariateWeightedSumAccumulator.hh:114
const Precise * data() const
Definition: MultivariateWeightedSumAccumulator.hh:50
std::vector< Precise > meanVector() const
Definition: MultivariateWeightedSumAccumulator.hh:123
MultivariateWeightedSumAccumulator()
Definition: MultivariateWeightedSumAccumulator.hh:34
unsigned long dim() const
Definition: MultivariateWeightedSumAccumulator.hh:41
Definition: AbsArrayProjector.hh:14