Geant4
9.6.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
geant4_9_6_p02
source
externals
clhep
include
CLHEP
Random
MTwistEngine.h
Go to the documentation of this file.
1
// $Id:$
2
// -*- C++ -*-
3
//
4
// -----------------------------------------------------------------------
5
// HEP Random
6
// --- MTwistEngine ---
7
// class header file
8
// -----------------------------------------------------------------------
9
// A "fast, compact, huge-period generator" based on M. Matsumoto and
10
// T. Nishimura, "Mersenne Twister: A 623-dimensionally equidistributed
11
// uniform pseudorandom number generator", to appear in ACM Trans. on
12
// Modeling and Computer Simulation. It is a twisted GFSR generator
13
// with a Mersenne-prime period of 2^19937-1, uniform on open interval (0,1)
14
// For further information, see http://www.math.keio.ac.jp/~matumoto/emt.html
15
// =======================================================================
16
// Ken Smith - Started initial draft: 14th Jul 1998
17
// - Optimized to get pow() out of flat() method: 21st Jul
18
// - Added conversion operators: 6th Aug 1998
19
// M Fischler - Changes in way powers of two are kept: 16-Sep-1998
20
// Mark Fischler - Methods for distrib. instance save/restore 12/8/04
21
// Mark Fischler methods for anonymous save/restore 12/27/04
22
// =======================================================================
23
24
#ifndef MTwistEngine_h
25
#define MTwistEngine_h
26
27
#include "
CLHEP/Random/RandomEngine.h
"
28
29
namespace
CLHEP {
30
35
class
MTwistEngine
:
public
HepRandomEngine
{
36
37
public
:
38
39
MTwistEngine
();
40
MTwistEngine
(
long
seed );
41
MTwistEngine
(
int
rowIndex,
int
colIndex );
42
MTwistEngine
( std::istream & is );
43
virtual
~MTwistEngine
();
44
// Constructors and destructor.
45
46
double
flat
();
47
// Returns a pseudo random number between 0 and 1 (excluding the end points).
48
49
void
flatArray
(
const
int
size,
double
* vect);
50
// Fills an array "vect" of specified size with flat random values.
51
52
void
setSeed
(
long
seed,
int
);
53
// Sets the state of the algorithm according to seed.
54
55
void
setSeeds
(
const
long
* seeds,
int
);
56
// Sets the state of the algorithm according to the zero terminated
57
// array of seeds. It is allowed to ignore one or many seeds in this array.
58
59
void
saveStatus
(
const
char
filename[] =
"MTwist.conf"
)
const
;
60
// Saves the current engine status in the named file
61
62
void
restoreStatus
(
const
char
filename[] =
"MTwist.conf"
);
63
// Reads from named file the the last saved engine status and restores it.
64
65
void
showStatus
()
const
;
66
// Dumps the current engine status on the screen.
67
68
operator
float();
// returns flat, without worrying about filling bits
69
operator
unsigned
int
();
// 32-bit flat, quickest of all
70
71
virtual
std::ostream &
put
(std::ostream & os)
const
;
72
virtual
std::istream &
get
(std::istream & is);
73
static
std::string
beginTag
( );
74
virtual
std::istream &
getState
( std::istream & is );
75
76
std::string
name
()
const
;
77
static
std::string
engineName
() {
return
"MTwistEngine"
;}
78
79
std::vector<unsigned long>
put
()
const
;
80
bool
get
(
const
std::vector<unsigned long> &
v
);
81
bool
getState
(
const
std::vector<unsigned long> &
v
);
82
83
static
const
unsigned
int
VECTOR_STATE_SIZE
= 626;
84
85
private
:
86
87
unsigned
int
mt[624];
88
int
count624;
89
90
enum
{ NminusM = 227, M = 397, N = 624};
91
static
int
numEngines;
92
static
int
maxIndex;
93
94
};
// MTwistEngine
95
96
}
// namespace CLHEP
97
98
#endif // MTwistEngine_h
Generated on Sat May 25 2013 14:33:06 for Geant4 by
1.8.4