Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
RandPoisson.h
Go to the documentation of this file.
1// $Id:$
2// -*- C++ -*-
3//
4// -----------------------------------------------------------------------
5// HEP Random
6// --- RandPoisson ---
7// class header file
8// -----------------------------------------------------------------------
9// This file is part of Geant4 (simulation toolkit for HEP).
10
11// Class defining methods for shooting numbers according to the Poisson
12// distribution, given a mean (Algorithm taken from "W.H.Press et al.,
13// Numerical Recipes in C, Second Edition".
14// Default mean value is set to 1, value used for operator()().
15
16// =======================================================================
17// Gabriele Cosmo - Created: 5th September 1995
18// - Added not static Shoot() method: 17th May 1996
19// - Algorithm now operates on doubles : 31st Oct 1996
20// - Added methods to shoot arrays: 28th July 1997
21// J.Marraffino - Added default mean as attribute and
22// operator() with mean: 16th Feb 1998
23// Gabriele Cosmo - Relocated static data from HepRandom: 5th Jan 1999
24// M. Fischler - Moved meanMax and defaultMean from private to protected
25// to accomodate derived classes RandPoissonQ & RandPoissonT
26// M Fischler - put and get to/from streams 12/10/04
27// =======================================================================
28
29#ifndef RandPoisson_h
30#define RandPoisson_h 1
31
32#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 m=1.0 );
46 inline RandPoisson ( HepRandomEngine* anEngine, double m=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 shared_ptr<HepRandomEngine> localEngine;
118 double status[3], oldm;
119
120 // static data
121 static double status_st[3];
122 static 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:35
std::ostream & put(std::ostream &os) const
Definition: RandPoisson.cc:281
static std::string distributionName()
Definition: RandPoisson.h:93
HepRandomEngine * getLocalEngine()
static double getOldMean()
Definition: RandPoisson.h:101
virtual ~RandPoisson()
Definition: RandPoisson.cc:43
static double getMaxMean()
Definition: RandPoisson.h:103
static long shoot(double m=1.0)
Definition: RandPoisson.cc:91
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:146
void fireArray(const int size, long *vect)
Definition: RandPoisson.cc:269
static double * getPStatus()
Definition: RandPoisson.h:107
std::istream & get(std::istream &is)
Definition: RandPoisson.cc:302
RandPoisson(HepRandomEngine *anEngine, double m=1.0)
HepRandomEngine & engine()
Definition: RandPoisson.cc:36
RandPoisson(HepRandomEngine &anEngine, double m=1.0)
Definition: DoubConv.h:17