CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

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
36namespace CLHEP {
37
38std::string RandPoissonT::name() const {return "RandPoissonT";}
40
42: RandPoisson(anEngine, m)
43{}
44
46: RandPoisson(anEngine, m)
47{}
48
50}
51
52//
53// fire, operator(), and shoot methods:
54//
55
56long RandPoissonT::shoot(double xm) {
58 return shoot ( e, xm );
59} // shoot()
60
62 return double( fire() );
63}
64
65double RandPoissonT::operator()( double mean ) {
66 return double( fire( mean ) );
67}
68
69long RandPoissonT::fire(double mean) {
70 return shoot (getLocalEngine(), mean);
71}
72
74
77 } else {
79 }
80
81} // fire()
82
83long 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
93void 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
99void 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
106void 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
114std::ostream & RandPoissonT::put ( std::ostream & os ) const {
115 int pr=os.precision(20);
116 os << " " << name() << "\n";
118 os.precision(pr);
119 return os;
120}
121
122std::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 }
134 return is;
135}
136
137
138} // namespace CLHEP
static HepRandomEngine * getTheEngine()
Definition: Random.cc:166
static long shoot(double m=1.0)
static int tableBoundary()
virtual ~RandPoissonT()
Definition: RandPoissonT.cc:49
static void shootArray(const int size, long *vect, double m=1.0)
Definition: RandPoissonT.cc:93
std::istream & get(std::istream &is)
static long shoot(double m=1.0)
Definition: RandPoissonT.cc:56
void fireArray(const int size, long *vect)
std::ostream & put(std::ostream &os) const
std::string name() const
Definition: RandPoissonT.cc:38
RandPoissonT(HepRandomEngine &anEngine, double m=1.0)
Definition: RandPoissonT.cc:41
HepRandomEngine & engine()
Definition: RandPoissonT.cc:39
std::ostream & put(std::ostream &os) const
Definition: RandPoisson.cc:282
HepRandomEngine * getLocalEngine()
static long shoot(double m=1.0)
Definition: RandPoisson.cc:92
std::istream & get(std::istream &is)
Definition: RandPoisson.cc:311
HepRandomEngine & engine()
Definition: RandPoisson.cc:37
#define double(obj)
Definition: excDblThrow.cc:32