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

Random/Random/RandPoisson.h
Go to the documentation of this file.
1// $Id: RandPoisson.h,v 1.5 2010/06/16 17:24:53 garren Exp $
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/defs.h"
33#include "CLHEP/Random/Random.h"
34#include "CLHEP/Utility/memory.h"
35
36namespace CLHEP {
37
42class RandPoisson : public HepRandom {
43
44public:
45
46 inline RandPoisson ( HepRandomEngine& anEngine, double a1=1.0 );
47 inline RandPoisson ( HepRandomEngine* anEngine, double a1=1.0 );
48 // These constructors should be used to instantiate a RandPoisson
49 // distribution object defining a local engine for it.
50 // The static generator will be skipped using the non-static methods
51 // defined below.
52 // If the engine is passed by pointer the corresponding engine object
53 // will be deleted by the RandPoisson destructor.
54 // If the engine is passed by reference the corresponding engine object
55 // will not be deleted by the RandPoisson destructor.
56
57 virtual ~RandPoisson();
58 // Destructor
59
60 // Save and restore to/from streams
61
62 std::ostream & put ( std::ostream & os ) const;
63 std::istream & get ( std::istream & is );
64
65 // Static methods to shoot random values using the static generator
66
67 static long shoot( double m=1.0 );
68
69 static void shootArray ( const int size, long* vect, double m=1.0 );
70
71 // Static methods to shoot random values using a given engine
72 // by-passing the static generator.
73
74 static long shoot( HepRandomEngine* anEngine, double m=1.0 );
75
76 static void shootArray ( HepRandomEngine* anEngine,
77 const int size, long* vect, double m=1.0 );
78
79 // Methods using the localEngine to shoot random values, by-passing
80 // the static generator.
81
82 long fire();
83 long fire( double m );
84
85 void fireArray ( const int size, long* vect );
86 void fireArray ( const int size, long* vect, double m);
87
88 double operator()();
89 double operator()( double m );
90
91 std::string name() const;
93
94 static std::string distributionName() {return "RandPoisson";}
95 // Provides the name of this distribution class
96
97protected:
98
99 double meanMax;
100 double defaultMean;
101
102 static double getOldMean() {return oldm_st;}
103
104 static double getMaxMean() {return meanMax_st;}
105
106 static void setOldMean( double val ){oldm_st = val;}
107
108 static double* getPStatus() {return status_st;}
109
110 static void setPStatus(double sq, double alxm, double g1) {
111 status_st[0] = sq; status_st[1] = alxm; status_st[2] = g1;
112 }
113
115
116private:
117
118 shared_ptr<HepRandomEngine> localEngine;
119 double status[3], oldm;
120
121 // static data
122 static double status_st[3];
123 static double oldm_st;
124 static const double meanMax_st;
125
126};
127
128} // namespace CLHEP
129
130#ifdef ENABLE_BACKWARDS_COMPATIBILITY
131// backwards compatibility will be enabled ONLY in CLHEP 1.9
132using namespace CLHEP;
133#endif
134
135#include "CLHEP/Random/RandPoisson.icc"
136
137#endif
std::string name() const
std::ostream & put(std::ostream &os) const
static void shootArray(const int size, long *vect, double m=1.0)
static long shoot(double m=1.0)
static std::string distributionName()
double operator()(double m)
HepRandomEngine * getLocalEngine()
RandPoisson(HepRandomEngine &anEngine, double a1=1.0)
long fire(double m)
virtual ~RandPoisson()
static void setOldMean(double val)
static void setPStatus(double sq, double alxm, double g1)
static long shoot(HepRandomEngine *anEngine, double m=1.0)
void fireArray(const int size, long *vect)
void fireArray(const int size, long *vect, double m)
std::istream & get(std::istream &is)
RandPoisson(HepRandomEngine *anEngine, double a1=1.0)
HepRandomEngine & engine()
static void shootArray(HepRandomEngine *anEngine, const int size, long *vect, double m=1.0)