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

#include <G4PolarizedAnnihilationCrossSection.hh>

+ Inheritance diagram for G4PolarizedAnnihilationCrossSection:

Public Member Functions

 G4PolarizedAnnihilationCrossSection ()
 
virtual ~G4PolarizedAnnihilationCrossSection ()
 
virtual void Initialize (G4double eps, G4double gamma, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
 
G4double DiceEpsilon ()
 
virtual G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3) override
 
virtual G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1) override
 
G4StokesVector GetPol2 () override
 
G4StokesVector GetPol3 () override
 
virtual G4double GetXmin (G4double y) override
 
virtual G4double GetXmax (G4double y) override
 
G4double getVar (G4int)
 
void getCoeff ()
 
- 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 54 of file G4PolarizedAnnihilationCrossSection.hh.

Constructor & Destructor Documentation

◆ G4PolarizedAnnihilationCrossSection()

G4PolarizedAnnihilationCrossSection::G4PolarizedAnnihilationCrossSection ( )

Definition at line 51 of file G4PolarizedAnnihilationCrossSection.cc.

51 :
52 polxx(0.), polyy(0.), polzz(0.), polxz(0.), polzx(0.), polxy(0.),
53 polyx(0.), polyz(0.), polzy(0.),
54 re2(1.), diffXSFactor(1.), totalXSFactor(1.),
55 phi0(0.)
56{
57 re2 = classic_electr_radius * classic_electr_radius;
58 phi2 = G4ThreeVector(0., 0., 0.);
59 phi3 = G4ThreeVector(0., 0., 0.);
60 dice = 0.;
61 polXS= 0.;
62 unpXS = 0.;
63 ISPxx=ISPyy=ISPzz=ISPnd=0.;
64}
CLHEP::Hep3Vector G4ThreeVector

◆ ~G4PolarizedAnnihilationCrossSection()

G4PolarizedAnnihilationCrossSection::~G4PolarizedAnnihilationCrossSection ( )
virtual

Definition at line 68 of file G4PolarizedAnnihilationCrossSection.cc.

69{
70}

Member Function Documentation

◆ DiceEpsilon()

G4double G4PolarizedAnnihilationCrossSection::DiceEpsilon ( )

Definition at line 316 of file G4PolarizedAnnihilationCrossSection.cc.

317{
318 return dice;
319}

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

◆ getCoeff()

void G4PolarizedAnnihilationCrossSection::getCoeff ( )

◆ GetPol2()

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol2 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 271 of file G4PolarizedAnnihilationCrossSection.cc.

272{
273 // Note, mean polarization can not contain correlation
274 // effects.
275 return 1./phi0 * phi2;
276}

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

◆ GetPol3()

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol3 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 280 of file G4PolarizedAnnihilationCrossSection.cc.

281{
282 // Note, mean polarization can not contain correlation
283 // effects.
284 return 1./phi0 * phi3;
285}

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

◆ getVar()

G4double G4PolarizedAnnihilationCrossSection::getVar ( G4int  choice)

Definition at line 321 of file G4PolarizedAnnihilationCrossSection.cc.

322{
323 if (choice == -1) return polXS/unpXS;
324 if (choice == 0) return unpXS;
325 if (choice == 1) return ISPxx;
326 if (choice == 2) return ISPyy;
327 if (choice == 3) return ISPzz;
328 if (choice == 4) return ISPnd;
329 return 0;
330}

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

◆ GetXmax()

G4double G4PolarizedAnnihilationCrossSection::GetXmax ( G4double  y)
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 310 of file G4PolarizedAnnihilationCrossSection.cc.

311{
312 return 0.5*(1.+std::sqrt((y-1.)/(y+1.)));
313}

◆ GetXmin()

G4double G4PolarizedAnnihilationCrossSection::GetXmin ( G4double  y)
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 306 of file G4PolarizedAnnihilationCrossSection.cc.

307{
308 return 0.5*(1.-std::sqrt((y-1.)/(y+1.)));
309}

◆ Initialize()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.cc.

96{
97
98 diffXSFactor=re2/(gam - 1.);
99 DefineCoefficients(pol0,pol1);
100 //
101 // prepare dicing
102 //
103 dice = 0.;
104 G4double symmXS = 0.125*((-1./sqr(gam + 1.))/sqr(eps) +
105 ((sqr(gam) + 4.*gam - 1.)/sqr(gam + 1.))/eps - 1.);
106 //
107 //
108 //
109 G4ThreeVector epsVector(1./sqr(eps), 1./eps, 1.);
110 G4ThreeVector oneEpsVector(1./sqr(1. - eps), 1./(1.-eps), 1.);
111 G4ThreeVector sumEpsVector(epsVector + oneEpsVector);
112 G4ThreeVector difEpsVector(epsVector - oneEpsVector);
113 G4ThreeVector calcVector(0., 0., 0.);
114 //
115 // temporary variables
116 //
117 G4double helpVar2 = 0., helpVar1 = 0.;
118 //
119 // unpolarised contribution
120 //
121 helpVar1 = (gam*gam + 4.*gam + 1.)/sqr(gam + 1.);
122 helpVar2 = -1./sqr(gam + 1.);
123 calcVector = G4ThreeVector(helpVar2, helpVar1, -1.);
124 unpXS = 0.125 * calcVector * sumEpsVector;
125
126 // initial particles polarised contribution
127 helpVar2 = 1./sqr(gam + 1.);
128 helpVar1 = -(gam*gam + 4.*gam + 1.)/sqr(gam + 1.);
129 calcVector = G4ThreeVector(helpVar2, helpVar1, 0.5*(gam + 3.));
130 ISPxx = 0.25*(calcVector * sumEpsVector)/(gam - 1.);
131
132 helpVar1 = 1./sqr(gam + 1.);
133 calcVector = G4ThreeVector(-helpVar1, 2.*gam*helpVar1, -1.);
134 ISPyy = 0.125 * calcVector * sumEpsVector;
135
136 helpVar1 = 1./(gam - 1.);
137 helpVar2 = 1./sqr(gam + 1.);
138 calcVector = G4ThreeVector(-(gam*gam + 1.)*helpVar2,(gam*gam*(gam + 1.) + 7.*gam + 3.)*helpVar2, -(gam + 3.));
139 ISPzz = 0.125*helpVar1*(calcVector * sumEpsVector);
140
141 helpVar1 = std::sqrt(std::fabs(eps*(1. - eps)*2.*(gam + 1.) - 1.));
142 calcVector = G4ThreeVector(-1./(gam*gam - 1.), 2./(gam - 1.), 0.);
143 ISPnd = 0.125*(calcVector * difEpsVector) * helpVar1;
144
145 polXS = 0.;
146 polXS += ISPxx*polxx;
147 polXS += ISPyy*polyy;
148 polXS += ISPzz*polzz;
149 polXS += ISPnd*(polzx + polxz);
150 phi0 = unpXS + polXS;
151 dice = symmXS;
152 // if(polzz != 0.) dice *= (1. + std::fabs(polzz*ISPzz/unpXS));
153 if(polzz != 0.) {
154 dice *= (1. + (polzz*ISPzz/unpXS));
155 if (dice<0.) dice=0.;
156 }
157 // prepare final state coefficients
158 if (flag==2) {
159 //
160 // circular polarisation
161 //
162 G4double circ1 = 0., circ2 = 0., circ3 = 0.;
163 helpVar1 = 8.*sqr(1. - eps)*sqr(eps)*(gam - 1.)*sqr(gam + 1.)/std::sqrt(gam*gam - 1.);
164 helpVar2 = sqr(gam + 1.)*sqr(eps)*(-2.*eps + 3.) - (gam*gam + 3.*gam + 2.)*eps;
165 circ1 = helpVar2 + gam;
166 circ1 /= helpVar1;
167 circ2 = helpVar2 + 1.;
168 circ2 /= helpVar1;
169 helpVar1 = std::sqrt(std::fabs(eps*(1. - eps)*2.*(gam + 1.) - 1.));
170 helpVar1 /= std::sqrt(gam*gam - 1.);
171 calcVector = G4ThreeVector(1., -2.*gam, 0.);
172 circ3 = 0.125*(calcVector * sumEpsVector)/(gam + 1.);
173 circ3 *= helpVar1;
174
175 phi2.setZ( circ2*pol1.z() + circ1*pol0.z() + circ3*(pol1.x() + pol0.x()));
176 phi3.setZ(-circ1*pol1.z() - circ2*pol0.z() - circ3*(pol1.x() + pol0.x()));
177 //
178 // common to both linear polarisation
179 //
180 calcVector = G4ThreeVector(-1., 2.*gam, 0.);
181 G4double linearZero = 0.125*(calcVector * sumEpsVector)/sqr(gam + 1.);
182 //
183 // Linear Polarisation #1
184 //
185 helpVar1 = std::sqrt(std::fabs(2.*(gam + 1.)*(1. - eps)*eps - 1.))/((gam + 1.)*eps*(1. - eps));
186 helpVar2 = helpVar1*helpVar1;
187 //
188 // photon 1
189 //
190 G4double diagContrib = 0.125*helpVar2*(polxx + polyy - polzz);
191 G4double nonDiagContrib = 0.125*helpVar1*(-polxz/(1. - eps) + polzx/eps);
192
193 phi2.setX(linearZero + diagContrib + nonDiagContrib);
194 //
195 // photon 2
196 //
197 nonDiagContrib = 0.125*helpVar1*(polxz/eps - polzx/(1. - eps));
198
199
200 phi3.setX(linearZero + diagContrib + nonDiagContrib);
201 //
202 // Linear Polarisation #2
203 //
204 helpVar1 = std::sqrt(gam*gam - 1.)*(2.*(gam + 1.)*eps*(1. - eps) - 1.);
205 helpVar1 /= 8.*sqr(1. - eps)*sqr(eps)*sqr(gam + 1.)*(gam - 1.);
206 helpVar2 = std::sqrt((gam*gam - 1.)*std::fabs(2.*(gam + 1.)*eps*(1. - eps) - 1.));
207 helpVar2 /= 8.*sqr(1. - eps)*sqr(eps)*sqr(gam + 1.)*(gam - 1.);
208
209 G4double contrib21 = (-polxy + polyx)*helpVar1;
210 G4double contrib32 = -(eps*(gam + 1.) - 1.)*polyz + (eps*(gam + 1.) - gam)*polzy;
211
212 contrib32 *=helpVar2;
213 phi2.setY(contrib21 + contrib32);
214
215 contrib32 = -(eps*(gam + 1.) - gam)*polyz + (eps*(gam + 1.) - 1.)*polzy;
216 contrib32 *=helpVar2;
217 phi3.setY(contrib21 + contrib32);
218
219 }
220 phi0 *= diffXSFactor;
221 phi2 *= diffXSFactor;
222 phi3 *= diffXSFactor;
223}
double G4double
Definition: G4Types.hh:83
void setY(double)
void setZ(double)
void setX(double)
T sqr(const T &x)
Definition: templates.hh:128

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

