1 // -*- C++ -*-
2 // $Id:
3 //---------------------GammaDistribution------------------------------------//
4 //                                                                          //
5 // Class Gamma, x^a * e(-x/b) / (b^(a+1) Gamma(Alpha+1));                   //
6 // Joe Boudreau, Jan 2007                                                   //
7 //                                                                          //
8 //--------------------------------------------------------------------------//
9 #ifndef GammaDistribution_h
10 #define GammaDistribution_h 1
11 #include "CLHEP/GenericFunctions/AbsFunction.hh"
12 #include "CLHEP/GenericFunctions/Parameter.hh"
13 #include "CLHEP/GenericFunctions/LogGamma.hh"
14 #define _GAMMADISTRIBUTION_REVISED_ 1
15 namespace Genfun {
16 
17   /**
18    * @author
19    * @ingroup genfun
20    */
21   class GammaDistribution : public AbsFunction  {
22 
23     FUNCTION_OBJECT_DEF(GammaDistribution)
24 
25       public:
26 
27     // Constructor
28     GammaDistribution();
29 
30     // Copy constructor
31     GammaDistribution(const GammaDistribution &right);
32 
33     // Destructor
34     virtual ~GammaDistribution();
35 
36     // Retreive function value
37     virtual double operator ()(double argument) const override;
operator ()(const Argument & a) const38     virtual double operator ()(const Argument & a) const override {return operator() (a[0]);}
39 
40     // Get the paramter alpha
41     Parameter & alpha();
42 
43     // Get the paramter alpha
44     Parameter & beta();
45 
46   private:
47 
48     // It is illegal to assign an adjustable constant
49     const GammaDistribution & operator=(const GammaDistribution &right);
50 
51     // Here are the two parameters alpha and beta:
52 
53     Parameter _alpha;
54     Parameter _beta;
55 
56 
57     // This function has a LogGamma Function;
58     LogGamma _logGamma;
59 
60 
61   };
62 } // namespace Genfun
63 #endif
64