ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandBit.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandBit.h
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 
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