CLHEP 2.4.6.4
C++ Class Library for High Energy Physics
Loading...
Searching...
No Matches
RandEngine.h
Go to the documentation of this file.
1// $Id: RandEngine.h,v 1.6 2010/06/16 17:24:53 garren Exp $
2// -*- C++ -*-
3//
4// -----------------------------------------------------------------------
5// HEP Random
6// --- RandEngine ---
7// class header file
8// -----------------------------------------------------------------------
9// This file is part of Geant4 (simulation toolkit for HEP).
10//
11// Simple random engine using rand() and srand() functions from C standard
12// library to implement the flat() basic distribution and for setting
13// seeds.
14// Copy constructor and operator= are private for objects of this class.
15//
16// WARNING: rand is not thread safe. If you need to use multiple
17// engine objects on different threads concurrently, do not use RandEngine
18
19// =======================================================================
20// Gabriele Cosmo - Created: 5th September 1995
21// - Minor corrections: 31st October 1996
22// - Added methods for engine status: 19th November 1996
23// - setSeed(), setSeeds() now have default dummy argument
24// set to zero: 11th July 1997
25// - Private copy constructor and operator=: 26th Feb 1998
26// J.Marraffino - Added stream operators and related constructor.
27// Added automatic seed selection from seed table and
28// engine counter: 15th Feb 1998
29// Ken Smith - Added conversion operators: 6th Aug 1998
30// replace mx by mantissa_bit_32
31// M Fischler - Inserted warnings about the fact that the quality of rand()
32// is quite poor.
33// Mark Fischler Methods for distrib. instance save/restore 12/8/04
34// Mark Fischler methods for anonymous save/restore 12/27/04
35// =======================================================================
36
37#ifndef RandEngine_h
38#define RandEngine_h 1
39
40#include "CLHEP/Random/defs.h"
41#include "CLHEP/Random/RandomEngine.h"
42
43namespace CLHEP {
44
45/**
46 * @author <[email protected]>
47 * @ingroup random
48 */
50
51public:
52
53 RandEngine(std::istream& is);
54 RandEngine();
55 RandEngine(long seed);
56 RandEngine(int rowIndex, int colIndex);
57 virtual ~RandEngine();
58 // Constructors and destructor
59
60 double flat();
61 // It returns a pseudo random number between 0 and 1,
62 // according to the standard stdlib random function rand()
63 // but excluding the end points.
64 //
65 // WARNING: rand() is quite a weak generator on most systems, <
66 // will not pass several randomness tests, and does not give a <
67 // reproducible sequence of numbers. <
68
69 void flatArray (const int size, double* vect);
70 // Fills the array "vect" of specified size with flat random values.
71
72 void setSeed(long seed, int dum=0);
73 // Sets the state of the algorithm according to seed.
74
75 void setSeeds(const long * seeds, int dum=0);
76 // Sets the state of the algorithm according to the zero terminated
77 // array of seeds. Only the first seed is used.
78
79 void saveStatus( const char filename[] = "Rand.conf" ) const;
80 // Saves on file Rand.conf the current engine status.
81 // WARNING: This is non-functional, as rand() on various systems will <
82 // not give reproducible streams. <
83
84 void restoreStatus( const char filename[] = "Rand.conf" );
85 // Reads from file Rand.conf the last saved engine status
86 // and restores it.
87 // WARNING: This is non-functional, as rand() on various systems will <
88 // not give reproducible streams. <
89
90 void showStatus() const;
91 // Dumps the engine status on the screen.
92
93 operator double(); // Returns same as flat()
94 operator float(); // flat value, without worrying about filling bits
95 operator unsigned int(); // 32-bit flat value, quickest of all.
96
97 virtual std::ostream & put (std::ostream & os) const;
98 virtual std::istream & get (std::istream & is);
99 static std::string beginTag ( );
100 virtual std::istream & getState ( std::istream & is );
101
102 std::string name() const;
103 static std::string engineName() {return "RandEngine";}
104
105 std::vector<unsigned long> put () const;
106 bool get (const std::vector<unsigned long> & v);
107 bool getState (const std::vector<unsigned long> & v);
108
109 static const unsigned int VECTOR_STATE_SIZE = 3;
110
111private:
112
113 RandEngine(const RandEngine &p);
114 RandEngine & operator = (const RandEngine &p);
115 // Private copy constructor and assignment operator.
116
117private:
118
119 long seq;
120 static int numEngines;
121 static const int maxIndex;
122
123};
124
125} // namespace CLHEP
126
127#ifdef ENABLE_BACKWARDS_COMPATIBILITY
128// backwards compatibility will be enabled ONLY in CLHEP 1.9
129using namespace CLHEP;
130#endif
131
132#endif
static std::string engineName()
Definition: RandEngine.h:103
virtual std::istream & get(std::istream &is)
Definition: RandEngine.cc:403
void flatArray(const int size, double *vect)
Definition: RandEngine.cc:364
virtual std::istream & getState(std::istream &is)
Definition: RandEngine.cc:429
void saveStatus(const char filename[]="Rand.conf") const
Definition: RandEngine.cc:143
void setSeed(long seed, int dum=0)
Definition: RandEngine.cc:130
static std::string beginTag()
Definition: RandEngine.cc:425
std::vector< unsigned long > put() const
Definition: RandEngine.cc:395
std::string name() const
Definition: RandEngine.cc:77
void restoreStatus(const char filename[]="Rand.conf")
Definition: RandEngine.cc:172
virtual ~RandEngine()
Definition: RandEngine.cc:128
void showStatus() const
Definition: RandEngine.cc:217
static const unsigned int VECTOR_STATE_SIZE
Definition: RandEngine.h:109
void setSeeds(const long *seeds, int dum=0)
Definition: RandEngine.cc:137
#define double(obj)
Definition: excDblThrow.cc:32