ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandBreitWigner.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandBreitWigner.h
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 
27 #include "CLHEP/Random/RandFlat.h"
28 #include "CLHEP/Utility/memory.h"
29 
30 namespace CLHEP {
31 
36 class RandBreitWigner : public HepRandom {
37 
38 public:
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 
133 private:
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