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