CLHEP VERSION Reference Documentation
CLHEP Home Page
CLHEP Documentation
CLHEP Bug Reports
Main Page
Namespaces
Classes
Files
File List
File Members
Random
src
RandPoissonT.cc
Go to the documentation of this file.
1
// $Id: RandPoissonT.cc,v 1.7 2010/06/16 17:24:53 garren Exp $
2
// -*- C++ -*-
3
//
4
// -----------------------------------------------------------------------
5
// HEP Random
6
// --- RandPoissonT ---
7
// class implementation file
8
// -----------------------------------------------------------------------
9
10
// =======================================================================
11
// M. Fischler - Implemented new, much faster table-driven algorithm
12
// applicable for mu < 100 (Nov 1999), using these as
13
// implementation of RandPoisson.
14
// M. Fischler - Moved the table driven algorithms into RandPoissonT (here)
15
// 1/26/00.
16
// M. Fischler - Removed mean=100 from the table-driven set, since it
17
// uses a value just off the end of the table. (April 2004)
18
// M Fischler - put and get to/from streams 12/15/04
19
// M Fischler - fireArray using defaultMean 2/10/05
20
// M Fischler - put/get to/from streams uses pairs of ulongs when
21
// + storing doubles avoid problems with precision
22
// -- appears not to need modification, relying on
23
// RandPoisson::put() instead 4/14/05
24
//
25
// =======================================================================
26
27
#include "CLHEP/Random/defs.h"
28
#include "CLHEP/Random/RandPoissonT.h"
29
#include "CLHEP/Random/RandPoissonQ.h"
30
#include "CLHEP/Random/DoubConv.hh"
31
32
//
33
// Constructors and destructors:
34
//
35
36
namespace
CLHEP {
37
38
std::string
RandPoissonT::name
()
const
{
return
"RandPoissonT"
;}
39
HepRandomEngine
&
RandPoissonT::engine
() {
return
RandPoisson::engine
();}
40
41
RandPoissonT::RandPoissonT
(
HepRandomEngine
& anEngine,
double
m )
42
:
RandPoisson
(anEngine, m)
43
{}
44
45
RandPoissonT::RandPoissonT
(
HepRandomEngine
* anEngine,
double
m )
46
:
RandPoisson
(anEngine, m)
47
{}
48
49
RandPoissonT::~RandPoissonT
() {
50
}
51
52
//
53
// fire, operator(), and shoot methods:
54
//
55
56
long
RandPoissonT::shoot
(
double
xm) {
57
HepRandomEngine
* e =
HepRandom::getTheEngine
();
58
return
shoot
( e, xm );
59
}
// shoot()
60
61
double
RandPoissonT::operator()
() {
62
return
double
(
fire
() );
63
}
64
65
double
RandPoissonT::operator()
(
double
mean ) {
66
return
double
(
fire
( mean ) );
67
}
68
69
long
RandPoissonT::fire
(
double
mean) {
70
return
shoot
(
getLocalEngine
(), mean);
71
}
72
73
long
RandPoissonT::fire
() {
74
75
if
(
defaultMean
<
RandPoissonQ::tableBoundary
() ) {
76
return
RandPoissonQ::shoot
(
getLocalEngine
(),
defaultMean
);
77
}
else
{
78
return
RandPoisson::shoot
(
getLocalEngine
(),
defaultMean
);
79
}
80
81
}
// fire()
82
83
long
RandPoissonT::shoot
(
HepRandomEngine
* anEngine,
double
mean) {
84
85
if
( mean <
RandPoissonQ::tableBoundary
() ) {
86
return
RandPoissonQ::shoot
( anEngine, mean );
87
}
else
{
88
return
RandPoisson::shoot
( anEngine, mean );
89
}
90
91
}
// shoot (anEngine, mean)
92
93
void
RandPoissonT::shootArray
(
const
int
size,
long
* vect,
double
m) {
94
int
i;
95
for
(i=0; i<size; ++i)
96
vect[i] =
shoot
(m);
97
}
98
99
void
RandPoissonT::fireArray
(
const
int
size,
long
* vect,
double
m) {
100
int
i;
101
for
(i=0; i<size; ++i) {
102
vect[i] =
fire
( m );
103
}
104
}
105
106
void
RandPoissonT::fireArray
(
const
int
size,
long
* vect) {
107
int
i;
108
for
(i=0; i<size; ++i) {
109
vect[i] =
fire
(
defaultMean
);
110
}
111
}
112
113
114
std::ostream &
RandPoissonT::put
( std::ostream & os )
const
{
115
int
pr=os.precision(20);
116
os <<
" "
<<
name
() <<
"\n"
;
117
RandPoisson::put
(os);
118
os.precision(pr);
119
return
os;
120
}
121
122
std::istream &
RandPoissonT::get
( std::istream & is ) {
123
std::string inName;
124
is >> inName;
125
if
(inName !=
name
()) {
126
is.clear(std::ios::badbit | is.rdstate());
127
std::cerr <<
"Mismatch when expecting to read state of a "
128
<<
name
() <<
" distribution\n"
129
<<
"Name found was "
<< inName
130
<<
"\nistream is left in the badbit state\n"
;
131
return
is;
132
}
133
RandPoisson::get
(is);
134
return
is;
135
}
136
137
138
}
// namespace CLHEP
Generated on Mon May 6 2013 04:04:11 for CLHEP by
1.8.1.2