Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
Random.h
Go to the documentation of this file.
1// $Id:$
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
42
43namespace CLHEP {
44
45/**
46 * @author <[email protected]>
47 * @ingroup random
48 */
49class HepRandom {
50
51public:
52
53 HepRandom();
54 HepRandom(long seed);
55 // Contructors with and without a seed using the default engine
56 // (JamesRandom).
57
58 HepRandom(HepRandomEngine & algorithm);
59 HepRandom(HepRandomEngine * algorithm);
60 // Constructor taking an alternative engine as argument. If a pointer is
61 // given the corresponding object will be deleted by the HepRandom
62 // destructor.
63
64 virtual ~HepRandom();
65 // Destructor
66
67 // implicitly allow compiler-generated copy functions
68
69 double flat();
70 // Returns the flat value ( interval ]0...1[ ).
71
72 void flatArray(const int size, double* vect);
73 // Fills "vect" array of flat random values, given the size.
74
75 inline double flat (HepRandomEngine* theNewEngine);
76 // Returns a flat value, given a defined Random Engine.
77
78 inline void flatArray(HepRandomEngine* theNewEngine,
79 const int size, double* vect);
80 // Fills "vect" array of flat random values, given the size
81 // and a defined Random Engine.
82
83 virtual double operator()();
84 // To get a flat random number using the operator ().
85
86 virtual std::string name() const;
87 virtual HepRandomEngine & engine();
88
89
90 virtual std::ostream & put ( std::ostream & os ) const;
91 virtual std::istream & get ( std::istream & is );
92 // Save and restore to/from streams
93
94 // --------------------------------------------------
95 // Static member functions using the static generator
96 // --------------------------------------------------
97
98 static void setTheSeed(long seed, int lux=3);
99 // (Re)Initializes the generator with a seed.
100
101 static long getTheSeed();
102 // Gets the current seed of the current generator.
103
104 static void setTheSeeds(const long* seeds, int aux=-1);
105 // (Re)Initializes the generator with a zero terminated list of seeds.
106
107 static const long* getTheSeeds();
108 // Gets the current array of seeds of the current generator.
109
110 static void getTheTableSeeds (long* seeds, int index);
111 // Gets the array of seeds in the static seedTable at "index" position.
112
113 static HepRandom * getTheGenerator();
114 // Return the current static generator.
115
116 static void setTheEngine (HepRandomEngine* theNewEngine);
117 // To set the underlying algorithm object.
118
119 static HepRandomEngine * getTheEngine();
120 // Returns a pointer to the underlying algorithm object.
121
122 static void saveEngineStatus( const char filename[] = "Config.conf" );
123 // Saves to file the current status of the current engine.
124
125 static void restoreEngineStatus( const char filename[] = "Config.conf" );
126 // Restores a saved status (if any) for the current engine.
127
128 static std::ostream& saveFullState ( std::ostream & os );
129 // Saves to stream the state of the engine and cached data.
130
131 static std::istream& restoreFullState ( std::istream & is );
132 // Restores from stream the state of the engine and cached data.
133
134 static std::ostream& saveDistState ( std::ostream & os ) {return os;}
135 // Saves to stream the state of the cached data.
136
137 static std::istream& restoreDistState ( std::istream & is ) {return is;}
138 // Restores from stream the state of the cached data.
139
140 static std::ostream& saveStaticRandomStates ( std::ostream & os );
141 // Saves to stream the engine and cached data for all distributions.
142
143 static std::istream& restoreStaticRandomStates ( std::istream & is );
144 // Restores from stream the engine and cached data for all distributions.
145
146 static void showEngineStatus();
147 // Dumps the current engine status on screen.
148
149 static int createInstance();
150 // used to initialise the default engine
151
152 static std::string distributionName() {return "HepRandomEngine";}
153 // Provides the name of this distribution class
154
155protected: // -------- Data members ---------
156
157 static const long seedTable[215][2];
158 // Table of seeds
159
160};
161
162std::ostream & operator<< (std::ostream & os, const HepRandom & dist);
163std::istream & operator>> (std::istream & is, HepRandom & dist);
164
165} // namespace CLHEP
166
167#include "CLHEP/Random/Random.icc"
168
169#endif
static std::ostream & saveDistState(std::ostream &os)
Definition: Random.h:134
static HepRandom * getTheGenerator()
Definition: Random.cc:160
static HepRandomEngine * getTheEngine()
Definition: Random.cc:165
static const long * getTheSeeds()
Definition: Random.cc:146
virtual double operator()()
Definition: Random.cc:106
void flatArray(const int size, double *vect)
Definition: Random.cc:101
void flatArray(HepRandomEngine *theNewEngine, const int size, double *vect)
static std::ostream & saveStaticRandomStates(std::ostream &os)
Definition: Random.cc:195
static std::ostream & saveFullState(std::ostream &os)
Definition: Random.cc:185
virtual HepRandomEngine & engine()
Definition: Random.cc:111
static std::istream & restoreFullState(std::istream &is)
Definition: Random.cc:190
static void restoreEngineStatus(const char filename[]="Config.conf")
Definition: Random.cc:180
static void showEngineStatus()
Definition: Random.cc:203
static std::istream & restoreDistState(std::istream &is)
Definition: Random.h:137
virtual std::istream & get(std::istream &is)
Definition: Random.cc:125
static int createInstance()
Definition: Random.cc:208
static long getTheSeed()
Definition: Random.cc:136
static const long seedTable[215][2]
Definition: Random.h:157
static std::string distributionName()
Definition: Random.h:152
static void setTheSeeds(const long *seeds, int aux=-1)
Definition: Random.cc:141
virtual ~HepRandom()
Definition: Random.cc:93
virtual std::ostream & put(std::ostream &os) const
Definition: Random.cc:124
double flat()
Definition: Random.cc:96
static void setTheEngine(HepRandomEngine *theNewEngine)
Definition: Random.cc:170
double flat(HepRandomEngine *theNewEngine)
static void setTheSeed(long seed, int lux=3)
Definition: Random.cc:131
virtual std::string name() const
Definition: Random.cc:110
static void saveEngineStatus(const char filename[]="Config.conf")
Definition: Random.cc:175
static void getTheTableSeeds(long *seeds, int index)
Definition: Random.cc:151
static std::istream & restoreStaticRandomStates(std::istream &is)
Definition: Random.cc:199
Definition: DoubConv.h:17
std::istream & operator>>(std::istream &is, HepRandom &dist)
Definition: Random.cc:120
std::ostream & operator<<(std::ostream &os, const HepRandom &dist)
Definition: Random.cc:116