12#ifndef DATAGENERATOR_H
13#define DATAGENERATOR_H
52template <
typename ValueT,
typename ModelT>
61 template <
typename... Args>
83 while ((
v = mModel(mGenerator)) <
min ||
v >=
max) {
84 if (trials++ > 1000) {
86 throw std::range_error(
"random value outside configured range for too many trials");
111 template <
class ContainerT>
120 using pointer =
typename ContainerT::value_type*;
127 if (mCount < mParent.nbins) {
145 if (copy.mCount +
n < mParent.nbins) {
148 copy.mCount = mParent.nbins;
161 const ContainerT& mParent;
181template <
class RealType =
double,
class _BASE = std::normal_distribution<RealType>>
199 template <
typename value_type>
211template <
class IntType =
int,
class _BASE = std::poisson_distribution<IntType>>
225 template <
typename value_type>
240template <
class IntType =
int,
class _BASE = std::geometric_distribution<IntType>>
249 template <
typename value_type>
uint64_t exp(uint64_t base, uint8_t exp) noexcept
bool operator==(const self_type &other) const
iterator(const ContainerT &parent, size_type count=0)
bool operator!=(const self_type &other) const
self_type operator++(int)
typename std::iterator_traits< pointer >::difference_type difference_type
typename ContainerT::value_type * pointer
std::forward_iterator_tag iterator_category
self_type operator+(size_type n) const
typename ContainerT::value_type & reference
value_type operator()()
get next random value
std::default_random_engine random_engine
double getProbability(value_type v) const
get theoretical probability of a value
value_type getMax() const
get maximum value
value_type getRandom() const
get next random value
iterator< self_type > end()
return forward iterator to the end of bins
iterator< self_type > begin()
return forward iterator to begin of bins
DataGenerator & operator=(const DataGenerator &)=default
DataGenerator(result_type _min, result_type _max, result_type _step, Args &&... args)
DataGenerator(const DataGenerator &)=default
value_type getMin() const
get minimum value
specialization of std::geometric_distribution which implements also the analytic formula.
geometric_distribution(float _parameter)
double getProbability(value_type v) const
get theoretical probability of a value
specialization of std::normal_distribution which implements also the analytic formula.
typename _BASE::result_type result_type
normal_distribution(result_type _mean, result_type _stddev)
double getProbability(value_type v) const
get theoretical probability of a value
specialization of std::poisson_distribution which implements also the analytic formula.
double getProbability(value_type v) const
get theoretical probability of a value
~poisson_distribution()=default
int factorial(unsigned int n) const
typename _BASE::result_type result_type
poisson_distribution(result_type _mean)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
FIXME: do not use data model tables.
VectorOfTObjectPtrs other