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

#include <G4PolarizedComptonCrossSection.hh>

+ Inheritance diagram for G4PolarizedComptonCrossSection:

Public Member Functions

 G4PolarizedComptonCrossSection ()
 
virtual ~G4PolarizedComptonCrossSection ()
 
virtual 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
 
- Public Member Functions inherited from G4VPolarizedCrossSection
 G4VPolarizedCrossSection ()
 
virtual ~G4VPolarizedCrossSection ()
 
virtual void Initialize (G4double, G4double, G4double, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0)
 
virtual G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3)=0
 
virtual G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1)
 
virtual G4StokesVector GetPol2 ()
 
virtual G4StokesVector GetPol3 ()
 
G4double GetYmin ()
 
virtual G4double GetXmin (G4double y)
 
virtual G4double GetXmax (G4double y)
 
void SetMaterial (G4double A, G4double Z, G4double coul)
 

Additional Inherited Members

- Protected Member Functions inherited from G4VPolarizedCrossSection
void SetXmin (G4double xmin)
 
void SetXmax (G4double xmax)
 
void SetYmin (G4double ymin)
 
- Protected Attributes inherited from G4VPolarizedCrossSection
G4double fXmin
 
G4double fXmax
 
G4double fYmin
 
G4double theA
 
G4double theZ
 
G4double fCoul
 

Detailed Description

Definition at line 56 of file G4PolarizedComptonCrossSection.hh.

Constructor & Destructor Documentation

◆ G4PolarizedComptonCrossSection()

G4PolarizedComptonCrossSection::G4PolarizedComptonCrossSection ( )

Definition at line 50 of file G4PolarizedComptonCrossSection.cc.

51 : gammaPol2(false), electronPol3(false)
52{
53 SetYmin(0.);
54
55 // G4cout<<"G4PolarizedComptonCrossSection() init\n";
56
57 re2 = classic_electr_radius * classic_electr_radius * sqr(4*pi/hbarc);
58 // G4double unit_conversion = hbarc_squared ;
59 // G4cout<<" (keV)^2* m^2 ="<<unit_conversion<<"\n";
60 phi0 = 0.; polXS = 0.; unpXS = 0.;
61 phi2 = G4ThreeVector(0., 0., 0.);
62 phi3 = G4ThreeVector(0., 0., 0.);
63 polxx = polyy = polzz = polxz = polzx = polyz = polzy = polxy = polyx = 0.;
64 diffXSFactor = 1.;
65 totalXSFactor = 1.;
66}
CLHEP::Hep3Vector G4ThreeVector
T sqr(const T &x)
Definition: templates.hh:128

◆ ~G4PolarizedComptonCrossSection()

G4PolarizedComptonCrossSection::~G4PolarizedComptonCrossSection ( )
virtual

Definition at line 69 of file G4PolarizedComptonCrossSection.cc.

70{}

Member Function Documentation

◆ GetPol2()

G4StokesVector G4PolarizedComptonCrossSection::GetPol2 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 213 of file G4PolarizedComptonCrossSection.cc.

214{
215 // Note, mean polarization can not contain correlation
216 // effects.
217 return 1./phi0 * phi2;
218}

Referenced by G4PolarizedComptonModel::SampleSecondaries().

◆ GetPol3()

G4StokesVector G4PolarizedComptonCrossSection::GetPol3 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 222 of file G4PolarizedComptonCrossSection.cc.

223{
224 // Note, mean polarization can not contain correlation
225 // effects.
226 return 1./phi0 * phi3;
227}

Referenced by G4PolarizedComptonModel::SampleSecondaries().

◆ Initialize()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 73 of file G4PolarizedComptonCrossSection.cc.

