Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PolarizedComptonXS Class Reference

#include <G4PolarizedComptonXS.hh>

Inheritance diagram for G4PolarizedComptonXS:

Public Member Functions

 G4PolarizedComptonXS ()
 ~G4PolarizedComptonXS () override
void Initialize (G4double eps, G4double X, 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
G4StokesVector GetPol2 () override
G4StokesVector GetPol3 () override
G4PolarizedComptonXSoperator= (const G4PolarizedComptonXS &right)=delete
 G4PolarizedComptonXS (const G4PolarizedComptonXS &)=delete
Public Member Functions inherited from G4VPolarizedXS
 G4VPolarizedXS ()
virtual ~G4VPolarizedXS ()
G4double GetYmin ()
virtual G4double GetXmin (G4double y)
virtual G4double GetXmax (G4double y)
void SetMaterial (G4double A, G4double Z, G4double coul)
G4VPolarizedXSoperator= (const G4VPolarizedXS &right)=delete
 G4VPolarizedXS (const G4VPolarizedXS &)=delete

Additional Inherited Members

Protected Member Functions inherited from G4VPolarizedXS
void SetXmin (G4double xmin)
void SetXmax (G4double xmax)
void SetYmin (G4double ymin)
Protected Attributes inherited from G4VPolarizedXS
G4double fXmin
G4double fXmax
G4double fYmin
G4double fA
G4double fZ
G4double fCoul

Detailed Description

Definition at line 45 of file G4PolarizedComptonXS.hh.

Constructor & Destructor Documentation

◆ G4PolarizedComptonXS() [1/2]

G4PolarizedComptonXS::G4PolarizedComptonXS ( )

Definition at line 41 of file G4PolarizedComptonXS.cc.

42{
43 SetYmin(0.);
44
45 fPhi0 = 0.;
46 fPolXS = 0.;
47 fUnpXS = 0.;
48 fPhi2 = G4ThreeVector(0., 0., 0.);
49 fPhi3 = G4ThreeVector(0., 0., 0.);
50 polxx = polyy = polzz = polxz = polzx = polyz = polzy = polxy = polyx = 0.;
51}
CLHEP::Hep3Vector G4ThreeVector
void SetYmin(G4double ymin)

Referenced by G4PolarizedComptonXS(), and operator=().

◆ ~G4PolarizedComptonXS()

G4PolarizedComptonXS::~G4PolarizedComptonXS ( )
override

Definition at line 54 of file G4PolarizedComptonXS.cc.

54{}

◆ G4PolarizedComptonXS() [2/2]

G4PolarizedComptonXS::G4PolarizedComptonXS ( const G4PolarizedComptonXS & )
delete

Member Function Documentation

◆ GetPol2()

G4StokesVector G4PolarizedComptonXS::GetPol2 ( )
overridevirtual

Reimplemented from G4VPolarizedXS.

Definition at line 214 of file G4PolarizedComptonXS.cc.

215{
216 // Note, mean polarization can not contain correlation effects.
217 return G4StokesVector(1. / fPhi0 * fPhi2);
218}

◆ GetPol3()

G4StokesVector G4PolarizedComptonXS::GetPol3 ( )
overridevirtual

Reimplemented from G4VPolarizedXS.

Definition at line 221 of file G4PolarizedComptonXS.cc.

222{
223 // Note, mean polarization can not contain correlation effects.
224 return G4StokesVector(1. / fPhi0 * fPhi3);
225}

◆ Initialize()

void G4PolarizedComptonXS::Initialize ( G4double eps,
G4double X,
G4double phi,
const G4StokesVector & p0,
const G4StokesVector & p1,
G4int flag = 0 )
overridevirtual

Implements G4VPolarizedXS.

Definition at line 57 of file G4PolarizedComptonXS.cc.

61{
62 G4double cosT = 1. - (1. / eps - 1.) / X;
63 if(cosT > 1. + 1.e-8)
64 cosT = 1.;
65 else if(cosT < -1. - 1.e-8)
66 cosT = -1.;
67 G4double cosT2 = cosT * cosT;
68 G4double cosT3 = cosT2 * cosT;
69 G4double sinT2 = 1. - cosT2;
70 if(sinT2 > 1. + 1.e-8)
71 sinT2 = 1.;
72 else if(sinT2 < 0.)
73 sinT2 = 0.;
74 G4double sinT = std::sqrt(sinT2);
75 G4double cos2T = 2. * cosT2 - 1.;
76 G4double sin2T = 2. * sinT * cosT;
77 G4double eps2 = sqr(eps);
78 DefineCoefficients(pol0, pol1);
79 G4double diffXSFactor = re2 / (4. * X);
80
81 // unpolarized Cross Section
82 fUnpXS = (eps2 + 1. - eps * sinT2) / (2. * eps);
83 // initial polarization dependence
84 fPolXS = -sinT2 * pol0.x() + (1. - eps) * sinT * polzx +
85 ((eps2 - 1.) / eps) * cosT * polzz;
86 fPolXS *= 0.5;
87
88 fPhi0 = fUnpXS + fPolXS;
89
90 if(flag == 2)
91 {
92 // polarization of outgoing photon
93 G4double phi21 = -sinT2 + 0.5 * (cos2T + 3.) * pol0.x() -
94 ((1. - eps) / eps) * sinT * polzx;
95 phi21 *= 0.5;
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);
101 phi23 *= 0.5;
102
103 fPhi2 = G4ThreeVector(phi21, phi22, phi23);
104
105 // polarization of outgoing electron
106 G4double phi32 = -sinT2 * polxy + ((1. - eps) / eps) * sinT * polyz +
107 0.5 * (cos2T + 3.) * pol1.y();
108 phi32 *= 0.5;
109
110 G4double phi31 = 0.;
111 G4double phi31add = 0.;
112 G4double phi33 = 0.;
113 G4double phi33add = 0.;
114
115 if((1. - eps) > 1.e-12)
116 {
117 G4double helpVar = std::sqrt(eps2 - 2. * cosT * eps + 1.);
118
119 phi31 = (1. - eps) * (1. + cosT) * sinT * pol0.z();
120 phi31 +=
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;
124
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.) *
128 sinT * polxz / eps;
129 phi31add /= 2. * helpVar;
130
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();
134 phi33 +=
135 -(-eps2 * cosT3 + eps * (eps2 - eps + 1.) * cosT2 - cosT + eps2) *
136 pol1.z() / eps;
137 phi33 /= -2. * helpVar;
138
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;
143 }
144 else
145 {
146 phi31 = -pol1.z() -
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);
151
152 phi33 = pol1.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) *
155 pol1.x() / (4. * X);
156 }
157 fPhi3 = G4ThreeVector(phi31 + phi31add, phi32, phi33 + phi33add);
158 }
159 fUnpXS *= diffXSFactor;
160 fPolXS *= diffXSFactor;
161 fPhi0 *= diffXSFactor;
162 fPhi2 *= diffXSFactor;
163 fPhi3 *= diffXSFactor;
164}
double G4double
Definition G4Types.hh:83
T sqr(const T &x)
Definition templates.hh:128

