Geant4 Cross Reference |
>> 1 // $Id:$ 1 // -*- C++ -*- 2 // -*- C++ -*- 2 // 3 // 3 // ------------------------------------------- 4 // ----------------------------------------------------------------------- 4 // HEP Random 5 // HEP Random 5 // --- RandStudentT -- 6 // --- RandStudentT --- 6 // class header file 7 // class header file 7 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 8 9 9 // Class defining methods for shooting Student 10 // Class defining methods for shooting Student's t- distributed random 10 // values, given a number of degrees of freedo 11 // values, given a number of degrees of freedom a (default=1.0). 11 // Default values are used for operator()(). 12 // Default values are used for operator()(). 12 13 13 // Valid input values are a > 0. When invalid 14 // Valid input values are a > 0. When invalid values are presented, the 14 // code silently returns DBL_MAX from <float.h 15 // code silently returns DBL_MAX from <float.h> which is the same as 15 // MAXDOUBLE in <values.h> on systems where th 16 // MAXDOUBLE in <values.h> on systems where the latter exists. 16 17 17 // =========================================== 18 // ======================================================================= 18 // John Marraffino - Created: Based on the C-R 19 // John Marraffino - Created: Based on the C-Rand package 19 // by Ernst Stadlober and Fr 20 // by Ernst Stadlober and Franz Niederl of the Technical 20 // University of Graz, Austr 21 // University of Graz, Austria : 12th May 1998 21 // - Removed <values.h> becaus 22 // - Removed <values.h> because that won't work 22 // on NT : 26th Jun 1998 23 // on NT : 26th Jun 1998 23 // Gabriele Cosmo - Fixed minor bug on inline 24 // Gabriele Cosmo - Fixed minor bug on inline definition for shoot() 24 // methods. Created .icc fil 25 // methods. Created .icc file : 20th Aug 1998 25 // - Removed useless methods a 26 // - Removed useless methods and data: 5th Jan 1999 26 // M Fischler - put and get to/from strea 27 // M Fischler - put and get to/from streams 12/10/04 27 // =========================================== 28 // ======================================================================= 28 29 29 #ifndef RandStudentT_h 30 #ifndef RandStudentT_h 30 #define RandStudentT_h 1 31 #define RandStudentT_h 1 31 32 32 #include "CLHEP/Random/Random.h" 33 #include "CLHEP/Random/Random.h" 33 #include "CLHEP/Utility/memory.h" 34 #include "CLHEP/Utility/memory.h" 34 35 35 namespace CLHEP { 36 namespace CLHEP { 36 37 37 /** 38 /** 38 * @author 39 * @author 39 * @ingroup random 40 * @ingroup random 40 */ 41 */ 41 class RandStudentT : public HepRandom { 42 class RandStudentT : public HepRandom { 42 43 43 public: 44 public: 44 45 45 inline RandStudentT ( HepRandomEngine& anEng 46 inline RandStudentT ( HepRandomEngine& anEngine, double a=1.0 ); 46 inline RandStudentT ( HepRandomEngine* anEng 47 inline RandStudentT ( HepRandomEngine* anEngine, double a=1.0 ); 47 // These constructors should be used to inst 48 // These constructors should be used to instantiate a RandStudentT 48 // distribution object defining a local engi 49 // distribution object defining a local engine for it. 49 // The static generator will be skipped usin 50 // The static generator will be skipped using the non-static methods 50 // defined below. 51 // defined below. 51 // If the engine is passed by pointer the co 52 // If the engine is passed by pointer the corresponding engine object 52 // will be deleted by the RandStudentT destr 53 // will be deleted by the RandStudentT destructor. 53 // If the engine is passed by reference the 54 // If the engine is passed by reference the corresponding engine object 54 // will not be deleted by the RandStudentT d 55 // will not be deleted by the RandStudentT destructor. 55 56 56 virtual ~RandStudentT(); 57 virtual ~RandStudentT(); 57 // Destructor 58 // Destructor 58 59 59 // Save and restore to/from streams 60 // Save and restore to/from streams 60 61 61 std::ostream & put ( std::ostream & os ) con 62 std::ostream & put ( std::ostream & os ) const; 62 std::istream & get ( std::istream & is ); 63 std::istream & get ( std::istream & is ); 63 64 64 // Static methods to shoot random values usi 65 // Static methods to shoot random values using the static generator 65 66 66 static inline double shoot(); 67 static inline double shoot(); 67 68 68 static double shoot( double a ); 69 static double shoot( double a ); 69 70 70 static void shootArray ( const int size, do 71 static void shootArray ( const int size, double* vect, 71 double a=1.0 ); 72 double a=1.0 ); 72 73 73 // Static methods to shoot random values us 74 // Static methods to shoot random values using a given engine 74 // by-passing the static generator. 75 // by-passing the static generator. 75 76 76 static inline double shoot( HepRandomEngine 77 static inline double shoot( HepRandomEngine* anEngine ); 77 78 78 static double shoot( HepRandomEngine* anEng 79 static double shoot( HepRandomEngine* anEngine, 79 double a ); 80 double a ); 80 81 81 static void shootArray ( HepRandomEngine* a 82 static void shootArray ( HepRandomEngine* anEngine, const int size, 82 double* vect, doub 83 double* vect, double a=1.0 ); 83 84 84 // Methods using the localEngine to shoot r 85 // Methods using the localEngine to shoot random values, by-passing 85 // the static generator. 86 // the static generator. 86 87 87 inline double fire(); 88 inline double fire(); 88 89 89 double fire( double a ); 90 double fire( double a ); 90 91 91 void fireArray ( const int size, double* vec 92 void fireArray ( const int size, double* vect ); 92 void fireArray ( const int size, double* vec 93 void fireArray ( const int size, double* vect, double a ); 93 double operator()(); 94 double operator()(); 94 double operator()( double a ); 95 double operator()( double a ); 95 96 96 std::string name() const; 97 std::string name() const; 97 HepRandomEngine & engine(); 98 HepRandomEngine & engine(); 98 99 99 static std::string distributionName() {retur 100 static std::string distributionName() {return "RandStudentT";} 100 // Provides the name of this distribution cl 101 // Provides the name of this distribution class 101 102 102 103 103 private: 104 private: 104 105 105 std::shared_ptr<HepRandomEngine> localEngine 106 std::shared_ptr<HepRandomEngine> localEngine; 106 double defaultA; 107 double defaultA; 107 108 108 }; 109 }; 109 110 110 } // namespace CLHEP 111 } // namespace CLHEP 111 112 112 #include "CLHEP/Random/RandStudentT.icc" 113 #include "CLHEP/Random/RandStudentT.icc" 113 114 114 #endif 115 #endif 115 116