Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JPDFToolkit.hh
Go to the documentation of this file.
1 #ifndef __JPHYSICS__JPDFTOOLKIT__
2 #define __JPHYSICS__JPDFTOOLKIT__
3 
4 #include <vector>
5 #include <cmath>
6 
7 #include "JLang/JCC.hh"
8 #include "JTools/JConstants.hh"
10 #include "JIO/JSerialisable.hh"
11 
12 /**
13  * \file
14  * Auxiliary methods for PDF calculations.
15  * \author mdejong
16  */
17 
18 namespace JPHYSICS {}
19 namespace JPP { using namespace JPHYSICS; }
20 
21 namespace JPHYSICS {
22 
23  using JIO::JReader;
24  using JIO::JWriter;
27 
28 
29  /**
30  * Get minimal wavelength for PDF evaluations.
31  *
32  * \return wavelength of light [nm]
33  */
34  inline double getMinimalWavelength()
35  {
36  return 300.0;
37  }
38 
39 
40  /**
41  * Get maximal wavelength for PDF evaluations.
42  *
43  * \return wavelength of light [nm]
44  */
45  inline double getMaximalWavelength()
46  {
47  return 700.0;
48  }
49 
50 
51  /**
52  * Number of Cherenkov photons per unit track length and per unit wavelength.
53  *
54  * \param lambda wavelength of light [nm]
55  * \param n index of refraction
56  * \return number of photons per unit track length and per unit wavelength [m^-1 nm^-1]
57  */
58  inline double cherenkov(const double lambda,
59  const double n)
60  {
61  using namespace JTOOLS;
62 
63  const double x = n*lambda;
64 
65  return 1.0e9 * 2 * PI * ALPHA_ELECTRO_MAGNETIC * (n*n - 1.0) / (x*x);
66  }
67 
68 
69  /**
70  * Equivalent EM-shower energy due to delta-rays per unit muon track length.
71  *
72  * Internal parameters are obtained with application [script] JDeltaRays[.sh].
73  *
74  * \param E muon energy [GeV]
75  * \return equivalent energy loss [GeV/m]
76  */
77  inline double getDeltaRaysFromMuon(const double E)
78  {
79  static const double a = 3.186e-01;
80  static const double b = 3.384e-01;
81  static const double c = -2.759e-02;
82  static const double d = 1.630e-03;
83  static const double Emin = 0.13078; // [GeV]
84 
85  if (E > Emin) {
86 
87  const double x = log10(E); //
88  const double y = a + x*(b + x*(c + x*(d))); // [MeV g^-1 cm^2]
89 
90  return y * JTOOLS::DENSITY_SEA_WATER * 1.0e-1; // [GeV/m]
91  }
92 
93  return 0.0;
94  }
95 
96 
97  /**
98  * Equivalent EM-shower energy due to delta-rays per unit tau track length.
99  *
100  * Internal parameters are obtained with application [script] JDeltaRays[.sh].
101  *
102  * \param E tau energy [GeV]
103  * \return equivalent energy loss [GeV/m]
104  */
105  inline double getDeltaRaysFromTau(const double E)
106  {
107  static const double a = -2.374e-01;
108  static const double b = 5.143e-01;
109  static const double c = -4.213e-02;
110  static const double d = 1.804e-03;
111  static const double Emin = 2.19500; // [GeV]
112 
113  if (E > Emin) {
114 
115  const double x = log10(E); //
116  const double y = a + x*(b + x*(c + x*(d))); // [MeV g^-1 cm^2]
117 
118  return y * JTOOLS::DENSITY_SEA_WATER * 1.0e-1; // [GeV/m]
119  }
120 
121  return 0.0;
122  }
123 
124 
125  /**
126  * Rayleigh cross section.
127  *
128  * \param n index of refraction
129  * \param lambda wavelength of light [nm]
130  * \return cross section [cm^2]
131  */
132  inline const double getRayleighCrossSection(const double n,
133  const double lambda)
134  {
135  using JTOOLS::PI;
136 
137  static const double d = 0.36; // size of H2O molecule [nm]
138  static const double U = PI*PI*PI*PI*PI*2.0/3.0;
139  static const double V = d*d*d*d*d*d;
140 
141  const double W = (n*n - 1.0) / (n*n + 2.0);
142  const double sigma = 1.0e-14 * U*V*W*W / (lambda*lambda*lambda*lambda); // [cm^2]
143 
144  return sigma;
145  }
146 
147 
148  /**
149  * Rayleigh scattering length.
150  *
151  * \param n index of refraction
152  * \param lambda wavelength of light [nm]
153  * \return scattering length [m]
154  */
155  inline const double getRayleighScatteringLength(const double n,
156  const double lambda)
157  {
158  using namespace JTOOLS;
159 
160  static const double amu = 18.01528; // H20 mass in Atomic mass units
161 
162  const double sigma = getRayleighCrossSection(n, lambda);
163  const double ls = 1.0e-2 / (DENSITY_SEA_WATER * AVOGADRO * sigma / amu); // [m]
164 
165  return ls;
166  }
167 
168 
169  /**
170  * Absorption length of pure water.
171  *
172  * CITATION:
173  * Jonasz M. 2007. Absorption coefficient of water: Data sources (www.tpdsci.com/Tpc/AbsCfOfWaterDat.php).
174  * In: Top. Part. Disp. Sci. (www.tpdsci.com).
175  *
176  * DATA FROM:
177  * Wozniak B., Wozniak S. B., Tyszka K., Ostrowska M., Majchrowski R., Ficek D., Dera J. 2005.
178  * Modelling the light absorption properties of particulate matter forming organic particles suspended in seawater. Part 2.
179  * Modelling results. Oceanologia 47, 621-662.
180  * see also
181  * Wozniak B., Dera J. 2007.
182  * Light absorption in sea water. Springer, Berlin, 456 pp. (see p. 62)
183  *
184  * NOTES:
185  * As stated by the data authors, the data are based on measurement results obtained by various authors
186  * (interpolated by a linear approximation where applicable):
187  * Wavelength Reference
188  * - 200-335 nm Smith R.C., Baker K.S. 1981. Optical properties of the clearest natural waters (200-800 nm). Appl. Opt. 20, 177-184.
189  * - 340-370 nm Sogandares F.M., Fry, E.S. 1997. Absorption spectrum (340 -640 nm) of pure water. I. Photothermal measurements Appl. Opt. 36, 8699-8709.
190  * - 380-700 nm Pope R.M., Fry E.S. 1997. Absorption spectrum (380 -700 nm) of pure water. II. Integrating cavity measurements. Appl. Opt. 36, 8710-8723
191  */
194  {
195  public:
197  {
198  // wave- absorption
199  // length coefficient
200  // [um] [1/m]
201  (*this)[0.200e3] = 3.07;
202  (*this)[0.205e3] = 2.53;
203  (*this)[0.210e3] = 1.99;
204  (*this)[0.215e3] = 1.65;
205  (*this)[0.220e3] = 1.31;
206  (*this)[0.225e3] = 1.1185;
207  (*this)[0.230e3] = 0.927;
208  (*this)[0.235e3] = 0.8235;
209  (*this)[0.240e3] = 0.72;
210  (*this)[0.245e3] = 0.6395;
211  (*this)[0.250e3] = 0.559;
212  (*this)[0.255e3] = 0.508;
213  (*this)[0.260e3] = 0.457;
214  (*this)[0.265e3] = 0.415;
215  (*this)[0.270e3] = 0.373;
216  (*this)[0.275e3] = 0.3305;
217  (*this)[0.280e3] = 0.288;
218  (*this)[0.285e3] = 0.2515;
219  (*this)[0.290e3] = 0.215;
220  (*this)[0.295e3] = 0.178;
221  (*this)[0.300e3] = 0.141;
222  (*this)[0.305e3] = 0.123;
223  (*this)[0.310e3] = 0.105;
224  (*this)[0.315e3] = 0.0947;
225  (*this)[0.320e3] = 0.0844;
226  (*this)[0.325e3] = 0.0761;
227  (*this)[0.330e3] = 0.0678;
228  (*this)[0.335e3] = 0.06195;
229  (*this)[0.340e3] = 0.0325;
230  (*this)[0.345e3] = 0.02645;
231  (*this)[0.350e3] = 0.0204;
232  (*this)[0.355e3] = 0.018;
233  (*this)[0.360e3] = 0.0156;
234  (*this)[0.365e3] = 0.0135;
235  (*this)[0.370e3] = 0.0114;
236  (*this)[0.375e3] = 0.011385;
237  (*this)[0.380e3] = 0.01137;
238  (*this)[0.385e3] = 0.00941;
239  (*this)[0.390e3] = 0.00851;
240  (*this)[0.395e3] = 0.00813;
241  (*this)[0.400e3] = 0.00663;
242  (*this)[0.405e3] = 0.0053;
243  (*this)[0.410e3] = 0.00473;
244  (*this)[0.415e3] = 0.00444;
245  (*this)[0.420e3] = 0.00454;
246  (*this)[0.425e3] = 0.00478;
247  (*this)[0.430e3] = 0.00495;
248  (*this)[0.435e3] = 0.0053;
249  (*this)[0.440e3] = 0.00635;
250  (*this)[0.445e3] = 0.00751;
251  (*this)[0.450e3] = 0.00922;
252  (*this)[0.455e3] = 0.00962;
253  (*this)[0.460e3] = 0.00979;
254  (*this)[0.465e3] = 0.01011;
255  (*this)[0.470e3] = 0.0106;
256  (*this)[0.475e3] = 0.0114;
257  (*this)[0.480e3] = 0.0127;
258  (*this)[0.485e3] = 0.0136;
259  (*this)[0.490e3] = 0.015;
260  (*this)[0.495e3] = 0.0173;
261  (*this)[0.500e3] = 0.0204;
262  (*this)[0.505e3] = 0.0256;
263  (*this)[0.510e3] = 0.0325;
264  (*this)[0.515e3] = 0.0396;
265  (*this)[0.520e3] = 0.0409;
266  (*this)[0.525e3] = 0.0417;
267  (*this)[0.530e3] = 0.0434;
268  (*this)[0.535e3] = 0.0452;
269  (*this)[0.540e3] = 0.0474;
270  (*this)[0.545e3] = 0.0511;
271  (*this)[0.550e3] = 0.0565;
272  (*this)[0.555e3] = 0.0596;
273  (*this)[0.560e3] = 0.0619;
274  (*this)[0.565e3] = 0.0642;
275  (*this)[0.570e3] = 0.0695;
276  (*this)[0.575e3] = 0.0772;
277  (*this)[0.580e3] = 0.0896;
278  (*this)[0.585e3] = 0.11;
279  (*this)[0.590e3] = 0.1351;
280  (*this)[0.595e3] = 0.1672;
281  (*this)[0.600e3] = 0.2224;
282  (*this)[0.605e3] = 0.2577;
283  (*this)[0.610e3] = 0.2644;
284  (*this)[0.615e3] = 0.2678;
285  (*this)[0.620e3] = 0.2755;
286  (*this)[0.625e3] = 0.2834;
287  (*this)[0.630e3] = 0.2916;
288  (*this)[0.635e3] = 0.3012;
289  (*this)[0.640e3] = 0.3108;
290  (*this)[0.645e3] = 0.325;
291  (*this)[0.650e3] = 0.34;
292  (*this)[0.655e3] = 0.371;
293  (*this)[0.660e3] = 0.41;
294  (*this)[0.665e3] = 0.429;
295  (*this)[0.670e3] = 0.439;
296  (*this)[0.675e3] = 0.448;
297  (*this)[0.680e3] = 0.465;
298  (*this)[0.685e3] = 0.486;
299  (*this)[0.690e3] = 0.516;
300  (*this)[0.695e3] = 0.559;
301  (*this)[0.700e3] = 0.624;
302 
303  compile();
304  }
305 
306 
307  /**
308  * Absorption length of pure water.
309  *
310  * \param lambda wavelength of light [nm]
311  * \return absorption length [m]
312  */
313  double operator()(const double lambda) const
314  {
315  const double y = JGridSplineFunction1D_t::operator()(lambda);
316 
317  return 1.0 / y;
318  }
319  };
320 
321 
322  /**
323  * Function object for absorption length of pure water.
324  */
326 }
327 
328 #endif
Type definition of a zero degree polynomial interpolation based on a JGridCollection with result type...
Interface for binary output.
result_type operator()(const argument_type x) const
Function value evaluation.
Definition: JFunctional.hh:333
static const double DENSITY_SEA_WATER
Fixed environment values.
Definition: JConstants.hh:34
static const JAbsorptionLengthOfPureWater getAbsorptionLengthOfPureWater
Function object for absorption length of pure water.
Definition: JPDFToolkit.hh:325
double operator()(const double lambda) const
Absorption length of pure water.
Definition: JPDFToolkit.hh:313
double getDeltaRaysFromTau(const double E)
Equivalent EM-shower energy due to delta-rays per unit tau track length.
Definition: JPDFToolkit.hh:105
static const double PI
Constants.
Definition: JConstants.hh:20
Type definition of a spline interpolation based on a JGridCollection with result type double...
static const double ALPHA_ELECTRO_MAGNETIC
Electro-Magnetic coupling constant.
Definition: JConstants.hh:28
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
Definition: JPDFToolkit.hh:34
const double getRayleighScatteringLength(const double n, const double lambda)
Rayleigh scattering length.
Definition: JPDFToolkit.hh:155
fi JEventTimesliceWriter a
const double getRayleighCrossSection(const double n, const double lambda)
Rayleigh cross section.
Definition: JPDFToolkit.hh:132
Compiler version dependent expressions, macros, etc.
Absorption length of pure water.
Definition: JPDFToolkit.hh:192
Constants.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
Definition: JPDFToolkit.hh:45
then print_variable DETECTOR INPUT_FILE INTERMEDIATE_FILE check_input_file $DETECTOR $INPUT_FILE check_output_file $INTERMEDIATE_FILE $OUTPUT_FILE JMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JPath.sh:52
Interface for binary input.
double cherenkov(const double lambda, const double n)
Number of Cherenkov photons per unit track length and per unit wavelength.
Definition: JPDFToolkit.hh:58
static const double AVOGADRO
Avogadro&#39;s number [gr^-1].
Definition: JConstants.hh:24
alias put_queue eval echo n
Definition: qlib.csh:19
double getDeltaRaysFromMuon(const double E)
Equivalent EM-shower energy due to delta-rays per unit muon track length.
Definition: JPDFToolkit.hh:77
then usage $script[input file[working directory[option]]] nWhere option can be E
Definition: JMuonPostfit.sh:37