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