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