Mantid
Loading...
Searching...
No Matches
NDPseudoRandomNumberGenerator.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2012 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
9//------------------------------------------------------------------------------
10// Includes
11//------------------------------------------------------------------------------
12#include "MantidKernel/DllConfig.h"
14#ifndef Q_MOC_RUN
15#include <memory>
16#endif
17
18namespace Mantid {
19namespace Kernel {
28template <typename SingleValueGenerator> class NDPseudoRandomNumberGenerator : public NDRandomNumberGenerator {
29public:
31 NDPseudoRandomNumberGenerator(const unsigned int ndims, const size_t seedValue);
33 NDPseudoRandomNumberGenerator(const unsigned int ndims, const size_t seedValue, const double start, const double end);
34
37
40
43
45 void setSeed(const size_t seedValue);
47 void generateNextPoint() override;
49 void restart() override;
51 void save() override;
54 void restore() override;
55
56private:
58 SingleValueGenerator m_singleValueGen;
59};
60
61//-------------------------------------------------------------------------------------------------------
62// Implementation
63//-------------------------------------------------------------------------------------------------------
64
73template <typename SingleValueGenerator>
75 const size_t seedValue)
76 : NDRandomNumberGenerator(ndims), m_singleValueGen(seedValue) {}
77
89template <typename SingleValueGenerator>
91 const size_t seedValue,
92 const double start, const double end)
93 : NDRandomNumberGenerator(ndims), m_singleValueGen(seedValue, start, end) {}
94
99template <typename SingleValueGenerator>
101 m_singleValueGen.setSeed(seedValue);
102}
103
105template <typename SingleValueGenerator> void NDPseudoRandomNumberGenerator<SingleValueGenerator>::generateNextPoint() {
106 for (unsigned int i = 0; i < numberOfDimensions(); ++i) {
107 this->cacheGeneratedValue(i, m_singleValueGen.nextValue());
108 }
109}
110
114template <typename SingleValueGenerator> void NDPseudoRandomNumberGenerator<SingleValueGenerator>::restart() {
115 m_singleValueGen.restart();
116}
117
119template <typename SingleValueGenerator> void NDPseudoRandomNumberGenerator<SingleValueGenerator>::save() {
120 m_singleValueGen.save();
121}
122
125template <typename SingleValueGenerator> void NDPseudoRandomNumberGenerator<SingleValueGenerator>::restore() {
126 m_singleValueGen.restore();
127}
128} // namespace Kernel
129} // namespace Mantid
Defines an ND pseudo-random number generator.
NDPseudoRandomNumberGenerator & operator=(const NDPseudoRandomNumberGenerator &)=delete
Disable assignment operator.
NDPseudoRandomNumberGenerator(const NDPseudoRandomNumberGenerator &)=delete
Disable copy operator.
void generateNextPoint() override
Generates the next ND point.
void setSeed(const size_t seedValue)
Set the random number seed.
SingleValueGenerator m_singleValueGen
The single value generator.
NDPseudoRandomNumberGenerator()=delete
Disable default constructor.
void save() override
Saves the current state of the generator.
void restore() override
Restores the generator to the last saved point, or the beginning if nothing has been saved.
This class defines an interface for N dimensional random number generators.
Helper class which provides the Collimation Length for SANS instruments.