Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Random/Random.h

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // -*- C++ -*-
  2 //
  3 // -----------------------------------------------------------------------
  4 //                             HEP Random
  5 //                          --- HepRandom ---
  6 //                          class header file
  7 // -----------------------------------------------------------------------
  8 // This file is part of Geant4 (simulation toolkit for HEP).
  9 //
 10 // It's a singleton instantiated by default within the HEP Random module.
 11 // It uses an instantiated HepJamesRandom engine as default algorithm
 12 // for pseudo-random number generation. HepRandom defines a static private
 13 // data member theGenerator and a set of static inlined methods to manipulate
 14 // it. By means of theGenerator the user can change the underlying engine
 15 // algorithm, get and set the seeds and use any kind of defined random
 16 // distribution.
 17 // Distribution classes inherit from HepRandom and define both static and
 18 // not-static interfaces.
 19 // A static table of uncorrelated seeds is available in this class.
 20 // A static method "getTheTableSeeds()" is defined to access a couple of
 21 // seeds at a given index in the table.
 22 
 23 // =======================================================================
 24 // Gabriele Cosmo - Created: 5th Sep 1995
 25 //                - Minor update: 17th May 1996
 26 //                - Poisson now operates on doubles : 31st Oct 1996
 27 //                - Added methods for engine status: 19th Nov 1996
 28 //                - Fixed default values to setTheSeed() and
 29 //                  setTheSeeds() static methods: 16th Oct 1997
 30 //                - Modified HepRandom to act as a singleton, constructors
 31 //                  are kept public for backward compatibility. Added table
 32 //                  of seeds from HepRandomEngine: 19th Mar 1998
 33 //                - Relocated Poisson and Gauss data and simplified
 34 //                  initialisation of static generator: 5th Jan 1999
 35 // =======================================================================
 36 
 37 #ifndef HepRandom_h
 38 #define HepRandom_h 1
 39 
 40 #include "CLHEP/Random/RandomEngine.h"
 41 
 42 namespace CLHEP {
 43 
 44 /**
 45  * @author <Gabriele.Cosmo@cern.ch>
 46  * @ingroup random
 47  */
 48 class HepRandom {
 49 
 50 public:
 51 
 52   HepRandom();
 53   HepRandom(long seed);
 54   // Contructors with and without a seed using the default engine
 55   // (MixMax).
 56  
 57   HepRandom(HepRandomEngine & algorithm);
 58   HepRandom(HepRandomEngine * algorithm);
 59   // Constructor taking an alternative engine as argument. If a pointer is
 60   // given the corresponding object will be deleted by the HepRandom
 61   // destructor.
 62   
 63   virtual ~HepRandom();
 64   // Destructor
 65   
 66   // implicitly allow compiler-generated copy functions 
 67 
 68   double flat();
 69   // Returns the flat value ( interval ]0...1[ ).
 70 
 71   void flatArray(const int size, double* vect);
 72   // Fills "vect" array of flat random values, given the size.
 73 
 74   inline double flat (HepRandomEngine* theNewEngine);
 75   // Returns a flat value, given a defined Random Engine.
 76 
 77   inline void flatArray(HepRandomEngine* theNewEngine, 
 78                         const int size, double* vect);
 79   // Fills "vect" array of flat random values, given the size
 80   // and a defined Random Engine.
 81 
 82   virtual double operator()();
 83   // To get a flat random number using the operator ().
 84 
 85   virtual std::string name() const;
 86   virtual HepRandomEngine & engine();
 87     
 88   
 89   virtual std::ostream & put ( std::ostream & os ) const;
 90   virtual std::istream & get ( std::istream & is );
 91   // Save and restore to/from streams
 92 
 93   // --------------------------------------------------
 94   // Static member functions using the static generator
 95   // --------------------------------------------------
 96 
 97   static void setTheSeed(long seed, int lxr=3);
 98   // (Re)Initializes the generator with a seed.
 99 
100   static long getTheSeed();
101   // Gets the current seed of the current generator.
102 
103   static void setTheSeeds(const long* seeds, int aux=-1);
104   // (Re)Initializes the generator with a zero terminated list of seeds.
105 
106   static const long* getTheSeeds();
107   // Gets the current array of seeds of the current generator.
108 
109   static void getTheTableSeeds (long* seeds, int index);
110   // Gets the array of seeds in the static seedTable at "index" position.
111 
112   static HepRandom * getTheGenerator();
113   // Return the current static generator.
114 
115   static void setTheEngine (HepRandomEngine* theNewEngine);
116   // To set the underlying algorithm object.
117 
118   static HepRandomEngine * getTheEngine();
119   // Returns a pointer to the underlying algorithm object.
120 
121   static void saveEngineStatus( const char filename[] = "Config.conf" );
122   // Saves to file the current status of the current engine.
123 
124   static void restoreEngineStatus( const char filename[] = "Config.conf" );
125   // Restores a saved status (if any) for the current engine.
126 
127   static std::ostream& saveFullState ( std::ostream & os );
128   // Saves to stream the state of the engine and cached data.
129 
130   static std::istream& restoreFullState ( std::istream & is );
131   // Restores from stream the state of the engine and cached data.
132 
133   static std::ostream& saveDistState ( std::ostream & os ) {return os;}
134   // Saves to stream the state of the cached data.
135 
136   static std::istream& restoreDistState ( std::istream & is ) {return is;}
137   // Restores from stream the state of the cached data.
138 
139   static std::ostream& saveStaticRandomStates ( std::ostream & os );
140   // Saves to stream the engine and cached data for all distributions.
141 
142   static std::istream& restoreStaticRandomStates ( std::istream & is );
143   // Restores from stream the engine and cached data for all distributions.
144 
145   static void showEngineStatus();
146   // Dumps the current engine status on screen.
147 
148   static int createInstance();
149   // used to initialise the default engine
150 
151   static std::string distributionName() {return "HepRandomEngine";}  
152   // Provides the name of this distribution class
153        
154 protected:     // -------- Data members ---------
155 
156   static const long seedTable[215][2];
157   // Table of seeds
158 
159 };
160 
161 std::ostream & operator<< (std::ostream & os, const HepRandom & dist);
162 std::istream & operator>> (std::istream & is, HepRandom & dist);
163 
164 }  // namespace CLHEP
165 
166 #include "CLHEP/Random/Random.icc"
167 
168 #endif
169