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) :
 
   64      Dn  (1.54*pow(A,0.27)),
 
 
   81                      const double eps)
 const 
   86      if(eps>E-0.75*exp(1.0)*pow(
Z,1./3.)) 
return 0.;
 
   94          zeta = (0.073*log((E/MASS_MUON)/(1.+1.95e-5*pow(
Z,2./3.)*E/MASS_MUON))-0.26);
 
  101              zeta = zeta/(0.058*log((E/MASS_MUON)/(1.+5.3e-5*pow(
Z,1./3.)*E/MASS_MUON))-0.14);
 
 
  125      for(
int i=0;i<
steps+1;i++)
 
  128          if(i==0 || i==
steps)factor=0.5;
 
 
  147      double delta = (MASS_MUON*
MASS_MUON)/(2*E);
 
  149      double Phin = log((
B()*pow(
Z,-1./3.)*(MASS_MUON+delta*(
DnP*sqrt(exp(1.0))-2.)))/(
DnP*(
MASS_ELECTRON+delta*sqrt(exp(1.0))*
B()*pow(
Z,-1./3.))));
 
 
  167    virtual double SigmaGNrad(
const double E, 
const double eps)
 const 
  172      if (eps<0.2) 
return 0.;
 
  173      if (eps>E-MASS_PROTON) 
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;
 
  183      double Numerator = E * E * (1 - epsoverE) / (MASS_MUON * MASS_MUON) * (1 + MASS_MUON * MASS_MUON * epsoverE * epsoverE / (
LAMBDA * 
LAMBDA * (1 - epsoverE)));
 
  184      double Factor = 1 - epsoverE + epsoverE * epsoverE / 2 * (1 + 2 * MASS_MUON * MASS_MUON / (
LAMBDA * 
LAMBDA));
 
  185      double PhiofEofeps = epsoverE - 1 + Factor * log (Numerator / Denom);
 
  187      return Psiofeps*PhiofEofeps;
 
 
  200      double epsmax = E-MASS_PROTON/2;
 
  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;
 
  399      const double beta    = sqrt(E2 - MASS_MUON*MASS_MUON) / E;
 
  400      const double beta2   = beta*beta;
 
  402      const double gamma2  = gamma*gamma;
 
  404      const double p2      = E2 - MASS_MUON*
MASS_MUON;
 
  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)))/
 
  439      const double Lm  = log(((MASS_MUON/
MASS_ELECTRON)*
Astar()*pow(
Z,-1./3.)*sqrt((1.+1./ksi)*(1.+Ym)))/
 
  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;
 
  452                              /(1+(1-6*pow(MASS_MUON,2)/(E*EP))*sqrt(1-4*
MASS_ELECTRON/eps)));
 
  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;
 
  478      const double Numerator = E * E * (1 - epsoverE) / (MASS_MUON * MASS_MUON) * (1 + MASS_MUON * MASS_MUON * epsoverE * epsoverE /
 
  480      const double Factor = 1 - epsoverE + epsoverE * epsoverE / 2 * (1 + 2 * MASS_MUON * MASS_MUON / (
LAMBDA * 
LAMBDA));
 
  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; }
 
 
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.
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.
double(JRadiation::* sigma)(const double) const
total cross section method
double(JRadiation::* eloss)(const double) const
energy loss method
double(JRadiation::* theta)(const double, const double) const
scattering angle method
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.