32 #include "boost/format.hpp" 34 #include "gsl/gsl_errno.h" 35 #include "gsl/gsl_randist.h" 50 ::gsl_rng_mt19937, ::gsl_rng_ranlxs0, ::gsl_rng_ranlxs1, ::gsl_rng_ranlxs2, ::gsl_rng_ranlxd1,
51 ::gsl_rng_ranlxd2, ::gsl_rng_ranlux, ::gsl_rng_ranlux389, ::gsl_rng_cmrg, ::gsl_rng_mrg,
52 ::gsl_rng_taus, ::gsl_rng_taus2, ::gsl_rng_gfsr4};
55 "MT19937",
"RANLXS0",
"RANLXS1",
"RANLXS2",
"RANLXD1",
"RANLXD2",
"RANLUX",
56 "RANLUX389",
"CMRG",
"MRG",
"TAUS",
"TAUS2",
"GFSR4"};
58 char const *
const Random::_algorithmEnvVarName =
"LSST_RNG_ALGORITHM";
59 char const *
const Random::_seedEnvVarName =
"LSST_RNG_SEED";
63 void Random::initialize() {
64 ::gsl_rng *rng = ::gsl_rng_alloc(_gslRngTypes[_algorithm]);
71 ::gsl_rng_set(rng, useSeed);
72 _rng.
reset(rng, ::gsl_rng_free);
78 if (_algorithmNames[i] == algorithm) {
90 if (_algorithm < 0 || _algorithm >= NUM_ALGORITHMS) {
97 initialize(algorithm);
102 rng._rng.
reset(::gsl_rng_clone(_rng.
get()), ::gsl_rng_free);
117 (
boost::format(
"Size of given state vector (%d) does not match expected size (%d)") %
134 if (names.
size() == 0) {
151 if (n > ::gsl_rng_max(_rng.
get()) - ::gsl_rng_min(_rng.
get())) {
154 return ::gsl_rng_uniform_int(_rng.
get(), n);
double poisson(double const mu)
Returns a random variate from the poisson distribution with mean mu.
std::string State
Accessors for the opaque state of the random number generator.
State getState() const
Accessors for the opaque state of the random number generator.
Random(Algorithm algorithm=MT19937, unsigned long seed=1)
Creates a random number generator that uses the given algorithm to produce random numbers...
static std::vector< std::string > const & getAlgorithmNames()
Reports attempts to exceed implementation-defined length limits for some classes. ...
std::string getAlgorithmName() const
unsigned long uniformInt(unsigned long n)
Returns a uniformly distributed random integer from 0 to n-1.
Number of supported algorithms.
void setState(State const &state)
Accessors for the opaque state of the random number generator.
A base class for image defects.
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
double chisq(double const nu)
Returns a random variate from the chi-squared distribution with nu degrees of freedom.
double flat(double const a, double const b)
Returns a random variate from the flat (uniform) distribution on [a, b).
unsigned long getSeed() const
double gaussian()
Returns a gaussian random variate with mean 0 and standard deviation 1
double uniformPos()
Returns a uniformly distributed random double precision floating point number from the generator...
Random deepCopy() const
Creates a deep copy of this random number generator.
Algorithm
Identifiers for the list of supported algorithms.
std::size_t getStateSize() const
Accessors for the opaque state of the random number generator.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Reports invalid arguments.
Reports when the result of an operation cannot be represented by the destination type.
double uniform()
Returns a uniformly distributed random double precision floating point number from the generator...
Algorithm getAlgorithm() const
A class that can be used to generate sequences of random numbers according to a number of different a...