Rosetta  2020.11
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Typedefs | Functions
numeric::random Namespace Reference

Classes

class  DistributionSampler
 
class  mt19937_RG
 
class  RandomGenerator
 Random number generator system. More...
 
class  ReservoirSampler
 Simple container for keeping K random values. More...
 
class  standard_RG
 Generator based on rand() < clib > function. More...
 
class  uniform_RG
 Uniform random number generator. More...
 
class  WeightedReservoirItem
 
class  WeightedReservoirSampler
 
class  WeightedSampler
 

Typedefs

typedef platform::Size Size
 
typedef
utility::pointer::shared_ptr
< RandomGenerator
RandomGeneratorOP
 
typedef
utility::pointer::shared_ptr
< uniform_RG
uniform_RG_OP
 
typedef
utility::pointer::shared_ptr
< uniform_RG const > 
uniform_RG_COP
 

Functions

static void lshift128 (w128_t *out, const w128_t *in, int shift)
 
static uint32_t ini_func1 (uint32_t x)
 
static uint32_t ini_func2 (uint32_t x)
 
static int sformat_idxof (int i)
 
static void do_recursion (w128_t *r, w128_t *a, w128_t *b, w128_t *c, w128_t *lung)
 
static THREAD_LOCAL
RandomGeneratorOP 
random_generator (nullptr)
 
RandomGeneratorrg ()
 Return the one-per-thread "singleton" random generator. More...
 
double uniform ()
 Generate a random number between 0 and 1. Threadsafe since each thread uses its own random generator. More...
 
double gaussian ()
 Generate a random number pulled from a standard normal – i.e. mean of zero and standard deviation of 1. Threadsafe since each thread uses its own random generator. More...
 
int random_range (int low, int high)
 Return a number uniformly drawn from the inclusive range between low and high. Threadsafe since each thread uses its own random generator. More...
 
uniform_RG_OP createRG (string const &type)
 uniform_RG factory More...
 
template<typename T >
xyzVector< Trandom_point_on_unit_sphere (RandomGenerator &RG)
 
template<typename T >
T random_rotation_angle (T rot_mag, RandomGenerator &RG)
 gamma-distribution-like random angle generation, rot_mag makes exactly the same sense as in gaussian_move More...
 
template<typename T >
xyzVector< Trandom_translation (T trans_mag, RandomGenerator &RG)
 produce a random translation in xyz space More...
 
template<typename T >
platform::Size binary_search_cdf (utility::vector1< T > const &cdf, T urn)
 Return the index in the CDF array such that it is smaller than or equal to the uniform-random-number (urn) and that the next entry in the array is larger than urn. The CDF ought to represent the exclusive cumulative sum of the probabilities of some discrete set so that the width for entry i – the gap between entry i and entry i+1 should be the probability of entry i. More...
 
template<typename T >
platform::Size pick_random_index_from_cdf (utility::vector1< T > const &cdf, RandomGenerator &RG)
 Choose an element from an array of positions representing the cumulative distribution function for some target distribution. This uses binary search to quickly find the target index. If any position has the same probability as the preceeding position, then its index won't be returned. More...
 
template<class T >
void random_permutation (utility::vector1< T > &vect, RandomGenerator &rg=numeric::random::rg())
 
template<class T >
void random_permutation (utility::vector0< T > &vect, RandomGenerator &rg=numeric::random::rg())
 
template<class T >
void random_permutation (std::vector< T > &vect, RandomGenerator &rg=numeric::random::rg())
 
template<typename RandomAccessIterator >
void random_permutation (RandomAccessIterator first, RandomAccessIterator last, RandomGenerator &rg=numeric::random::rg())
 randomly shuffle elements of a sequence More...
 
xyzVector< Realuniform_vector_sphere (numeric::Real radius=1)
 A random vector chosen uniformly from the ball (volume enclosed within a sphere) of the given radius around the origin. More...
 
xyzVector< Realrandom_vector_spherical ()
 A random vector chosen with spherical symmetry around the origin. More...
 
xyzVector< Realrandom_vector_unit_cube ()
 A random vector chosen uniformly from within the volume of a unit cube with opposite verticies at (0,0,0) and (1,1,1) More...
 
xyzVector< Realrandom_vector ()
 A random vector chosen with spherical symmetry around the origin. More...
 
xyzVector< Realrandom_normal ()
 A random vector chosens uniformly from the surface of a unit sphere centered on the origin. More...
 
Quaternion< Realrandom_unit_quaternion ()
 
xyzMatrix< Realrandom_rotation ()
 
xyzTransform< Realrandom_xform ()
 
xyzTransform< Realgaussian_random_xform (Real const &angsd, Real const &movsd)
 
numeric::Real reservoir_sample_accept_prob (numeric::Size n_wanted, numeric::Size n_seen)
 Returns the probability that the Nth value in a sequence should be accepted using the reservoir sampling criterion. More...
 
