2 #ifndef __JPHYSICS__ANTARES__
3 #define __JPHYSICS__ANTARES__
66 static const double a0 = 1.0;
69 zmap[610.0] = a0/0.2890;
70 zmap[600.0] = a0/0.2440;
71 zmap[590.0] = a0/0.1570;
72 zmap[580.0] = a0/0.1080;
73 zmap[570.0] = a0/0.0799;
74 zmap[560.0] = a0/0.0708;
75 zmap[550.0] = a0/0.0638;
76 zmap[540.0] = a0/0.0558;
77 zmap[530.0] = a0/0.0507;
78 zmap[520.0] = a0/0.0477;
79 zmap[510.0] = a0/0.0357;
80 zmap[500.0] = a0/0.0257;
81 zmap[490.0] = a0/0.0196;
82 zmap[480.0] = a0/0.0182;
83 zmap[470.0] = a0/0.0182;
84 zmap[460.0] = a0/0.0191;
85 zmap[450.0] = a0/0.0200;
86 zmap[440.0] = a0/0.0218;
87 zmap[430.0] = a0/0.0237;
88 zmap[420.0] = a0/0.0255;
89 zmap[410.0] = a0/0.0291;
90 zmap[400.0] = a0/0.0325;
91 zmap[390.0] = a0/0.0363;
92 zmap[380.0] = a0/0.0415;
93 zmap[370.0] = a0/0.0473;
94 zmap[360.0] = a0/0.0528;
95 zmap[350.0] = a0/0.0629;
96 zmap[340.0] = a0/0.0710;
97 zmap[330.0] = a0/0.0792;
98 zmap[320.0] = a0/0.0946;
99 zmap[310.0] = a0/0.1090;
100 zmap[300.0] = a0/0.1390;
104 const double x = lambda;
106 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
108 map_t::const_iterator i = zmap.lower_bound(x);
109 map_t::const_iterator
j = i;
113 if (i == zmap.begin()) {
118 const double x1 = i->first;
119 const double x2 =
j->first;
121 const double y1 = i->second;
122 const double y2 =
j->second;
124 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
147 zmap[307.0] = 19.7132;
148 zmap[330.0] = 23.8280;
149 zmap[350.0] = 27.6075;
150 zmap[370.0] = 31.5448;
151 zmap[390.0] = 35.6151;
152 zmap[410.0] = 39.7971;
153 zmap[430.0] = 44.0726;
154 zmap[450.0] = 48.4261;
155 zmap[470.0] = 52.8447;
156 zmap[490.0] = 57.3172;
157 zmap[510.0] = 61.8344;
158 zmap[530.0] = 66.3884;
159 zmap[550.0] = 70.9723;
160 zmap[570.0] = 75.5804;
161 zmap[590.0] = 80.2077;
162 zmap[610.0] = 84.8497;
166 const double x = lambda;
168 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
170 map_t::const_iterator i = zmap.lower_bound(x);
171 map_t::const_iterator
j = i;
175 if (i == zmap.begin()) {
180 const double x1 = i->first;
181 const double x2 =
j->first;
183 const double y1 = i->second;
184 const double y2 =
j->second;
186 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
205 const double a0 = (1.0 - g*g) / (4*
PI);
206 const double y = 1.0 + g*g - 2.0*g*x;
208 return a0 / (y*sqrt(y));
220 static const double g = 0.924;
237 const double a0 = 1.0 / (1.0 + a/3.0) / (4*
PI);
239 return a0 * (1.0 + a*x*x);
261 inline double f4(
const double x)
263 static const double g1 = 0.77;
264 static const double g2 = 0.00;
265 static const double f = 1.00;
279 static const double g = 0.924;
280 static const double f = 0.17;
306 static const double a0 = 0.3265;
307 static const double a1 = 0.6144;
308 static const double a2 = -0.0343;
309 static const double a3 = -0.0641;
310 static const double a4 = 0.2988;
311 static const double a5 = -0.1422;
320 y = a0 + z*(a1 + z*(a2 + z*(a3 + z*(a4 + z*a5))));
334 static const double a0 = 59.115;
335 static const double a1 = 0.52258;
336 static const double a2 = 0.60944E-02;
337 static const double a3 = -0.16955E-03;
338 static const double a4 = 0.60929E-06;
348 const double z = acos(-x)*57.29578 + 57.75;
350 y = (a0 + z*(a1 + z*(a2 + z*(a3 + z*a4)))) / 84.0;
376 inline double getQE(
const double lambda,
const bool option)
380 tuple(
const double __QE,
381 const double __l_gel,
382 const double __l_glass) :
393 static const tuple ntuple[] = {
394 tuple(0.000e-2, 0.00, 0.00),
395 tuple(1.988e-2, 100.81, 148.37),
396 tuple(2.714e-2, 99.94, 142.87),
397 tuple(3.496e-2, 99.89, 135.64),
398 tuple(4.347e-2, 96.90, 134.58),
399 tuple(5.166e-2, 96.42, 138.27),
400 tuple(6.004e-2, 94.36, 142.40),
401 tuple(6.885e-2, 89.09, 147.16),
402 tuple(8.105e-2, 90.10, 151.80),
403 tuple(10.13e-2, 86.95, 150.88),
404 tuple(13.03e-2, 85.88, 145.68),
405 tuple(15.29e-2, 84.49, 139.70),
406 tuple(16.37e-2, 81.08, 126.55),
407 tuple(17.11e-2, 78.18, 118.86),
408 tuple(17.86e-2, 76.48, 113.90),
409 tuple(18.95e-2, 74.55, 116.08),
410 tuple(20.22e-2, 72.31, 109.23),
411 tuple(21.26e-2, 68.05, 81.63),
412 tuple(22.10e-2, 66.91, 65.66),
413 tuple(22.65e-2, 64.48, 77.30),
414 tuple(23.07e-2, 62.53, 73.02),
415 tuple(23.14e-2, 59.38, 81.25),
416 tuple(23.34e-2, 56.64, 128.04),
417 tuple(22.95e-2, 53.29, 61.84),
418 tuple(22.95e-2, 48.96, 19.23),
419 tuple(22.74e-2, 45.71, 27.21),
420 tuple(23.48e-2, 41.88, 18.09),
421 tuple(22.59e-2, 37.14, 8.41),
422 tuple(20.61e-2, 30.49, 3.92),
423 tuple(17.68e-2, 23.08, 1.82),
424 tuple(13.18e-2, 15.60, 0.84),
425 tuple(7.443e-2, 8.00, 0.39),
426 tuple(2.526e-2, 0.00, 0.17),
427 tuple(0.000e-2, 0.00, 0.00)
430 static const double cola = 0.9;
431 static const double x_glass = 1.5;
432 static const double x_gel = 1.0;
435 static const int N =
sizeof(ntuple) /
sizeof(ntuple[0]) - 1;
437 static const double xmax = 620.0;
438 static const double xmin = 290.0;
440 const double x = lambda;
444 if (x > xmin && x < xmax) {
446 const int i = (int) (N * (x - xmax) / (xmin - xmax));
447 const int j = (i == N ? i - 1 : i + 1);
449 const double x1 = xmax + i * (xmin - xmax) / N;
450 const double x2 = xmax +
j * (xmin - xmax) / N;
452 const double dx = (x - x1) / (x1 - x2);
454 const double QE = ntuple[i].QE + (ntuple[i].QE - ntuple[
j].QE ) * dx;
455 const double l_gel = ntuple[i].l_gel + (ntuple[i].l_gel - ntuple[
j].l_gel ) * dx;
456 const double l_glass = ntuple[i].l_glass + (ntuple[i].l_glass - ntuple[
j].l_glass) * dx;
462 if (l_glass > 0.0 && l_gel > 0.0)
463 y *= exp(-x_glass/l_glass) * exp(-x_gel/l_gel);
479 inline double getQE(
const double lambda)
481 return getQE(lambda,
true);