ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RandStudentT.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file RandStudentT.h
1 // -*- C++ -*-
2 //
3 // -----------------------------------------------------------------------
4 // HEP Random
5 // --- RandStudentT ---
6 // class header file
7 // -----------------------------------------------------------------------
8 
9 // Class defining methods for shooting Student's t- distributed random
10 // values, given a number of degrees of freedom a (default=1.0).
11 // Default values are used for operator()().
12 
13 // Valid input values are a > 0. When invalid values are presented, the
14 // code silently returns DBL_MAX from <float.h> which is the same as
15 // MAXDOUBLE in <values.h> on systems where the latter exists.
16 
17 // =======================================================================
18 // John Marraffino - Created: Based on the C-Rand package
19 // by Ernst Stadlober and Franz Niederl of the Technical
20 // University of Graz, Austria : 12th May 1998
21 // - Removed <values.h> because that won't work
22 // on NT : 26th Jun 1998
23 // Gabriele Cosmo - Fixed minor bug on inline definition for shoot()
24 // methods. Created .icc file : 20th Aug 1998
25 // - Removed useless methods and data: 5th Jan 1999
26 // M Fischler - put and get to/from streams 12/10/04
27 // =======================================================================
28 
29 #ifndef RandStudentT_h
30 #define RandStudentT_h 1
31 
32 #include "CLHEP/Random/Random.h"
33 #include "CLHEP/Utility/memory.h"
34 
35 namespace CLHEP {
36 
41 class RandStudentT : public HepRandom {
42 
43 public:
44 
45  inline RandStudentT ( HepRandomEngine& anEngine, double a=1.0 );
46  inline RandStudentT ( HepRandomEngine* anEngine, double a=1.0 );
47  // These constructors should be used to instantiate a RandStudentT
48  // distribution object defining a local engine for it.
49  // The static generator will be skipped using the non-static methods
50  // defined below.
51  // If the engine is passed by pointer the corresponding engine object
52  // will be deleted by the RandStudentT destructor.
53  // If the engine is passed by reference the corresponding engine object
54  // will not be deleted by the RandStudentT destructor.
55 
56  virtual ~RandStudentT();
57  // Destructor
58 
59  // Save and restore to/from streams
60 
61  std::ostream & put ( std::ostream & os ) const;
62  std::istream & get ( std::istream & is );
63 
64  // Static methods to shoot random values using the static generator
65 
66  static inline double shoot();
67 
68  static double shoot( double a );
69 
70  static void shootArray ( const int size, double* vect,
71  double a=1.0 );
72 
73  // Static methods to shoot random values using a given engine
74  // by-passing the static generator.
75 
76  static inline double shoot( HepRandomEngine* anEngine );
77 
78  static double shoot( HepRandomEngine* anEngine,
79  double a );
80 
81  static void shootArray ( HepRandomEngine* anEngine, const int size,
82  double* vect, double a=1.0 );
83 
84  // Methods using the localEngine to shoot random values, by-passing
85  // the static generator.
86 
87  inline double fire();
88 
89  double fire( double a );
90 
91  void fireArray ( const int size, double* vect );
92  void fireArray ( const int size, double* vect, double a );
93  double operator()();
94  double operator()( double a );
95 
96  std::string name() const;
98 
99  static std::string distributionName() {return "RandStudentT";}
100  // Provides the name of this distribution class
101 
102 
103 private:
104 
105  std::shared_ptr<HepRandomEngine> localEngine;
106  double defaultA;
107 
108 };
109 
110 } // namespace CLHEP
111 
112 #include "CLHEP/Random/RandStudentT.icc"
113 
114 #endif