template<typename T >
utility::vector1< Treservoir_sample (utility::vector1< T > const &vec, numeric::Size n_wanted, RandomGenerator &rg=numeric::random::rg())
 
std::ostream & operator<< (std::ostream &out, WeightedSampler const &sampler)
 

Typedef Documentation

typedef utility::pointer::shared_ptr< uniform_RG const > numeric::random::uniform_RG_COP
typedef utility::pointer::shared_ptr< uniform_RG > numeric::random::uniform_RG_OP

Function Documentation

template<typename T >
platform::Size numeric::random::binary_search_cdf ( utility::vector1< T > const &  cdf,
T  urn 
)

Return the index in the CDF array such that it is smaller than or equal to the uniform-random-number (urn) and that the next entry in the array is larger than urn. The CDF ought to represent the exclusive cumulative sum of the probabilities of some discrete set so that the width for entry i – the gap between entry i and entry i+1 should be the probability of entry i.

References utility::lower(), and utility::upper().

Referenced by pick_random_index_from_cdf().

uniform_RG_OP numeric::random::createRG ( string const &  type)
static void numeric::random::do_recursion ( w128_t r,
w128_t a,
w128_t b,
w128_t c,
w128_t lung 
)
inlinestatic

This function represents the recursion formula.

Parameters
routput
aa 128-bit part of the internal state array
ba 128-bit part of the internal state array
ca 128-bit part of the internal state array
lunga 128-bit part of the internal state array

References DSFMT_HIGH_CONST, DSFMT_LOW_MASK, DSFMT_MSK1, DSFMT_MSK2, DSFMT_SL1, DSFMT_SL2, DSFMT_SR1, DSFMT_SR2, lshift128(), W128_T::u, and numeric::crick_equations::x().

Referenced by numeric::random::mt19937_RG::gen_rand_all().

double numeric::random::gaussian ( )

Generate a random number pulled from a standard normal – i.e. mean of zero and standard deviation of 1. Threadsafe since each thread uses its own random generator.

References numeric::random::RandomGenerator::gaussian(), and rg().

Referenced by fit_helix_in_map(), gaussian_random_xform(), and random_vector_spherical().

numeric::xyzTransform< numeric::Real > numeric::random::gaussian_random_xform ( Real const &  angsd,
Real const &  movsd 
)
static uint32_t numeric::random::ini_func1 ( uint32_t  x)
inlinestatic

This function represents a function used in the initialization by init_by_array

Parameters
x32-bit integer
Returns
32-bit integer

Referenced by numeric::random::mt19937_RG::init_by_array().

static uint32_t numeric::random::ini_func2 ( uint32_t  x)
inlinestatic

This function represents a function used in the initialization by init_by_array

Parameters
x32-bit integer
Returns
32-bit integer

Referenced by numeric::random::mt19937_RG::init_by_array().

static void numeric::random::lshift128 ( w128_t out,
const w128_t in,
int  shift 
)
inlinestatic

This function simulates SIMD 128-bit left shift by the standard C. The 128-bit integer given in in is shifted by (shift * 8) bits. This function simulates the LITTLE ENDIAN SIMD.

Parameters
outthe output of this function
inthe 128-bit data to be shifted
shiftthe shift value

References W128_T::u.

Referenced by do_recursion().

std::ostream & numeric::random::operator<< ( std::ostream &  out,
WeightedSampler const &  sampler 
)
template<typename T >
platform::Size numeric::random::pick_random_index_from_cdf ( utility::vector1< T > const &  cdf,
RandomGenerator &  RG 
)

Choose an element from an array of positions representing the cumulative distribution function for some target distribution. This uses binary search to quickly find the target index. If any position has the same probability as the preceeding position, then its index won't be returned.

References binary_search_cdf(), and numeric::random::RandomGenerator::uniform().

static THREAD_LOCAL RandomGeneratorOP numeric::random::random_generator ( nullptr  )
static

Referenced by rg().

numeric::xyzVector< numeric::Real > numeric::random::random_normal ( )

A random vector chosens uniformly from the surface of a unit sphere centered on the origin.

References numeric::xyzVector< typename >::is_zero(), and random_vector_spherical().

template<class T >
void numeric::random::random_permutation ( utility::vector1< T > &  vect,
RandomGenerator &  rg = numeric::random::rg() 
)
template<class T >
void numeric::random::random_permutation ( utility::vector0< T > &  vect,
RandomGenerator &  rg = numeric::random::rg() 
)
template<class T >
void numeric::random::random_permutation ( std::vector< T > &  vect,
RandomGenerator &  rg = numeric::random::rg() 
)
template<typename RandomAccessIterator >
void numeric::random::random_permutation ( RandomAccessIterator  first,
RandomAccessIterator  last,
RandomGenerator &  rg = numeric::random::rg() 
)

randomly shuffle elements of a sequence

