diff --git a/Source/SIMPLib/Math/RadialDistributionFunction.cpp b/Source/SIMPLib/Math/RadialDistributionFunction.cpp index 0b50346a4..64d2bc789 100644 --- a/Source/SIMPLib/Math/RadialDistributionFunction.cpp +++ b/Source/SIMPLib/Math/RadialDistributionFunction.cpp @@ -53,6 +53,15 @@ RadialDistributionFunction::~RadialDistributionFunction() = default; // // ----------------------------------------------------------------------------- std::vector RadialDistributionFunction::GenerateRandomDistribution(float minDistance, float maxDistance, int numBins, std::array& boxdims, std::array& boxres) +{ + return GenerateRandomDistribution(minDistance, maxDistance, numBins, boxdims, boxres, false); +} + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +std::vector RadialDistributionFunction::GenerateRandomDistribution(float minDistance, float maxDistance, int numBins, std::array& boxdims, std::array& boxres, + bool useSeedFromUser, uint64_t userSeedValue) { std::vector freq(numBins, 0); std::vector randomCentroids; @@ -82,14 +91,25 @@ std::vector RadialDistributionFunction::GenerateRandomDistribution(float freq.resize(static_cast(current_num_bins + 1)); - SIMPL_RANDOMNG_NEW(); + std::random_device randomDevice; // Will be used to obtain a seed for the random number engine + std::mt19937_64 generator(randomDevice()); // Standard mersenne_twister_engine seeded with rd() + std::mt19937::result_type seed = userSeedValue; + + if(!useSeedFromUser) + { + seed = static_cast(std::chrono::steady_clock::now().time_since_epoch().count()); + } + + generator.seed(seed); + std::uniform_real_distribution distribution(0.0, 1.0); randomCentroids.resize(largeNumber * 3); // Generating all of the random points and storing their coordinates in randomCentroids for(size_t i = 0; i < largeNumber; i++) { - featureOwnerIdx = static_cast(rg.genrand_res53() * totalpoints); + const auto random = distribution(generator); + featureOwnerIdx = static_cast(random * totalpoints); column = featureOwnerIdx % xpoints; row = (featureOwnerIdx / xpoints) % ypoints; diff --git a/Source/SIMPLib/Math/RadialDistributionFunction.h b/Source/SIMPLib/Math/RadialDistributionFunction.h index 144471447..28687a80d 100644 --- a/Source/SIMPLib/Math/RadialDistributionFunction.h +++ b/Source/SIMPLib/Math/RadialDistributionFunction.h @@ -36,6 +36,7 @@ #pragma once #include +#include #include #include "SIMPLib/SIMPLib.h" @@ -61,6 +62,9 @@ class SIMPLib_EXPORT RadialDistributionFunction */ static std::vector GenerateRandomDistribution(float minDistance, float maxDistance, int numBins, std::array& boxdims, std::array& boxres); + static std::vector GenerateRandomDistribution(float minDistance, float maxDistance, int numBins, std::array& boxdims, std::array& boxres, bool useSeedFromUser, + uint64_t userSeedValue = std::mt19937::default_seed); + protected: RadialDistributionFunction();