Geant4-11
Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Attributes | Static Private Attributes
CLHEP::RandGaussQ Class Reference

#include <RandGaussQ.h>

Inheritance diagram for CLHEP::RandGaussQ:
CLHEP::RandGauss CLHEP::HepRandom

Public Member Functions

HepRandomEngineengine ()
 
double fire ()
 
double fire (double mean, double stdDev)
 
void fireArray (const int size, double *vect)
 
void fireArray (const int size, double *vect, double mean, double stdDev)
 
double flat ()
 
double flat (HepRandomEngine *theNewEngine)
 
void flatArray (const int size, double *vect)
 
void flatArray (HepRandomEngine *theNewEngine, const int size, double *vect)
 
std::istream & get (std::istream &is)
 
bool getF () const
 
std::string name () const
 
virtual double operator() ()
 
virtual double operator() (double mean, double stdDev)
 
std::ostream & put (std::ostream &os) const
 
 RandGaussQ (HepRandomEngine &anEngine, double mean=0.0, double stdDev=1.0)
 
 RandGaussQ (HepRandomEngine *anEngine, double mean=0.0, double stdDev=1.0)
 
void setF (bool val)
 
virtual ~RandGaussQ ()
 

Static Public Member Functions

static int createInstance ()
 
static std::string distributionName ()
 
static bool getFlag ()
 
static HepRandomEnginegetTheEngine ()
 
static HepRandomgetTheGenerator ()
 
static long getTheSeed ()
 
static const long * getTheSeeds ()
 
static void getTheTableSeeds (long *seeds, int index)
 
static std::istream & restoreDistState (std::istream &is)
 
static void restoreEngineStatus (const char filename[]="Config.conf")
 
static std::istream & restoreFullState (std::istream &is)
 
static std::istream & restoreStaticRandomStates (std::istream &is)
 
static std::ostream & saveDistState (std::ostream &os)
 
static void saveEngineStatus (const char filename[]="Config.conf")
 
static std::ostream & saveFullState (std::ostream &os)
 
static std::ostream & saveStaticRandomStates (std::ostream &os)
 
static void setFlag (bool val)
 
static void setTheEngine (HepRandomEngine *theNewEngine)
 
static void setTheSeed (long seed, int lxr=3)
 
static void setTheSeeds (const long *seeds, int aux=-1)
 
static double shoot ()
 
static double shoot (double mean, double stdDev)
 
static double shoot (HepRandomEngine *anotherEngine)
 
static double shoot (HepRandomEngine *anotherEngine, double mean, double stdDev)
 
static void shootArray (const int size, double *vect, double mean=0.0, double stdDev=1.0)
 
static void shootArray (HepRandomEngine *anotherEngine, const int size, double *vect, double mean=0.0, double stdDev=1.0)
 
static void showEngineStatus ()
 

Protected Member Functions

double normal ()
 

Static Protected Member Functions

static double getVal ()
 
static void setVal (double nextVal)
 
static double transformQuick (double r)
 
static double transformSmall (double r)
 

Protected Attributes

double defaultMean
 
double defaultStdDev
 
std::shared_ptr< HepRandomEnginelocalEngine
 

Static Protected Attributes

static const long seedTable [215][2]
 

Private Attributes

double nextGauss
 
bool set
 

Static Private Attributes

static CLHEP_THREAD_LOCAL double nextGauss_st = 0.0
 
static CLHEP_THREAD_LOCAL bool set_st = false
 

Detailed Description

Author

Definition at line 30 of file RandGaussQ.h.

Constructor & Destructor Documentation

◆ RandGaussQ() [1/2]

CLHEP::RandGaussQ::RandGaussQ ( HepRandomEngine anEngine,
double  mean = 0.0,
double  stdDev = 1.0 
)
inline

◆ RandGaussQ() [2/2]

CLHEP::RandGaussQ::RandGaussQ ( HepRandomEngine anEngine,
double  mean = 0.0,
double  stdDev = 1.0 
)
inline

◆ ~RandGaussQ()

CLHEP::RandGaussQ::~RandGaussQ ( )
virtual

Definition at line 24 of file RandGaussQ.cc.

24 {
25}

Member Function Documentation

◆ createInstance()

int CLHEP::HepRandom::createInstance ( )
staticinherited

