2 #ifndef __JPHYSICS__TOULON__ 
    3 #define __JPHYSICS__TOULON__ 
   88     const double x = lambda;
 
   90     if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
 
   92       map_t::const_iterator i = zmap.lower_bound(x);
 
   93       map_t::const_iterator 
j = i;
 
   97       if (i == zmap.begin()) {
 
  102       const double x1 = i->first;
 
  103       const double x2 = j->first;
 
  105       const double y1 = i->second;
 
  106       const double y2 = j->second;
 
  108       return y1  +  (y2 - y1) * (x - x1) / (x2 - x1);
 
  130       zmap[300.0] =  32.290;
 
  131       zmap[310.0] =  34.000;
 
  132       zmap[320.0] =  35.730;
 
  133       zmap[330.0] =  37.480;
 
  134       zmap[340.0] =  39.260;
 
  135       zmap[350.0] =  41.070;
 
  136       zmap[360.0] =  42.890;
 
  137       zmap[370.0] =  44.740;
 
  138       zmap[380.0] =  46.600;
 
  139       zmap[390.0] =  48.490;
 
  140       zmap[400.0] =  50.390;
 
  141       zmap[410.0] =  52.310;
 
  142       zmap[420.0] =  54.250;
 
  143       zmap[430.0] =  56.210;
 
  144       zmap[440.0] =  58.180;
 
  145       zmap[450.0] =  60.160;
 
  146       zmap[460.0] =  62.160;
 
  147       zmap[470.0] =  64.180;
 
  148       zmap[480.0] =  66.210;
 
  149       zmap[490.0] =  68.240;
 
  150       zmap[500.0] =  70.300;
 
  151       zmap[510.0] =  72.360;
 
  152       zmap[520.0] =  74.430;
 
  153       zmap[530.0] =  76.510;
 
  154       zmap[540.0] =  78.610;
 
  155       zmap[550.0] =  80.710;
 
  156       zmap[560.0] =  82.820;
 
  157       zmap[570.0] =  84.940;
 
  158       zmap[580.0] =  87.070;
 
  159       zmap[590.0] =  89.200;
 
  160       zmap[600.0] =  91.340;
 
  161       zmap[610.0] =  93.490;
 
  162       zmap[620.0] =  95.000;
 
  165     const double x = lambda;
 
  167     if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
 
  169       map_t::const_iterator i = zmap.lower_bound(x);
 
  170       map_t::const_iterator 
j = i;
 
  174       if (i == zmap.begin()) {
 
  179       const double x1 = i->first;
 
  180       const double x2 = j->first;
 
  182       const double y1 = i->second;
 
  183       const double y2 = j->second;
 
  185       return y1  +  (y2 - y1) * (x - x1) / (x2 - x1);
 
  207       zmap[300.0] =  43.410;
 
  208       zmap[310.0] =  49.990;
 
  209       zmap[320.0] =  57.300;
 
  210       zmap[330.0] =  65.400;
 
  211       zmap[340.0] =  74.360;
 
  212       zmap[350.0] =  84.230;
 
  213       zmap[360.0] =  95.080;
 
  214       zmap[370.0] = 106.970;
 
  215       zmap[380.0] = 119.970;
 
  216       zmap[390.0] = 134.140;
 
  217       zmap[400.0] = 149.570;
 
  218       zmap[410.0] = 166.330;
 
  219       zmap[420.0] = 184.490;
 
  220       zmap[430.0] = 204.130;
 
  221       zmap[440.0] = 225.340;
 
  222       zmap[450.0] = 248.200;
 
  223       zmap[460.0] = 272.800;
 
  224       zmap[470.0] = 299.230;
 
  225       zmap[480.0] = 327.590;
 
  226       zmap[490.0] = 357.960;
 
  227       zmap[500.0] = 390.450;
 
  228       zmap[510.0] = 425.150;
 
  229       zmap[520.0] = 462.170;
 
  230       zmap[530.0] = 501.620;
 
  231       zmap[540.0] = 543.610;
 
  232       zmap[550.0] = 588.240;
 
  233       zmap[560.0] = 635.620;
 
  234       zmap[570.0] = 685.890;
 
  235       zmap[580.0] = 739.150;
 
  236       zmap[590.0] = 795.530;
 
  237       zmap[600.0] = 855.150;
 
  238       zmap[610.0] = 918.140;
 
  239       zmap[620.0] = 979.000;
 
  242     const double x = lambda;
 
  244     if (x > zmap.begin()->first && x < zmap.rbegin()->first) {
 
  246       map_t::const_iterator i = zmap.lower_bound(x);
 
  247       map_t::const_iterator 
j = i;
 
  251       if (i == zmap.begin()) {
 
  256       const double x1 = i->first;
 
  257       const double x2 = j->first;
 
  259       const double y1 = i->second;
 
  260       const double y2 = j->second;
 
  262       return y1  +  (y2 - y1) * (x - x1) / (x2 - x1);
 
  281     const double a0 = 1.0 / (1.0 + a/3.0) / (4*
PI);
 
  283     return a0 * (1.0 + a*x*x); 
 
  307     static JPolint2Function1D_t f1;
 
  311       f1[+0.0017] = +19.377;
 
  312       f1[+0.0022] = +17.907;
 
  313       f1[+0.0028] = +16.464;
 
  314       f1[+0.0035] = +15.333;
 
  315       f1[+0.0044] = +14.148;
 
  316       f1[+0.0055] = +13.043;
 
  317       f1[+0.0069] = +12.059;
 
  318       f1[+0.0087] = +12.021;
 
  319       f1[+0.0110] =  +9.992;
 
  320       f1[+0.0139] =  +8.898;
 
  321       f1[+0.0175] =  +7.853;
 
  322       f1[+0.0220] =  +6.845;
 
  323       f1[+0.0277] =  +5.900;
 
  324       f1[+0.0348] =  +4.989;
 
  325       f1[+0.0438] =  +4.175;
 
  326       f1[+0.0552] =  +3.473;
 
  327       f1[+0.0695] =  +2.870;
 
  328       f1[+0.0875] =  +2.358;
 
  329       f1[+0.1101] =  +1.938;
 
  330       f1[+0.1386] =  +1.579;
 
  331       f1[+0.1745] =  +1.258;
 
  332       f1[+0.2618] =  +0.796;
 
  333       f1[+0.3491] =  +0.525;
 
  334       f1[+0.4363] =  +0.391;
 
  335       f1[+0.5236] =  +0.270;
 
  336       f1[+0.6109] =  +0.214;
 
  337       f1[+0.6981] =  +0.170;
 
  338       f1[+0.7854] =  +0.136;
 
  339       f1[+0.8727] =  +0.110;
 
  340       f1[+0.9599] =  +0.087;
 
  341       f1[+1.0472] =  +0.071;
 
  342       f1[+1.1345] =  +0.060;
 
  343       f1[+1.2217] =  +0.050;
 
  344       f1[+1.3090] =  +0.042;
 
  345       f1[+1.3963] =  +0.036;
 
  346       f1[+1.4835] =  +0.031;
 
  347       f1[+1.5708] =  +0.027;
 
  348       f1[+1.6581] =  +0.024;
 
  349       f1[+1.7453] =  +0.021;
 
  350       f1[+1.8326] =  +0.019;
 
  351       f1[+1.9199] =  +0.017;
 
  352       f1[+2.0071] =  +0.016;
 
  353       f1[+2.0944] =  +0.015;
 
  354       f1[+2.1817] =  +0.013;
 
  355       f1[+2.2689] =  +0.012;
 
  356       f1[+2.3562] =  +0.011;
 
  357       f1[+2.4435] =  +0.009;
 
  358       f1[+2.5307] =  +0.008;
 
  359       f1[+2.6180] =  +0.007;
 
  360       f1[+2.7053] =  +0.007;
 
  361       f1[+2.7925] =  +0.006;
 
  362       f1[+2.8798] =  +0.005;
 
  363       f1[+2.9671] =  +0.003;
 
  364       f1[+3.0543] =  +0.002;
 
  365       f1[+3.1416] =  -0.000;
 
  367       for (JPolint1Function1D_t::iterator i = f1.begin(); i != f1.end(); ++i) {
 
  369         const double x = i->getX();
 
  370         const double y = i->getY();
 
  377       f1.setExceptionHandler(
new JPolint2Function1D_t::JDefaultResult(0.0));
 
  380     const double x = acos(ct);
 
  394     static JGridPolint1Function1D_t f1;
 
  802       f1.setExceptionHandler(
new JGridPolint1Function1D_t::JDefaultResult(0.0));
 
  817   inline double getQE(
const double lambda, 
const bool option)
 
  821       tuple(
const double __QE,
 
  822             const double __l_gel,
 
  823             const double __l_glass) :
 
  834     static const tuple ntuple[] = {
 
  835       tuple(0.000e-2,   0.00,   0.00),
 
  836       tuple(1.988e-2, 100.81, 148.37),
 
  837       tuple(2.714e-2,  99.94, 142.87),
 
  838       tuple(3.496e-2,  99.89, 135.64),
 
  839       tuple(4.347e-2,  96.90, 134.58),
 
  840       tuple(5.166e-2,  96.42, 138.27),
 
  841       tuple(6.004e-2,  94.36, 142.40),
 
  842       tuple(6.885e-2,  89.09, 147.16),
 
  843       tuple(8.105e-2,  90.10, 151.80),
 
  844       tuple(10.13e-2,  86.95, 150.88),
 
  845       tuple(13.03e-2,  85.88, 145.68),
 
  846       tuple(15.29e-2,  84.49, 139.70),
 
  847       tuple(16.37e-2,  81.08, 126.55),
 
  848       tuple(17.11e-2,  78.18, 118.86),
 
  849       tuple(17.86e-2,  76.48, 113.90),
 
  850       tuple(18.95e-2,  74.55, 116.08),
 
  851       tuple(20.22e-2,  72.31, 109.23),
 
  852       tuple(21.26e-2,  68.05,  81.63),
 
  853       tuple(22.10e-2,  66.91,  65.66),
 
  854       tuple(22.65e-2,  64.48,  77.30),
 
  855       tuple(23.07e-2,  62.53,  73.02),
 
  856       tuple(23.14e-2,  59.38,  81.25),
 
  857       tuple(23.34e-2,  56.64, 128.04),
 
  858       tuple(22.95e-2,  53.29,  61.84),
 
  859       tuple(22.95e-2,  48.96,  19.23),
 
  860       tuple(22.74e-2,  45.71,  27.21),
 
  861       tuple(23.48e-2,  41.88,  18.09),
 
  862       tuple(22.59e-2,  37.14,   8.41),
 
  863       tuple(20.61e-2,  30.49,   3.92),
 
  864       tuple(17.68e-2,  23.08,   1.82),
 
  865       tuple(13.18e-2,  15.60,   0.84),
 
  866       tuple(7.443e-2,   8.00,   0.39),
 
  867       tuple(2.526e-2,   0.00,   0.17),
 
  868       tuple(0.000e-2,   0.00,   0.00)
 
  871     static const double cola    = 0.9;      
 
  872     static const double x_glass = 1.5;      
 
  873     static const double x_gel   = 1.0;      
 
  876     static const int    N    = 
sizeof(ntuple) / 
sizeof(ntuple[0])  -  1;
 
  878     static const double xmax = 620.0;       
 
  879     static const double xmin = 290.0;       
 
  881     const double x = lambda;
 
  885     if (x > xmin && x < xmax) {
 
  887       const int i = (int) (N * (x - xmax) / (xmin - xmax));
 
  888       const int j = (i == N ? i - 1 : i + 1); 
 
  890       const double x1 = xmax  +  i * (xmin - xmax) / N;
 
  891       const double x2 = xmax  +  j * (xmin - xmax) / N;
 
  893       const double dx = (x - x1) / (x1 - x2);
 
  895       const double QE      = ntuple[i].QE       +  (ntuple[i].QE      - ntuple[
j].QE     ) * dx;
 
  896       const double l_gel   = ntuple[i].l_gel    +  (ntuple[i].l_gel   - ntuple[
j].l_gel  ) * dx;
 
  897       const double l_glass = ntuple[i].l_glass  +  (ntuple[i].l_glass - ntuple[
j].l_glass) * dx;
 
  903         if (l_glass > 0.0 && l_gel > 0.0)
 
  904           y *= 
exp(-x_glass/l_glass) * 
exp(-x_gel/l_gel);
 
  920   inline double getQE(
const double lambda)
 
  922     return getQE(lambda, 
true);
 
fi JEventTimesliceWriter a
 
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. 
 
then set_variable FORMULA *[0] exp(-0.5 *(x-[1])*(x-[1])/([2]*[2]))" set_variable OUTPUT_FILE histogram.root JHistogram1D -o $WORKDIR/$OUTPUT_FILE -F "$FORMULA" -