56 ISPxx = ISPyy = ISPzz = ISPnd = 0.;
63void G4PolarizedAnnihilationXS::TotalXS()
84 G4double diffXSFactor = re2 / (gam - 1.);
85 DefineCoefficients(pol0, pol1);
90 0.125 * ((-1. /
sqr(gam + 1.)) /
sqr(eps) +
91 ((
sqr(gam) + 4. * gam - 1.) /
sqr(gam + 1.)) / eps - 1.);
100 G4double helpVar2 = 0., helpVar1 = 0.;
103 helpVar1 = (gam * gam + 4. * gam + 1.) /
sqr(gam + 1.);
104 helpVar2 = -1. /
sqr(gam + 1.);
106 fUnpXS = 0.125 * calcVector * sumEpsVector;
109 helpVar2 = 1. /
sqr(gam + 1.);
110 helpVar1 = -(gam * gam + 4. * gam + 1.) /
sqr(gam + 1.);
111 calcVector =
G4ThreeVector(helpVar2, helpVar1, 0.5 * (gam + 3.));
112 ISPxx = 0.25 * (calcVector * sumEpsVector) / (gam - 1.);
114 helpVar1 = 1. /
sqr(gam + 1.);
115 calcVector =
G4ThreeVector(-helpVar1, 2. * gam * helpVar1, -1.);
116 ISPyy = 0.125 * calcVector * sumEpsVector;
118 helpVar1 = 1. / (gam - 1.);
119 helpVar2 = 1. /
sqr(gam + 1.);
121 -(gam * gam + 1.) * helpVar2,
122 (gam * gam * (gam + 1.) + 7. * gam + 3.) * helpVar2, -(gam + 3.));
123 ISPzz = 0.125 * helpVar1 * (calcVector * sumEpsVector);
125 helpVar1 = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.));
126 calcVector =
G4ThreeVector(-1. / (gam * gam - 1.), 2. / (gam - 1.), 0.);
127 ISPnd = 0.125 * (calcVector * difEpsVector) * helpVar1;
129 fPolXS = ISPxx * polxx + ISPyy * polyy + ISPzz * polzz;
130 fPolXS += ISPnd * (polzx + polxz);
131 fPhi0 = fUnpXS + fPolXS;
136 fDice *= (1. + (polzz * ISPzz / fUnpXS));
144 G4double circ1 = 0., circ2 = 0., circ3 = 0.;
145 helpVar1 = 8. *
sqr(1. - eps) *
sqr(eps) * (gam - 1.) *
sqr(gam + 1.) /
146 std::sqrt(gam * gam - 1.);
147 helpVar2 =
sqr(gam + 1.) *
sqr(eps) * (-2. * eps + 3.) -
148 (gam * gam + 3. * gam + 2.) * eps;
149 circ1 = helpVar2 + gam;
151 circ2 = helpVar2 + 1.;
153 helpVar1 = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.));
154 helpVar1 /= std::sqrt(gam * gam - 1.);
156 circ3 = 0.125 * (calcVector * sumEpsVector) / (gam + 1.);
159 fPhi2.
setZ(circ2 * pol1.
z() + circ1 * pol0.
z() +
160 circ3 * (pol1.
x() + pol0.
x()));
161 fPhi3.
setZ(-circ1 * pol1.
z() - circ2 * pol0.
z() -
162 circ3 * (pol1.
x() + pol0.
x()));
166 G4double linearZero = 0.125 * (calcVector * sumEpsVector) /
sqr(gam + 1.);
169 helpVar1 = std::sqrt(std::fabs(2. * (gam + 1.) * (1. - eps) * eps - 1.)) /
170 ((gam + 1.) * eps * (1. - eps));
171 helpVar2 = helpVar1 * helpVar1;
174 G4double diagContrib = 0.125 * helpVar2 * (polxx + polyy - polzz);
176 0.125 * helpVar1 * (-polxz / (1. - eps) + polzx / eps);
178 fPhi2.
setX(linearZero + diagContrib + nonDiagContrib);
181 nonDiagContrib = 0.125 * helpVar1 * (polxz / eps - polzx / (1. - eps));
183 fPhi3.
setX(linearZero + diagContrib + nonDiagContrib);
187 std::sqrt(gam * gam - 1.) * (2. * (gam + 1.) * eps * (1. - eps) - 1.);
188 helpVar1 /= 8. *
sqr(1. - eps) *
sqr(eps) *
sqr(gam + 1.) * (gam - 1.);
189 helpVar2 = std::sqrt((gam * gam - 1.) *
190 std::fabs(2. * (gam + 1.) * eps * (1. - eps) - 1.));
191 helpVar2 /= 8. *
sqr(1. - eps) *
sqr(eps) *
sqr(gam + 1.) * (gam - 1.);
193 G4double contrib21 = (-polxy + polyx) * helpVar1;
195 -(eps * (gam + 1.) - 1.) * polyz + (eps * (gam + 1.) - gam) * polzy;
197 contrib32 *= helpVar2;
198 fPhi2.
setY(contrib21 + contrib32);
201 -(eps * (gam + 1.) - gam) * polyz + (eps * (gam + 1.) - 1.) * polzy;
202 contrib32 *= helpVar2;
203 fPhi3.
setY(contrib21 + contrib32);
205 fPhi0 *= diffXSFactor;
206 fPhi2 *= diffXSFactor;
207 fPhi3 *= diffXSFactor;
214 G4double xs = fPhi0 + pol2 * fPhi2 + pol3 * fPhi3;
225 G4double totalXSFactor = pi * re2 / (gam + 1.);
226 DefineCoefficients(pol0, pol1);
231 G4double sqrtgam1 = std::sqrt(gam2 - 1.);
232 G4double logMEM = std::log(gam + sqrtgam1);
233 G4double unpME = (gam * (gam + 4.) + 1.) * logMEM;
234 unpME += -(gam + 3.) * sqrtgam1;
235 unpME /= 4. * (gam2 - 1.);
236 G4double longPart = (3 + gam * (gam * (gam + 1.) + 7.)) * logMEM;
237 longPart += -(5. + gam * (3 * gam + 4.)) * sqrtgam1;
238 longPart /= 4. *
sqr(gam - 1.) * (gam + 1.);
239 G4double tranPart = -(5 * gam + 1.) * logMEM;
240 tranPart += (gam + 5.) * sqrtgam1;
241 tranPart /= 4. *
sqr(gam - 1.) * (gam + 1.);
244 xs += polzz * longPart;
245 xs += (polxx + polyy) * tranPart;
247 return xs * totalXSFactor;
264void G4PolarizedAnnihilationXS::DefineCoefficients(
const G4StokesVector& pol0,
267 polxx = pol0.
x() * pol1.
x();
268 polyy = pol0.
y() * pol1.
y();
269 polzz = pol0.
z() * pol1.
z();
271 polxz = pol0.
x() * pol1.
z();
272 polzx = pol0.
z() * pol1.
x();
274 polyz = pol0.
y() * pol1.
z();
275 polzy = pol0.
z() * pol1.
y();
277 polxy = pol0.
x() * pol1.
y();
278 polyx = pol0.
y() * pol1.
x();
284 return 0.5 * (1. - std::sqrt((y - 1.) / (y + 1.)));
290 return 0.5 * (1. + std::sqrt((y - 1.) / (y + 1.)));
300 return fPolXS / fUnpXS;
CLHEP::Hep3Vector G4ThreeVector
virtual G4double GetXmax(G4double y) override
virtual G4double TotalXSection(G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1) override
G4PolarizedAnnihilationXS()
virtual void Initialize(G4double eps, G4double gamma, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
virtual G4StokesVector GetPol3() override
virtual ~G4PolarizedAnnihilationXS() override
virtual G4StokesVector GetPol2() override
virtual G4double XSection(const G4StokesVector &pol2, const G4StokesVector &pol3) override
virtual G4double GetXmin(G4double y) override