77{
78 G4double cosT = 1. - (1./eps - 1.)/X;
79 if(cosT > 1.+1.e-8) cosT = 1.;
80 if(cosT < -1.-1.e-8) cosT = -1.;
81 G4double cosT2 = cosT*cosT;
82 G4double cosT3 = cosT2*cosT;
83 G4double sinT2 = 1. - cosT2;
84 if(sinT2 > 1. + 1.e-8) sinT2 = 1.;
85 if(sinT2 < 0.) sinT2 = 0.;
86 G4double sinT = std::sqrt(sinT2);
87 G4double cos2T = 2.*cosT2 - 1.;
88 G4double sin2T = 2.*sinT*cosT;
89 G4double eps2 = sqr(eps);
90 DefineCoefficients(pol0,pol1);
91 diffXSFactor = re2/(4.*X);
92
93 // unpolarized Cross Section
94 unpXS = (eps2 + 1. - eps*sinT2)/(2.*eps);
95 // initial polarization dependence
96 polXS = -sinT2*pol0.x() + (1. - eps)*sinT*polzx + ((eps2 - 1.)/eps)*cosT*polzz;
97 polXS *= 0.5;
98
99 phi0 = unpXS + polXS;
100
101 if (flag == 2 ){
102 // polarization of outgoing photon
103 G4double PHI21 = -sinT2 + 0.5*(cos2T + 3.)*pol0.x() - ((1. - eps)/eps)*sinT*polzx;
104 PHI21 *= 0.5;
105 G4double PHI22 = cosT*pol0.y() + ((1. - eps)/(2.*eps))*sinT*polzy;
106 G4double PHI23 = ((eps2 + 1.)/eps)*cosT*pol0.z() - ((1. - eps)/eps)*(eps*cosT2 + 1.)*pol1.z();
107 PHI23 += 0.5*(1. - eps)*sin2T*pol1.x();
108 PHI23 += (eps - 1.)*(-sinT2*polxz + sinT*polyy - 0.5*sin2T*polxx);
109 PHI23 *= 0.5;
110 phi2 = G4ThreeVector(PHI21, PHI22, PHI23);
111
112 // polarization of outgoing electron
113 G4double PHI32 = -sinT2*polxy + ((1. - eps)/eps)*sinT*polyz + 0.5*(cos2T + 3.)*pol1.y();
114 PHI32 *= 0.5;
115
116 G4double PHI31 = 0., PHI31add = 0., PHI33 = 0., PHI33add = 0.;
117
118 if ((1. - eps) > 1.e-12){
119 G4double helpVar = std::sqrt(eps2 - 2.*cosT*eps + 1.);
120
121 PHI31 = (1. - eps)*(1. + cosT)*sinT*pol0.z();
122 PHI31 += (-eps*cosT3 + eps*cosT2 + (eps - 2.)*cosT + eps)*pol1.x();
123 PHI31 += -(eps*cosT2 - eps*cosT + cosT + 1.)*sinT*pol1.z();
124 PHI31 /= 2.*helpVar;
125
126 PHI31add = -eps*sqr(1. - cosT)*(1. + cosT)*polxx;
127 PHI31add += (1. - eps)*sinT2*polyy;
128 PHI31add += -(-eps2 + cosT*(cosT*eps - eps + 1.)*eps + eps - 1.)*sinT*polxz/eps;
129 PHI31add /= 2.*helpVar;
130
131 PHI33 = ((1. - eps)/eps)*(-eps*cosT2 + eps*(eps + 1.)*cosT - 1.)*pol0.z();
132 PHI33 += -(eps*cosT2 + (1. - eps)*eps*cosT + 1.)*sinT*pol1.x();
133 PHI33 += -(-eps2*cosT3 + eps*(eps2 - eps + 1.)*cosT2 - cosT + eps2)*pol1.z()/eps;
134 PHI33 /= -2.*helpVar;
135
136 PHI33add = (eps*(eps - cosT - 1.)*cosT + 1.)*sinT*polxx;
137 PHI33add += -(-eps2 + cosT*eps + eps - 1.)*sinT2*polxz;
138 PHI33add += (eps - 1.)*(cosT - eps)*sinT*polyy;
139 PHI33add /= -2.*helpVar;
140 }else{
141 PHI31 = -pol1.z() - (X - 1.)*std::sqrt(1. - eps)*pol1.x()/std::sqrt(2.*X);
142 PHI31add = -(-X*X*pol1.z() - 2.*X*(2.*pol0.z() - pol1.z()) - (4.*pol0.x() + 5.)*pol1.z())*(1. - eps)/(4.*X);
143
144 PHI33 = pol1.x() - (X - 1.)*std::sqrt(1. - eps)*pol1.z()/std::sqrt(2.*X);
145 PHI33add = -(X*X - 2.*X + 4.*pol0.x() + 5.)*(1. - eps)*pol1.x()/(4.*X);
146 }
147 phi3 = G4ThreeVector(PHI31 + PHI31add, PHI32, PHI33 + PHI33add);
148
149 }
150 unpXS *= diffXSFactor;
151 polXS *= diffXSFactor;
152 phi0 *= diffXSFactor;
153 phi2 *= diffXSFactor;
154 phi3 *= diffXSFactor;
155
156}
double G4double
Definition: G4Types.hh:83

Referenced by G4PolarizedComptonModel::SampleSecondaries().

◆ TotalXSection()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 185 of file G4PolarizedComptonCrossSection.cc.

188{
189
190 // G4double k0 = gammaEnergy / electron_mass_c2 ;
191 G4double k1 = 1. + 2.*k0 ;
192
193// // pi*re^2
194// G4double re=2.81794e-15; //m
195// G4double barn=1.e-28; //m^2
196 G4double Z=theZ;
197
198 G4double unit = Z*pi*classic_electr_radius
199 * classic_electr_radius ; // *1./barn;
200
201 G4double pre = unit/(sqr(k0)*sqr(1.+2.*k0));
202
203 G4double xs_0 = ((k0 - 2.)*k0 -2.)*sqr(k1)*std::log(k1) + 2.*k0*(k0*(k0 + 1.)*(k0 + 8.) + 2.);
204 G4double xs_pol = (k0 + 1.)*sqr(k1)*std::log(k1) - 2.*k0*(5.*sqr(k0) + 4.*k0 + 1.);
205
206 return pre*(xs_0/k0 + pol0.p3()*pol1.z()*xs_pol);
207}
double z() const
G4double p3() const
const G4double pi

◆ XSection()

G4double G4PolarizedComptonCrossSection::XSection ( const G4StokesVector pol2,
const G4StokesVector pol3 
)
overridevirtual

Implements G4VPolarizedCrossSection.

Definition at line 158 of file G4PolarizedComptonCrossSection.cc.

159{
160 gammaPol2 = !(pol2==G4StokesVector::ZERO);
161 electronPol3 = !(pol3==G4StokesVector::ZERO);
162
163 G4double phi = 0.;
164 // polarization independent part
165 phi += phi0;
166
167
168 if (gammaPol2) {
169 // part depending on the polarization of the final photon
170 phi += phi2*pol2;
171 }
172
173 if (electronPol3) {
174 // part depending on the polarization of the final electron
175 phi += phi3*pol3;
176 }
177
178 // return cross section.
179 return phi;
180}
static const G4StokesVector ZERO

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