◆ distributionName()

static std::string CLHEP::RandGaussQ::distributionName ( )
inlinestatic

Definition at line 102 of file RandGaussQ.h.

102{return "RandGaussQ";}

◆ engine()

HepRandomEngine & CLHEP::RandGaussQ::engine ( )
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 22 of file RandGaussQ.cc.

22{return RandGauss::engine();}
HepRandomEngine & engine()
Definition: RandGauss.cc:45

References CLHEP::RandGauss::engine().

◆ fire() [1/2]

double CLHEP::RandGaussQ::fire ( )
inline

Referenced by fireArray().

◆ fire() [2/2]

double CLHEP::RandGaussQ::fire ( double  mean,
double  stdDev 
)
inline

◆ fireArray() [1/2]

void CLHEP::RandGaussQ::fireArray ( const int  size,
double *  vect 
)

Definition at line 50 of file RandGaussQ.cc.

51{
52 for( double* v = vect; v != vect + size; ++v )
54}
double defaultStdDev
Definition: RandGauss.h:152
double defaultMean
Definition: RandGauss.h:151

References CLHEP::RandGauss::defaultMean, CLHEP::RandGauss::defaultStdDev, and fire().

◆ fireArray() [2/2]

void CLHEP::RandGaussQ::fireArray ( const int  size,
double *  vect,
double  mean,
double  stdDev 
)

Definition at line 56 of file RandGaussQ.cc.

58{
59 for( double* v = vect; v != vect + size; ++v )
60 *v = fire( mean, stdDev );
61}

References fire().

◆ flat() [1/2]

double CLHEP::HepRandom::flat ( )
inherited

◆ flat() [2/2]

double CLHEP::HepRandom::flat ( HepRandomEngine theNewEngine)
inlineinherited

◆ flatArray() [1/2]

void CLHEP::HepRandom::flatArray ( const int  size,
double *  vect 
)
inherited

◆ flatArray() [2/2]

void CLHEP::HepRandom::flatArray ( HepRandomEngine theNewEngine,
const int  size,
double *  vect 
)
inlineinherited

◆ get()

std::istream & CLHEP::RandGaussQ::get ( std::istream &  is)
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 173 of file RandGaussQ.cc.

173 {
174 std::string inName;
175 is >> inName;
176 if (inName != name()) {
177 is.clear(std::ios::badbit | is.rdstate());
178 std::cerr << "Mismatch when expecting to read state of a "
179 << name() << " distribution\n"
180 << "Name found was " << inName
181 << "\nistream is left in the badbit state\n";
182 return is;
183 }
184 RandGauss::get(is);
185 return is;
186}
std::string name() const
Definition: RandGaussQ.cc:21
std::istream & get(std::istream &is)
Definition: RandGauss.cc:277

References CLHEP::RandGauss::get(), and name().

◆ getF()

bool CLHEP::RandGauss::getF ( ) const
inlineinherited

Definition at line 115 of file RandGauss.h.

115{return set;}

References CLHEP::RandGauss::set.

◆ getFlag()

bool CLHEP::RandGauss::getFlag ( )
staticinherited

Definition at line 171 of file RandGauss.cc.

172{
173 return set_st;
174}
static CLHEP_THREAD_LOCAL bool set_st
Definition: RandGauss.h:162

References CLHEP::RandGauss::set_st.

Referenced by CLHEP::RandGauss::saveDistState(), CLHEP::RandGauss::saveEngineStatus(), and CLHEP::RandGauss::shoot().

◆ getTheEngine()

HepRandomEngine * CLHEP::HepRandom::getTheEngine ( )
staticinherited

◆ getTheGenerator()

HepRandom * CLHEP::HepRandom::getTheGenerator ( )
staticinherited

◆ getTheSeed()

long CLHEP::HepRandom::getTheSeed ( )
staticinherited

◆ getTheSeeds()

const long * CLHEP::HepRandom::getTheSeeds ( )
staticinherited

◆ getTheTableSeeds()

void CLHEP::HepRandom::getTheTableSeeds ( long *  seeds,
int  index 
)
staticinherited

Definition at line 254 of file Random.cc.

