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.