Geant4 Cross Reference

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