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