CMS 3D CMS Logo

GammaSeries.cc
Go to the documentation of this file.
2 #include <iostream>
3 #include <cmath>
4 
5 #define ITMAX 100 // maximum allowed number of iterations
6 #define EPS 3.0e-7 // relative accuracy
7 
8 float GammaSeries(float a, float x) {
9  if (x < 0.0)
10  std::cerr << "GammaSeries::negative argument x" << std::endl;
11 
12  if (x == 0.)
13  return 0.;
14 
15  if (a == 0.) // this happens at the end, but save all the iterations
16  return 0.;
17 
18  // coefficient c_n of x^n is Gamma(a)/Gamma(a+1+n), which leads to the
19  // recurrence relation c_n = c_(n-1) / (a+n-1) with c_0 = 1/a
20  double term = 1 / a;
21  double sum = term;
22  double aplus = a;
23  for (int index = 1; index <= ITMAX; index++) {
24  ++aplus;
25  term *= x / aplus;
26  sum += term;
27  if (fabs(term) < fabs(sum) * EPS)
28  // global coefficient e^-x * x^a / Gamma(a)
29  return sum;
30  }
31  std::cerr << "GammaSeries::a too large, ITMAX too small" << std::endl;
32  return 0.;
33 }
GammaSeries.h
GammaSeries
float GammaSeries(float a, float x)
Definition: GammaSeries.cc:8
a
double a
Definition: hdecay.h:119
ITMAX
#define ITMAX
Definition: GammaSeries.cc:5
genVertex_cff.x
x
Definition: genVertex_cff.py:12
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.cerr
cerr
Definition: EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0.py:8
EPS
#define EPS
Definition: GammaSeries.cc:6