◆ operator=()

G4PolarizedComptonXS & G4PolarizedComptonXS::operator= ( const G4PolarizedComptonXS & right)
delete

◆ TotalXSection()

G4double G4PolarizedComptonXS::TotalXSection ( G4double xmin,
G4double xmax,
G4double y,
const G4StokesVector & pol0,
const G4StokesVector & pol1 )
overridevirtual

Reimplemented from G4VPolarizedXS.

Definition at line 193 of file G4PolarizedComptonXS.cc.

197{
198 G4double k1 = 1. + 2. * k0;
199
200 G4double unit = fZ * CLHEP::pi * CLHEP::classic_electr_radius *
201 CLHEP::classic_electr_radius;
202
203 G4double pre = unit / (sqr(k0) * sqr(1. + 2. * k0));
204
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.);
209
210 return pre * (xs_0 / k0 + pol0.p3() * pol1.z() * xs_pol);
211}
double z() const
G4double p3() const

◆ XSection()

G4double G4PolarizedComptonXS::XSection ( const G4StokesVector & pol2,
const G4StokesVector & pol3 )
overridevirtual

Implements G4VPolarizedXS.

Definition at line 166 of file G4PolarizedComptonXS.cc.

168{
169 G4bool gammaPol2 = !(pol2 == G4StokesVector::ZERO);
170 G4bool electronPol3 = !(pol3 == G4StokesVector::ZERO);
171
172 G4double phi = 0.;
173 // polarization independent part
174 phi += fPhi0;
175
176 if(gammaPol2)
177 {
178 // part depending on the polarization of the final photon
179 phi += fPhi2 * pol2;
180 }
181
182 if(electronPol3)
183 {
184 // part depending on the polarization of the final electron
185 phi += fPhi3 * pol3;
186 }
187
188 // return cross section.
189 return phi;
190}
bool G4bool
Definition G4Types.hh:86
static const G4StokesVector ZERO

The documentation for this class was generated from the following files: