ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandExponential.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandExponential.h
1 // -*- C++ -*-
2 //
3 // -----------------------------------------------------------------------
4 // HEP Random
5 // --- RandExponential ---
6 // class header file
7 // -----------------------------------------------------------------------
8 // This file is part of Geant4 (simulation toolkit for HEP).
9 //
10 // Class defining methods for shooting exponential distributed random
11 // values, given a mean (default mean = 1).
12 // Default mean is used for operator()().
13 
14 // =======================================================================
15 // Gabriele Cosmo - Created: 5th September 1995
16 // - Added methods to shoot arrays: 28th July 1997
17 // J.Marraffino - Added default mean as attribute and
18 // operator() with mean: 16th Feb 1998
19 // M Fischler - put and get to/from streams 12/10/04
20 // =======================================================================
21 
22 #ifndef RandExponential_h
23 #define RandExponential_h 1
24 
25 #include "CLHEP/Random/Random.h"
26 #include "CLHEP/Utility/memory.h"
27 
28 namespace CLHEP {
29 
34 class RandExponential : public HepRandom {
35 
36 public:
37 
38  inline RandExponential ( HepRandomEngine& anEngine, double mean=1.0 );
39  inline RandExponential ( HepRandomEngine* anEngine, double mean=1.0 );
40  // These constructors should be used to instantiate a RandExponential
41  // distribution object defining a local engine for it.
42  // The static generator will be skipped using the non-static methods
43  // defined below.
44  // If the engine is passed by pointer the corresponding engine object
45  // will be deleted by the RandExponential destructor.
46  // If the engine is passed by reference the corresponding engine object
47  // will not be deleted by the RandExponential destructor.
48 
49  virtual ~RandExponential();
50  // Destructor
51 
52  // Static methods to shoot random values using the static generator
53 
54  static double shoot();
55 
56  static double shoot( double mean );
57 
58  static void shootArray ( const int size, double* vect,
59  double mean=1.0 );
60 
61  // Static methods to shoot random values using a given engine
62  // by-passing the static generator.
63 
64  static inline double shoot( HepRandomEngine* anEngine );
65 
66  static inline double shoot( HepRandomEngine* anEngine, double mean );
67 
68  static void shootArray ( HepRandomEngine* anEngine, const int size,
69  double* vect, double mean=1.0 );
70 
71  // Methods using the localEngine to shoot random values, by-passing
72  // the static generator.
73 
74  inline double fire();
75 
76  inline double fire( double mean );
77 
78  void fireArray ( const int size, double* vect );
79  void fireArray ( const int size, double* vect, double mean );
80 
81  double operator()();
82  double operator()( double mean );
83 
84  // Save and restore to/from streams
85 
86  std::ostream & put ( std::ostream & os ) const;
87  std::istream & get ( std::istream & is );
88 
89  std::string name() const;
91 
92  static std::string distributionName() {return "RandExponential";}
93  // Provides the name of this distribution class
94 
95 private:
96 
97  std::shared_ptr<HepRandomEngine> localEngine;
98  double defaultMean;
99 
100 };
101 
102 } // namespace CLHEP
103 
104 #include "CLHEP/Random/RandExponential.icc"
105 
106 #endif