Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandGamma.h
Go to the documentation of this file.
1 // $Id:$
2 // -*- C++ -*-
3 //
4 // -----------------------------------------------------------------------
5 // HEP Random
6 // --- RandGamma ---
7 // class header file
8 // -----------------------------------------------------------------------
9 
10 // Class defining methods for shooting gamma distributed random values,
11 // given a k (default=1) and specifying also a lambda (default=1).
12 // Default values are used for operator()().
13 
14 // Valid input values are k > 0 and lambda > 0. When invalid values are
15 // presented, the code silently returns -1.0.
16 
17 // =======================================================================
18 // John Marraffino - Created: 12th May 1998 Based on the C-Rand package
19 // by Ernst Stadlober and Franz Niederl of the Technical
20 // University of Graz, Austria.
21 // Gabriele Cosmo - Removed useless methods and data: 5th Jan 1999
22 // M Fischler - put and get to/from streams 12/10/04
23 // =======================================================================
24 
25 #ifndef RandGamma_h
26 #define RandGamma_h 1
27 
28 #include "CLHEP/Random/Random.h"
29 #include "CLHEP/Utility/memory.h"
30 
31 namespace CLHEP {
32 
37 class RandGamma : public HepRandom {
38 
39 public:
40 
41  inline RandGamma ( HepRandomEngine& anEngine, double k=1.0,
42  double lambda=1.0 );
43  inline RandGamma ( HepRandomEngine* anEngine, double k=1.0,
44  double lambda=1.0 );
45  // These constructors should be used to instantiate a RandGamma
46  // distribution object defining a local engine for it.
47  // The static generator will be skipped using the non-static methods
48  // defined below.
49  // If the engine is passed by pointer the corresponding engine object
50  // will be deleted by the RandGamma destructor.
51  // If the engine is passed by reference the corresponding engine object
52  // will not be deleted by the RandGamma destructor.
53 
54  virtual ~RandGamma();
55  // Destructor
56 
57  // Static methods to shoot random values using the static generator
58 
59  static inline double shoot();
60 
61  static double shoot( double k, double lambda );
62 
63  static void shootArray ( const int size, double* vect,
64  double k=1.0, double lambda=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* anEngine );
70 
71  static double shoot( HepRandomEngine* anEngine,
72  double k, double lambda );
73 
74  static void shootArray ( HepRandomEngine* anEngine, const int size,
75  double* vect, double k=1.0,
76  double lambda=1.0 );
77 
78  // Methods using the localEngine to shoot random values, by-passing
79  // the static generator.
80 
81  inline double fire();
82 
83  double fire( double k, double lambda );
84 
85  void fireArray ( const int size, double* vect);
86  void fireArray ( const int size, double* vect,
87  double k, double lambda );
88  inline double operator()();
89  inline double operator()( double k, double lambda );
90 
91  // Save and restore to/from streams
92 
93  std::ostream & put ( std::ostream & os ) const;
94  std::istream & get ( std::istream & is );
95 
96  std::string name() const;
98 
99  static std::string distributionName() {return "RandGamma";}
100  // Provides the name of this distribution class
101 
102 
103 private:
104 
105  static double genGamma( HepRandomEngine *anEngine, double k,
106  double lambda );
107 
108  shared_ptr<HepRandomEngine> localEngine;
109  double defaultK;
110  double defaultLambda;
111 
112 };
113 
114 } // namespace CLHEP
115 
116 #include "CLHEP/Random/RandGamma.icc"
117 
118 #endif