CLHEP VERSION Reference Documentation
CLHEP Home Page
CLHEP Documentation
CLHEP Bug Reports
Main Page
Namespaces
Classes
Files
File List
File Members
Matrix
CLHEP
Random
Matrix/CLHEP/Random/Random.h
Go to the documentation of this file.
1
// $Id: Random.h,v 1.5 2010/06/16 17:24:53 garren Exp $
2
// -*- C++ -*-
3
//
4
// -----------------------------------------------------------------------
5
// HEP Random
6
// --- HepRandom ---
7
// class header file
8
// -----------------------------------------------------------------------
9
// This file is part of Geant4 (simulation toolkit for HEP).
10
//
11
// It's a singleton instantiated by default within the HEP Random module.
12
// It uses an instantiated HepJamesRandom engine as default algorithm
13
// for pseudo-random number generation. HepRandom defines a static private
14
// data member theGenerator and a set of static inlined methods to manipulate
15
// it. By means of theGenerator the user can change the underlying engine
16
// algorithm, get and set the seeds and use any kind of defined random
17
// distribution.
18
// Distribution classes inherit from HepRandom and define both static and
19
// not-static interfaces.
20
// A static table of uncorrelated seeds is available in this class.
21
// A static method "getTheTableSeeds()" is defined to access a couple of
22
// seeds at a given index in the table.
23
24
// =======================================================================
25
// Gabriele Cosmo - Created: 5th Sep 1995
26
// - Minor update: 17th May 1996
27
// - Poisson now operates on doubles : 31st Oct 1996
28
// - Added methods for engine status: 19th Nov 1996
29
// - Fixed default values to setTheSeed() and
30
// setTheSeeds() static methods: 16th Oct 1997
31
// - Modified HepRandom to act as a singleton, constructors
32
// are kept public for backward compatibility. Added table
33
// of seeds from HepRandomEngine: 19th Mar 1998
34
// - Relocated Poisson and Gauss data and simplified
35
// initialisation of static generator: 5th Jan 1999
36
// =======================================================================
37
38
#ifndef HepRandom_h
39
#define HepRandom_h 1
40
41
#include "CLHEP/Random/defs.h"
42
#include "CLHEP/Random/RandomEngine.h"
43
44
namespace
CLHEP {
45
50
class
HepRandom
{
51
52
public
:
53
54
HepRandom
();
55
HepRandom
(
long
seed);
56
// Contructors with and without a seed using the default engine
57
// (JamesRandom).
58
59
HepRandom
(
HepRandomEngine
& algorithm);
60
HepRandom
(
HepRandomEngine
* algorithm);
61
// Constructor taking an alternative engine as argument. If a pointer is
62
// given the corresponding object will be deleted by the HepRandom
63
// destructor.
64
65
virtual
~HepRandom
();
66
// Destructor
67
68
// implicitly allow compiler-generated copy functions
69
70
double
flat
();
71
// Returns the flat value ( interval ]0...1[ ).
72
73
void
flatArray
(
const
int
size,
double
* vect);
74
// Fills "vect" array of flat random values, given the size.
75
76
inline
double
flat
(
HepRandomEngine
* theNewEngine);
77
// Returns a flat value, given a defined Random Engine.
78
79
inline
void
flatArray
(
HepRandomEngine
* theNewEngine,
80
const
int
size,
double
* vect);
81
// Fills "vect" array of flat random values, given the size
82
// and a defined Random Engine.
83
84
virtual
double
operator()
();
85
// To get a flat random number using the operator ().
86
87
virtual
std::string
name
()
const
;
88
virtual
HepRandomEngine
&
engine
();
89
90
91
virtual
std::ostream &
put
( std::ostream & os )
const
;
92
virtual
std::istream &
get
( std::istream & is );
93
// Save and restore to/from streams
94
95
// --------------------------------------------------
96
// Static member functions using the static generator
97
// --------------------------------------------------
98
99
static
void
setTheSeed
(
long
seed,
int
lux=3);
100
// (Re)Initializes the generator with a seed.
101
102
static
long
getTheSeed
();
103
// Gets the current seed of the current generator.
104
105
static
void
setTheSeeds
(
const
long
* seeds,
int
aux=-1);
106
// (Re)Initializes the generator with a zero terminated list of seeds.
107
108
static
const
long
*
getTheSeeds
();
109
// Gets the current array of seeds of the current generator.
110
111
static
void
getTheTableSeeds
(
long
* seeds,
int
index);
112
// Gets the array of seeds in the static seedTable at "index" position.
113
114
static
HepRandom
*
getTheGenerator
();
115
// Return the current static generator.
116
117
static
void
setTheEngine
(
HepRandomEngine
* theNewEngine);
118
// To set the underlying algorithm object.
119
120
static
HepRandomEngine
*
getTheEngine
();
121
// Returns a pointer to the underlying algorithm object.
122
123
static
void
saveEngineStatus
(
const
char
filename[] =
"Config.conf"
);
124
// Saves to file the current status of the current engine.
125
126
static
void
restoreEngineStatus
(
const
char
filename[] =
"Config.conf"
);
127
// Restores a saved status (if any) for the current engine.
128
129
static
std::ostream&
saveFullState
( std::ostream & os );
130
// Saves to stream the state of the engine and cached data.
131
132
static
std::istream&
restoreFullState
( std::istream & is );
133
// Restores from stream the state of the engine and cached data.
134
135
static
std::ostream&
saveDistState
( std::ostream & os ) {
return
os;}
136
// Saves to stream the state of the cached data.
137
138
static
std::istream&
restoreDistState
( std::istream & is ) {
return
is;}
139
// Restores from stream the state of the cached data.
140
141
static
std::ostream&
saveStaticRandomStates
( std::ostream & os );
142
// Saves to stream the engine and cached data for all distributions.
143
144
static
std::istream&
restoreStaticRandomStates
( std::istream & is );
145
// Restores from stream the engine and cached data for all distributions.
146
147
static
void
showEngineStatus
();
148
// Dumps the current engine status on screen.
149
150
static
int
createInstance
();
151
// used to initialise the default engine
152
153
static
std::string
distributionName
() {
return
"HepRandomEngine"
;}
154
// Provides the name of this distribution class
155
156
protected
:
// -------- Data members ---------
157
158
static
const
long
seedTable
[215][2];
159
// Table of seeds
160
161
};
162
163
std::ostream &
operator<<
(std::ostream & os,
const
HepRandom
& dist);
164
std::istream &
operator>>
(std::istream & is,
HepRandom
& dist);
165
166
}
// namespace CLHEP
167
168
#ifdef ENABLE_BACKWARDS_COMPATIBILITY
169
// backwards compatibility will be enabled ONLY in CLHEP 1.9
170
using namespace
CLHEP;
171
#endif
172
173
#include "CLHEP/Random/Random.icc"
174
175
#endif
Generated on Sun Jun 17 2012 08:08:27 for CLHEP by
1.8.1.1