63 constexpr G4double re2 = classic_electr_radius * classic_electr_radius;
67 G4double gmo2 = (gamma - 1.) * (gamma - 1.);
70 G4double gpo2 = (gamma + 1.) * (gamma + 1.);
77 constexpr G4double sqrttwo = 1.41421356237309504880;
84 G4double egmp32 = std::pow(e * (2 + e * gmo) * gpo, (3. / 2.));
92 fPhi0 = e2 * gmo3 / gpo3;
93 fPhi0 -= 2. * e * gamma * gmo2 / gpo3;
94 fPhi0 += (3. * gamma2 + 6. * gamma + 4.) * gmo / gpo3;
95 fPhi0 -= (2. * gamma2 + 4. * gamma + 1.) / (e * gpo2);
96 fPhi0 += gamma2 / (e2 * (gamma2 - 1.));
102 (-1. - gamma + e * (e * gmo - gamma) * (3. + gamma))) /
104 G4double yy = (e3 * gmo3 - 2. * e2 * gmo2 * gamma -
105 gpo * (1. + 2. * gamma) + e * (-2. + gamma2 + gamma3)) /
108 ((e * gmo - gamma) * (e2 * gmo * (3. + gamma) - e * gamma * (3. + gamma) +
109 gpo * (1. + 2. * gamma))) /
112 fPhi0 += xx * pol0.
x() * pol1.
x() + yy * pol0.
y() * pol1.
y() +
113 zz * pol0.
z() * pol1.
z();
117 G4double xz = (d * (e * gmo - gamma) * (-1. + 2. * e * gmo - gamma)) /
118 (2. * sqrttwo * gpo52);
123 fPhi0 += yx * pol0.
y() * pol1.
x() + xy * pol0.
x() * pol1.
y();
124 fPhi0 += zx * pol0.
z() * pol1.
x() + xz * pol0.
x() * pol1.
z();
125 fPhi0 += zy * pol0.
z() * pol1.
y() + yz * pol0.
y() * pol1.
z();
138 G4double xxPplKpl = -((-1. + e) * (e * gmo - gamma) *
139 (-(gamma * gpo) + e * (-2. + gamma + gamma2))) /
141 std::sqrt(gmo * gpo * (-1. + e + gamma - e * gamma) *
142 (1. + e + gamma - e * gamma)));
145 ((e * gmo - gamma) * (-1. - gamma + e * gmo * (1. + 2. * gamma))) /
146 (2. * sqrttwo * e32 * gmo * gpo2 *
147 std::sqrt(1. + e + gamma - e * gamma));
149 G4double yyPplKpl = (gamma2 * gpo + e2 * gmo2 * (3. + gamma) -
150 e * gmo * (1. + 2. * gamma * (2. + gamma))) /
151 (4. * e2 * gmo * gpo2);
155 (1. + e * (-1. + 2. * e * gmo - 2. * gamma) * gmo + gamma)) /
156 (2. * sqrttwo * e * gmo * gpo2 *
157 std::sqrt(e * (1. + e + gamma - e * gamma)));
160 -((e * gmo - gamma) * std::sqrt((1. - e) / (e - e * gamma2 + gpo2)) *
161 (2. * e2 * gmo2 + gamma + gamma2 - e * (-2. + gamma + gamma2))) /
162 (4. * e2 * (-1. + gamma2));
165 xxPplKpl * pol0.
x() + xyPplKpl * pol0.
y() + xzPplKpl * pol0.
z();
167 yxPplKpl * pol0.
x() + yyPplKpl * pol0.
y() + yzPplKpl * pol0.
z();
169 zxPplKpl * pol0.
x() + zyPplKpl * pol0.
y() + zzPplKpl * pol0.
z();
175 ((-1. + e) * (e * (-2. + gamma) * gmo + gamma)) /
176 (4. * e * gpo32 * std::sqrt(1. + e2 * gmo + gamma - 2. * e * gamma));
179 (-1. + e * gmo + gmo * gamma) /
180 (2. * sqrttwo * gpo2 * std::sqrt(e * (1. + e + gamma - e * gamma)));
183 (-1. - 2. * gamma + e * gmo * (3. + gamma)) / (4. * e * gpo2);
186 (1. + 2. * e2 * gmo2 + gamma + gamma2 +
187 e * (1. + (3. - 4. * gamma) * gamma)) /
188 (2. * sqrttwo * gpo2 * std::sqrt(e * (1. + e + gamma - e * gamma)));
190 G4double zzPplKmn = -(std::sqrt((1. - e) / (e - e * gamma2 + gpo2)) *
191 (2. * e2 * gmo2 + gamma + 2. * gamma2 +
192 e * (2. + gamma - 3. * gamma2))) /
196 xxPplKmn * pol1.
x() + xyPplKmn * pol1.
y() + xzPplKmn * pol1.
z();
198 yxPplKmn * pol1.
x() + yyPplKmn * pol1.
y() + yzPplKmn * pol1.
z();
200 zxPplKmn * pol1.
x() + zyPplKmn * pol1.
y() + zzPplKmn * pol1.
z();
206 G4double xxPmnKpl = ((-1. + e * gmo) * (2. + gamma)) /
207 (4. * gpo * std::sqrt(e * (2. + e * gmo) * gpo));
209 G4double xzPmnKpl = (std::sqrt((-1. + e) / (-2. + e - e * gamma)) *
210 (e + gamma + e * gamma - 2. * (-1. + e) * gamma2)) /
211 (2. * sqrttwo * e * gpo2);
214 (-1. - 2. * gamma + e * gmo * (3. + gamma)) / (4. * e * gpo2);
217 -((-1. + e) * (1. + 2. * e * gmo) * (e * gmo - gamma)) /
218 (2. * sqrttwo * e * std::sqrt(-((-1. + e) * (2. + e * gmo))) * gpo2);
220 G4double zzPmnKpl = (-2. + 2. * e2 * gmo2 + gamma * (-1. + 2. * gamma) +
221 e * (-2. + (5. - 3. * gamma) * gamma)) /
222 (4. * std::sqrt(e * (2. + e * gmo)) * gpo32);
225 xxPmnKpl * pol0.
x() + xyPmnKpl * pol0.
y() + xzPmnKpl * pol0.
z();
227 yxPmnKpl * pol0.
x() + yyPmnKpl * pol0.
y() + yzPmnKpl * pol0.
z();
229 zxPmnKpl * pol0.
x() + zyPmnKpl * pol0.
y() + zzPmnKpl * pol0.
z();
234 G4double xxPmnKmn = -((2. + e * gmo) * (-1. + e * gmo - gamma) *
235 (e * gmo - gamma) * (-2. + gamma)) /
240 std::sqrt((-1. + e + gamma - e * gamma) / (2. + e * gmo)) *
241 (e + gamma - e * gamma + gamma2)) /
242 (2. * sqrttwo * e2 * gmo32 * gpo2);
244 G4double yyPmnKmn = (gamma2 * gpo + e2 * gmo2 * (3. + gamma) -
245 e * gmo * (1. + 2. * gamma * (2. + gamma))) /
246 (4. * e2 * gmo * gpo2);
249 -((-1. + e) * (e * gmo - gamma) *
250 (e * gmo + 2. * e2 * gmo2 - gamma * gpo)) /
251 (2. * sqrttwo * e2 * std::sqrt(-((-1. + e) * (2. + e * gmo))) * gmo *
255 ((e * gmo - gamma) * std::sqrt(e / ((2. + e * gmo) * gpo)) *
256 (-(e * (-2. + gamma) * gmo) + 2. * e2 * gmo2 + (-2. + gamma) * gpo)) /
257 (4. * e2 * (-1. + gamma2));
260 xxPmnKmn * pol1.
x() + xyPmnKmn * pol1.
y() + xzPmnKmn * pol1.
z();
262 yxPmnKmn * pol1.
x() + yyPmnKmn * pol1.
y() + yzPmnKmn * pol1.
z();
264 zxPmnKmn * pol1.
x() + zyPmnKmn * pol1.
y() + zzPmnKmn * pol1.
z();
281 xs += fPhi2 * pol2 + fPhi3 * pol3;
301 constexpr G4double re2 = classic_electr_radius * classic_electr_radius;
303 G4double gmo2 = (gamma - 1.) * (gamma - 1.);
304 G4double gpo2 = (gamma + 1.) * (gamma + 1.);
305 G4double gpo3 = gpo2 * (gamma + 1.);
307 G4double pref = twopi * re2 / (gamma - 1.0);
310 sigma0 += -gmo2 * (gamma - 1.) * x * x * x / 3. + gmo2 * gamma * x * x;
311 sigma0 += -(gamma - 1.) * (3. * gamma * (gamma + 2.) + 4.) * x;
312 sigma0 += (gamma * (gamma * (gamma * (4. * gamma - 1.) - 21.) - 7.) + 13.) /
315 sigma0 += logMEM * (2. - 1. / gpo2);
316 sigma0 += gamma2 / ((gamma2 - 1.) * x);
319 sigma2 += logMEM * gamma * (gamma + 1.) * (2. * gamma + 1.);
320 sigma2 += gamma * (7. * gamma * (gamma + 1.) - 2.) / 3.;
321 sigma2 += -(3. * gamma + 1.) * (gamma2 + gamma - 1.) * x;
322 sigma2 += (gamma - 1.) * gamma * (gamma + 3.) * x * x;
323 sigma2 += -gmo2 * (gamma + 3.) * x * x * x / 3.;
327 sigma3 += 0.5 * (gamma + 1.) * (3. * gamma + 1.) * logMEM;
328 sigma3 += (gamma * (5. * gamma - 4.) - 13.) / 6.;
329 sigma3 += 0.5 * (gamma2 + 3.) * x;
330 sigma3 += -2. * (gamma - 1.) * gamma * x * x;
331 sigma3 += 2. * gmo2 * x * x * x / 3.;
334 xs += pref * (sigma0 + sigma2 * pol0.
z() * pol1.
z() +
335 sigma3 * (pol0.
x() * pol1.
x() + pol0.
y() * pol1.
y()));
CLHEP::Hep3Vector G4ThreeVector
G4StokesVector GetPol2() override
G4double TotalXSection(G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1) override
G4StokesVector GetPol3() override
void Initialize(G4double x, G4double y, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
G4PolarizedIonisationBhabhaXS()
G4double XSection(const G4StokesVector &pol2, const G4StokesVector &pol3) override
~G4PolarizedIonisationBhabhaXS() override
void SetXmax(G4double xmax)