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