31 class JEMShowerCorrection
41 const double P_Atm = 240.0;
45 const JDispersion dispersion(P_Atm);
47 const double xmin = 1.0 / wmax;
48 const double xmax = 1.0 / wmin;
53 for (
double x = xmin, dx = (xmax - xmin) / (
double) nx; x <= xmax; x += dx) {
55 const double w = 1.0 / x;
56 const double dw = dx *
w*
w;
58 const double n = dispersion.getIndexOfRefractionPhase(
w);
67 f1[ 1.0e-3] = 90.96 / 1.0e-3;
68 f1[ 2.0e-3] = 277.36 / 2.0e-3;
69 f1[ 3.0e-3] = 485.82 / 3.0e-3;
70 f1[ 4.0e-3] = 692.83 / 4.0e-3;
71 f1[ 5.0e-3] = 890.01 / 5.0e-3;
72 f1[ 6.0e-3] = 1098.53 / 6.0e-3;
73 f1[ 7.0e-3] = 1285.47 / 7.0e-3;
74 f1[ 8.0e-3] = 1502.86 / 8.0e-3;
75 f1[ 9.0e-3] = 1687.15 / 9.0e-3;
76 f1[10.0e-3] = 1891.00 / 10.0e-3;
81 f2[-2.0] = log(1.891e3 / 1.0e-2);
82 f2[-1.0] = log(1.905e4 / 1.0e-1);
83 f2[ 0.0] = log(1.889e5 / 1.0e+0);
84 f2[+1.0] = log(1.875e6 / 1.0e+1);
85 f2[+2.0] = log(1.881e7 / 1.0e+2);
98 double operator()(
const double E)
const
100 if (E <= f1.getXmin()) {
104 }
else if (E <= f1.getXmax()) {
110 const double x = log10(E);
112 if (x <= f2.getXmin()) {
114 return exp(f2.begin()->getY());
116 }
else if (x <= f2.getXmax()) {
122 return exp(f2.rbegin()->getY());
129 JPolint1Function1D_t f1;
130 JPolint1Function1D_t f2;
137 static const JEMShowerCorrection getEMShowerCorrection;
147 int main(
int argc,
char **argv)
158 JParser<> zap(
"Auxiliary program to draw npe as a function of EM-energy.");
167 catch(
const exception &error) {
168 FATAL(error.what() << endl);
191 const double precision = 1.0e-10;
193 while (fabs(xmax - xmin) > precision) {
195 const double x = 0.5 * (xmin + xmax);
196 const double E = pow(10.0, x);
198 const double y = getEMShowerCorrection(E);
206 const double EMIN = pow(10.0, 0.5*(xmax + xmin));
213 TH1D h0(
"h0", NULL, 10000, -4.0, +4.0);
214 TH1D h1(
"h1", NULL, 10000, -4.0, +4.0);
216 for (
int i = 1; i <= h0.GetNbinsX(); ++i) {
218 const Double_t x = h0.GetBinCenter(i);
219 const Double_t E = pow(10.0, x);
221 h0.SetBinContent(i, E *
geanc() * pdf.getNumberOfPhotons());
222 h1.SetBinContent(i, getEMShowerCorrection(E));