Chaste Commit::ca8ccdedf819b6e02855bc0e8e6f50bdecbc5208
|
#include <RandomNumberGenerator.hpp>
Public Member Functions | |
double | StandardNormalRandomDeviate () |
double | NormalRandomDeviate (double mean, double stdDev) |
double | ranf () |
double | GammaRandomDeviate (double shape, double scale) |
double | ExponentialRandomDeviate (double scale) |
unsigned | randMod (unsigned base) |
template<class T > | |
void | Shuffle (std::vector< boost::shared_ptr< T > > &rValues) |
void | Shuffle (unsigned num, std::vector< unsigned > &rValues) |
void | Reseed (unsigned seed) |
Public Member Functions inherited from SerializableSingleton< RandomNumberGenerator > | |
SerializableSingleton< RandomNumberGenerator > * | GetSerializationWrapper () const |
Static Public Member Functions | |
static RandomNumberGenerator * | Instance () |
static void | Destroy () |
Protected Member Functions | |
RandomNumberGenerator () | |
Private Member Functions | |
template<class Archive > | |
void | save (Archive &archive, const unsigned int version) const |
template<class Archive > | |
void | load (Archive &archive, const unsigned int version) |
Private Attributes | |
boost::mt19937 | mMersenneTwisterGenerator |
boost::variate_generator< boost::mt19937 &, boost::uniform_real<> > | mGenerateUnitReal |
boost::variate_generator< boost::mt19937 &, boost::random::normal_distribution_v165<> > | mGenerateStandardNormal |
Static Private Attributes | |
static RandomNumberGenerator * | mpInstance = nullptr |
Friends | |
class | boost::serialization::access |
A special singleton class allowing one to generate different types of random number in a consistent way across platforms and different versions of compilers, standard libraries, and our dependencies. As a result Chaste developers should always use this class to get random numbers rather than accessing C/C++/boost methods directly.
This class is a singleton and an instance should be retrieved with: RandomNumberGenerator* p_gen = RandomNumberGenerator::Instance();
Note for developers that might want to change this class!:
We use boost random number library for random number generation under the hood http://www.boost.org/doc/libs/1_65_0/doc/html/boost_random.html
Generally boost is consistent between our supported versions (listed on https://chaste.cs.ox.ac.uk/trac/wiki/InstallGuides/DependencyVersions) but on a couple of occasions boost has broken backwards compatibility between random numbers for a given seed.
To get around this, we have copied a minimal set of boost's more recent random include headers into the folder global/src/random
If the user is on a recent version of boost, the boost libraries/includes are used by default, if the user is on an older version of boost some of the Chaste copies of newer boost distributions in global/src/random are used instead to give consistent random numbers across boost versions.
Definition at line 81 of file RandomNumberGenerator.hpp.
|
protected |
Protected constructor. Use Instance() to access the random number generator.
Definition at line 47 of file RandomNumberGenerator.cpp.
References mpInstance.
Referenced by Instance().
|
static |
Destroy the current instance of the random number generator. The next call to Instance will create a new instance and re-seed. This method *must* be called before program exit, to avoid a memory leak.
Definition at line 68 of file RandomNumberGenerator.cpp.
References mpInstance.
Referenced by AbstractCellBasedTestSuite::tearDown().
scale | The scale parameter of the exponential distribution from which the random number is drawn, often named lambda |
Definition at line 138 of file RandomNumberGenerator.cpp.
References mMersenneTwisterGenerator.
Referenced by CellCycleTimesGenerator::GenerateCellCycleTimeSequence(), and ExponentialG1GenerationalCellCycleModel::SetG1Duration().
shape | the shape parameter of the gamma distribution from which the random number is drawn |
scale | the scale parameter of the gamma distribution from which the random number is drawn |
Definition at line 124 of file RandomNumberGenerator.cpp.
References mMersenneTwisterGenerator.
Referenced by GammaG1CellCycleModel::SetG1Duration().
|
static |
Definition at line 59 of file RandomNumberGenerator.cpp.
References RandomNumberGenerator(), and mpInstance.
Referenced by AbstractCellBasedSimulation< ELEMENT_DIM, SPACE_DIM >::AbstractCellBasedSimulation(), ImmersedBoundaryPalisadeMeshGenerator::ImmersedBoundaryPalisadeMeshGenerator(), DiffusionForce< DIM >::AddForceContribution(), AbstractImmersedBoundaryForce< DIM >::AddNormalNoiseToNodes(), RandomDirectionCentreBasedDivisionRule< ELEMENT_DIM, SPACE_DIM >::CalculateCellDivisionVector(), CryptCentreBasedDivisionRule< ELEMENT_DIM, SPACE_DIM >::CalculateCellDivisionVector(), RandomDirectionVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), VonMisesVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), CryptVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), CryptShovingCaBasedDivisionRule::CalculateDaughterNodeIndex(), ExclusionCaBasedDivisionRule< SPACE_DIM >::CalculateDaughterNodeIndex(), ShovingCaBasedDivisionRule< SPACE_DIM >::CalculateDaughterNodeIndex(), RandomCellKiller< DIM >::CheckAndLabelSingleCellForApoptosis(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::CheckForRosettes(), EvenlySpaceAlongPath(), CryptCellsGenerator< CELL_CYCLE_MODEL >::Generate(), CellsGenerator< CELL_CYCLE_MODEL, DIM >::GenerateBasicRandom(), CellCycleTimesGenerator::GenerateCellCycleTimeSequence(), StochasticOxygenBasedCellCycleModel::GenerateStochasticG2Duration(), StochasticWntCellCycleModel::GenerateStochasticG2Duration(), HoneycombMeshGenerator::GetCircularMesh(), CryptProjectionStatistics::GetCryptSection(), CryptStatistics::GetCryptSection(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::IdentifySwapType(), CryptSimulationBoundaryCondition< DIM >::ImposeBoundaryCondition(), PlaneBoundaryCondition< ELEMENT_DIM, SPACE_DIM >::ImposeBoundaryCondition(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformProtorosetteResolution(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformRosetteRankDecrease(), TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::PermuteNodes(), BernoulliTrialCellCycleModel::ReadyToDivide(), BiasedBernoulliTrialCellCycleModel::ReadyToDivide(), LabelDependentBernoulliTrialCellCycleModel::ReadyToDivide(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::ReMeshElement(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::ReMeshLamina(), OffLatticeRandomFieldGenerator< SPACE_DIM >::SampleRandomField(), BernoulliTrialCellCycleModel::serialize(), BiasedBernoulliTrialCellCycleModel::serialize(), ExponentialG1GenerationalCellCycleModel::serialize(), GammaG1CellCycleModel::serialize(), LabelDependentBernoulliTrialCellCycleModel::serialize(), StochasticOxygenBasedCellCycleModel::serialize(), UniformCellCycleModel::serialize(), UniformG1GenerationalCellCycleModel::serialize(), RandomCellKiller< DIM >::serialize(), AbstractCellBasedSimulation< ELEMENT_DIM, SPACE_DIM >::serialize(), SimpleWntCellCycleModel::serialize(), StochasticWntCellCycleModel::serialize(), UniformCellCycleModel::SetCellCycleDuration(), ExponentialG1GenerationalCellCycleModel::SetG1Duration(), GammaG1CellCycleModel::SetG1Duration(), UniformG1GenerationalCellCycleModel::SetG1Duration(), SimpleWntCellCycleModel::SetG1Duration(), AbstractCellBasedTestSuite::setUp(), Shuffle(), Shuffle(), CaBasedCellPopulation< DIM >::UpdateCellLocations(), PottsBasedCellPopulation< DIM >::UpdateCellLocations(), SimpleOxygenBasedCellCycleModel::UpdateHypoxicDuration(), NormallyDistributedTargetAreaModifier< DIM >::UpdateTargetAreaOfCell(), and CaBasedCellPopulation< DIM >::WriteVtkResultsToFile().
|
inlineprivate |
Load the RandomNumberGenerator and its member variables.
archive | the archive |
version | the current version of this class |
Definition at line 140 of file RandomNumberGenerator.hpp.
References mGenerateStandardNormal, and mMersenneTwisterGenerator.
mean | the mean of the normal distribution from which the random number is drawn |
stdDev | the standard deviation of the normal distribution from which the random number is drawn |
Definition at line 119 of file RandomNumberGenerator.cpp.
References StandardNormalRandomDeviate().
Referenced by AbstractImmersedBoundaryForce< DIM >::AddNormalNoiseToNodes(), StochasticOxygenBasedCellCycleModel::GenerateStochasticG2Duration(), StochasticWntCellCycleModel::GenerateStochasticG2Duration(), SimpleWntCellCycleModel::SetG1Duration(), and NormallyDistributedTargetAreaModifier< DIM >::UpdateTargetAreaOfCell().
base | the order of the field of positive integers from which the random number is drawn. This should be no greater than INT_MAX |
Definition at line 77 of file RandomNumberGenerator.cpp.
References mMersenneTwisterGenerator, and NEVER_REACHED.
Referenced by CryptShovingCaBasedDivisionRule::CalculateDaughterNodeIndex(), EvenlySpaceAlongPath(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformProtorosetteResolution(), MutableVertexMesh< ELEMENT_DIM, SPACE_DIM >::PerformRosetteRankDecrease(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::ReMeshElement(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::ReMeshLamina(), Shuffle(), Shuffle(), CaBasedCellPopulation< DIM >::UpdateCellLocations(), and PottsBasedCellPopulation< DIM >::UpdateCellLocations().
double RandomNumberGenerator::ranf | ( | ) |
Definition at line 109 of file RandomNumberGenerator.cpp.
References mGenerateUnitReal.
Referenced by ImmersedBoundaryPalisadeMeshGenerator::ImmersedBoundaryPalisadeMeshGenerator(), RandomDirectionCentreBasedDivisionRule< ELEMENT_DIM, SPACE_DIM >::CalculateCellDivisionVector(), CryptCentreBasedDivisionRule< ELEMENT_DIM, SPACE_DIM >::CalculateCellDivisionVector(), RandomDirectionVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), VonMisesVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), CryptVertexBasedDivisionRule< SPACE_DIM >::CalculateCellDivisionVector(), ExclusionCaBasedDivisionRule< SPACE_DIM >::CalculateDaughterNodeIndex(), ShovingCaBasedDivisionRule< SPACE_DIM >::CalculateDaughterNodeIndex(), RandomCellKiller< DIM >::CheckAndLabelSingleCellForApoptosis(), CryptCellsGenerator< CELL_CYCLE_MODEL >::Generate(), CellsGenerator< CELL_CYCLE_MODEL, DIM >::GenerateBasicRandom(), HoneycombMeshGenerator::GetCircularMesh(), CryptProjectionStatistics::GetCryptSection(), CryptStatistics::GetCryptSection(), ImmersedBoundaryMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement(), VertexMesh< ELEMENT_DIM, SPACE_DIM >::GetShortAxisOfElement(), CryptSimulationBoundaryCondition< DIM >::ImposeBoundaryCondition(), PlaneBoundaryCondition< ELEMENT_DIM, SPACE_DIM >::ImposeBoundaryCondition(), BernoulliTrialCellCycleModel::ReadyToDivide(), BiasedBernoulliTrialCellCycleModel::ReadyToDivide(), LabelDependentBernoulliTrialCellCycleModel::ReadyToDivide(), UniformCellCycleModel::SetCellCycleDuration(), UniformG1GenerationalCellCycleModel::SetG1Duration(), CaBasedCellPopulation< DIM >::UpdateCellLocations(), PottsBasedCellPopulation< DIM >::UpdateCellLocations(), SimpleOxygenBasedCellCycleModel::UpdateHypoxicDuration(), and CaBasedCellPopulation< DIM >::WriteVtkResultsToFile().
void RandomNumberGenerator::Reseed | ( | unsigned | seed | ) |
Reseed the random number generator.
seed | the new seed |
Definition at line 153 of file RandomNumberGenerator.cpp.
References mGenerateStandardNormal, mGenerateUnitReal, and mMersenneTwisterGenerator.
Referenced by CellCycleTimesGenerator::GenerateCellCycleTimeSequence(), and AbstractCellBasedTestSuite::setUp().
|
inlineprivate |
Save the RandomNumberGenerator and its member variables.
archive | the archive |
version | the current version of this class |
Definition at line 112 of file RandomNumberGenerator.hpp.
References mGenerateStandardNormal, and mMersenneTwisterGenerator.
|
inline |
Produce a permutation of the integers and non-empty std::vector, using the Knuth-algorithm (also called the Fisher-Yates algorithm), a linear time unbiased method. The values are shuffled in place.
rValues | the initial values and the output permutation of shuffled values. Must be non-empty |
Definition at line 214 of file RandomNumberGenerator.hpp.
References Instance(), and randMod().
Referenced by TetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::PermuteNodes(), CaBasedCellPopulation< DIM >::UpdateCellLocations(), and PottsBasedCellPopulation< DIM >::UpdateCellLocations().
Produce a permutation of the integers 0,1,..,num-1, using the Knuth-algorithm (also called the Fisher-Yates algorithm), a linear time unbiased method. The shuffled values are returned in rValues, which doesn't need to be correctly-sized when passed in.
num | the number of integers to shuffle |
rValues | the output permutation of shuffled values (any initial values ignored) |
Definition at line 164 of file RandomNumberGenerator.cpp.
References Instance(), and randMod().
double RandomNumberGenerator::StandardNormalRandomDeviate | ( | ) |
Definition at line 114 of file RandomNumberGenerator.cpp.
References mGenerateStandardNormal.
Referenced by DiffusionForce< DIM >::AddForceContribution(), and NormalRandomDeviate().
|
friend |
Definition at line 101 of file RandomNumberGenerator.hpp.
|
private |
An adaptor to a standard normal distribution.
Definition at line 94 of file RandomNumberGenerator.hpp.
Referenced by load(), Reseed(), save(), and StandardNormalRandomDeviate().
|
private |
An adaptor to a unit interval distribution.
Definition at line 90 of file RandomNumberGenerator.hpp.
|
private |
The main random number generator.
Definition at line 85 of file RandomNumberGenerator.hpp.
Referenced by ExponentialRandomDeviate(), GammaRandomDeviate(), load(), randMod(), Reseed(), and save().
|
staticprivate |
Pointer to the single instance.
Definition at line 99 of file RandomNumberGenerator.hpp.
Referenced by RandomNumberGenerator(), Destroy(), and Instance().