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