1 #ifndef __JPHYSICS__JRADIATION__
2 #define __JPHYSICS__JRADIATION__
24 static const double LAMBDA = 0.65;
58 const int integrsteps,
59 const double eminBrems,
60 const double eminEErad,
61 const double eminGNrad) :
81 const double eps)
const
86 if(eps>E-0.75*exp(1.0)*
pow(
Z,1./3.))
return 0.;
125 for(
int i=0;i<
steps+1;i++)
128 if(i==0 || i==
steps)factor=0.5;
167 virtual double SigmaGNrad(
const double E,
const double eps)
const
172 if (eps<0.2)
return 0.;
178 {Aeff = (0.22*
A + 0.78 *
pow(
A,0.89));}
179 double sigmaGammaPofeps = (49.2 + 11.1 * log(eps) + 151.8/sqrt(eps))*
pow(10,-34.);
182 double epsoverE = eps/E;
185 double PhiofEofeps = epsoverE - 1 + Factor * log (Numerator / Denom);
187 return Psiofeps*PhiofEofeps;
202 double dle = log(epsmax/epsmin)/
steps;
203 for(
int i=0;i<
steps+1;i++)
206 if(i==0 || i==
steps)factor=0.5;
208 double eps = epsmin*exp(i*dle);sum += factor*eps*
SigmaGNrad( E, eps);
227 for (
int i = 1000; i != 0; --i) {
230 if(gRandom->Rndm()<(1.-Er/E+0.75*
pow(Er/E,2)))
break;
247 const double precision = 1.0e-3;
249 const double k1 = 0.092 *
pow(E, -1.0/3.0);
250 const double k2 = 0.052 *
pow(E, -1.0) *
pow(
Z, -1.0/4.0);
251 const double k3 = 0.220 *
pow(E, -0.92);
252 const double k4 = 0.260 *
pow(E, -0.91);
258 rms = max(min(k1*sqrt(
v), k2), k3*
v);
262 const double n = 0.81 * sqrt(E) / (sqrt(E) + 1.8);
266 for (
double vmin = 0.5, vmax = 1.0; ; ) {
268 const double v = 0.5 * (vmin + vmax);
270 const double y = k4 *
pow(
v, 1.0 +
n) *
pow(1.0 -
v, -
n);
272 if (abs(
y - 0.2) <= precision) {
274 k5 =
y *
pow(1.0 -
v, 1.0/2.0);
285 rms = k4 *
pow(
v, 1.0 +
n) *
pow(1.0 -
v, -
n);
288 rms = k5 *
pow(1.0 -
v, -1.0/2.0);
306 const double eps =0.2;
310 for (
int i = 1000; i != 0; --i)
314 double factor = (1.-Er/E)*
IntegralofG(E,Er)/IntGmax;
315 if(gRandom->Rndm()<factor)
break;
332 const double a = 8.9e-4;
333 const double b = 1.5e-5;
334 const double c = 0.032;
335 const double d = 1.0;
336 const double e = 0.1;
338 const double n = -1.0;
343 return (2.3 + log(E)) * (1.0/E) *
pow(1.0 -
v,
n) * (
u*
u) * (1.0/(
v*
v)) *
344 min(
a *
pow(
v, 1.0/4.0) * (1.0 + b*E) + c*
v/(
v+d), e);
367 for (
int i = 1000; i != 0; --i) {
370 if (gRandom->Rndm() < factor)
return Er;
398 const double E2 = E*E;
400 const double beta2 = beta*beta;
402 const double gamma2 = gamma*gamma;
406 const double EMaxT2 = EMaxT*EMaxT;
408 const double I2 = coeff.
I*coeff.
I;
409 const double X = log10(beta*gamma);
413 if (coeff.
X0 < X && X < coeff.
X1) {
414 delta = 4.6052*X + coeff.
a*
pow(coeff.
X1-X,coeff.
m) + coeff.
C;
418 delta = 4.6052*X + coeff.
C;
429 const double r)
const
432 const double b =
v*
v/(2*(1-
v));
433 const double Be = ((2+
r*
r)*(1+b)+ksi*(3+
r*
r))*log(1+1/ksi)+(1-
r*
r-b)/(1+ksi)-(3+
r*
r);
434 const double Bm = ((1+
r*
r)*(1+3*b/2)-(1+2*b)*(1-
r*
r)/ksi)*log(1+ksi)+ksi*(1-
r*
r-b)/(1+ksi)+(1+2*b)*(1-
r*
r);
435 const double Ye = (5-
r*
r+4*b*(1+
r*
r))/(2*(1+3*b)*log(3+1/ksi)-
r*
r-2*b*(2-
r*
r));
436 const double Ym = (4+
r*
r+3*b*(1+
r*
r))/((1+
r*
r)*(1.5+2*b)*log(3+ksi)+1-1.5*
r*
r);
437 const double Le = log((
Astar()*
pow(
Z,-1./3.)*sqrt((1+ksi)*(1+Ye)))/
441 double Phie = Be*Le;
if(Phie<0.)Phie=0.;
442 double Phim = Bm*Lm;
if(Phim<0.)Phim=0.;
447 const double eps)
const
449 const double EP = E-eps;
450 const double v = eps/E;
455 const double dt = -tmin/
steps;
457 for (
int i = 0;i<
steps+1;i++)
459 double fac = 1.0;
if(i==0 || i==
steps)fac=0.5;
460 double t = tmin+i*dt;
461 double r = 1.-exp(t);
471 return (49.2 + 11.1 * log(eps) + 151.8/sqrt(eps));
477 const double epsoverE = eps/E;
481 return (epsoverE - 1 + Factor * log (Numerator / Denom));
485 static double le () {
return 3.8616E-13;}
486 static double r0 () {
return 2.817940e-15; }
487 static double Astar() {
return 183.0; }
488 static double B () {
return 183.0; }
489 static double BP () {
return 1429.0; }
508 double (
JRadiation::*theta)(
const double,
const double)
const;
Compiler version dependent expressions, macros, etc.
Auxiliary class for the calculation of the muon radiative cross sections.
static double sigmaGammaPparam(const double eps)
virtual ~JRadiation()
Virtual desctructor.
virtual double SigmaGNrad(const double E, const double eps) const
Photo-nuclear cross section.
virtual double IntegralofG(const double E, const double eps) const
virtual double TotalCrossSectionEErad(const double E) const
Pair production cross section.
virtual double CalculateACoeff(double E) const
Ionization a parameter.
double GofZEvrho(const double E, const double v, const double r) const
virtual double TotalCrossSectionGNrad(const double E) const
Photo-nuclear cross section.
double SigmaEErad(const double E, const double eps) const
Pair production cross section.
double EfromEErad(const double E) const
Pair production shower energy.
double EfromGNrad(const double E) const
Photo-nuclear shower energy.
JRadiation(const double z, const double a, const int integrsteps, const double eminBrems, const double eminEErad, const double eminGNrad)
Constructor.
double EfromBrems(const double E) const
Bremsstrahlung shower energy.
double TotalCrossSectionBrems(const double E) const
Bremsstrahlung cross section.
double ThetaRMSfromGNrad(const double E, const double v) const
Get RMS of scattering angle for photo-nuclear shower.
static double PhiofEofepsparam(const double E, const double eps)
double ThetaRMSfromEErad(const double E, const double v) const
Get RMS of scattering angle for pair production.
double ThetaRMSfromBrems(const double E, const double v) const
Get RMS of scattering angle for Bremsstrahlung.
T pow(const T &x, const double y)
Power .
static const double PI
Mathematical constants.
Auxiliary methods for light properties of deep-sea water.
static const double ALPHA_ELECTRO_MAGNETIC
Electro-Magnetic coupling constant.
static const JRadiationSource_t GNrad_t
static const double MASS_MUON
muon mass [GeV]
static const JRadiationSource_t Brems_t
static const double MASS_ELECTRON
electron mass [GeV]
static JSterCoefficient getSterCoefficient
Function object for Ster coefficients.
static const JRadiationSource_t EErad_t
static const double AVOGADRO
Avogadro's number.
static const double MASS_PROTON
proton mass [GeV]
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for handling member methods of class JRadiation.
Struct for the Sternheimer coefficients.
double C
Correction density parameter
double m
Correction density parameter.
double I
Ionization potentian [GeV].
double X1
Correction density parameter.
double a
Correction density parameter.
double X0
Correction density parameter.
Auxiliary data structure to convert (lambda) function to printable object.