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.
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.