255{
256 if ((index >= 0) && (index < 215)) {
257 seeds[0] = seedTable[index][0];
258 seeds[1] = seedTable[index][1];
259 }
260 else seeds = NULL;
261}
static const long seedTable[215][2]
Definition: Random.h:156

Referenced by CLHEP::HepJamesRandom::HepJamesRandom(), CLHEP::MTwistEngine::MTwistEngine(), CLHEP::RanecuEngine::RanecuEngine(), CLHEP::Ranlux64Engine::Ranlux64Engine(), CLHEP::RanluxEngine::RanluxEngine(), and CLHEP::RanecuEngine::setSeed().

◆ getVal()

double CLHEP::RandGauss::getVal ( )
staticprotectedinherited

Definition at line 181 of file RandGauss.cc.

182{
183 return nextGauss_st;
184}
static CLHEP_THREAD_LOCAL double nextGauss_st
Definition: RandGauss.h:163

References CLHEP::RandGauss::nextGauss_st.

Referenced by CLHEP::RandGauss::saveDistState(), CLHEP::RandGauss::saveEngineStatus(), and CLHEP::RandGauss::shoot().

◆ name()

std::string CLHEP::RandGaussQ::name ( ) const
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 21 of file RandGaussQ.cc.

21{return "RandGaussQ";}

Referenced by source.g4viscp.G4Scene::create_scene(), get(), mcscore.MCParticle::printout(), put(), and source.g4viscp.G4Scene::update_scene().

◆ normal()

double CLHEP::RandGauss::normal ( )
protectedinherited

Definition at line 132 of file RandGauss.cc.

133{
134 // Gaussian random numbers are generated two at the time, so every other
135 // time this is called we just return a number generated the time before.
136
137 if ( set ) {
138 set = false;
139 return nextGauss;
140 }
141
142 double r;
143 double v1,v2,fac,val;
144
145 do {
146 v1 = 2.0 * localEngine->flat() - 1.0;
147 v2 = 2.0 * localEngine->flat() - 1.0;
148 r = v1*v1 + v2*v2;
149 } while ( r > 1.0 );
150
151 fac = std::sqrt(-2.0*std::log(r)/r);
152 val = v1*fac;
153 nextGauss = val;
154 set = true;
155 return v2*fac;
156}
static const G4double fac
double nextGauss
Definition: RandGauss.h:159
std::shared_ptr< HepRandomEngine > localEngine
Definition: RandGauss.h:154

References fac, CLHEP::RandGauss::localEngine, CLHEP::RandGauss::nextGauss, and CLHEP::RandGauss::set.

◆ operator()() [1/2]

double CLHEP::RandGaussQ::operator() ( )
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 27 of file RandGaussQ.cc.

27 {
29}
static double transformQuick(double r)
Definition: RandGaussQ.cc:91

References CLHEP::RandGauss::defaultMean, CLHEP::RandGauss::defaultStdDev, CLHEP::RandGauss::localEngine, and transformQuick().

◆ operator()() [2/2]

double CLHEP::RandGaussQ::operator() ( double  mean,
double  stdDev 
)
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 31 of file RandGaussQ.cc.

31 {
32 return transformQuick(localEngine->flat()) * stdDev + mean;
33}

References CLHEP::RandGauss::localEngine, and transformQuick().

◆ put()

std::ostream & CLHEP::RandGaussQ::put ( std::ostream &  os) const
virtual

Reimplemented from CLHEP::RandGauss.

Definition at line 165 of file RandGaussQ.cc.

165 {
166 int pr=os.precision(20);
167 os << " " << name() << "\n";
168 RandGauss::put(os);
169 os.precision(pr);
170 return os;
171}
std::ostream & put(std::ostream &os) const
Definition: RandGauss.cc:258

References name(), and CLHEP::RandGauss::put().

◆ restoreDistState()

std::istream & CLHEP::RandGauss::restoreDistState ( std::istream &  is)
staticinherited

Definition at line 346 of file RandGauss.cc.

