22 {
23
24
25
26
27
28
29
30
31
33 double a = -0.8816 / 10000 / (1 /
theta - 0.1117 / 1000 *
theta) - 0.1096 -
34 0.01966 * TMath::Exp(-0.02040 * theta);
35 double b = 0.4169 / 100 / (1 /
theta - 0.9891 / 10000 *
theta) + 4.0395 -
36 4.3118 * TMath::Exp(0.9235 / 1000 * theta);
37 double btilde = b + 1.0 / TMath::Ln10();
38 double gamma = sqrt(-TMath::Ln10() * a);
39 double offset = 0.5 * btilde / a;
40 double norm = TMath::Erf(gamma * (TMath::Log(100) + offset)) -
41 TMath::Erf(gamma * (offset + TMath::Log(minE)));
42
43 if (generateP) {
44 double r3 =
rng->Uniform();
45 return exp(
46 TMath::ErfInverse(r3 * norm +
47 TMath::Erf(gamma * (offset + TMath::Log(minE)))) /
48 gamma -
49 offset);
50 } else {
52 0.8745 / 100000 * TMath::Exp(0.1457 * theta);
53 double scale = 0.5 * TMath::Sqrt(TMath::Pi()) /
gamma *
54 TMath::Power(10, (-0.25 / a * btilde * btilde + c));
55 return scale * norm;
56 }
57}