Geant4-11
RandBreitWigner.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- RandBreitWigner ---
6// class header file
7// -----------------------------------------------------------------------
8// This file is part of Geant4 (simulation toolkit for HEP).
9//
10// Class defining methods for shooting numbers according to the
11// Breit-Wigner distribution algorithms (plain or mean^2).
12// Default values are set: mean=1, gamma=.2, cut=1.
13// Plain algorithm is used for shootArray() and fireArray().
14// Plain algorithm with default values is used for operator()().
15
16// =======================================================================
17// Gabriele Cosmo - Created: 5th September 1995
18// - Added methods to shoot arrays: 28th July 1997
19// J.Marraffino - Added default arguments as attributes and
20// operator() with arguments: 16th Feb 1998
21// M Fischler - put and get to/from streams 12/10/04
22// =======================================================================
23
24#ifndef RandBreitWigner_h
25#define RandBreitWigner_h 1
26
29
30namespace CLHEP {
31
36class RandBreitWigner : public HepRandom {
37
38public:
39
40 inline RandBreitWigner ( HepRandomEngine& anEngine, double a=1.0,
41 double b=0.2 );
42 inline RandBreitWigner ( HepRandomEngine* anEngine, double a=1.0,
43 double b=0.2 );
44 // These constructors should be used to instantiate a RandBreitWigner
45 // distribution object defining a local engine for it.
46 // The static generator will be skipped using the non-static methods
47 // defined below.
48 // If the engine is passed by pointer the corresponding engine object
49 // will be deleted by the RandBreitWigner destructor.
50 // If the engine is passed by reference the corresponding engine object
51 // will not be deleted by the RandBreitWigner destructor.
52
53 virtual ~RandBreitWigner();
54 // Destructor
55
56 // Static methods to shoot random values using the static generator
57
58 static double shoot( double a=1.0, double b=0.2 );
59
60 static double shoot( double a, double b, double c );
61
62 static double shootM2( double a=1.0, double b=0.2 );
63
64 static double shootM2( double a, double b, double c );
65
66 static void shootArray ( const int size, double* vect);
67
68 static void shootArray ( const int size, double* vect,
69 double a, double b );
70
71 static void shootArray ( const int size, double* vect,
72 double a, double b, double c );
73
74 // Static methods to shoot random values using a given engine
75 // by-passing the static generator.
76
77 static double shoot( HepRandomEngine* anEngine, double a=1.0,
78 double b=0.2 );
79 static double shoot( HepRandomEngine* anEngine, double a,
80 double b, double c );
81 static double shootM2( HepRandomEngine* anEngine, double a=1.0,
82 double b=0.2 );
83 static double shootM2( HepRandomEngine* anEngine, double a,
84 double b, double c );
85 static void shootArray ( HepRandomEngine* anEngine,
86 const int size, double* vect );
87 static void shootArray ( HepRandomEngine* anEngine,
88 const int size, double* vect,
89 double a, double b );
90 static void shootArray ( HepRandomEngine* anEngine,
91 const int size, double* vect,
92 double a, double b, double c );
93
94 // Methods using the localEngine to shoot random values, by-passing
95 // the static generator. These methods respect distribution parameters
96 // passed by the user at instantiation unless superseded by actual
97 // arguments in the call.
98
99 double fire();
100
101 double fire( double a, double b );
102
103 double fire( double a, double b, double c );
104
105 double fireM2();
106
107 double fireM2( double a, double b );
108
109 double fireM2( double a, double b, double c );
110
111 void fireArray ( const int size, double* vect);
112
113 void fireArray ( const int size, double* vect,
114 double a, double b );
115
116 void fireArray ( const int size, double* vect,
117 double a, double b, double c );
118 double operator()();
119 double operator()( double a, double b );
120 double operator()( double a, double b, double c );
121
122 // Save and restore to/from streams
123
124 std::ostream & put ( std::ostream & os ) const;
125 std::istream & get ( std::istream & is );
126
127 std::string name() const;
129
130 static std::string distributionName() {return "RandBreitWigner";}
131 // Provides the name of this distribution class
132
133private:
134
135 std::shared_ptr<HepRandomEngine> localEngine;
136 double defaultA;
137 double defaultB;
138
139};
140
141} // namespace CLHEP
142
144
145#endif
HepRandomEngine & engine()
static double shootM2(double a=1.0, double b=0.2)
static void shootArray(const int size, double *vect)
std::istream & get(std::istream &is)
RandBreitWigner(HepRandomEngine *anEngine, double a=1.0, double b=0.2)
static double shoot(double a=1.0, double b=0.2)
std::ostream & put(std::ostream &os) const
static std::string distributionName()
RandBreitWigner(HepRandomEngine &anEngine, double a=1.0, double b=0.2)
std::shared_ptr< HepRandomEngine > localEngine
std::string name() const
void fireArray(const int size, double *vect)
Definition: DoubConv.h:17