63 constexpr G4double re2 = classic_electr_radius * classic_electr_radius;
66 G4double gmo2 = (gamma - 1.) * (gamma - 1.);
68 G4double pref = gamma2 * re2 / (gmo2 * (gamma + 1.0));
69 constexpr G4double sqrttwo = 1.41421356237309504880;
79 fPhi0 = gmo2 / gamma2;
80 fPhi0 += ((1. - 2. * gamma) / gamma2) * (1. / e + 1. / (1. - e));
81 fPhi0 += 1. / (e * e) + 1. / ((1. - e) * (1. - e));
89 G4double xx = (gamma - f * e * gmo * (3. + gamma)) / (4. * f * e * gamma2);
90 G4double yy = (-1. + f * e * gmo2 + 2. * gamma) / (4. * f * e * gamma2);
91 G4double zz = (-(e * gmo * (3. + gamma)) + e2 * gmo * (3. + gamma) +
92 gamma * (-1. + 2. * gamma)) /
93 (4. * f * e * gamma2);
95 fPhi0 += xx * pol0.
x() * pol1.
x() + yy * pol0.
y() * pol1.
y() +
96 zz * pol0.
z() * pol1.
z();
101 G4double xz = -((-1. + 2. * e) * gmo) /
102 (2. * sqrttwo * gamma2 * std::sqrt(-((f * e) / gpo)));
105 G4double zx = -((-1. + 2. * e) * gmo) /
106 (2. * sqrttwo * gamma2 * std::sqrt(-((f * e) / gpo)));
108 fPhi0 += yx * pol0.
y() * pol1.
x() + xy * pol0.
x() * pol1.
y();
109 fPhi0 += zx * pol0.
z() * pol1.
x() + xz * pol0.
x() * pol1.
z();
110 fPhi0 += zy * pol0.
z() * pol1.
y() + yz * pol0.
y() * pol1.
z();
124 (std::sqrt(gpo / (1. + e2 * gmo + gamma - 2. * e * gamma)) *
128 G4double xzP1K1 = (-1. + 2. * e * gamma) /
129 (2. * sqrttwo * f * gamma *
130 std::sqrt(e * e2 * (1. + e + gamma - e * gamma)));
133 (-gamma2 + e * (-1. + gamma * (2. + gamma))) / (4. * f * e2 * gamma2);
135 G4double zxP1K1 = (1. + 2. * e2 * gmo - 2. * e * gamma) /
136 (2. * sqrttwo * f * e * gamma *
137 std::sqrt(e * (1. + e + gamma - e * gamma)));
140 (-gamma + e * (1. - 2. * e * gmo + gamma)) /
141 (4. * f * e2 * gamma * std::sqrt(1. - (2. * e) / (f * gpo)));
142 fPhi2[0] += xxP1K1 * pol0.
x() + xyP1K1 * pol0.
y() + xzP1K1 * pol0.
z();
143 fPhi2[1] += yxP1K1 * pol0.
x() + yyP1K1 * pol0.
y() + yzP1K1 * pol0.
z();
144 fPhi2[2] += zxP1K1 * pol0.
x() + zyP1K1 * pol0.
y() + zzP1K1 * pol0.
z();
150 ((1. + e * (-3. + gamma)) *
151 std::sqrt(gpo / (1. + e2 * gmo + gamma - 2. * e * gamma))) /
152 (4. * f * e * gamma);
155 (-2. + 2. * e + gamma) / (2. * sqrttwo * f2 * gamma *
156 std::sqrt(e * (1. + e + gamma - e * gamma)));
158 G4double yyP1K2 = (1. - 2. * gamma + e * (-1. + gamma * (2. + gamma))) /
159 (4. * f2 * e * gamma2);
161 G4double zxP1K2 = (2. * e * (1. + e * gmo - 2. * gamma) + gamma) /
162 (2. * sqrttwo * f2 * gamma *
163 std::sqrt(e * (1. + e + gamma - e * gamma)));
166 (1. - 2. * gamma + e * (-1. - 2. * e * gmo + 3. * gamma)) /
167 (4. * f2 * e * gamma * std::sqrt(1. - (2. * e) / (f * gpo)));
168 fPhi2[0] += xxP1K2 * pol1.
x() + xyP1K2 * pol1.
y() + xzP1K2 * pol1.
z();
169 fPhi2[1] += yxP1K2 * pol1.
x() + yyP1K2 * pol1.
y() + yzP1K2 * pol1.
z();
170 fPhi2[2] += zxP1K2 * pol1.
x() + zyP1K2 * pol1.
y() + zzP1K2 * pol1.
z();
178 (-1. + e + e * gamma) /
179 (4. * f2 * gamma * std::sqrt((e * (2. + e * gmo)) / gpo));
182 -((1. + 2. * f * gamma) * std::sqrt(f / (-2. + e - e * gamma))) /
183 (2. * sqrttwo * f2 * e * gamma);
185 G4double yyP2K1 = (1. - 2. * gamma + e * (-1. + gamma * (2. + gamma))) /
186 (4. * f2 * e * gamma2);
189 (1. + 2. * e * (-2. + e + gamma - e * gamma)) /
190 (2. * sqrttwo * f * e * std::sqrt(-(f * (2. + e * gmo))) * gamma);
193 (std::sqrt((e * gpo) / (2. + e * gmo)) *
194 (-3. + e * (5. + 2. * e * gmo - 3. * gamma) + 2. * gamma)) /
195 (4. * f2 * e * gamma);
197 fPhi3[0] += xxP2K1 * pol0.
x() + xyP2K1 * pol0.
y() + xzP2K1 * pol0.
z();
198 fPhi3[1] += yxP2K1 * pol0.
x() + yyP2K1 * pol0.
y() + yzP2K1 * pol0.
z();
199 fPhi3[2] += zxP2K1 * pol0.
x() + zyP2K1 * pol0.
y() + zzP2K1 * pol0.
z();
205 (-2. - e * (-3. + gamma) + gamma) /
206 (4. * f * e * gamma * std::sqrt((e * (2. + e * gmo)) / gpo));
209 ((-2. * e + gamma) * std::sqrt(f / (-2. + e - e * gamma))) /
210 (2. * sqrttwo * f * e2 * gamma);
213 (-gamma2 + e * (-1. + gamma * (2. + gamma))) / (4. * f * e2 * gamma2);
216 (gamma + 2. * e * (-1. + e - e * gamma)) /
217 (2. * sqrttwo * e2 * std::sqrt(-(f * (2. + e * gmo))) * gamma);
219 G4double zzP2K2 = (std::sqrt((e * gpo) / (2. + e * gmo)) *
220 (-2. + e * (3. + 2. * e * gmo - gamma) + gamma)) /
221 (4. * f * e2 * gamma);
222 fPhi3[0] += xxP2K2 * pol1.
x() + xyP2K2 * pol1.
y() + xzP2K2 * pol1.
z();
223 fPhi3[1] += yxP2K2 * pol1.
x() + yyP2K2 * pol1.
y() + yzP2K2 * pol1.
z();
224 fPhi3[2] += zxP2K2 * pol1.
x() + zyP2K2 * pol1.
y() + zzP2K2 * pol1.
z();
240 xs += fPhi2 * pol2 + fPhi3 * pol3;
255 ed <<
" warning xmax expected to be 1/2 but is " << xmax <<
"\n";
256 G4Exception(
"G4PolarizedIonisationMollerXS::TotalXSection",
"pol020",
260 constexpr G4double re2 = classic_electr_radius * classic_electr_radius;
262 G4double gmo2 = (gamma - 1.) * (gamma - 1.);
263 G4double logMEM = std::log(1. / x - 1.);
264 G4double pref = twopi * gamma2 * re2 / (gmo2 * (gamma + 1.0));
266 G4double sigma0 = (gmo2 / gamma2) * (0.5 - x);
267 sigma0 += ((1. - 2. * gamma) / gamma2) * logMEM;
268 sigma0 += 1. / x - 1. / (1. - x);
270 G4double sigma2 = ((gamma2 + 2. * gamma - 3.) / gamma2) * (0.5 - x);
271 sigma2 += (1. / gamma - 2.) * logMEM;
273 G4double sigma3 = (2. * (1. - gamma) / gamma2) * (0.5 - x);
274 sigma3 += (1. - 3. * gamma) / (2. * gamma2) * logMEM;
276 xs += pref * (sigma0 + sigma2 * pol0.
z() * pol1.
z() +
277 sigma3 * (pol0.
x() * pol1.
x() + pol0.
y() * pol1.
y()));
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
CLHEP::Hep3Vector G4ThreeVector
G4StokesVector GetPol2() override
~G4PolarizedIonisationMollerXS() override
G4StokesVector GetPol3() override
G4PolarizedIonisationMollerXS()
void Initialize(G4double x, G4double y, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
G4double XSection(const G4StokesVector &pol2, const G4StokesVector &pol3) override
G4double TotalXSection(G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1) override
void SetXmax(G4double xmax)