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