References rg(), and numeric::random::RandomGenerator::uniform().

template<typename T >
xyzVector< T > numeric::random::random_point_on_unit_sphere ( RandomGenerator &  RG)
inline

generate uniformly distributed vector on the unit sphere

Author
Zhe Zhang
Justin R. Porter generate uniformly distributed unit vector a random normal distribution of coordinates gives a uniform distribution of directions. same functionality as the commented random_point_on_unit_sphere(), but simpler algorithm rename as random_uniform_distributed_direction()?
Zhe Zhang

References numeric::random::RandomGenerator::gaussian(), and numeric::xyzVector< typename >::normalized().

int numeric::random::random_range ( int  low,
int  high 
)

Return a number uniformly drawn from the inclusive range between low and high. Threadsafe since each thread uses its own random generator.

References numeric::random::RandomGenerator::random_range(), and rg().

Referenced by numeric::random::ReservoirSampler< T >::add_value(), main(), apps::pilot::frankdt::main(), DatabaseIOBenchmark::run(), run(), and FragmentAssemblyMover::run().

numeric::xyzMatrix< numeric::Real > numeric::random::random_rotation ( )
template<typename T >
T numeric::random::random_rotation_angle ( T  rot_mag,
RandomGenerator &  RG 
)
inline

gamma-distribution-like random angle generation, rot_mag makes exactly the same sense as in gaussian_move

generate axis and angle for axis-angle rotation for random rotation move in R/RT degrees of freedom. rotation axis: uniformly distributed on unit sphere, rotation angle: chosen to mimic the distribution of rotation angles obtained from gaussian distrbuted Euler angles (core/kinematics/Jump.cc), which is a gamma-distribution-like distribution

Note
gaussian distributed Euler angles do not give unbiased sampling in rotational space by applying this angle to a uniformly chosen rotation axis unbiased rotational sampling is achieved
Author
Zhe Zhang Justin R. Porter

References numeric::random::RandomGenerator::gaussian(), numeric::rotation_axis(), numeric::x_rotation_matrix_degrees(), numeric::y_rotation_matrix_degrees(), and numeric::z_rotation_matrix_degrees().

template<typename T >
xyzVector< T > numeric::random::random_translation ( T  trans_mag,
RandomGenerator &  RG 
)
inline

produce a random translation in xyz space

Author
Zhe Zhang
Justin R. Porter

References numeric::random::RandomGenerator::gaussian().

numeric::Quaternion< numeric::Real > numeric::random::random_unit_quaternion ( )

References numeric::constants::d::pi_2, and uniform().

Referenced by random_rotation().

numeric::xyzVector< numeric::Real > numeric::random::random_vector ( )

A random vector chosen with spherical symmetry around the origin.

Actual distribution is a 3D gaussian with unit variance centered at the origin.

References random_vector_spherical().

numeric::xyzVector< numeric::Real > numeric::random::random_vector_spherical ( )

A random vector chosen with spherical symmetry around the origin.

Actual distribution is a 3D gaussian with unit variance centered at the origin.

References gaussian().

Referenced by random_normal(), random_vector(), and random_xform().

numeric::xyzVector< numeric::Real > numeric::random::random_vector_unit_cube ( )

A random vector chosen uniformly from within the volume of a unit cube with opposite verticies at (0,0,0) and (1,1,1)

References uniform().

numeric::xyzTransform< numeric::Real > numeric::random::random_xform ( )
template<typename T >
utility::vector1< T > numeric::random::reservoir_sample ( utility::vector1< T > const &  vec,
numeric::Size  n_wanted,
RandomGenerator &  rg = numeric::random::rg() 
)
numeric::Real numeric::random::reservoir_sample_accept_prob ( numeric::Size  n_wanted,
numeric::Size  n_seen 
)
inline

Returns the probability that the Nth value in a sequence should be accepted using the reservoir sampling criterion.

If we've seen N values and we want to keep K of them, the probability of the Nth value being accepted is min(K/N,1.0).

References min().

Referenced by numeric::random::ReservoirSampler< T >::add_value(), and reservoir_sample().

RandomGenerator & numeric::random::rg ( )
static int numeric::random::sformat_idxof ( int  i)
inlinestatic

This function simulate a 32-bit array index overlapped to 64-bit array of LITTLE ENDIAN in BIG ENDIAN machine.

Referenced by numeric::random::mt19937_RG::init_by_array(), and numeric::random::mt19937_RG::setSeed().

double numeric::random::uniform ( )
numeric::xyzVector< numeric::Real > numeric::random::uniform_vector_sphere ( numeric::Real  radius)

A random vector chosen uniformly from the ball (volume enclosed within a sphere) of the given radius around the origin.

References numeric::distance(), numeric::constants::ld::pi, uniform(), test.T110_numeric::V, numeric::xyzVector< typename >::x(), numeric::xyzVector< typename >::y(), and numeric::xyzVector< typename >::z().