Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RandGaussQ.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- RandGaussQ ---
6// class header file
7// -----------------------------------------------------------------------
8
9// Class defining methods RandGaussQ, which is derived from RandGauss.
10// The user interface is identical; but RandGaussQ is faster and a bit less
11// accurate.
12
13// =======================================================================
14// M. Fischler - Created: 24th Jan 2000
15// M Fischler - put and get to/from streams 12/10/04
16//
17// =======================================================================
18
19#ifndef RandGaussQ_h
20#define RandGaussQ_h 1
21
23
24namespace CLHEP {
25
26/**
27 * @author
28 * @ingroup random
29 */
30class RandGaussQ : public RandGauss {
31
32public:
33
34 inline RandGaussQ ( HepRandomEngine& anEngine, double mean=0.0,
35 double stdDev=1.0 );
36 inline RandGaussQ ( HepRandomEngine* anEngine, double mean=0.0,
37 double stdDev=1.0 );
38 // These constructors should be used to instantiate a RandGaussQ
39 // distribution object defining a local engine for it.
40 // The static generator will be skipped using the non-static methods
41 // defined below.
42 // If the engine is passed by pointer the corresponding engine object
43 // will be deleted by the RandGaussQ destructor.
44 // If the engine is passed by reference the corresponding engine object
45 // will not be deleted by the RandGaussQ destructor.
46
47 // Destructor
48 virtual ~RandGaussQ();
49
50 //
51 // Methods to generate Gaussian-distributed random deviates:
52 //
53 // If a fast good engine takes 1 usec, RandGauss::fire() adds 1 usec while
54 // RandGaussQ::fire() adds only .4 usec.
55 //
56
57 // Static methods to shoot random values using the static generator
58
59 static inline double shoot();
60
61 static inline double shoot( double mean, double stdDev );
62
63 static void shootArray ( const int size, double* vect,
64 double mean=0.0, double stdDev=1.0 );
65
66 // Static methods to shoot random values using a given engine
67 // by-passing the static generator.
68
69 static inline double shoot( HepRandomEngine* anotherEngine );
70
71 static inline double shoot( HepRandomEngine* anotherEngine,
72 double mean, double stdDev );
73
74
75 static void shootArray ( HepRandomEngine* anotherEngine,
76 const int size,
77 double* vect, double mean=0.0,
78 double stdDev=1.0 );
79
80 // Instance methods using the localEngine to instead of the static
81 // generator, and the default mean and stdDev established at construction
82
83 inline double fire();
84
85 inline double fire ( double mean, double stdDev );
86
87 void fireArray ( const int size, double* vect);
88 void fireArray ( const int size, double* vect,
89 double mean, double stdDev );
90
91 virtual double operator()();
92 virtual double operator()( double mean, double stdDev );
93
94 // Save and restore to/from streams
95
96 std::ostream & put ( std::ostream & os ) const;
97 std::istream & get ( std::istream & is );
98
99 std::string name() const;
101
102 static std::string distributionName() {return "RandGaussQ";}
103 // Provides the name of this distribution class
104
105
106protected:
107
108 static double transformQuick (double r);
109 static double transformSmall (double r);
110
111private:
112
113 // All the engine info, and the default mean and sigma, are in the RandGauss
114 // base class.
115
116};
117
118} // namespace CLHEP
119
120#include "CLHEP/Random/RandGaussQ.icc"
121
122#endif
static double shoot()
virtual ~RandGaussQ()
Definition: RandGaussQ.cc:24
std::istream & get(std::istream &is)
Definition: RandGaussQ.cc:173
RandGaussQ(HepRandomEngine &anEngine, double mean=0.0, double stdDev=1.0)
static double shoot(HepRandomEngine *anotherEngine, double mean, double stdDev)
static double shoot(HepRandomEngine *anotherEngine)
static std::string distributionName()
Definition: RandGaussQ.h:102
static double transformSmall(double r)
Definition: RandGaussQ.cc:124
std::ostream & put(std::ostream &os) const
Definition: RandGaussQ.cc:165
static void shootArray(const int size, double *vect, double mean=0.0, double stdDev=1.0)
Definition: RandGaussQ.cc:35
static double shoot(double mean, double stdDev)
double fire(double mean, double stdDev)
void fireArray(const int size, double *vect)
Definition: RandGaussQ.cc:50
HepRandomEngine & engine()
Definition: RandGaussQ.cc:22
std::string name() const
Definition: RandGaussQ.cc:21
RandGaussQ(HepRandomEngine *anEngine, double mean=0.0, double stdDev=1.0)
virtual double operator()()
Definition: RandGaussQ.cc:27
static double transformQuick(double r)
Definition: RandGaussQ.cc:91
Definition: DoubConv.h:17