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