Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
RandLandau.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// -----------------------------------------------------------------------
4// HEP Random
5// --- RandLandau ---
6// class header file
7// -----------------------------------------------------------------------
8// This file is part of Geant4 (simulation toolkit for HEP).
9
10// Class defining methods for shooting or firing Landau distributed
11// random values.
12//
13// The Landau distribution is parameterless and describes the fluctuations
14// in energy loss of a particle, making certain assumptions. For
15// definitions and algorithms, the following papers could be read:
16//
17// Landau, Jour Phys VIII, No. 4, p. 201 (1944)
18// Borsh-Supan, Jour Res. of NBS 65B NO. 4 p. 245 (1961)
19// Kolbig & Schorr Comp Phys Comm 31 p. 97 (1984)
20//
21// The algorithm implemented comes form RANLAN in CERNLIB.
22
23// =======================================================================
24// M. Fischler - Created: 5th January 2000
25// M Fischler - put and get to/from streams 12/10/04
26//
27// =======================================================================
28
29#ifndef RandLandau_h
30#define RandLandau_h 1
31
32#include "CLHEP/Random/Random.h"
34
35namespace CLHEP {
36
37/**
38 * @author
39 * @ingroup random
40 */
41class RandLandau : public HepRandom {
42
43public:
44
45 inline RandLandau ( HepRandomEngine& anEngine );
46 inline RandLandau ( HepRandomEngine* anEngine );
47
48 // These constructors should be used to instantiate a RandLandau
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 RandLandau destructor.
54 // If the engine is passed by reference the corresponding engine object
55 // will not be deleted by the RandLandau destructor.
56
57 virtual ~RandLandau();
58 // Destructor
59
60 // Save and restore to/from streams
61
62 std::ostream & put ( std::ostream & os ) const;
63 std::istream & get ( std::istream & is );
64
65 //
66 // Methods to generate Landau-distributed random deviates.
67 //
68 // These deviates are accurate to the actual Landau distribution to
69 // one part in 10**5 or better.
70
71 // Static methods to shoot random values using the static generator
72
73 static inline double shoot();
74
75 static void shootArray ( const int size, double* vect );
76
77 // Static methods to shoot random values using a given engine
78 // by-passing the static generator.
79
80 static inline double shoot( HepRandomEngine* anotherEngine );
81
82 static void shootArray ( HepRandomEngine* anotherEngine,
83 const int size,
84 double* vect );
85
86 // Instance methods using the localEngine to instead of the static
87 // generator, and the default mean and stdDev established at construction
88
89 inline double fire();
90
91 void fireArray ( const int size, double* vect);
92
93 inline double operator()();
94
95 std::string name() const;
97
98 static std::string distributionName() {return "RandLandau";}
99 // Provides the name of this distribution class
100
101
102protected:
103
104 static double transform (double r);
105 static double transformSmall (double r);
106
107private:
108
109 std::shared_ptr<HepRandomEngine> localEngine;
110
111};
112
113} // namespace CLHEP
114
115#include "CLHEP/Random/RandLandau.icc"
116
117#endif
static double shoot()
static double transformSmall(double r)
RandLandau(HepRandomEngine &anEngine)
std::string name() const
Definition RandLandau.cc:26
static double transform(double r)
static void shootArray(const int size, double *vect)
Definition RandLandau.cc:32
virtual ~RandLandau()
Definition RandLandau.cc:29
std::istream & get(std::istream &is)
void fireArray(const int size, double *vect)
Definition RandLandau.cc:46
static std::string distributionName()
Definition RandLandau.h:98
static double shoot(HepRandomEngine *anotherEngine)
std::ostream & put(std::ostream &os) const
RandLandau(HepRandomEngine *anEngine)
HepRandomEngine & engine()
Definition RandLandau.cc:27