ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NonRandomEngine.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file NonRandomEngine.h
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 
30 #include <vector>
31 
32 namespace CLHEP {
33 
39 
40 public:
41 
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 
81  double nextRandom;
82  std::vector<double> sequence;
83  unsigned int nInSeq;
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