CLHEP 2.4.6.4
C++ Class Library for High Energy Physics
Loading...
Searching...
No Matches
RandGauss.h
Go to the documentation of this file.
1// $Id: RandGauss.h,v 1.5 2010/06/16 17:24:53 garren Exp $
2// -*- C++ -*-
3//
4// -----------------------------------------------------------------------
5// HEP Random
6// --- RandGauss ---
7// class header file
8// -----------------------------------------------------------------------
9// This file is part of Geant4 (simulation toolkit for HEP).
10
11// Class defining methods for shooting gaussian distributed random values,
12// given a mean (default=0) or specifying also a deviation (default=1).
13// Gaussian random numbers are generated two at the time, so every
14// other time shoot is called the number returned is the one generated the
15// time before.
16// Default values are used for operator()().
17
18// =======================================================================
19// Gabriele Cosmo - Created: 5th September 1995
20// - Minor corrections: 31st October 1996
21// - Added methods to shoot arrays: 28th July 1997
22// J.Marraffino - Added default arguments as attributes and
23// operator() with arguments. Introduced method normal()
24// for computation in fire(): 16th Feb 1998
25// Gabriele Cosmo - Relocated static data from HepRandom: 5th Jan 1999
26// M Fischler - put and get to/from streams 12/8/04
27// =======================================================================
28
29#ifndef RandGauss_h
30#define RandGauss_h 1
31
32#include "CLHEP/Random/defs.h"
33#include "CLHEP/Random/Random.h"
34#include "CLHEP/Utility/memory.h"
35#include "CLHEP/Utility/thread_local.h"
36
37namespace CLHEP {
38
39/**
40 * @author
41 * @ingroup random
42 */
43class RandGauss : public HepRandom {
44
45public:
46
47 inline RandGauss ( HepRandomEngine& anEngine, double mean=0.0,
48 double stdDev=1.0 );
49 inline RandGauss ( HepRandomEngine* anEngine, double mean=0.0,
50 double stdDev=1.0 );
51 // These constructors should be used to instantiate a RandGauss
52 // distribution object defining a local engine for it.
53 // The static generator will be skipped using the non-static methods
54 // defined below.
55 // If the engine is passed by pointer the corresponding engine object
56 // will be deleted by the RandGauss destructor.
57 // If the engine is passed by reference the corresponding engine object
58 // will not be deleted by the RandGauss destructor.
59
60 virtual ~RandGauss();
61 // Destructor
62
63 // Static methods to shoot random values using the static generator
64
65 static double shoot();
66
67 static inline double shoot( double mean, double stdDev );
68
69 static void shootArray ( const int size, double* vect,
70 double mean=0.0, double stdDev=1.0 );
71
72 // Static methods to shoot random values using a given engine
73 // by-passing the static generator.
74
75 static double shoot( HepRandomEngine* anEngine );
76
77 static inline double shoot( HepRandomEngine* anEngine,
78 double mean, double stdDev );
79
80 static void shootArray ( HepRandomEngine* anEngine, const int size,
81 double* vect, double mean=0.0,
82 double stdDev=1.0 );
83
84 // Methods using the localEngine to shoot random values, by-passing
85 // the static generator.
86
87 double fire();
88
89 inline double fire( double mean, double stdDev );
90
91 void fireArray ( const int size, double* vect);
92 void fireArray ( const int size, double* vect,
93 double mean, double stdDev );
94
95 virtual double operator()();
96 virtual double operator()( double mean, double stdDev );
97
98 std::string name() const;
100
101 static std::string distributionName() {return "RandGauss";}
102 // Provides the name of this distribution class
103
104 // Save and restore to/from streams
105
106 std::ostream & put ( std::ostream & os ) const;
107 std::istream & get ( std::istream & is );
108
109 // Methods setFlag(false) and setF(false) if invoked in the client
110 // code before shoot/fire will force generation of a new couple of
111 // values.
112
113 static bool getFlag();
114
115 static void setFlag( bool val );
116
117 bool getF() const {return set;}
118
119 void setF( bool val ) {set = val;}
120
121 // Methods overriding the base class static saveEngineStatus ones,
122 // by adding extra data so that save in one program, then further gaussians,
123 // will produce the identical sequence to restore in another program, then
124 // generating gaussian randoms there
125
126 static void saveEngineStatus( const char filename[] = "Config.conf" );
127 // Saves to file the current status of the current engine.
128
129 static void restoreEngineStatus( const char filename[] = "Config.conf" );
130 // Restores a saved status (if any) for the current engine.
131
132 static std::ostream& saveFullState ( std::ostream & os );
133 // Saves to stream the state of the engine and cached data.
134
135 static std::istream& restoreFullState ( std::istream & is );
136 // Restores from stream the state of the engine and cached data.
137
138 static std::ostream& saveDistState ( std::ostream & os );
139 // Saves to stream the state of the cached data.
140
141 static std::istream& restoreDistState ( std::istream & is );
142 // Restores from stream the state of the cached data.
143
144
145protected:
146
147 static double getVal();
148
149 static void setVal( double nextVal );
150
151 double normal();
152
155
156 std::shared_ptr<HepRandomEngine> localEngine;
157
158private:
159
160 bool set;
161 double nextGauss;
162
163 // static data
164 static CLHEP_THREAD_LOCAL bool set_st;
165 static CLHEP_THREAD_LOCAL double nextGauss_st;
166
167};
168
169} // namespace CLHEP
170
171#ifdef ENABLE_BACKWARDS_COMPATIBILITY
172// backwards compatibility will be enabled ONLY in CLHEP 1.9
173using namespace CLHEP;
174#endif
175
176#include "CLHEP/Random/RandGauss.icc"
177
178#endif
static std::ostream & saveDistState(std::ostream &os)
Definition: RandGauss.cc:346
std::string name() const
Definition: RandGauss.cc:46
static std::istream & restoreFullState(std::istream &is)
Definition: RandGauss.cc:411
static void restoreEngineStatus(const char filename[]="Config.conf")
Definition: RandGauss.cc:213
static double shoot()
Definition: RandGauss.cc:64
static bool getFlag()
Definition: RandGauss.cc:173
static double getVal()
Definition: RandGauss.cc:183
std::istream & get(std::istream &is)
Definition: RandGauss.cc:285
double defaultStdDev
Definition: RandGauss.h:154
std::ostream & put(std::ostream &os) const
Definition: RandGauss.cc:260
RandGauss(HepRandomEngine *anEngine, double mean=0.0, double stdDev=1.0)
void fireArray(const int size, double *vect)
Definition: RandGauss.cc:160
RandGauss(HepRandomEngine &anEngine, double mean=0.0, double stdDev=1.0)
double fire(double mean, double stdDev)
void setF(bool val)
Definition: RandGauss.h:119
static void shootArray(const int size, double *vect, double mean=0.0, double stdDev=1.0)
Definition: RandGauss.cc:93
static void setVal(double nextVal)
Definition: RandGauss.cc:188
HepRandomEngine & engine()
Definition: RandGauss.cc:47
static std::ostream & saveFullState(std::ostream &os)
Definition: RandGauss.cc:405
double normal()
Definition: RandGauss.cc:134
double defaultMean
Definition: RandGauss.h:153
static void setFlag(bool val)
Definition: RandGauss.cc:178
bool getF() const
Definition: RandGauss.h:117
static double shoot(double mean, double stdDev)
static std::string distributionName()
Definition: RandGauss.h:101
std::shared_ptr< HepRandomEngine > localEngine
Definition: RandGauss.h:156
static double shoot(HepRandomEngine *anEngine, double mean, double stdDev)
virtual ~RandGauss()
Definition: RandGauss.cc:53
static std::istream & restoreDistState(std::istream &is)
Definition: RandGauss.cc:361
virtual double operator()()
Definition: RandGauss.cc:56
static void saveEngineStatus(const char filename[]="Config.conf")
Definition: RandGauss.cc:193