CLHEP 2.4.6.4
C++ Class Library for High Energy Physics
Loading...
Searching...
No Matches
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
44namespace CLHEP {
45
46/**
47 * @author <[email protected]>
48 * @ingroup random
49 */
50class HepRandom {
51
52public:
53
54 HepRandom();
55 HepRandom(long seed);
56 // Contructors with and without a seed using the default engine
57 // (MixMax).
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 lxr=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
156protected: // -------- Data members ---------
157
158 static const long seedTable[215][2];
159 // Table of seeds
160
161};
162
163std::ostream & operator<< (std::ostream & os, const HepRandom & dist);
164std::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
170using namespace CLHEP;
171#endif
172
173#include "CLHEP/Random/Random.icc"
174
175#endif
static std::ostream & saveDistState(std::ostream &os)
Definition: Random.h:135
static HepRandom * getTheGenerator()
Definition: Random.cc:265
static HepRandomEngine * getTheEngine()
Definition: Random.cc:270
static const long * getTheSeeds()
Definition: Random.cc:251
virtual double operator()()
Definition: Random.cc:211
void flatArray(const int size, double *vect)
Definition: Random.cc:206
void flatArray(HepRandomEngine *theNewEngine, const int size, double *vect)
static std::ostream & saveStaticRandomStates(std::ostream &os)
Definition: Random.cc:300
static std::ostream & saveFullState(std::ostream &os)
Definition: Random.cc:290
virtual HepRandomEngine & engine()
Definition: Random.cc:216
static std::istream & restoreFullState(std::istream &is)
Definition: Random.cc:295
static void restoreEngineStatus(const char filename[]="Config.conf")
Definition: Random.cc:285
static void showEngineStatus()
Definition: Random.cc:308
static std::istream & restoreDistState(std::istream &is)
Definition: Random.h:138
virtual std::istream & get(std::istream &is)
Definition: Random.cc:230
static int createInstance()
Definition: Random.cc:313
static long getTheSeed()
Definition: Random.cc:241
static const long seedTable[215][2]
Definition: Random.h:158
static std::string distributionName()
Definition: Random.h:153
static void setTheSeeds(const long *seeds, int aux=-1)
Definition: Random.cc:246
virtual ~HepRandom()
Definition: Random.cc:198
static void setTheSeed(long seed, int lxr=3)
Definition: Random.cc:236
virtual std::ostream & put(std::ostream &os) const
Definition: Random.cc:229
double flat()
Definition: Random.cc:201
static void setTheEngine(HepRandomEngine *theNewEngine)
Definition: Random.cc:275
double flat(HepRandomEngine *theNewEngine)
virtual std::string name() const
Definition: Random.cc:215
static void saveEngineStatus(const char filename[]="Config.conf")
Definition: Random.cc:280
static void getTheTableSeeds(long *seeds, int index)
Definition: Random.cc:256
static std::istream & restoreStaticRandomStates(std::istream &is)
Definition: Random.cc:304
std::istream & operator>>(std::istream &is, HepRandom &dist)
Definition: Random.cc:225
std::ostream & operator<<(std::ostream &s, const HepDiagMatrix &q)
Definition: DiagMatrix.cc:560