Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
32/**
33 * @author <Gabriele.Cosmo@cern.ch>
34 * @ingroup random
35 */
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
143#include "CLHEP/Random/RandBreitWigner.icc"
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::string name() const
void fireArray(const int size, double *vect)
Definition: DoubConv.h:17