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