Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
RandBit.h
Go to the documentation of this file.
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
31
32namespace CLHEP {
33
34/**
35 * @author
36 * @ingroup random
37 */
38class RandBit : public RandFlat {
39
40public:
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
99private:
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
RandBit(HepRandomEngine &anEngine, double width)
RandBit(HepRandomEngine &anEngine, double a, double b)
RandBit(HepRandomEngine *anEngine)
static std::ostream & saveFullState(std::ostream &os)
Definition: RandBit.h:82
std::string name() const
Definition: RandBit.cc:22
std::istream & get(std::istream &is)
Definition: RandBit.cc:33
static int shootBit(HepRandomEngine *)
std::ostream & put(std::ostream &os) const
Definition: RandBit.cc:27
static std::istream & restoreDistState(std::istream &is)
Definition: RandBit.h:94
RandBit(HepRandomEngine &anEngine)
static std::ostream & saveDistState(std::ostream &os)
Definition: RandBit.h:90
static std::string distributionName()
Definition: RandBit.h:79
RandBit(HepRandomEngine *anEngine, double width)
static int shootBit()
RandBit(HepRandomEngine *anEngine, double a, double b)
static std::istream & restoreFullState(std::istream &is)
Definition: RandBit.h:86
virtual ~RandBit()
Definition: RandBit.cc:24
static std::ostream & saveFullState(std::ostream &os)
Definition: RandFlat.cc:238
static std::ostream & saveDistState(std::ostream &os)
Definition: RandFlat.cc:204
static std::istream & restoreDistState(std::istream &is)
Definition: RandFlat.cc:213
static std::istream & restoreFullState(std::istream &is)
Definition: RandFlat.cc:244
Definition: DoubConv.h:17