AmpGen
2.1
Toggle main menu visibility
Loading...
Searching...
No Matches
DiscreteDistribution.h
Go to the documentation of this file.
1
#ifndef AMPGEN_DISCRETEDISTRIBUTION_H
2
#define AMPGEN_DISCRETEDISTRIBUTION_H 1
3
4
#include <vector>
5
#include <stack>
6
#include <tuple>
7
#include "TRandom3.h"
8
#include <math.h>
9
10
// Generator of discrete distributions,
11
// based on https://github.com/DavidPal/discrete-distribution
12
// But modified to work with TRandom
13
namespace
AmpGen
{
14
class
DiscreteDistribution
{
15
public
:
16
DiscreteDistribution
() =
default
;
17
DiscreteDistribution
(
const
std::vector<double> &weights);
18
19
unsigned
operator()
(TRandom3 *generator)
const
{
20
const
double
number = generator->Uniform();
21
size_t
index = std::floor(m_buckets.size() * number);
22
const
auto
&bucket = m_buckets[index];
23
return
number < std::get<2>(bucket) ? std::get<0>(bucket) : std::get<1>(bucket);
24
}
25
26
unsigned
min
()
const
;
27
unsigned
max
()
const
;
28
29
const
std::vector<double> &
probabilities
()
const
;
30
31
private
:
32
void
create_buckets();
33
std::vector<double> m_probabilities;
34
std::vector<std::tuple<unsigned, unsigned, double>> m_buckets;
35
};
36
}
37
38
#endif
AmpGen::DiscreteDistribution::probabilities
const std::vector< double > & probabilities() const
AmpGen::DiscreteDistribution::DiscreteDistribution
DiscreteDistribution()=default
AmpGen::DiscreteDistribution::operator()
unsigned operator()(TRandom3 *generator) const
Definition
DiscreteDistribution.h:19
AmpGen::DiscreteDistribution::max
unsigned max() const
AmpGen::DiscreteDistribution::DiscreteDistribution
DiscreteDistribution(const std::vector< double > &weights)
AmpGen::DiscreteDistribution::min
unsigned min() const
AmpGen
Definition
AddCPConjugate.h:2
AmpGen
DiscreteDistribution.h
Generated on
for AmpGen by
1.17.0