Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
JamesRandom.h
Go to the documentation of this file.
1// $Id:$
2// -*- C++ -*-
3//
4// -----------------------------------------------------------------------
5// HEP Random
6// --- HepJamesRandom ---
7// class header file
8// -----------------------------------------------------------------------
9// This file is part of Geant4 (simulation toolkit for HEP).
10//
11// HepJamesRandom implements the algorithm by Marsaglia-Zaman RANMAR
12// described in "F.James, Comp. Phys. Comm. 60 (1990) 329" and implemented
13// in FORTRAN77 as part of the MATHLIB HEP library for pseudo-random
14// numbers generation.
15// This is the default random engine invoked by each distribution unless
16// the user sets a different one.
17
18// =======================================================================
19// Gabriele Cosmo - Created: 5th September 1995
20// - Minor corrections: 31st October 1996
21// - Added methods for engine status: 19th November 1996
22// - setSeed(), setSeeds() now have default dummy argument
23// set to zero: 11th July 1997
24// J.Marraffino - Added stream operators and related constructor.
25// Added automatic seed selection from seed table and
26// engine counter: 16th Feb 1998
27// Ken Smith - Added conversion operators: 6th Aug 1998
28// V. Innocente - changed pointers to indices 3 may 2000
29// Mark Fischler - Methods for distrib. instance save/restore 12/8/04
30// Mark Fischler methods for anonymous save/restore 12/27/04
31// =======================================================================
32
33#ifndef HepJamesRandom_h
34#define HepJamesRandom_h 1
35
37
38namespace CLHEP {
39
40/**
41 * @author
42 * @ingroup random
43 */
45
46public:
47
48 HepJamesRandom(std::istream& is);
50 HepJamesRandom(long seed);
51 HepJamesRandom(int rowIndex, int colIndex);
52 virtual ~HepJamesRandom();
53 // Constructor and destructor.
54
55 double flat();
56 // Returns a pseudo random number between 0 and 1
57 // (excluding the end points)
58
59 void flatArray (const int size, double* vect);
60 // Fills the array "vect" of specified size with flat random values.
61
62 void setSeed(long seed, int dum=0);
63 // Sets the state of the algorithm according to seed.
64
65 void setSeeds(const long * seeds, int dum=0);
66 // Sets the state of the algorithm according to the zero terminated
67 // array of seeds. Only the first seed is used.
68
69 void saveStatus( const char filename[] = "JamesRand.conf" ) const;
70 // Saves on file JamesRand.conf the current engine status.
71
72 void restoreStatus( const char filename[] = "JamesRand.conf" );
73 // Reads from file JamesRand.conf the last saved engine status
74 // and restores it.
75
76 void showStatus() const;
77 // Dumps the engine status on the screen.
78
79 operator unsigned int();
80 // 32-bit flat, but slower than double or float.
81
82 virtual std::ostream & put (std::ostream & os) const;
83 virtual std::istream & get (std::istream & is);
84 static std::string beginTag ( );
85 virtual std::istream & getState ( std::istream & is );
86
87 std::string name() const;
88 static std::string engineName() {return "HepJamesRandom";}
89
90 std::vector<unsigned long> put () const;
91 bool get (const std::vector<unsigned long> & v);
92 bool getState (const std::vector<unsigned long> & v);
93
94 static const unsigned int VECTOR_STATE_SIZE = 202;
95
96private:
97
98 // Members defining the current status of the generator.
99 double u[97];
100 double c, cd, cm;
101 int i97, j97;
102 static int numEngines;
103 static int maxIndex;
104};
105
106} // namespace CLHEP
107
108#endif
void flatArray(const int size, double *vect)
Definition: JamesRandom.cc:256
static std::string beginTag()
Definition: JamesRandom.cc:317
static std::string engineName()
Definition: JamesRandom.h:88
void setSeeds(const long *seeds, int dum=0)
Definition: JamesRandom.cc:225
virtual std::istream & getState(std::istream &is)
Definition: JamesRandom.cc:321
std::string name() const
Definition: JamesRandom.cc:51
std::vector< unsigned long > put() const
Definition: JamesRandom.cc:281
void setSeed(long seed, int dum=0)
Definition: JamesRandom.cc:173
virtual std::istream & get(std::istream &is)
Definition: JamesRandom.cc:300
void saveStatus(const char filename[]="JamesRand.conf") const
Definition: JamesRandom.cc:106
void restoreStatus(const char filename[]="JamesRand.conf")
Definition: JamesRandom.cc:119
static const unsigned int VECTOR_STATE_SIZE
Definition: JamesRandom.h:94
void showStatus() const
Definition: JamesRandom.cc:157
Definition: DoubConv.h:17