fix use of Mersenne Twister in normal raster alg

This commit is contained in:
root676 2020-04-19 15:06:55 +02:00 committed by Nyall Dawson
parent f3aa8af6b2
commit e6c7728b1a
2 changed files with 7 additions and 8 deletions

View File

@ -113,13 +113,16 @@ bool QgsNormalRasterAlgorithm::prepareAlgorithm( const QVariantMap &parameters,
mMean = parameterAsDouble( parameters, QStringLiteral( "MEAN" ), context );
mStdev = parameterAsDouble( parameters, QStringLiteral( "STDEV" ), context );
mNormalDoubleDistribution = std::normal_distribution<double>( mMean, mStdev );
return true;
}
QVariantMap QgsNormalRasterAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
{
std::random_device rd {};
std::mt19937 mersenneTwister{rd()};
std::normal_distribution<double> normalDoubleDistribution = std::normal_distribution<double>( mMean, mStdev );
const QString outputFile = parameterAsOutputLayer( parameters, QStringLiteral( "OUTPUT" ), context );
QFileInfo fi( outputFile );
const QString outputFormat = QgsRasterFileWriter::driverForExtension( fi.suffix() );
@ -157,7 +160,7 @@ QVariantMap QgsNormalRasterAlgorithm::processAlgorithm( const QVariantMap &param
std::vector<float> float32Row( cols );
for ( int col = 0; col < cols; col++ )
{
float32Row[col] = static_cast<float>( mNormalDoubleDistribution( mRandomDevice ) );
float32Row[col] = static_cast<float>( normalDoubleDistribution( mersenneTwister ) );
}
block.setData( QByteArray( reinterpret_cast<const char *>( float32Row.data() ), QgsRasterBlock::typeSize( Qgis::Float32 ) * cols ) );
break;
@ -167,7 +170,7 @@ QVariantMap QgsNormalRasterAlgorithm::processAlgorithm( const QVariantMap &param
std::vector<double> float64Row( cols );
for ( int col = 0; col < cols; col++ )
{
float64Row[col] = mNormalDoubleDistribution( mRandomDevice );
float64Row[col] = normalDoubleDistribution( mersenneTwister );
}
block.setData( QByteArray( reinterpret_cast<const char *>( float64Row.data() ), QgsRasterBlock::typeSize( Qgis::Float64 ) * cols ) );
break;

View File

@ -56,13 +56,9 @@ class QgsNormalRasterAlgorithm : public QgsProcessingAlgorithm
double mPixelSize;
Qgis::DataType mRasterDataType;
int mTypeId;
std::random_device mRandomDevice;
std::mt19937 mMersenneTwister;
double mMean;
double mStdev;
std::normal_distribution<double> mNormalDoubleDistribution;
};
///@endcond PRIVATE