Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
RandChiSquare.h
Go to the documentation of this file.
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"
29
30namespace CLHEP {
31
32/**
33 * @author
34 * @ingroup random
35 */
36class RandChiSquare : public HepRandom {
37
38public:
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
98private:
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
static double shoot(HepRandomEngine *anEngine)
void fireArray(const int size, double *vect)
std::istream & get(std::istream &is)
static double shoot()
double operator()(double a)
std::string name() const
static std::string distributionName()
Definition: RandChiSquare.h:95
HepRandomEngine & engine()
RandChiSquare(HepRandomEngine &anEngine, double a=1)
static void shootArray(const int size, double *vect, double a=1.0)
std::ostream & put(std::ostream &os) const
RandChiSquare(HepRandomEngine *anEngine, double a=1)
Definition: DoubConv.h:17