Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PolarizedGammaConversionXS.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// -------------------------------------------------------------------
27//
28// Geant4 Class file
29//
30// File name: G4PolarizedGammaConversionXS
31//
32// Author: Andreas Schaelicke on the base of Karim Laihems code
33
35
36G4double G4PolarizedGammaConversionXS::SCRN[2][19] = {
37 { 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0,
38 60.0, 70.0, 80.0, 90.0, 100.0, 120.0 },
39 { 0.0145, 0.0490, 0.1400, 0.3312, 0.6758, 1.126, 1.367, 1.564, 1.731, 1.875,
40 2.001, 2.114, 2.216, 2.393, 2.545, 2.676, 2.793, 2.897, 3.078 }
41};
42
44{
45 fFinalElectronPolarization = G4StokesVector::ZERO;
46 fFinalPositronPolarization = G4StokesVector::ZERO;
47}
48
50
52 G4double aGammaE, G4double aLept0E, G4double sintheta,
53 const G4StokesVector& beamPol, const G4StokesVector& /*p1*/, G4int /*flag*/)
54{
55 G4double aLept1E = aGammaE - aLept0E;
56
57 G4double Stokes_P3 = beamPol.z();
58
59 G4double Lept0E = aLept0E / CLHEP::electron_mass_c2 + 1.;
60 G4double Lept0E2 = Lept0E * Lept0E;
61 G4double GammaE = aGammaE / CLHEP::electron_mass_c2;
62 G4double Lept1E = aLept1E / CLHEP::electron_mass_c2 - 1.;
63 G4double Lept1E2 = Lept1E * Lept1E;
64
65 // ******* Gamma Transvers Momentum
66 G4double TMom = std::sqrt(Lept0E2 - 1.) * sintheta;
67 G4double u = TMom;
68 G4double u2 = u * u;
69 G4double Xsi = 1. / (1. + u2);
70 G4double Xsi2 = Xsi * Xsi;
71
72 G4double delta =
73 12. * std::pow(fZ, 1. / 3.) * Lept0E * Lept1E * Xsi / (121. * GammaE);
74 G4double GG = 0.;
75
76 if(delta < 0.5)
77 {
78 GG = std::log(2. * Lept0E * Lept1E / GammaE) - 2. - fCoul;
79 }
80 else if(delta < 120.)
81 {
82 for(G4int j = 1; j < 19; ++j)
83 {
84 if(SCRN[0][j] >= delta)
85 {
86 GG = std::log(2. * Lept0E * Lept1E / GammaE) - 2. - fCoul -
87 (SCRN[1][j - 1] + (delta - SCRN[0][j - 1]) *
88 (SCRN[1][j] - SCRN[1][j - 1]) /
89 (SCRN[0][j] - SCRN[0][j - 1]));
90 break;
91 }
92 }
93 }
94 else
95 {
96 G4double alpha_sc = (111. * std::pow(fZ, -1. / 3.)) / Xsi;
97 GG = std::log(alpha_sc) - 2. - fCoul;
98 }
99
100 if(GG < -1.)
101 GG = -1.;
102
103 G4double I_Lepton = (Lept0E2 + Lept1E2) * (3 + 2 * GG) +
104 2. * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
105
106 G4double L_Lepton1 = GammaE *
107 ((Lept0E - Lept1E) * (3. + 2. * GG) +
108 2 * Lept1E * (1. + 4. * u2 * Xsi2 * GG)) /
109 I_Lepton;
110
111 G4double T_Lepton1 =
112 4. * GammaE * Lept1E * Xsi * u * (1. - 2. * Xsi) * GG / I_Lepton;
113
114 G4double Stokes_S1 = (Stokes_P3 * T_Lepton1);
115 G4double Stokes_S2 = 0.;
116 G4double Stokes_S3 = (Stokes_P3 * L_Lepton1);
117
118 fFinalElectronPolarization.setX(Stokes_S1);
119 fFinalElectronPolarization.setY(Stokes_S2);
120 fFinalElectronPolarization.setZ(Stokes_S3);
121
122 if(fFinalElectronPolarization.mag2() > 1.)
123 {
125 ed << "\t" << fFinalElectronPolarization << "\t GG\t" << GG << "\t delta\t"
126 << delta << "\n";
127 G4Exception("G4PolarizedGammaConversionXS::Initialize", "pol022",
128 JustWarning, ed);
129 fFinalElectronPolarization.setX(0.);
130 fFinalElectronPolarization.setY(0.);
131 fFinalElectronPolarization.setZ(Stokes_S3);
132 if(Stokes_S3 > 1.)
133 fFinalElectronPolarization.setZ(1.);
134 }
135
136 G4double L_Lepton2 = GammaE *
137 ((Lept1E - Lept0E) * (3. + 2. * GG) +
138 2 * Lept0E * (1. + 4. * u2 * Xsi2 * GG)) /
139 I_Lepton;
140
141 G4double T_Lepton2 =
142 4. * GammaE * Lept0E * Xsi * u * (1. - 2. * Xsi) * GG / I_Lepton;
143
144 G4double Stokes_SS1 = (Stokes_P3 * T_Lepton2);
145 G4double Stokes_SS2 = 0.;
146 G4double Stokes_SS3 = (Stokes_P3 * L_Lepton2);
147
148 fFinalPositronPolarization.SetPhoton();
149
150 fFinalPositronPolarization.setX(Stokes_SS1);
151 fFinalPositronPolarization.setY(Stokes_SS2);
152 fFinalPositronPolarization.setZ(Stokes_SS3);
153
154 if(fFinalPositronPolarization.mag2() > 1.)
155 {
157 ed << "\t" << fFinalPositronPolarization << "\t GG\t" << GG << "\t delta\t"
158 << delta << "\n";
159 G4Exception("G4PolarizedGammaConversionXS::Initialize", "pol023",
160 JustWarning, ed);
161 }
162}
163
165 const G4StokesVector& /*pol3*/)
166{
168 ed << "ERROR dummy routine G4PolarizedGammaConversionXS::XSection "
169 "called \n";
170 G4Exception("G4PolarizedGammaConversionXS::Initialize", "pol024",
171 FatalException, ed);
172 return 0.;
173}
174
175// return expected mean polarisation
177{
178 // electron/positron
179 return fFinalElectronPolarization;
180}
181
183{
184 // photon
185 return fFinalPositronPolarization;
186}
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
double z() const
void setY(double)
double mag2() const
void setZ(double)
void setX(double)
G4double XSection(const G4StokesVector &pol2, const G4StokesVector &pol3) override
void Initialize(G4double eps, G4double X, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
static const G4StokesVector ZERO