50 polxx = polyy = polzz = polxz = polzx = polyz = polzy = polxy = polyx = 0.;
62 G4double cosT = 1. - (1. / eps - 1.) / X;
65 else if(cosT < -1. - 1.e-8)
70 if(sinT2 > 1. + 1.e-8)
78 DefineCoefficients(pol0, pol1);
79 G4double diffXSFactor = re2 / (4. * X);
82 fUnpXS = (eps2 + 1. - eps * sinT2) / (2. * eps);
84 fPolXS = -sinT2 * pol0.
x() + (1. - eps) * sinT * polzx +
85 ((eps2 - 1.) / eps) * cosT * polzz;
88 fPhi0 = fUnpXS + fPolXS;
93 G4double phi21 = -sinT2 + 0.5 * (cos2T + 3.) * pol0.
x() -
94 ((1. - eps) / eps) * sinT * polzx;
96 G4double phi22 = cosT * pol0.
y() + ((1. - eps) / (2. * eps)) * sinT * polzy;
97 G4double phi23 = ((eps2 + 1.) / eps) * cosT * pol0.
z() -
98 ((1. - eps) / eps) * (eps * cosT2 + 1.) * pol1.
z();
99 phi23 += 0.5 * (1. - eps) * sin2T * pol1.
x();
100 phi23 += (eps - 1.) * (-sinT2 * polxz + sinT * polyy - 0.5 * sin2T * polxx);
106 G4double phi32 = -sinT2 * polxy + ((1. - eps) / eps) * sinT * polyz +
107 0.5 * (cos2T + 3.) * pol1.
y();
115 if((1. - eps) > 1.e-12)
117 G4double helpVar = std::sqrt(eps2 - 2. * cosT * eps + 1.);
119 phi31 = (1. - eps) * (1. + cosT) * sinT * pol0.
z();
121 (-eps * cosT3 + eps * cosT2 + (eps - 2.) * cosT + eps) * pol1.
x();
122 phi31 += -(eps * cosT2 - eps * cosT + cosT + 1.) * sinT * pol1.
z();
123 phi31 /= 2. * helpVar;
125 phi31add = -eps *
sqr(1. - cosT) * (1. + cosT) * polxx;
126 phi31add += (1. - eps) * sinT2 * polyy;
127 phi31add += -(-eps2 + cosT * (cosT * eps - eps + 1.) * eps + eps - 1.) *
129 phi31add /= 2. * helpVar;
131 phi33 = ((1. - eps) / eps) *
132 (-eps * cosT2 + eps * (eps + 1.) * cosT - 1.) * pol0.
z();
133 phi33 += -(eps * cosT2 + (1. - eps) * eps * cosT + 1.) * sinT * pol1.
x();
135 -(-eps2 * cosT3 + eps * (eps2 - eps + 1.) * cosT2 - cosT + eps2) *
137 phi33 /= -2. * helpVar;
139 phi33add = (eps * (eps - cosT - 1.) * cosT + 1.) * sinT * polxx;
140 phi33add += -(-eps2 + cosT * eps + eps - 1.) * sinT2 * polxz;
141 phi33add += (eps - 1.) * (cosT - eps) * sinT * polyy;
142 phi33add /= -2. * helpVar;
147 (X - 1.) * std::sqrt(1. - eps) * pol1.
x() / std::sqrt(2. * X);
148 phi31add = -(-X * X * pol1.
z() - 2. * X * (2. * pol0.
z() - pol1.
z()) -
149 (4. * pol0.
x() + 5.) * pol1.
z()) *
150 (1. - eps) / (4. * X);
153 (X - 1.) * std::sqrt(1. - eps) * pol1.
z() / std::sqrt(2. * X);
154 phi33add = -(X * X - 2. * X + 4. * pol0.
x() + 5.) * (1. - eps) *
157 fPhi3 =
G4ThreeVector(phi31 + phi31add, phi32, phi33 + phi33add);
159 fUnpXS *= diffXSFactor;
160 fPolXS *= diffXSFactor;
161 fPhi0 *= diffXSFactor;
162 fPhi2 *= diffXSFactor;
163 fPhi3 *= diffXSFactor;
200 G4double unit =
fZ * CLHEP::pi * CLHEP::classic_electr_radius *
201 CLHEP::classic_electr_radius;
205 G4double xs_0 = ((k0 - 2.) * k0 - 2.) *
sqr(k1) * std::log(k1) +
206 2. * k0 * (k0 * (k0 + 1.) * (k0 + 8.) + 2.);
207 G4double xs_pol = (k0 + 1.) *
sqr(k1) * std::log(k1) -
208 2. * k0 * (5. *
sqr(k0) + 4. * k0 + 1.);
210 return pre * (xs_0 / k0 + pol0.
p3() * pol1.
z() * xs_pol);
228void G4PolarizedComptonXS::DefineCoefficients(
const G4StokesVector& pol0,
231 polxx = pol0.
x() * pol1.
x();
232 polyy = pol0.
y() * pol1.
y();
233 polzz = pol0.
z() * pol1.
z();
235 polxz = pol0.
x() * pol1.
z();
236 polzx = pol0.
z() * pol1.
x();
238 polyz = pol0.
y() * pol1.
z();
239 polzy = pol0.
z() * pol1.
y();
241 polxy = pol0.
x() * pol1.
y();
242 polyx = pol0.
y() * pol1.
x();
CLHEP::Hep3Vector G4ThreeVector
void Initialize(G4double eps, G4double X, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
G4StokesVector GetPol2() override
~G4PolarizedComptonXS() override
G4double TotalXSection(G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1) override
G4StokesVector GetPol3() override
G4double XSection(const G4StokesVector &pol2, const G4StokesVector &pol3) override
static const G4StokesVector ZERO
void SetYmin(G4double ymin)