Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JGeane.hh
Go to the documentation of this file.
1#ifndef __JPHYSICS__JGEANE__
2#define __JPHYSICS__JGEANE__
3
4#include <cmath>
5#include <map>
6
8
9
10/**
11 * \file
12 * Energy loss of muon.
13 * \author mdejong
14 */
15
16namespace JPHYSICS {}
17namespace JPP { using namespace JPHYSICS; }
18
19namespace JPHYSICS {
20
21 /**
22 * Equivalent muon track length per unit shower energy.
23 *
24 * See ANTARES internal note ANTARES-SOFT-2002-015, J.\ Brunner.
25 *
26 * \return equivalent muon track length [m/Gev]
27 */
28 inline double geanc()
29 {
30 return 4.7319; // dx/dE [m/GeV]
31 }
32
33
34 /**
35 * Interface for muon energy loss.
36 *
37 * This interface provides for the various function object operators.
38 */
39 class JGeane {
40 public:
41 /**
42 * Get energy loss constant.
43 *
44 * \return Energy loss due to ionisation [GeV/m]
45 */
46 virtual double getA() const = 0;
47
48
49 /**
50 * Get energy loss constant.
51 *
52 * \return Energy loss due to pair production and bremsstrahlung [m^-1]
53 */
54 virtual double getB() const = 0;
55
56
57 /**
58 * Get energy of muon after specified distance.
59 *
60 * \param E Energy of muon [GeV]
61 * \param dx distance traveled [m]
62 * \return Energy of muon [GeV]
63 */
64 virtual double getE(const double E, const double dx) const = 0;
65
66
67 /**
68 * Get distance traveled by muon.
69 *
70 * \param E0 Energy of muon at start [GeV]
71 * \param E1 Energy of muon at end [GeV]
72 * \return distance traveled [m]
73 */
74 virtual double getX(const double E0,
75 const double E1) const = 0;
76
77
78 /**
79 * Energy of muon after specified distance.
80 *
81 * \param E Energy of muon [GeV]
82 * \param dx distance traveled [m]
83 * \return Energy of muon [GeV]
84 */
85 double operator()(const double E, const double dx) const
86 {
87 return this->getE(E, dx);
88 }
89
90
91 /**
92 * Range of muon.
93 *
94 * \param E Energy of muon [GeV]
95 * \return range [m]
96 */
97 double operator()(const double E) const
98 {
99 return this->getX(E, 0.0);
100 }
101
102
103 /**
104 * Equivalent unit track length per unit shower energy and per unit track length.
105 *
106 * \return equivalent unit track length [Gev^-1]
107 */
108 double operator()() const
109 {
110 return this->getB() * geanc();
111 }
112 };
113
114
115 /**
116 * Function object for the energy loss of the muon.\n
117 * The energy loss can be formulated as:
118 *
119 * \f[ -\frac{dE}{dx} = a + bE \f]
120 *
121 * N.B:
122 * \f$ a \f$ and \f$ b \f$ are assumed constant (internal units m and GeV, respectively).
123 */
124 class JGeane_t :
125 public JGeane
126 {
127 public:
128 /**
129 * constructor
130 * \param __a Energy loss due to ionisation [GeV/m]
131 * \param __b Energy loss due to pair production and bremsstrahlung [m^-1]
132 */
133 JGeane_t(const double __a,
134 const double __b) :
135 a(__a),
136 b(__b)
137 {}
138
139
140 /**
141 * Get energy loss constant.
142 *
143 * \return Energy loss due to ionisation [GeV/m]
144 */
145 virtual double getA() const override
146 {
147 return a;
148 }
149
150
151 /**
152 * Get energy loss constant.
153 *
154 * \return Energy loss due to pair production and bremsstrahlung [m^-1]
155 */
156 virtual double getB() const override
157 {
158 return b;
159 }
160
161
162 /**
163 * Get energy of muon after specified distance.
164 *
165 * \param E Energy of muon [GeV]
166 * \param dx distance traveled [m]
167 * \return Energy of muon [GeV]
168 */
169 virtual double getE(const double E, const double dx) const override
170 {
171 const double y = (a/b + E) * exp(-b*dx) - a/b;
172
173 if (y > 0.0)
174 return y;
175 else
176 return 0.0;
177 }
178
179
180 /**
181 * Get distance traveled by muon.
182 *
183 * \param E0 Energy of muon at start [GeV]
184 * \param E1 Energy of muon at end [GeV]
185 * \return distance traveled [m]
186 */
187 virtual double getX(const double E0,
188 const double E1) const override
189 {
190 return -log((a + b*E1) / (a+b*E0)) / b;
191 }
192
193 protected:
194 const double a;
195 const double b;
196 };
197
198
199 /**
200 * Function object for energy dependent energy loss of the muon.
201 *
202 * Approximate values of energy loss parameters taken from reference:
203 * Proceedings of ICRC 2001, "Precise parametrizations of muon energy losses in water",
204 * S. Klimushin, E. Bugaev and I. Sokalski.
205 */
206 class JGeaneWater :
207 public JGeane,
208 protected std::map<double, JGeane_t>
209 {
210 public:
211 /**
212 * Default constructor.
213 */
215 {
216 using namespace std;
217
218 this->insert(make_pair( 0.0e0, JGeane_t( 2.30e-1 * DENSITY_SEA_WATER, 15.50e-4 * DENSITY_SEA_WATER)));
219 this->insert(make_pair(30.0e0, JGeane_t( 2.67e-1 * DENSITY_SEA_WATER, 3.40e-4 * DENSITY_SEA_WATER)));
220 this->insert(make_pair(35.3e3, JGeane_t(-6.50e-1 * DENSITY_SEA_WATER, 3.66e-4 * DENSITY_SEA_WATER)));
221 }
222
223
224 /**
225 * Get energy loss constant.
226 *
227 * N.B. The return value corresponds to the low-energy regime.
228 *
229 * \return Energy loss due to ionisation [GeV/m]
230 */
231 virtual double getA() const override
232 {
233 return 2.30e-1 * DENSITY_SEA_WATER; //This is the value for low energy (<30 GeV), the value used for step(ds) and getRange())
234 }
235
236
237 /**
238 * Get energy loss constant.
239 *
240 * N.B. The return value corresponds to the medium-energy regime.
241 *
242 * \return Energy loss due to pair production and bremsstrahlung [m^-1]
243 */
244 virtual double getB() const override
245 {
246 return 3.40e-4 * DENSITY_SEA_WATER;
247 }
248
249
250 /**
251 * Get energy of muon after specified distance.
252 *
253 * \param E Energy of muon [GeV]
254 * \param dx distance traveled [m]
255 * \return Energy of muon [GeV]
256 */
257 virtual double getE(const double E, const double dx) const override
258 {
259 double E1 = E;
260 double x1 = dx;
261
262 if (E1 > MASS_MUON / getSinThetaC()) {
263
264 const_iterator p = this->lower_bound(E1);
265
266 do {
267
268 --p;
269
270 const double x2 = p->second.getX(E1, p->first);
271
272 if (x2 > x1) {
273 return p->second.getE(E1, x1);
274 }
275
276 E1 = p->first;
277 x1 -= x2;
278
279 } while (p != this->begin());
280 }
281
282 return E1;
283 }
284
285
286
287
288 /**
289 * Get energy loss due to ionisation.
290 *
291 * \param E initial energy [GeV]
292 * \param dx distance traveled [m]
293 * \return energy loss due to ionisation [GeV]
294 */
295 double getEa(const double E, const double dx) const
296 {
297 using namespace std;
298 using namespace JPP;
299
300 double Ea = 0.0;
301
302 double E1 = E;
303 double x1 = dx;
304
305 if (E1 > MASS_MUON / getSinThetaC()) {
306
307 map<double, JGeane_t>::const_iterator p = this->lower_bound(E1);
308
309 do {
310
311 --p;
312
313 const double x2 = p->second.getX(E1, p->first);
314
315 Ea += (x2 > x1 ? x1 : x2) * p->second.getA();
316 E1 = p->first;
317
318 x1 -= x2;
319
320 } while (p != this->cbegin() && x1 > 0.0);
321 }
322
323 return Ea;
324 }
325
326
327 /**
328 * Get energy loss due to pair production and bremsstrahlung.
329 *
330 * \param E initial energy [GeV]
331 * \param dx distance traveled [m]
332 * \return energy loss due to pair production and bremsstrahlung [GeV]
333 */
334 double getEb(const double E, const double dx) const
335 {
336 const double dE = E - getE(E, dx);
337
338 return dE - getEa(E, dx);
339 }
340
341
342 /**
343 * Get distance traveled by muon.
344 *
345 * \param E0 Energy of muon at start [GeV]
346 * \param E1 Energy of muon at end [GeV]
347 * \return distance traveled [m]
348 */
349 virtual double getX(const double E0,
350 const double E1) const override
351 {
352 double E = E0;
353 double dx = 0.0;
354
355 if (E > MASS_MUON / getSinThetaC()) {
356
357 const_iterator p = this->lower_bound(E);
358
359 do {
360
361 --p;
362
363 if (E1 > p->first) {
364 return dx + p->second.getX(E, E1);
365 }
366
367 dx += p->second.getX(E, p->first);
368 E = p->first;
369
370 } while (p != this->begin());
371 }
372
373 return dx;
374 }
375 };
376
377
378 /**
379 * Function object for energy loss of muon in sea water.
380 */
381 static const JGeaneWater gWater;
382
383
384 /**
385 * Function object for energy loss of muon in rock.
386 */
387 static const JGeane_t gRock(2.67e-1 * 0.9 * DENSITY_ROCK,
388 3.40e-4 * 1.2 * DENSITY_ROCK);
389
390}
391
392#endif
Physics constants.
Function object for energy dependent energy loss of the muon.
Definition JGeane.hh:209
virtual double getE(const double E, const double dx) const override
Get energy of muon after specified distance.
Definition JGeane.hh:257
double getEb(const double E, const double dx) const
Get energy loss due to pair production and bremsstrahlung.
Definition JGeane.hh:334
JGeaneWater()
Default constructor.
Definition JGeane.hh:214
virtual double getA() const override
Get energy loss constant.
Definition JGeane.hh:231
virtual double getB() const override
Get energy loss constant.
Definition JGeane.hh:244
virtual double getX(const double E0, const double E1) const override
Get distance traveled by muon.
Definition JGeane.hh:349
double getEa(const double E, const double dx) const
Get energy loss due to ionisation.
Definition JGeane.hh:295
Function object for the energy loss of the muon.
Definition JGeane.hh:126
virtual double getA() const override
Get energy loss constant.
Definition JGeane.hh:145
virtual double getE(const double E, const double dx) const override
Get energy of muon after specified distance.
Definition JGeane.hh:169
JGeane_t(const double __a, const double __b)
constructor
Definition JGeane.hh:133
virtual double getX(const double E0, const double E1) const override
Get distance traveled by muon.
Definition JGeane.hh:187
const double a
Definition JGeane.hh:194
const double b
Definition JGeane.hh:195
virtual double getB() const override
Get energy loss constant.
Definition JGeane.hh:156
Interface for muon energy loss.
Definition JGeane.hh:39
double operator()(const double E, const double dx) const
Energy of muon after specified distance.
Definition JGeane.hh:85
double operator()(const double E) const
Range of muon.
Definition JGeane.hh:97
virtual double getX(const double E0, const double E1) const =0
Get distance traveled by muon.
virtual double getB() const =0
Get energy loss constant.
double operator()() const
Equivalent unit track length per unit shower energy and per unit track length.
Definition JGeane.hh:108
virtual double getE(const double E, const double dx) const =0
Get energy of muon after specified distance.
virtual double getA() const =0
Get energy loss constant.
Auxiliary methods for light properties of deep-sea water.
static const double DENSITY_SEA_WATER
Fixed environment values.
static const double DENSITY_ROCK
Density of rock [g/cm^3].
static const JGeane_t gRock(2.67e-1 *0.9 *DENSITY_ROCK, 3.40e-4 *1.2 *DENSITY_ROCK)
Function object for energy loss of muon in rock.
static const JGeaneWater gWater
Function object for energy loss of muon in sea water.
Definition JGeane.hh:381
double getSinThetaC()
Get average sine of Cherenkov angle of water corresponding to group velocity.
double geanc()
Equivalent muon track length per unit shower energy.
Definition JGeane.hh:28
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).