Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
NonRandomEngine.h
Go to the documentation of this file.
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
32namespace CLHEP {
33
34/**
35 * @author
36 * @ingroup random
37 */
39
40public:
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
76private:
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
void setRandomSequence(double *s, int n)
std::string name() const
void setNextRandom(double r)
virtual std::istream & getState(std::istream &is)
virtual std::istream & get(std::istream &is)
static std::string beginTag()
void setRandomInterval(double x)
std::vector< unsigned long > put() const
static std::string engineName()
void flatArray(const int size, double *vect)