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);
75 void Random::initialize(
std::string const &algorithm) {
78 if (_algorithmNames[i] == algorithm) {
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);