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