ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
RandPoissonQ.h
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file RandPoissonQ.h
1
// -*- C++ -*-
2
//
3
// -----------------------------------------------------------------------
4
// HEP Random
5
// --- RandPoissonQ ---
6
// class header file
7
// -----------------------------------------------------------------------
8
9
// Class defining RandPoissonQ, which is derived from RandPoison.
10
// The user interface is identical; but RandGaussQ is much faster in all cases
11
// and a bit less accurate when mu > 100.
12
13
// =======================================================================
14
// M. Fischler - Created: 4th Feb 2000
15
// M Fischler - put and get to/from streams 12/10/04
16
//
17
// =======================================================================
18
19
#ifndef RandPoissonQ_h
20
#define RandPoissonQ_h 1
21
22
#include "
CLHEP/Random/Random.h
"
23
#include "
CLHEP/Random/RandPoisson.h
"
24
25
namespace
CLHEP {
26
31
class
RandPoissonQ
:
public
RandPoisson
{
32
33
public
:
34
35
inline
RandPoissonQ
(
HepRandomEngine
& anEngine,
double
b1=1.0 );
36
inline
RandPoissonQ
(
HepRandomEngine
* anEngine,
double
b1=1.0 );
37
// These constructors should be used to instantiate a RandPoissonQ
38
// distribution object defining a local engine for it.
39
// The static generator will be skipped using the non-static methods
40
// defined below.
41
// If the engine is passed by pointer the corresponding engine object
42
// will be deleted by the RandPoissonQ destructor.
43
// If the engine is passed by reference the corresponding engine object
44
// will not be deleted by the RandPoissonQ destructor.
45
46
virtual
~RandPoissonQ
();
47
// Destructor
48
49
// Save and restore to/from streams
50
51
std::ostream &
put
( std::ostream & os )
const
;
52
std::istream &
get
( std::istream & is );
53
54
// Methods to generate Poisson-distributed random deviates.
55
56
// The method used for mu <= 100 is exact, and 3-7 times faster than
57
// that used by RandPoisson.
58
// For mu > 100 then we use a corrected version of a
59
// (quick) Gaussian approximation. Naively that would be:
60
//
61
// Poisson(mu) ~ floor( mu + .5 + Gaussian(sqrt(mu)) )
62
//
63
// but actually, that would give a slightly incorrect sigma and a
64
// very different skew than a true Poisson. Instead we return
65
//
66
// Poisson(mu) ~ floor( a0*mu + a1*g + a2*g*g ) )
67
// (with g a gaussian normal)
68
//
69
// where a0, a1, a2 are chosen to give the exctly correct mean, sigma,
70
// and skew for the Poisson distribution.
71
72
// Static methods to shoot random values using the static generator
73
74
static
long
shoot
(
double
m
=1.0 );
75
76
static
void
shootArray
(
const
int
size,
long
* vect,
double
m
=1.0 );
77
78
// Static methods to shoot random values using a given engine
79
// by-passing the static generator.
80
81
static
long
shoot
(
HepRandomEngine
* anEngine,
double
m
=1.0 );
82
83
static
void
shootArray
(
HepRandomEngine
* anEngine,
84
const
int
size,
long
* vect,
double
m
=1.0 );
85
86
// Methods using the localEngine to shoot random values, by-passing
87
// the static generator.
88
89
long
fire
();
90
long
fire
(
double
m
);
91
92
void
fireArray
(
const
int
size,
long
* vect );
93
void
fireArray
(
const
int
size,
long
* vect,
double
m);
94
95
double
operator()
();
96
double
operator()
(
double
m );
97
98
std::string
name
()
const
;
99
HepRandomEngine
&
engine
();
100
101
static
std::string
distributionName
() {
return
"RandPoissonQ"
;}
102
// Provides the name of this distribution class
103
104
105
// static constants of possible interest to users:
106
107
// RandPoisson will never return a deviate greater than this value:
108
static
const
double
MAXIMUM_POISSON_DEVIATE
;
// Will be 2.0E9
109
110
static
inline
int
tableBoundary
();
111
112
private
:
113
114
// constructor helper
115
void
setupForDefaultMu
();
116
117
// algorithm helper methods - all static since the shoot methods mayneed them
118
static
long
poissonDeviateSmall
(
HepRandomEngine
*
e
,
double
mean );
119
static
long
poissonDeviateQuick
(
HepRandomEngine
*
e
,
double
mean );
120
static
long
poissonDeviateQuick
(
HepRandomEngine
*
e
,
121
double
A0,
double
A1,
double
A2,
double
sig );
122
123
// All the engine info, and the default mean, are in the
124
// RandPoisson base class.
125
126
// quantities for approximate Poisson by corrected Gaussian
127
double
a0
;
128
double
a1
;
129
double
a2
;
130
double
sigma
;
131
132
// static data - constants only, so that saveEngineStatus works properly!
133
134
// The following MUST MATCH the corresponding values used (in
135
// poissonTables.cc) when poissonTables.cdat was created.
136
// poissonTables.cc gets these values by including this header,
137
// but we must be careful not to change these values,
138
// and rebuild RandPoissonQ before re-generating poissonTables.cdat.
139
140
// (These statics are given values near the start of the .cc file)
141
142
static
const
double
FIRST_MU
;
// lowest mu value in table
143
static
const
double
LAST_MU
;
// highest mu value
144
static
const
double
S
;
// Spacing between mu values
145
static
const
int
BELOW
;
// Starting point for N is at mu - BELOW
146
static
const
int
ENTRIES
;
// Number of entries in each mu row
147
148
};
149
150
}
// namespace CLHEP
151
152
#include "CLHEP/Random/RandPoissonQ.icc"
153
154
#endif
geant4
tree
geant4-10.6-release
source
externals
clhep
include
CLHEP
Random
RandPoissonQ.h
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:14
using
1.8.2 with
ECCE GitHub integration