346 {
347 std::string inName;
348 is >> inName;
349 if (inName != distributionName()) {
350 is.clear(std::ios::badbit | is.rdstate());
351 std::cerr << "Mismatch when expecting to read static state of a "
352 << distributionName() << " distribution\n"
353 << "Name found was " << inName
354 << "\nistream is left in the badbit state\n";
355 return is;
356 }
357 std::string c1;
358 std::string c2;
359 if (possibleKeywordInput(is, "Uvec", c1)) {
360 std::vector<unsigned long> t(2);
361 std::string ng;
362 is >> ng;
363 setFlag (false);
364 if (ng == "nextGauss_st") {
365 is >> nextGauss_st >> t[0] >> t[1];
367 setFlag (true);
368 }
369 return is;
370 }
371 // is >> c1 encompassed by possibleKeywordInput
372 is >> c2 >> nextGauss_st;
373 if ( (!is) || (c1 != "RANDGAUSS") ) {
374 is.clear(std::ios::badbit | is.rdstate());
375 std::cerr << "Failure when reading caching state of static RandGauss\n";
376 return is;
377 }
378 if (c2 == "CACHED_GAUSSIAN:") {
379 setFlag(true);
380 } else if (c2 == "NO_CACHED_GAUSSIAN:") {
381 setFlag(false);
382 } else {
383 is.clear(std::ios::badbit | is.rdstate());
384 std::cerr << "Unexpected caching state keyword of static RandGauss:" << c2
385 << "\nistream is left in the badbit state\n";
386 }
387 return is;
388}
static double longs2double(const std::vector< unsigned long > &v)
Definition: DoubConv.cc:110
static void setFlag(bool val)
Definition: RandGauss.cc:176
static std::string distributionName()
Definition: RandGauss.h:99
bool possibleKeywordInput(IS &is, const std::string &key, T &t)
Definition: RandomEngine.h:166

References CLHEP::RandGauss::distributionName(), CLHEP::DoubConv::longs2double(), CLHEP::RandGauss::nextGauss_st, CLHEP::possibleKeywordInput(), and CLHEP::RandGauss::setFlag().

Referenced by CLHEP::StaticRandomStates::restore(), and CLHEP::RandGauss::restoreFullState().

◆ restoreEngineStatus()

void CLHEP::RandGauss::restoreEngineStatus ( const char  filename[] = "Config.conf")
staticinherited

Definition at line 211 of file RandGauss.cc.

211 {
212
213 // First restore the engine status just like the base class would do:
214 getTheEngine()->restoreStatus( filename );
215
216 // Now find the line describing the cached variate:
217
218 std::ifstream infile ( filename, std::ios::in );
219 if (!infile) return;
220
221 char inputword[] = "NO_KEYWORD "; // leaves room for 14 characters plus \0
222 while (true) {
223 infile.width(13);
224 infile >> inputword;
225 if (strcmp(inputword,"RANDGAUSS")==0) break;
226 if (infile.eof()) break;
227 // If the file ends without the RANDGAUSS line, that means this
228 // was a file produced by an earlier version of RandGauss. We will
229 // replicated the old behavior in that case: set_st is cleared.
230 }
231
232 // Then read and use the caching info:
233
234 if (strcmp(inputword,"RANDGAUSS")==0) {
235 char setword[40]; // the longest, staticFirstUnusedBit: has length 21
236 infile.width(39);
237 infile >> setword; // setword should be CACHED_GAUSSIAN:
238 if (strcmp(setword,"CACHED_GAUSSIAN:") ==0) {
239 if (possibleKeywordInput(infile, "Uvec", nextGauss_st)) {
240 std::vector<unsigned long> t(2);
241 infile >> nextGauss_st >> t[0] >> t[1];
243 }
244 // is >> nextGauss_st encompassed by possibleKeywordInput
245 setFlag(true);
246 } else {
247 setFlag(false);
248 infile >> nextGauss_st; // because a 0 will have been output
249 }
250 } else {
251 setFlag(false);
252 }
253
254} // restoreEngineStatus
virtual void restoreStatus(const char filename[]="Config.conf")=0
static HepRandomEngine * getTheEngine()
Definition: Random.cc:268

References CLHEP::HepRandom::getTheEngine(), CLHEP::DoubConv::longs2double(), CLHEP::RandGauss::nextGauss_st, CLHEP::possibleKeywordInput(), CLHEP::HepRandomEngine::restoreStatus(), and CLHEP::RandGauss::setFlag().

◆ restoreFullState()

std::istream & CLHEP::RandGauss::restoreFullState ( std::istream &  is)
staticinherited

