Geant4 Cross Reference |
1 // -*- C++ -*- 2 // 3 // ----------------------------------------------------------------------- 4 // HEP Random 5 // --- NonRandomEngine --- 6 // class header file 7 // ----------------------------------------------------------------------- 8 9 // This class is present EXCLUSIVELY as a means to test distributions (and 10 // other programs that depend on random numbers) by feeding them a stream 11 // of "randoms" that the testing program supplies explicitly. 12 // 13 // The testing program calls setNextRandom (double) to setup the next 14 // value to be produced when flat() is done. 15 // 16 // To protect against accidental use of this NON-RANDOM engine as a random 17 // engine, if setNextRandom () is never called, all attempts to generate 18 // a random will fail and exit. 19 20 // ======================================================================= 21 // Mark Fischler - Created: 9/30/99 22 // Mark Fischler methods for distrib. instance save/restore 12/8/04 23 // Mark Fischler methods for anonymous save/restore 12/27/04 24 // ======================================================================= 25 26 #ifndef NonRandomEngine_h 27 #define NonRandomEngine_h 1 28 29 #include "CLHEP/Random/RandomEngine.h" 30 #include <vector> 31 32 namespace CLHEP { 33 34 /** 35 * @author 36 * @ingroup random 37 */ 38 class NonRandomEngine : public HepRandomEngine { 39 40 public: 41 42 NonRandomEngine(); 43 virtual ~NonRandomEngine(); 44 // Constructors and destructor 45 46 void setNextRandom (double r); 47 // Preset the next random to be delivered 48 void setRandomSequence (double *s, int n); 49 // Establish a sequence of n next randoms; 50 // replaces setNextRandom n times. 51 void setRandomInterval (double x); 52 // Establish that if there is no sequence active each 53 // random should be bumped by this interval (mod 1) compared 54 // to the last. x should be between 0 and 1. 55 56 double flat(); 57 // It returns the previously established setNextRandom and bumps that up 58 // by the non-zero randomInterval supplied. Thus repeated calls to flat() 59 // generate an evenly spaced sequence (mod 1). 60 61 void flatArray (const int size, double* vect); 62 // Fills the array "vect" of specified size with flat random values. 63 64 virtual std::ostream & put (std::ostream & os) const; 65 virtual std::istream & get (std::istream & is); 66 static std::string beginTag ( ); 67 virtual std::istream & getState ( std::istream & is ); 68 69 std::string name() const; 70 static std::string engineName() {return "NonRandomEngine";} 71 72 std::vector<unsigned long> put () const; 73 bool get (const std::vector<unsigned long> & v); 74 bool getState (const std::vector<unsigned long> & v); 75 76 private: 77 78 bool nextHasBeenSet; 79 bool sequenceHasBeenSet; 80 bool intervalHasBeenSet; 81 double nextRandom; 82 std::vector<double> sequence; 83 unsigned int nInSeq; 84 double randomInterval; 85 86 // The following are necessary to fill virtual methods but should never 87 // be used: 88 89 virtual void setSeed(long , int) {}; 90 virtual void setSeeds(const long * , int) {}; 91 virtual void saveStatus( const char * ) const {}; 92 virtual void restoreStatus( const char * ) {}; 93 virtual void showStatus() const {}; 94 95 96 }; 97 98 } // namespace CLHEP 99 100 #endif 101