◆ TotalXSection()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 237 of file G4PolarizedAnnihilationCrossSection.cc.

240{
241 totalXSFactor =pi*re2/(gam + 1.); // atomic number ignored
242 DefineCoefficients(pol0,pol1);
243
244 G4double xs = 0.;
245
246
247 G4double gam2 = gam*gam;
248 G4double sqrtgam1 = std::sqrt(gam2 - 1.);
249 G4double logMEM = std::log(gam+sqrtgam1);
250 G4double unpME = (gam*(gam + 4.) + 1.)*logMEM;
251 unpME += -(gam + 3.)*sqrtgam1;
252 unpME /= 4.*(gam2 - 1.);
253// G4double longPart = - 2.*(gam*(gam + 4.) + 1.)*logMEM;
254// longPart += (gam*(gam + 4.) + 7.)*sqrtgam1;
255// longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
256 G4double longPart = (3+gam*(gam*(gam + 1.) + 7.))*logMEM;
257 longPart += - (5.+ gam*(3*gam + 4.))*sqrtgam1;
258 longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
259 G4double tranPart = -(5*gam + 1.)*logMEM;
260 tranPart += (gam + 5.)*sqrtgam1;
261 tranPart /= 4.*sqr(gam - 1.)*(gam + 1.);
262
263 xs += unpME;
264 xs += polzz*longPart;
265 xs += (polxx + polyy)*tranPart;
266
267 return xs*totalXSFactor;
268}
const G4double pi

Referenced by G4PolarizedAnnihilationModel::ComputeAsymmetriesPerElectron().

◆ XSection()

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

Implements G4VPolarizedCrossSection.

Definition at line 228 of file G4PolarizedAnnihilationCrossSection.cc.

230{
231 G4double xs=phi0+pol2*phi2+pol3*phi3;
232 return xs;
233}

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