ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandLandau.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandLandau.h
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"
33 #include "CLHEP/Utility/memory.h"
34 
35 namespace CLHEP {
36 
41 class RandLandau : public HepRandom {
42 
43 public:
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 
102 protected:
103 
104  static double transform (double r);
105  static double transformSmall (double r);
106 
107 private:
108 
109  std::shared_ptr<HepRandomEngine> localEngine;
110 
111 };
112 
113 } // namespace CLHEP
114 
115 #include "CLHEP/Random/RandLandau.icc"
116 
117 #endif