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 
36 namespace CLHEP {
37 
42 class RandPoisson : public HepRandom {
43 
44 public:
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;
92  HepRandomEngine & engine();
93 
94  static std::string distributionName() {return "RandPoisson";}
95  // Provides the name of this distribution class
96 
97 protected:
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 
116 private:
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
132 using namespace CLHEP;
133 #endif
134 
135 #include "CLHEP/Random/RandPoisson.icc"
136 
137 #endif
CLHEP::shared_ptr
Definition: Matrix/CLHEP/Utility/memory.h:66
CLHEP::RandPoisson::getPStatus
static double * getPStatus()
Definition: Random/Random/RandPoisson.h:108
CLHEP::RandPoisson::get
std::istream & get(std::istream &is)
Definition: RandPoisson.cc:311
CLHEP::HepRandomEngine
Definition: Matrix/CLHEP/Random/RandomEngine.h:55
CLHEP::RandPoisson::put
std::ostream & put(std::ostream &os) const
Definition: RandPoisson.cc:282
CLHEP::RandPoisson::engine
HepRandomEngine & engine()
Definition: RandPoisson.cc:37
CLHEP::RandPoisson::RandPoisson
RandPoisson(HepRandomEngine &anEngine, double a1=1.0)
CLHEP::RandPoisson::fire
long fire()
Definition: RandPoisson.cc:214
CLHEP::RandPoisson::setOldMean
static void setOldMean(double val)
Definition: Random/Random/RandPoisson.h:106
CLHEP::RandPoisson::distributionName
static std::string distributionName()
Definition: Random/Random/RandPoisson.h:94
is
HepRotation and so forth isNear() norm2() rectify() static Rotation row1 row4(To avoid bloat in the code pulled in for programs which don 't use all these features, we split the implementation .cc files. Only isNear() goes into the original Rotation.cc) --------------------------------------- HepAxisAngle and HepEulerAngles classes --------------------------------------- These classes are very useful and simple structures for holding the result of a nice intuituve decomposition of a rotation there is no longer much content in the distinct ZOOM PhysicsVectors library The only content left in the library is the object files representing the various Exception objects When we build the CLHEP classes for the ZOOM we will set up so as to use ZOOM SpaceVector is(but we can disable namespace usage and most of our users do so at this point). What I do is leave Hep3Vector in the global namespace
CLHEP::RandPoisson::shootArray
static void shootArray(const int size, long *vect, double m=1.0)
Definition: RandPoisson.cc:147
size
user code seldom needs to call this function directly ZMerrno whether or not they are still recorded ZMerrno size() Return the(integer) number of ZMthrow 'n exceptions currently recorded. 5) ZMerrno.clear() Set an internal counter to zero. This counter is available(see next function) to user code to track ZMthrow 'n exceptions that have occurred during any arbitrary time interval. 6) ZMerrno.countSinceCleared() Return the(integer) number of ZMthrow 'n exceptions that have been recorded via ZMerrno.write()
CLHEP::RandPoisson::getMaxMean
static double getMaxMean()
Definition: Random/Random/RandPoisson.h:104
CLHEP
Definition: ClhepVersion.h:13
CLHEP::RandPoisson::defaultMean
double defaultMean
Definition: Matrix/CLHEP/Random/RandPoisson.h:100
CLHEP::RandPoisson::meanMax
double meanMax
Definition: Matrix/CLHEP/Random/RandPoisson.h:99
CLHEP::RandPoisson::getOldMean
static double getOldMean()
Definition: Random/Random/RandPoisson.h:102
CLHEP::RandPoisson::operator()
double operator()()
Definition: RandPoisson.cc:47
CLHEP::RandPoisson::~RandPoisson
virtual ~RandPoisson()
Definition: RandPoisson.cc:44
CLHEP::RandPoisson::getLocalEngine
HepRandomEngine * getLocalEngine()
CLHEP::RandPoisson::fireArray
void fireArray(const int size, long *vect)
Definition: RandPoisson.cc:270
CLHEP::RandPoisson::setPStatus
static void setPStatus(double sq, double alxm, double g1)
Definition: Random/Random/RandPoisson.h:110
CLHEP::RandPoisson::shoot
static long shoot(double m=1.0)
Definition: RandPoisson.cc:92
CLHEP::RandPoisson::name
std::string name() const
Definition: RandPoisson.cc:36