CLHEP 2.4.6.4
C++ Class Library for High Energy Physics
Loading...
Searching...
No Matches
Hurd288Engine.h
Go to the documentation of this file.
1// $Id: Hurd288Engine.h,v 1.5 2010/06/16 17:24:53 garren Exp $
2// -*- C++ -*-
3//
4// -----------------------------------------------------------------------
5// HEP Random
6// --- Hurd288Engine ---
7// class header file
8// -----------------------------------------------------------------------
9// The starting point for the Hurd Random algorithm is the paper in
10// IEEE Transactions on Computers c23, 2 Feb 1974. The algorithm is
11// essentially a series of 32 interconnected b-bit registers. The basic
12// property is that at each step, bit 1 becomes bit 0, bit 2 the new bit 1,
13// bit b the new bit b-1. This is modified so that the new bit b0 is the old
14// bit b1 XOR'd with some bit b-d from the previous bit register. The values
15// of d can be chosen so as to generate a primitive polynomial, a maximal
16// length sequence through all bit patterns except the zero pattern.
17//
18// This generator, Hurd288, use values based upon Table I of the afore-
19// mentioned paper, such that we have 288 total bits, representing 32
20// 9-bit registers (actually implemented as an array of 9 32-bit words)
21// =======================================================================
22// 07-23-98 KLS Initial draft started
23// Ken Smith - Added conversion operators: 6th Aug 1998
24// Mark Fischler - methods for distrib. instacne save/restore 12/8/04
25// Mark Fischler - methods for anonymous save/restore 12/27/04
26// =======================================================================
27
28#ifndef Hurd288Engine_h
29#define Hurd288Engine_h
30
31#include "CLHEP/Random/defs.h"
32#include "CLHEP/Random/RandomEngine.h"
33
34namespace CLHEP {
35
36/**
37 * @author
38 * @ingroup random
39 */
41
42public:
43
45 Hurd288Engine( std::istream &is );
46 Hurd288Engine( long seed );
47 Hurd288Engine( int rowIndex, int colIndex );
48 virtual ~Hurd288Engine();
49 // Constructors and destructor.
50
51 double flat();
52 // Returns a pseudo random number between 0 and 1
53
54 void flatArray( const int size, double* vect );
55 // Fills the array "vect" of specified size with flat random values.
56
57 void setSeed( long seed, int );
58 // Sets the state of the algorithm according to seed.
59
60 void setSeeds( const long* seeds, int );
61 // Sets the state of the algorithm according to the zero-terminated
62 // array of seeds.
63
64 void saveStatus( const char filename[] = "Hurd288Engine.conf" ) const;
65 // Saves on named file the current engine status
66
67 void restoreStatus( const char filename[] = "Hurd288Engine.conf" );
68 // Reads from named file the last saved engine status
69 // and restores it.
70
71 void showStatus() const;
72 // Dumps the engine status on the screen
73
74 operator double(); // Returns same as flat()
75 operator float(); // flat value, without worrying about filling bits
76 operator unsigned int(); // 32-bit flat value, quickest of all
77
78 virtual std::ostream & put (std::ostream & os) const;
79 virtual std::istream & get (std::istream & is);
80 static std::string beginTag ( );
81 virtual std::istream & getState ( std::istream & is );
82
83 std::string name() const;
84 static std::string engineName() {return "Hurd288Engine";}
85
86 std::vector<unsigned long> put () const;
87 bool get (const std::vector<unsigned long> & v);
88 bool getState (const std::vector<unsigned long> & v);
89
90 static const unsigned int VECTOR_STATE_SIZE = 11;
91
92private:
93
94 void advance();
95
96 long seeds_[2];
97 int wordIndex;
98 unsigned int words[9];
99
100}; // Hurd288Engine
101
102} // namespace CLHEP
103
104#ifdef ENABLE_BACKWARDS_COMPATIBILITY
105// backwards compatibility will be enabled ONLY in CLHEP 1.9
106using namespace CLHEP;
107#endif
108
109#endif // Hurd288Engine_h
virtual std::istream & getState(std::istream &is)
void setSeeds(const long *seeds, int)
void flatArray(const int size, double *vect)
static std::string beginTag()
virtual std::istream & get(std::istream &is)
static std::string engineName()
Definition: Hurd288Engine.h:84
void setSeed(long seed, int)
void saveStatus(const char filename[]="Hurd288Engine.conf") const
void restoreStatus(const char filename[]="Hurd288Engine.conf")
void showStatus() const
std::string name() const
static const unsigned int VECTOR_STATE_SIZE
Definition: Hurd288Engine.h:90
std::vector< unsigned long > put() const
#define double(obj)
Definition: excDblThrow.cc:32