2 #ifndef __JPHYSICS__TOULON__
3 #define __JPHYSICS__TOULON__
86 const double x = lambda;
88 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
90 map_t::const_iterator i = zmap.lower_bound(x);
91 map_t::const_iterator
j = i;
95 if (i == zmap.begin()) {
100 const double x1 = i->first;
101 const double x2 = j->first;
103 const double y1 = i->second;
104 const double y2 = j->second;
106 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
128 zmap[300.0] = 32.290;
129 zmap[310.0] = 34.000;
130 zmap[320.0] = 35.730;
131 zmap[330.0] = 37.480;
132 zmap[340.0] = 39.260;
133 zmap[350.0] = 41.070;
134 zmap[360.0] = 42.890;
135 zmap[370.0] = 44.740;
136 zmap[380.0] = 46.600;
137 zmap[390.0] = 48.490;
138 zmap[400.0] = 50.390;
139 zmap[410.0] = 52.310;
140 zmap[420.0] = 54.250;
141 zmap[430.0] = 56.210;
142 zmap[440.0] = 58.180;
143 zmap[450.0] = 60.160;
144 zmap[460.0] = 62.160;
145 zmap[470.0] = 64.180;
146 zmap[480.0] = 66.210;
147 zmap[490.0] = 68.240;
148 zmap[500.0] = 70.300;
149 zmap[510.0] = 72.360;
150 zmap[520.0] = 74.430;
151 zmap[530.0] = 76.510;
152 zmap[540.0] = 78.610;
153 zmap[550.0] = 80.710;
154 zmap[560.0] = 82.820;
155 zmap[570.0] = 84.940;
156 zmap[580.0] = 87.070;
157 zmap[590.0] = 89.200;
158 zmap[600.0] = 91.340;
159 zmap[610.0] = 93.490;
160 zmap[620.0] = 95.000;
163 const double x = lambda;
165 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
167 map_t::const_iterator i = zmap.lower_bound(x);
168 map_t::const_iterator
j = i;
172 if (i == zmap.begin()) {
177 const double x1 = i->first;
178 const double x2 = j->first;
180 const double y1 = i->second;
181 const double y2 = j->second;
183 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
205 zmap[300.0] = 43.410;
206 zmap[310.0] = 49.990;
207 zmap[320.0] = 57.300;
208 zmap[330.0] = 65.400;
209 zmap[340.0] = 74.360;
210 zmap[350.0] = 84.230;
211 zmap[360.0] = 95.080;
212 zmap[370.0] = 106.970;
213 zmap[380.0] = 119.970;
214 zmap[390.0] = 134.140;
215 zmap[400.0] = 149.570;
216 zmap[410.0] = 166.330;
217 zmap[420.0] = 184.490;
218 zmap[430.0] = 204.130;
219 zmap[440.0] = 225.340;
220 zmap[450.0] = 248.200;
221 zmap[460.0] = 272.800;
222 zmap[470.0] = 299.230;
223 zmap[480.0] = 327.590;
224 zmap[490.0] = 357.960;
225 zmap[500.0] = 390.450;
226 zmap[510.0] = 425.150;
227 zmap[520.0] = 462.170;
228 zmap[530.0] = 501.620;
229 zmap[540.0] = 543.610;
230 zmap[550.0] = 588.240;
231 zmap[560.0] = 635.620;
232 zmap[570.0] = 685.890;
233 zmap[580.0] = 739.150;
234 zmap[590.0] = 795.530;
235 zmap[600.0] = 855.150;
236 zmap[610.0] = 918.140;
237 zmap[620.0] = 979.000;
240 const double x = lambda;
242 if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
244 map_t::const_iterator i = zmap.lower_bound(x);
245 map_t::const_iterator
j = i;
249 if (i == zmap.begin()) {
254 const double x1 = i->first;
255 const double x2 = j->first;
257 const double y1 = i->second;
258 const double y2 = j->second;
260 return y1 + (y2 - y1) * (x - x1) / (x2 - x1);
279 const double a0 = 1.0 / (1.0 + a/3.0) / (4*
PI);
281 return a0 * (1.0 + a*x*x);
309 f1[+0.0017] = +19.377;
310 f1[+0.0022] = +17.907;
311 f1[+0.0028] = +16.464;
312 f1[+0.0035] = +15.333;
313 f1[+0.0044] = +14.148;
314 f1[+0.0055] = +13.043;
315 f1[+0.0069] = +12.059;
316 f1[+0.0087] = +12.021;
317 f1[+0.0110] = +9.992;
318 f1[+0.0139] = +8.898;
319 f1[+0.0175] = +7.853;
320 f1[+0.0220] = +6.845;
321 f1[+0.0277] = +5.900;
322 f1[+0.0348] = +4.989;
323 f1[+0.0438] = +4.175;
324 f1[+0.0552] = +3.473;
325 f1[+0.0695] = +2.870;
326 f1[+0.0875] = +2.358;
327 f1[+0.1101] = +1.938;
328 f1[+0.1386] = +1.579;
329 f1[+0.1745] = +1.258;
330 f1[+0.2618] = +0.796;
331 f1[+0.3491] = +0.525;
332 f1[+0.4363] = +0.391;
333 f1[+0.5236] = +0.270;
334 f1[+0.6109] = +0.214;
335 f1[+0.6981] = +0.170;
336 f1[+0.7854] = +0.136;
337 f1[+0.8727] = +0.110;
338 f1[+0.9599] = +0.087;
339 f1[+1.0472] = +0.071;
340 f1[+1.1345] = +0.060;
341 f1[+1.2217] = +0.050;
342 f1[+1.3090] = +0.042;
343 f1[+1.3963] = +0.036;
344 f1[+1.4835] = +0.031;
345 f1[+1.5708] = +0.027;
346 f1[+1.6581] = +0.024;
347 f1[+1.7453] = +0.021;
348 f1[+1.8326] = +0.019;
349 f1[+1.9199] = +0.017;
350 f1[+2.0071] = +0.016;
351 f1[+2.0944] = +0.015;
352 f1[+2.1817] = +0.013;
353 f1[+2.2689] = +0.012;
354 f1[+2.3562] = +0.011;
355 f1[+2.4435] = +0.009;
356 f1[+2.5307] = +0.008;
357 f1[+2.6180] = +0.007;
358 f1[+2.7053] = +0.007;
359 f1[+2.7925] = +0.006;
360 f1[+2.8798] = +0.005;
361 f1[+2.9671] = +0.003;
362 f1[+3.0543] = +0.002;
363 f1[+3.1416] = -0.000;
367 const double x = i->getX();
368 const double y = i->getY();
378 const double x = acos(ct);
815 inline double getQE(
const double lambda,
const bool option)
819 tuple(
const double __QE,
820 const double __l_gel,
821 const double __l_glass) :
832 static const tuple ntuple[] = {
833 tuple(0.000e-2, 0.00, 0.00),
834 tuple(1.988e-2, 100.81, 148.37),
835 tuple(2.714e-2, 99.94, 142.87),
836 tuple(3.496e-2, 99.89, 135.64),
837 tuple(4.347e-2, 96.90, 134.58),
838 tuple(5.166e-2, 96.42, 138.27),
839 tuple(6.004e-2, 94.36, 142.40),
840 tuple(6.885e-2, 89.09, 147.16),
841 tuple(8.105e-2, 90.10, 151.80),
842 tuple(10.13e-2, 86.95, 150.88),
843 tuple(13.03e-2, 85.88, 145.68),
844 tuple(15.29e-2, 84.49, 139.70),
845 tuple(16.37e-2, 81.08, 126.55),
846 tuple(17.11e-2, 78.18, 118.86),
847 tuple(17.86e-2, 76.48, 113.90),
848 tuple(18.95e-2, 74.55, 116.08),
849 tuple(20.22e-2, 72.31, 109.23),
850 tuple(21.26e-2, 68.05, 81.63),
851 tuple(22.10e-2, 66.91, 65.66),
852 tuple(22.65e-2, 64.48, 77.30),
853 tuple(23.07e-2, 62.53, 73.02),
854 tuple(23.14e-2, 59.38, 81.25),
855 tuple(23.34e-2, 56.64, 128.04),
856 tuple(22.95e-2, 53.29, 61.84),
857 tuple(22.95e-2, 48.96, 19.23),
858 tuple(22.74e-2, 45.71, 27.21),
859 tuple(23.48e-2, 41.88, 18.09),
860 tuple(22.59e-2, 37.14, 8.41),
861 tuple(20.61e-2, 30.49, 3.92),
862 tuple(17.68e-2, 23.08, 1.82),
863 tuple(13.18e-2, 15.60, 0.84),
864 tuple(7.443e-2, 8.00, 0.39),
865 tuple(2.526e-2, 0.00, 0.17),
866 tuple(0.000e-2, 0.00, 0.00)
869 static const double cola = 0.9;
870 static const double x_glass = 1.5;
871 static const double x_gel = 1.0;
874 static const int N =
sizeof(ntuple) /
sizeof(ntuple[0]) - 1;
876 static const double xmax = 620.0;
877 static const double xmin = 290.0;
879 const double x = lambda;
883 if (x > xmin && x < xmax) {
885 const int i = (int) (N * (x - xmax) / (xmin - xmax));
886 const int j = (i == N ? i - 1 : i + 1);
888 const double x1 = xmax + i * (xmin - xmax) / N;
889 const double x2 = xmax + j * (xmin - xmax) / N;
891 const double dx = (x - x1) / (x1 - x2);
893 const double QE = ntuple[i].QE + (ntuple[i].QE - ntuple[
j].QE ) * dx;
894 const double l_gel = ntuple[i].l_gel + (ntuple[i].l_gel - ntuple[
j].l_gel ) * dx;
895 const double l_glass = ntuple[i].l_glass + (ntuple[i].l_glass - ntuple[
j].l_glass) * dx;
901 if (l_glass > 0.0 && l_gel > 0.0)
902 y *=
exp(-x_glass/l_glass) *
exp(-x_gel/l_gel);
918 inline double getQE(
const double lambda)
920 return getQE(lambda,
true);
then set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))*exp(-0.5 *(y-[1])*(y-[1])/([2]*[2]))" JF2 -o $WORKDIR/f2.root -F "$FORMULA" -@ "p0
static const double PI
Mathematical constants.
double getQE(const double lambda, const bool option)
Quantum efficiency of 10-inch Hamamatsu PMT.
const double getPhotocathodeArea()
Photo-cathode area 10 inch PMT.
double getAngularAcceptance(const double x)
Angular acceptence of Antares PMT.
double getRayleighScatteringLength(const double lambda)
Rayleigh scattering length.
then $JPP_DIR software JCalibrate JCalibrateToT a
double rayleigh(const double a, const double x)
Auxiliary method to describe light scattering in water (Rayleigh)
double getMieScatteringLength(const double lambda)
Mie scattering length.
then usage $script[input file[working directory[option]]] nWhere option can be N
double getAbsorptionLength(const double lambda)
Absoption length.
double getPetzholdScatteringProbability(const double ct)
Function to describe light scattering in water.