Definition at line 396 of file RandGauss.cc.

396 {
399 return is;
400}
static std::istream & restoreFullState(std::istream &is)
Definition: Random.cc:293
static std::istream & restoreDistState(std::istream &is)
Definition: RandGauss.cc:346

References CLHEP::RandGauss::restoreDistState(), and CLHEP::HepRandom::restoreFullState().

◆ restoreStaticRandomStates()

std::istream & CLHEP::HepRandom::restoreStaticRandomStates ( std::istream &  is)
staticinherited

Definition at line 302 of file Random.cc.

302 {
304}
static std::istream & restore(std::istream &is)

References CLHEP::StaticRandomStates::restore().

◆ saveDistState()

std::ostream & CLHEP::RandGauss::saveDistState ( std::ostream &  os)
staticinherited

Definition at line 331 of file RandGauss.cc.

331 {
332 int prec = os.precision(20);
333 std::vector<unsigned long> t(2);
334 os << distributionName() << "\n";
335 os << "Uvec\n";
336 if ( getFlag() ) {
338 os << "nextGauss_st " << getVal() << " " << t[0] << " " << t[1] << "\n";
339 } else {
340 os << "no_cached_nextGauss_st \n";
341 }
342 os.precision(prec);
343 return os;
344}
static std::vector< unsigned long > dto2longs(double d)
Definition: DoubConv.cc:94
static bool getFlag()
Definition: RandGauss.cc:171
static double getVal()
Definition: RandGauss.cc:181
static const double prec
Definition: RanecuEngine.cc:61

References CLHEP::RandGauss::distributionName(), CLHEP::DoubConv::dto2longs(), CLHEP::RandGauss::getFlag(), CLHEP::RandGauss::getVal(), and CLHEP::prec.

Referenced by CLHEP::RandGauss::saveFullState().

◆ saveEngineStatus()

void CLHEP::RandGauss::saveEngineStatus ( const char  filename[] = "Config.conf")
staticinherited

Definition at line 191 of file RandGauss.cc.

191 {
192
193 // First save the engine status just like the base class would do:
194 getTheEngine()->saveStatus( filename );
195
196 // Now append the cached variate, if any:
197
198 std::ofstream outfile ( filename, std::ios::app );
199
200 if ( getFlag() ) {
201 std::vector<unsigned long> t(2);
203 outfile << "RANDGAUSS CACHED_GAUSSIAN: Uvec "
204 << getVal() << " " << t[0] << " " << t[1] << "\n";
205 } else {
206 outfile << "RANDGAUSS NO_CACHED_GAUSSIAN: 0 \n" ;
207 }
208
209} // saveEngineStatus
virtual void saveStatus(const char filename[]="Config.conf") const =0
app
Definition: demo.py:189

References demo::app, CLHEP::DoubConv::dto2longs(), CLHEP::RandGauss::getFlag(), CLHEP::HepRandom::getTheEngine(), CLHEP::RandGauss::getVal(), and CLHEP::HepRandomEngine::saveStatus().

◆ saveFullState()

std::ostream & CLHEP::RandGauss::saveFullState ( std::ostream &  os)
staticinherited

Definition at line 390 of file RandGauss.cc.

390 {
392 saveDistState(os);
393 return os;
394}
static std::ostream & saveFullState(std::ostream &os)
Definition: Random.cc:288
static std::ostream & saveDistState(std::ostream &os)
Definition: RandGauss.cc:331

References CLHEP::RandGauss::saveDistState(), and CLHEP::HepRandom::saveFullState().

Referenced by CLHEP::StaticRandomStates::save().

◆ saveStaticRandomStates()

std::ostream & CLHEP::HepRandom::saveStaticRandomStates ( std::ostream &  os)
staticinherited

Definition at line 298 of file Random.cc.

298 {
299 return StaticRandomStates::save(os);
300}
static std::ostream & save(std::ostream &os)

References CLHEP::StaticRandomStates::save().

◆ setF()

void CLHEP::RandGauss::setF ( bool  val)
inlineinherited

Definition at line 117 of file RandGauss.h.

117{set = val;}

References CLHEP::RandGauss::set.

◆ setFlag()

void CLHEP::RandGauss::setFlag ( bool  val)
staticinherited

