Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
RandExponential.h
Go to the documentation of this file.
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"
27
28namespace CLHEP {
29
30/**
31 * @author <[email protected]>
32 * @ingroup random
33 */
34class RandExponential : public HepRandom {
35
36public:
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
95private:
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
std::ostream & put(std::ostream &os) const
double fire(double mean)
static double shoot(HepRandomEngine *anEngine)
RandExponential(HepRandomEngine &anEngine, double mean=1.0)
static void shootArray(const int size, double *vect, double mean=1.0)
std::istream & get(std::istream &is)
RandExponential(HepRandomEngine *anEngine, double mean=1.0)
std::string name() const
void fireArray(const int size, double *vect)
static std::string distributionName()
static double shoot(HepRandomEngine *anEngine, double mean)
HepRandomEngine & engine()
Definition: DoubConv.h:17