CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

Matrix/CLHEP/Random/DRand48Engine.h
Go to the documentation of this file.
1 // $Id: DRand48Engine.h,v 1.5 2010/06/16 17:24:53 garren Exp $
2 // -*- C++ -*-
3 //
4 // -----------------------------------------------------------------------
5 // HEP Random
6 // --- DRand48Engine ---
7 // class header file
8 // -----------------------------------------------------------------------
9 // This file is part of Geant4 (simulation toolkit for HEP).
10 //
11 // Random engine using drand48() and srand48() functions from C standard
12 // library to implement the flat() basic distribution and for setting
13 // seeds.
14 // For Windows/NT platforms (WIN32), the code for drand48 has been
15 // extracted from the GNU C Library 2.0.1 and adapted for the native
16 // types.
17 // Copy constructor and operator= are private for objects of this class.
18 
19 // =======================================================================
20 // G.Cosmo - Created: 5th September 1995
21 // - Minor corrections: 31st October 1996
22 // - Added methods for engine status: 19th November 1996
23 // - Added srand48(), seed48(), drand48() implementations
24 // for Windows/NT: 6th March 1997
25 // - setSeed(), setSeeds() now have default dummy argument
26 // set to zero: 11th July 1997
27 // E.Tcherniaev - Porting on KCC compiler: 2nd Feb 1998
28 // G.Cosmo - Private copy constructor and operator=: 26th Feb 1998
29 // J.Marraffino - Added stream operators and related constructor.
30 // Added automatic seed selection from seed table and
31 // engine counter: 16th Feb 1998
32 // E.Tcherniaev - Removed #ifdef for prototypes for drand48(), srand48()
33 // and seed48();
34 // - More accurate code for drand48() on NT base on
35 // a code extracted from GNU C Library 2.1.3: 8th Nov 2000
36 // E.Tcherniaev - prototypes for drand48(), srand48() and seed48() have
37 // been moved to DRand48Engine.cc: 21 Feb 2002
38 // Mark Fischler - methods for distrib. instance save/restore 12/8/04
39 // Mark Fischler - methods for anonymous save/restore 12/27/04
40 // Mark Fischler - methods for vector save/restore 3/7/05
41 // =======================================================================
42 
43 #ifndef DRand48Engine_h
44 #define DRand48Engine_h 1
45 
46 #include "CLHEP/Random/defs.h"
47 #include "CLHEP/Random/RandomEngine.h"
48 #include "CLHEP/Utility/noncopyable.h"
49 
50 namespace CLHEP {
51 
56 class DRand48Engine : public HepRandomEngine, public noncopyable {
57 
58 public:
59 
60  DRand48Engine(std::istream& is);
61  DRand48Engine();
62  DRand48Engine(long seed);
63  DRand48Engine(int rowIndex, int colIndex);
64  virtual ~DRand48Engine();
65  // Constructors and destructor
66 
67  double flat();
68  // It returns a pseudo random number between 0 and 1,
69  // according to the standard stdlib random function drand48()
70  // but excluding the end points.
71 
72  void flatArray (const int size, double* vect);
73  // Fills the array "vect" of specified size with flat random values.
74 
75  void setSeed(long seed, int dum=0);
76  // Sets the state of the algorithm according to seed.
77 
78  void setSeeds(const long * seeds, int dum=0);
79  // Sets the state of the algorithm according to the zero terminated
80  // array of seeds. Only the first seed is used.
81 
82  void saveStatus( const char filename[] = "DRand48.conf" ) const;
83  // Saves on file DRand48.conf the current engine status.
84 
85  void restoreStatus( const char filename[] = "DRand48.conf" );
86  // Reads from file DRand48.conf the last saved engine status
87  // and restores it.
88 
89  void showStatus() const;
90  // Dumps the engine status on the screen.
91 
92  virtual std::ostream & put (std::ostream & os) const;
93  virtual std::istream & get (std::istream & is);
94  static std::string beginTag ( );
95  virtual std::istream & getState ( std::istream & is );
96 
97  std::string name() const;
98  static std::string engineName() {return "DRand48Engine";}
99 
100  std::vector<unsigned long> put () const;
101  bool get (const std::vector<unsigned long> & v);
102  bool getState (const std::vector<unsigned long> & v);
103 
104  static const unsigned int VECTOR_STATE_SIZE = 4;
105 
106 private:
107 
108  static int numEngines;
109  static int maxIndex;
110 
111 };
112 
113 } // namespace CLHEP
114 
115 #ifdef ENABLE_BACKWARDS_COMPATIBILITY
116 // backwards compatibility will be enabled ONLY in CLHEP 1.9
117 using namespace CLHEP;
118 #endif
119 
120 #endif
void setSeeds(const long *seeds, int dum=0)
static const unsigned int VECTOR_STATE_SIZE
void restoreStatus(const char filename[]="DRand48.conf")
void setSeed(long seed, int dum=0)
virtual std::istream & getState(std::istream &is)
std::string name() const
void saveStatus(const char filename[]="DRand48.conf") const
void flatArray(const int size, double *vect)
std::vector< unsigned long > put() const
void showStatus() const
static std::string beginTag()