◆ setTheEngine()

void CLHEP::HepRandom::setTheEngine ( HepRandomEngine theNewEngine)
staticinherited

Definition at line 273 of file Random.cc.

274{
275 theDefaults().theEngine.reset( theNewEngine, do_nothing_deleter() );
276}

References CLHEP::anonymous_namespace{Random.cc}::theDefaults(), and CLHEP::anonymous_namespace{Random.cc}::defaults::theEngine.

Referenced by CLHEP::StaticRandomStates::restore().

◆ setTheSeed()

void CLHEP::HepRandom::setTheSeed ( long  seed,
int  lxr = 3 
)
staticinherited

Definition at line 234 of file Random.cc.

235{
236 theDefaults().theEngine->setSeed(seed,lux);
237}
static constexpr double lux

References CLHEP::lux, CLHEP::anonymous_namespace{Random.cc}::theDefaults(), and CLHEP::anonymous_namespace{Random.cc}::defaults::theEngine.

◆ setTheSeeds()

void CLHEP::HepRandom::setTheSeeds ( const long *  seeds,
int  aux = -1 
)
staticinherited

◆ setVal()

void CLHEP::RandGauss::setVal ( double  nextVal)
staticprotectedinherited

Definition at line 186 of file RandGauss.cc.

187{
188 nextGauss_st = nextVal;
189}

References CLHEP::RandGauss::nextGauss_st.

Referenced by CLHEP::RandGauss::shoot().

◆ shoot() [1/4]

static double CLHEP::RandGaussQ::shoot ( )
inlinestatic

◆ shoot() [2/4]

static double CLHEP::RandGaussQ::shoot ( double  mean,
double  stdDev 
)
inlinestatic

◆ shoot() [3/4]

static double CLHEP::RandGaussQ::shoot ( HepRandomEngine anotherEngine)
inlinestatic

◆ shoot() [4/4]

static double CLHEP::RandGaussQ::shoot ( HepRandomEngine anotherEngine,
double  mean,
double  stdDev 
)
inlinestatic

◆ shootArray() [1/2]

void CLHEP::RandGaussQ::shootArray ( const int  size,
double *  vect,
double  mean = 0.0,
double  stdDev = 1.0 
)
static

Definition at line 35 of file RandGaussQ.cc.

37{
38 for( double* v = vect; v != vect + size; ++v )
39 *v = shoot(mean,stdDev);
40}
static double shoot()

References shoot().

◆ shootArray() [2/2]

void CLHEP::RandGaussQ::shootArray ( HepRandomEngine anotherEngine,
const int  size,
double *  vect,
double  mean = 0.0,
double  stdDev = 1.0 
)
static

Definition at line 42 of file RandGaussQ.cc.

45{
46 for( double* v = vect; v != vect + size; ++v )
47 *v = shoot(anEngine,mean,stdDev);
48}

References shoot().

◆ showEngineStatus()

void CLHEP::HepRandom::showEngineStatus ( )
staticinherited

◆ transformQuick()

double CLHEP::RandGaussQ::transformQuick ( double  r)
staticprotected

Definition at line 91 of file RandGaussQ.cc.

91 {
92 double sign = +1.0; // We always compute a negative number of
93 // sigmas. For r > 0 we will multiply by
94 // sign = -1 to return a positive number.
95 if ( r > .5 ) {
96 r = 1-r;
97 sign = -1.0;
98 }
99
100 int index;
101 double dx;
102
103 if ( r >= Table1step ) {
104 index = int((Table1size<<1) * r); // 1 to Table1size
105 if (index == Table1size) return 0.0;
106 dx = (Table1size<<1) * r - index; // fraction of way to next bin
107 index += Table1offset-1;
108 } else if ( r > Table0step ) {
109 double rr = r * Table0scale;
110 index = int(Table0size * rr); // 1 to Table0size
111 dx = Table0size * rr - index; // fraction of way to next bin
112 index += Table0offset-1;
113 } else { // r <= Table0step - not in tables
114 return sign*transformSmall(r);
115 }
116
117 double y0 = gaussTables [index++];
118 double y1 = gaussTables [index];
119
120 return (float) (sign * ( y1 * dx + y0 * (1.0-dx) ));
121
122} // transformQuick()
#define Table1offset
Definition: RandGaussQ.cc:83
#define Table0scale
Definition: RandGaussQ.cc:80
#define Table0step
Definition: RandGaussQ.cc:77
#define Table0offset
Definition: RandGaussQ.cc:82
#define Table0size
Definition: RandGaussQ.cc:73
#define Table1step
Definition: RandGaussQ.cc:78
#define Table1size
Definition: RandGaussQ.cc:74
static double transformSmall(double r)
Definition: RandGaussQ.cc:124
static const double gaussTables[2 *TableSize]
G4int sign(const T t)

