ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandGaussQ.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandGaussQ.h
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 
22 #include "CLHEP/Random/RandGauss.h"
23 
24 namespace CLHEP {
25 
30 class RandGaussQ : public RandGauss {
31 
32 public:
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 
106 protected:
107 
108  static double transformQuick (double r);
109  static double transformSmall (double r);
110 
111 private:
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