GeoModel - GeoModelCore
GeoElement.cxx
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "GeoModelKernel/GeoElement.h"
6 #include <cmath>
7 
8 GeoElement::GeoElement (const std::string &Name, const std::string &Symbol, double Z, double A)
9  : m_name (Name)
10  , m_symbol (Symbol)
11  , m_z (Z)
12  , m_a (A)
13 {
14 }
15 
16 GeoElement::~GeoElement()
17 {
18 }
19 
20 
21 double GeoElement::getRadTsai() const
22 {
23  // Compute Coulomb correction factor (Phys Rev. D50 3-1 (1994) page 1254)
24  const double k1 = 0.0083, k2 = 0.20206, k3 = 0.0020, k4 = 0.0369;
25  double az2 = (GeoModelKernelUnits::fine_structure_const*m_z)*(GeoModelKernelUnits::fine_structure_const*m_z);
26  double az4 = az2 * az2;
27 
28  double coulomb = (k1*az4 + k2 + 1./(1.+az2))*az2 - (k3*az4 + k4)*az4;
29 
30  // Compute Tsai's Expression for the Radiation Length (Phys Rev. D50 3-1 (1994) page 1254)
31  const double Lrad_light[] = {5.31, 4.79, 4.74, 4.71};
32  const double Lprad_light[] = {6.144, 5.621, 5.805, 5.924};
33 
34  const double logZ3 = std::log(m_z) * (1./3);
35 
36  double Lrad, Lprad;
37  int iz = (int)(m_z+0.5) - 1 ;
38  if (iz<=3) {
39  Lrad = Lrad_light[iz];
40  Lprad = Lprad_light[iz];
41  } else {
42  Lrad = std::log(184.15) - logZ3;
43  Lprad = std::log(1194.) - 2*logZ3;
44  }
45 
46  double radTsai = 4*GeoModelKernelUnits::alpha_rcl2*m_z*(m_z*(Lrad-coulomb) + Lprad);
47  return radTsai;
48 }