References CLHEP::gaussTables, G4INCL::Math::sign(), Table0offset, Table0scale, Table0size, Table0step, Table1offset, Table1size, Table1step, and transformSmall().

Referenced by operator()().

◆ transformSmall()

double CLHEP::RandGaussQ::transformSmall ( double  r)
staticprotected

Definition at line 124 of file RandGaussQ.cc.

124 {
125
126 // Solve for -v in the asymtotic formula
127 //
128 // errInt (-v) = exp(-v*v/2) 1 1*3 1*3*5
129 // ------------ * (1 - ---- + ---- - ----- + ... )
130 // v*sqrt(2*pi) v**2 v**4 v**6
131
132 // The value of r (=errInt(-v)) supplied is going to less than 2.0E-13,
133 // which is such that v < -7.25. Since the value of r is meaningful only
134 // to an absolute error of 1E-16 (double precision accuracy for a number
135 // which on the high side could be of the form 1-epsilon), computing
136 // v to more than 3-4 digits of accuracy is suspect; however, to ensure
137 // smoothness with the table generator (which uses quite a few terms) we
138 // also use terms up to 1*3*5* ... *13/v**14, and insist on accuracy of
139 // solution at the level of 1.0e-7.
140
141 // This routine is called less than one time in a million firings, so
142 // speed is of no concern. As a matter of technique, we terminate the
143 // iterations in case they would be infinite, but this should not happen.
144
145 double eps = 1.0e-7;
146 double guess = 7.5;
147 double v;
148
149 for ( int i = 1; i < 50; i++ ) {
150 double vn2 = 1.0/(guess*guess);
151 double s1 = -13*11*9*7*5*3 * vn2*vn2*vn2*vn2*vn2*vn2*vn2;
152 s1 += 11*9*7*5*3 * vn2*vn2*vn2*vn2*vn2*vn2;
153 s1 += -9*7*5*3 * vn2*vn2*vn2*vn2*vn2;
154 s1 += 7*5*3 * vn2*vn2*vn2*vn2;
155 s1 += -5*3 * vn2*vn2*vn2;
156 s1 += 3 * vn2*vn2 - vn2 + 1.0;
157 v = std::sqrt ( 2.0 * std::log ( s1 / (r*guess*std::sqrt(CLHEP::twopi)) ) );
158 if ( std::fabs(v-guess) < eps ) break;
159 guess = v;
160 }
161 return -v;
162
163} // transformSmall()
static const G4double eps
static constexpr double twopi
Definition: SystemOfUnits.h:56

References eps, and CLHEP::twopi.

Referenced by transformQuick().

Field Documentation

◆ defaultMean

double CLHEP::RandGauss::defaultMean
protectedinherited

◆ defaultStdDev

double CLHEP::RandGauss::defaultStdDev
protectedinherited

◆ localEngine

std::shared_ptr<HepRandomEngine> CLHEP::RandGauss::localEngine
protectedinherited

◆ nextGauss

double CLHEP::RandGauss::nextGauss
privateinherited

◆ nextGauss_st

CLHEP_THREAD_LOCAL double CLHEP::RandGauss::nextGauss_st = 0.0
staticprivateinherited

◆ seedTable

const long CLHEP::HepRandom::seedTable
staticprotectedinherited

Definition at line 156 of file Random.h.

◆ set

bool CLHEP::RandGauss::set
privateinherited

◆ set_st

CLHEP_THREAD_LOCAL bool CLHEP::RandGauss::set_st = false
staticprivateinherited

Definition at line 162 of file RandGauss.h.

Referenced by CLHEP::RandGauss::getFlag(), and CLHEP::RandGauss::setFlag().


The documentation for this class was generated from the following files: