Geant4 9.6.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// $Id:$
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
32
33namespace CLHEP {
34
35/**
36 * @author
37 * @ingroup random
38 */
39class RandBit : public RandFlat {
40
41public:
42
43 inline RandBit ( HepRandomEngine& anEngine );
44 inline RandBit ( HepRandomEngine& anEngine, double width );
45 inline RandBit ( HepRandomEngine& anEngine, double a, double b );
46 inline RandBit ( HepRandomEngine* anEngine );
47 inline RandBit ( HepRandomEngine* anEngine, double width );
48 inline RandBit ( HepRandomEngine* anEngine, double a, double b );
49 // These constructors should be used to instantiate a RandBit
50 // distribution object defining a local engine for it.
51 // The static generator will be skipped using the non-static methods
52 // defined below.
53 // If the engine is passed by pointer the corresponding engine object
54 // will be deleted by the RandBit destructor.
55 // If the engine is passed by reference the corresponding engine object
56 // will not be deleted by the RandBit destructor.
57
58 virtual ~RandBit();
59 // Destructor
60
61 // Other than the Bit routines, constructors, and destructor, everything is
62 // simply inherited from RandFlat.
63
64 static inline int shootBit();
65
66 static inline int shootBit( HepRandomEngine* );
67
68 // Methods using the localEngine to shoot random values, by-passing
69 // the static generator.
70
71 inline int fireBit();
72
73 // Save and restore to/from streams
74
75 std::ostream & put ( std::ostream & os ) const;
76 std::istream & get ( std::istream & is );
77
78 std::string name() const;
79
80 static std::string distributionName() {return "RandBit";}
81 // Provides the name of this distribution class
82
83 static std::ostream& saveFullState ( std::ostream & os )
84 // Saves to stream the state of the engine and cached data.
85 {return RandFlat::saveFullState(os);}
86
87 static std::istream& restoreFullState ( std::istream & is )
88 // Restores from stream the state of the engine and cached data.
89 {return RandFlat::restoreFullState(is);}
90
91 static std::ostream& saveDistState ( std::ostream & os )
92 // Saves to stream the state of the cached data.
93 {return RandFlat::saveDistState(os);}
94
95 static std::istream& restoreDistState ( std::istream & is )
96 // Restores from stream the state of the cached data.
97 {return RandFlat::restoreDistState(is);}
98
99
100private:
101
102 // All the engine info, and the default A and B, are in the RandFlat
103 // base class.
104
105};
106
107} // namespace CLHEP
108
109#include "CLHEP/Random/RandBit.icc"
110
111#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:83
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:95
RandBit(HepRandomEngine &anEngine)
static std::ostream & saveDistState(std::ostream &os)
Definition: RandBit.h:91
static std::string distributionName()
Definition: RandBit.h:80
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:87
virtual ~RandBit()
Definition: RandBit.cc:24
static std::ostream & saveFullState(std::ostream &os)
Definition: RandFlat.cc:236
static std::ostream & saveDistState(std::ostream &os)
Definition: RandFlat.cc:202
static std::istream & restoreDistState(std::istream &is)
Definition: RandFlat.cc:211
static std::istream & restoreFullState(std::istream &is)
Definition: RandFlat.cc:242
Definition: DoubConv.h:17