CLHEP VERSION Reference Documentation
   
CLHEP Home Page     CLHEP Documentation     CLHEP Bug Reports

PtRelFcn.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // $Id:
6 #include <assert.h>
7 #include <cmath> // for pow() and exp() and isfinite()
8 #include <float.h>
9 
10 #if (defined __STRICT_ANSI__) || (defined _WIN32)
11 #ifndef M_PI
12 #define M_PI 3.14159265358979323846
13 #endif // M_PI
14 #endif // __STRICT_ANSI__
15 
16 namespace Genfun {
17 FUNCTION_OBJECT_IMP(PtRelFcn)
18 
20  _p0("P0", 0, 0, 1),
21  _p1("P1", 0, 0, 2),
22  _p2("P2", 1, 0, 10),
23  _p3("P3", 0, 0, 10),
24  _p4("P4", 1.0, 0.1, 5.0),
25  _p5("P5", 0.0, 0, 50)
26 {}
27 
29 }
30 
32 AbsFunction(right),
33 _p0(right._p0),
34 _p1(right._p1),
35 _p2(right._p2),
36 _p3(right._p3),
37 _p4(right._p4),
38 _p5(right._p5)
39 {
40 }
41 
42 double PtRelFcn::operator() (double x) const {
43 
44  double p0 = _p0.getValue();
45  double p1 = _p1.getValue();
46  double p2 = _p2.getValue();
47  double p3 = _p3.getValue();
48  double p4 = _p4.getValue();
49  double p5 = _p5.getValue();
50 
51  //assert ((p0>=0.0) && (p0<=1.0));
52  if (p0<0.0) p0=FLT_MIN;
53  if (p0>1.0) p0=1.0-FLT_MIN;
54 
55  if (x<=0.0) return 1.0E-10;
56 
57  double n = (1+p1)/p3;
58  double a = (1/p3)*std::pow(p2,-n);
59 
60  double norm = 1.0/(a*exp(_logGamma(n)));
61  static const double s2 = sqrt(2.0);
62  double retVal=
63  norm*p0*std::pow(x,p1)*exp(-p2*std::pow(x,p3)) +
64  (2.0/(1+_erf(p5/p4/s2))*(1.0-p0)/(sqrt(2*M_PI)*p4))*exp(-(x-p5)*(x-p5)/(2.0*p4*p4));
65 
66  //if (!std::isfinite(retVal)) return 1.0E-10;
67 
68  return std::max(retVal,1.0E-10);
69 }
70 
72  return _p0;
73 }
74 
75 const Parameter & PtRelFcn::P0() const {
76  return _p0;
77 }
78 
80  return _p1;
81 }
82 
83 const Parameter & PtRelFcn::P1() const {
84  return _p1;
85 }
86 
88  return _p2;
89 }
90 
91 const Parameter & PtRelFcn::P2() const {
92  return _p2;
93 }
94 
96  return _p3;
97 }
98 
99 const Parameter & PtRelFcn::P3() const {
100  return _p3;
101 }
102 
104  return _p4;
105 }
106 
107 const Parameter & PtRelFcn::P4() const {
108  return _p4;
109 }
110 
112  return _p5;
113 }
114 
115 const Parameter & PtRelFcn::P5() const {
116  return _p5;
117 }
118 
119 
120 
121 
122 
123 } // namespace Genfun
incomplete * p0
double norm(const HepGenMatrix &m)
Definition: GenMatrix.cc:57
virtual ~PtRelFcn()
Definition: PtRelFcn.cc:28
Parameter & P3()
Definition: PtRelFcn.cc:95
virtual double getValue() const
Definition: Parameter.cc:27
Parameter & P4()
Definition: PtRelFcn.cc:103
#define FUNCTION_OBJECT_IMP(classname)
virtual double operator()(double argument) const
Definition: PtRelFcn.cc:42
Parameter & P1()
Definition: PtRelFcn.cc:79
Parameter & P5()
Definition: PtRelFcn.cc:111
Parameter & P2()
Definition: PtRelFcn.cc:87
Parameter & P0()
Definition: PtRelFcn.cc:71