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