Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
RandPoisson.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- RandPoisson ---
6// class header file
7// -----------------------------------------------------------------------
8// This file is part of Geant4 (simulation toolkit for HEP).
9
10// Class defining methods for shooting numbers according to the Poisson
11// distribution, given a mean (Algorithm taken from "W.H.Press et al.,
12// Numerical Recipes in C, Second Edition".
13// Default mean value is set to 1, value used for operator()().
14
15// =======================================================================
16// Gabriele Cosmo - Created: 5th September 1995
17// - Added not static Shoot() method: 17th May 1996
18// - Algorithm now operates on doubles : 31st Oct 1996
19// - Added methods to shoot arrays: 28th July 1997
20// J.Marraffino - Added default mean as attribute and
21// operator() with mean: 16th Feb 1998
22// Gabriele Cosmo - Relocated static data from HepRandom: 5th Jan 1999
23// M. Fischler - Moved meanMax and defaultMean from private to protected
24// to accomodate derived classes RandPoissonQ & RandPoissonT
25// M Fischler - put and get to/from streams 12/10/04
26// =======================================================================
27
28#ifndef RandPoisson_h
29#define RandPoisson_h 1
30
31#include "CLHEP/Random/Random.h"
34
35namespace CLHEP {
36
37/**
38 * @author
39 * @ingroup random
40 */
41class RandPoisson : public HepRandom {
42
43public:
44
45 inline RandPoisson ( HepRandomEngine& anEngine, double a1=1.0 );
46 inline RandPoisson ( HepRandomEngine* anEngine, double a1=1.0 );
47 // These constructors should be used to instantiate a RandPoisson
48 // distribution object defining a local engine for it.
49 // The static generator will be skipped using the non-static methods
50 // defined below.
51 // If the engine is passed by pointer the corresponding engine object
52 // will be deleted by the RandPoisson destructor.
53 // If the engine is passed by reference the corresponding engine object
54 // will not be deleted by the RandPoisson destructor.
55
56 virtual ~RandPoisson();
57 // Destructor
58
59 // Save and restore to/from streams
60
61 std::ostream & put ( std::ostream & os ) const;
62 std::istream & get ( std::istream & is );
63
64 // Static methods to shoot random values using the static generator
65
66 static long shoot( double m=1.0 );
67
68 static void shootArray ( const int size, long* vect, double m=1.0 );
69
70 // Static methods to shoot random values using a given engine
71 // by-passing the static generator.
72
73 static long shoot( HepRandomEngine* anEngine, double m=1.0 );
74
75 static void shootArray ( HepRandomEngine* anEngine,
76 const int size, long* vect, double m=1.0 );
77
78 // Methods using the localEngine to shoot random values, by-passing
79 // the static generator.
80
81 long fire();
82 long fire( double m );
83
84 void fireArray ( const int size, long* vect );
85 void fireArray ( const int size, long* vect, double m);
86
87 double operator()();
88 double operator()( double m );
89
90 std::string name() const;
92
93 static std::string distributionName() {return "RandPoisson";}
94 // Provides the name of this distribution class
95
96protected:
97
98 double meanMax;
100
101 static double getOldMean() {return oldm_st;}
102
103 static double getMaxMean() {return meanMax_st;}
104
105 static void setOldMean( double val ){oldm_st = val;}
106
107 static double* getPStatus() {return status_st;}
108
109 static void setPStatus(double sq, double alxm, double g1) {
110 status_st[0] = sq; status_st[1] = alxm; status_st[2] = g1;
111 }
112
114
115private:
116
117 std::shared_ptr<HepRandomEngine> localEngine;
118 double status[3], oldm;
119
120 // static data
121 static CLHEP_THREAD_LOCAL double status_st[3];
122 static CLHEP_THREAD_LOCAL double oldm_st;
123 static const double meanMax_st;
124
125};
126
127} // namespace CLHEP
128
129#include "CLHEP/Random/RandPoisson.icc"
130
131#endif
std::string name() const
Definition: RandPoisson.cc:37
std::ostream & put(std::ostream &os) const
Definition: RandPoisson.cc:283
static std::string distributionName()
Definition: RandPoisson.h:93
HepRandomEngine * getLocalEngine()
static double getOldMean()
Definition: RandPoisson.h:101
virtual ~RandPoisson()
Definition: RandPoisson.cc:45
static double getMaxMean()
Definition: RandPoisson.h:103
RandPoisson(HepRandomEngine &anEngine, double a1=1.0)
static long shoot(double m=1.0)
Definition: RandPoisson.cc:93
static void setOldMean(double val)
Definition: RandPoisson.h:105
static void setPStatus(double sq, double alxm, double g1)
Definition: RandPoisson.h:109
static void shootArray(const int size, long *vect, double m=1.0)
Definition: RandPoisson.cc:148
void fireArray(const int size, long *vect)
Definition: RandPoisson.cc:271
static double * getPStatus()
Definition: RandPoisson.h:107
std::istream & get(std::istream &is)
Definition: RandPoisson.cc:304
RandPoisson(HepRandomEngine *anEngine, double a1=1.0)
HepRandomEngine & engine()
Definition: RandPoisson.cc:38
Definition: DoubConv.h:17
#define CLHEP_THREAD_LOCAL
Definition: thread_local.h:13