Geant4 Cross Reference |
>> 1 // $Id:$ 1 // -*- C++ -*- 2 // -*- C++ -*- 2 // 3 // 3 // ------------------------------------------- 4 // ----------------------------------------------------------------------- 4 // HEP Random 5 // HEP Random 5 // --- RandBit --- 6 // --- RandBit --- 6 // class header file 7 // class header file 7 // ------------------------------------------- 8 // ----------------------------------------------------------------------- 8 // 9 // 9 10 10 // Class defining methods for shooting Flat or 11 // Class defining methods for shooting Flat or Bit random numbers, double or 11 // integers. 12 // integers. 12 // It provides methods to fill with double fla 13 // It provides methods to fill with double flat values arrays of 13 // specified size, as well as methods for shoo 14 // specified size, as well as methods for shooting sequences of 0,1 (bits). 14 // Default boundaries ]0.1[ for operator()(). 15 // Default boundaries ]0.1[ for operator()(). 15 16 16 // This is derived from RandFlat and is a drop 17 // This is derived from RandFlat and is a drop-in replacement. However 17 // the shootBit() and fireBit() methods are st 18 // the shootBit() and fireBit() methods are stateless (which makes them 18 // an order of magnitude slower, but allows sa 19 // an order of magnitude slower, but allows save/restore engine status 19 // to work correctly). 20 // to work correctly). 20 21 21 // =========================================== 22 // ======================================================================= 22 // M. Fischler - Created: 15th Feb 2000 23 // M. Fischler - Created: 15th Feb 2000 23 // M Fischler - put and get to/from strea 24 // M Fischler - put and get to/from streams 12/10/04 24 // M Fischler - static save/restore to st 25 // M Fischler - static save/restore to streams streams 12/20/04 25 // =========================================== 26 // ======================================================================= 26 27 27 #ifndef RandBit_h 28 #ifndef RandBit_h 28 #define RandBit_h 1 29 #define RandBit_h 1 29 30 30 #include "CLHEP/Random/RandFlat.h" 31 #include "CLHEP/Random/RandFlat.h" 31 32 32 namespace CLHEP { 33 namespace CLHEP { 33 34 34 /** 35 /** 35 * @author 36 * @author 36 * @ingroup random 37 * @ingroup random 37 */ 38 */ 38 class RandBit : public RandFlat { 39 class RandBit : public RandFlat { 39 40 40 public: 41 public: 41 42 42 inline RandBit ( HepRandomEngine& anEngine ) 43 inline RandBit ( HepRandomEngine& anEngine ); 43 inline RandBit ( HepRandomEngine& anEngine, 44 inline RandBit ( HepRandomEngine& anEngine, double width ); 44 inline RandBit ( HepRandomEngine& anEngine, 45 inline RandBit ( HepRandomEngine& anEngine, double a, double b ); 45 inline RandBit ( HepRandomEngine* anEngine ) 46 inline RandBit ( HepRandomEngine* anEngine ); 46 inline RandBit ( HepRandomEngine* anEngine, 47 inline RandBit ( HepRandomEngine* anEngine, double width ); 47 inline RandBit ( HepRandomEngine* anEngine, 48 inline RandBit ( HepRandomEngine* anEngine, double a, double b ); 48 // These constructors should be used to inst 49 // These constructors should be used to instantiate a RandBit 49 // distribution object defining a local engi 50 // distribution object defining a local engine for it. 50 // The static generator will be skipped usin 51 // The static generator will be skipped using the non-static methods 51 // defined below. 52 // defined below. 52 // If the engine is passed by pointer the co 53 // If the engine is passed by pointer the corresponding engine object 53 // will be deleted by the RandBit destructor 54 // will be deleted by the RandBit destructor. 54 // If the engine is passed by reference the 55 // If the engine is passed by reference the corresponding engine object 55 // will not be deleted by the RandBit destru 56 // will not be deleted by the RandBit destructor. 56 57 57 virtual ~RandBit(); 58 virtual ~RandBit(); 58 // Destructor 59 // Destructor 59 60 60 // Other than the Bit routines, constructors 61 // Other than the Bit routines, constructors, and destructor, everything is 61 // simply inherited from RandFlat. 62 // simply inherited from RandFlat. 62 63 63 static inline int shootBit(); 64 static inline int shootBit(); 64 65 65 static inline int shootBit( HepRandomEngine 66 static inline int shootBit( HepRandomEngine* ); 66 67 67 // Methods using the localEngine to shoot r 68 // Methods using the localEngine to shoot random values, by-passing 68 // the static generator. 69 // the static generator. 69 70 70 inline int fireBit(); 71 inline int fireBit(); 71 72 72 // Save and restore to/from streams 73 // Save and restore to/from streams 73 74 74 std::ostream & put ( std::ostream & os ) con 75 std::ostream & put ( std::ostream & os ) const; 75 std::istream & get ( std::istream & is ); 76 std::istream & get ( std::istream & is ); 76 77 77 std::string name() const; 78 std::string name() const; 78 79 79 static std::string distributionName() {retur 80 static std::string distributionName() {return "RandBit";} 80 // Provides the name of this distribution cl 81 // Provides the name of this distribution class 81 82 82 static std::ostream& saveFullState ( std::os 83 static std::ostream& saveFullState ( std::ostream & os ) 83 // Saves to stream the state of the engine a 84 // Saves to stream the state of the engine and cached data. 84 {return RandFlat::saveFullState(os 85 {return RandFlat::saveFullState(os);} 85 86 86 static std::istream& restoreFullState ( std: 87 static std::istream& restoreFullState ( std::istream & is ) 87 // Restores from stream the state of the eng 88 // Restores from stream the state of the engine and cached data. 88 {return RandFlat::restoreFullState 89 {return RandFlat::restoreFullState(is);} 89 90 90 static std::ostream& saveDistState ( std::os 91 static std::ostream& saveDistState ( std::ostream & os ) 91 // Saves to stream the state of the cached d 92 // Saves to stream the state of the cached data. 92 {return RandFlat::saveDistState(os 93 {return RandFlat::saveDistState(os);} 93 94 94 static std::istream& restoreDistState ( std: 95 static std::istream& restoreDistState ( std::istream & is ) 95 // Restores from stream the state of the cac 96 // Restores from stream the state of the cached data. 96 {return RandFlat::restoreDistState 97 {return RandFlat::restoreDistState(is);} 97 98 98 99 99 private: 100 private: 100 101 101 // All the engine info, and the default A an 102 // All the engine info, and the default A and B, are in the RandFlat 102 // base class. 103 // base class. 103 104 104 }; 105 }; 105 106 106 } // namespace CLHEP 107 } // namespace CLHEP 107 108 108 #include "CLHEP/Random/RandBit.icc" 109 #include "CLHEP/Random/RandBit.icc" 109 110 110 #endif 111 #endif 111 112