Geant4  10.02.p03
G4PolarizedAnnihilationCrossSection Class Reference

#include <G4PolarizedAnnihilationCrossSection.hh>

Inheritance diagram for G4PolarizedAnnihilationCrossSection:
Collaboration 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)
 
G4double DiceEpsilon ()
 
virtual G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3)
 
virtual G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1)
 
G4StokesVector GetPol2 ()
 
G4StokesVector GetPol3 ()
 
virtual G4double GetXmin (G4double y)
 
virtual G4double GetXmax (G4double y)
 
G4double getVar (G4int)
 
void getCoeff ()
 
- Public Member Functions inherited from G4VPolarizedCrossSection
 G4VPolarizedCrossSection ()
 
virtual ~G4VPolarizedCrossSection ()
 
G4double GetYmin ()
 
void SetMaterial (G4double A, G4double Z, G4double coul)
 

Private Member Functions

void TotalXS ()
 
void DefineCoefficients (const G4StokesVector &pol0, const G4StokesVector &pol1)
 

Private Attributes

G4double polxx
 
G4double polyy
 
G4double polzz
 
G4double polxz
 
G4double polzx
 
G4double polxy
 
G4double polyx
 
G4double polyz
 
G4double polzy
 
G4double re2
 
G4double diffXSFactor
 
G4double totalXSFactor
 
G4double phi0
 
G4ThreeVector phi2
 
G4ThreeVector phi3
 
G4double dice
 
G4double polXS
 
G4double unpXS
 
G4double ISPxx
 
G4double ISPyy
 
G4double ISPzz
 
G4double ISPnd
 

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 55 of file G4PolarizedAnnihilationCrossSection.hh.

Constructor & Destructor Documentation

◆ G4PolarizedAnnihilationCrossSection()

G4PolarizedAnnihilationCrossSection::G4PolarizedAnnihilationCrossSection ( )

Definition at line 52 of file G4PolarizedAnnihilationCrossSection.cc.

52  :
53  polxx(0.), polyy(0.), polzz(0.), polxz(0.), polzx(0.), polxy(0.),
54  polyx(0.), polyz(0.), polzy(0.),
55  re2(1.), diffXSFactor(1.), totalXSFactor(1.),
56  phi0(0.)
57 {
59  phi2 = G4ThreeVector(0., 0., 0.);
60  phi3 = G4ThreeVector(0., 0., 0.);
61  dice = 0.;
62  polXS= 0.;
63  unpXS = 0.;
65 }
CLHEP::Hep3Vector G4ThreeVector
int classic_electr_radius
Definition: hepunit.py:288

◆ ~G4PolarizedAnnihilationCrossSection()

G4PolarizedAnnihilationCrossSection::~G4PolarizedAnnihilationCrossSection ( )
virtual

Definition at line 69 of file G4PolarizedAnnihilationCrossSection.cc.

70 {
71 }

Member Function Documentation

◆ DefineCoefficients()

void G4PolarizedAnnihilationCrossSection::DefineCoefficients ( const G4StokesVector pol0,
const G4StokesVector pol1 
)
private

Definition at line 288 of file G4PolarizedAnnihilationCrossSection.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DiceEpsilon()

G4double G4PolarizedAnnihilationCrossSection::DiceEpsilon ( )

Definition at line 317 of file G4PolarizedAnnihilationCrossSection.cc.

Here is the caller graph for this function:

◆ getCoeff()

void G4PolarizedAnnihilationCrossSection::getCoeff ( )

◆ GetPol2()

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol2 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 272 of file G4PolarizedAnnihilationCrossSection.cc.

273 {
274  // Note, mean polarization can not contain correlation
275  // effects.
276  return 1./phi0 * phi2;
277 }
Here is the caller graph for this function:

◆ GetPol3()

G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol3 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 281 of file G4PolarizedAnnihilationCrossSection.cc.

282 {
283  // Note, mean polarization can not contain correlation
284  // effects.
285  return 1./phi0 * phi3;
286 }
Here is the caller graph for this function:

◆ getVar()

G4double G4PolarizedAnnihilationCrossSection::getVar ( G4int  choice)

Definition at line 322 of file G4PolarizedAnnihilationCrossSection.cc.

323 {
324  if (choice == -1) return polXS/unpXS;
325  if (choice == 0) return unpXS;
326  if (choice == 1) return ISPxx;
327  if (choice == 2) return ISPyy;
328  if (choice == 3) return ISPzz;
329  if (choice == 4) return ISPnd;
330  return 0;
331 }
Here is the caller graph for this function:

◆ GetXmax()

G4double G4PolarizedAnnihilationCrossSection::GetXmax ( G4double  y)
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 311 of file G4PolarizedAnnihilationCrossSection.cc.

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

◆ GetXmin()

G4double G4PolarizedAnnihilationCrossSection::GetXmin ( G4double  y)
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 307 of file G4PolarizedAnnihilationCrossSection.cc.

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

◆ Initialize()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 90 of file G4PolarizedAnnihilationCrossSection.cc.

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

◆ TotalXS()

void G4PolarizedAnnihilationCrossSection::TotalXS ( )
private

Definition at line 75 of file G4PolarizedAnnihilationCrossSection.cc.

76 {
77  // total cross section is sum of
78  // + unpol xsec "sigma0"
79  // + longitudinal polarised cross section "sigma_zz" times pol_3(e-)*pol_3(e+)
80  // + transverse contribution "(sigma_xx+sigma_yy)/2" times pol_T(e-)*pol_T(e+)
81  // (Note: if both beams are transversely polarised, i.e. pol_T(e-)!=0 and
82  // pol_T(e+)!=0, and sigma_xx!=sigma_yy, then the diff. cross section will
83  // exhibit a azimuthal asymmetry even if pol_T(e-)*pol_T(e+)==0)
84 
85 
86 }

◆ TotalXSection()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 238 of file G4PolarizedAnnihilationCrossSection.cc.

241 {
242  totalXSFactor =pi*re2/(gam + 1.); // atomic number ignored
243  DefineCoefficients(pol0,pol1);
244 
245  G4double xs = 0.;
246 
247 
248  G4double gam2 = gam*gam;
249  G4double sqrtgam1 = std::sqrt(gam2 - 1.);
250  G4double logMEM = std::log(gam+sqrtgam1);
251  G4double unpME = (gam*(gam + 4.) + 1.)*logMEM;
252  unpME += -(gam + 3.)*sqrtgam1;
253  unpME /= 4.*(gam2 - 1.);
254 // G4double longPart = - 2.*(gam*(gam + 4.) + 1.)*logMEM;
255 // longPart += (gam*(gam + 4.) + 7.)*sqrtgam1;
256 // longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
257  G4double longPart = (3+gam*(gam*(gam + 1.) + 7.))*logMEM;
258  longPart += - (5.+ gam*(3*gam + 4.))*sqrtgam1;
259  longPart /= 4.*sqr(gam - 1.)*(gam + 1.);
260  G4double tranPart = -(5*gam + 1.)*logMEM;
261  tranPart += (gam + 5.)*sqrtgam1;
262  tranPart /= 4.*sqr(gam - 1.)*(gam + 1.);
263 
264  xs += unpME;
265  xs += polzz*longPart;
266  xs += (polxx + polyy)*tranPart;
267 
268  return xs*totalXSFactor;
269 }
void DefineCoefficients(const G4StokesVector &pol0, const G4StokesVector &pol1)
static const double pi
Definition: G4SIunits.hh:74
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ XSection()

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

Member Data Documentation

◆ dice

G4double G4PolarizedAnnihilationCrossSection::dice
private

Definition at line 98 of file G4PolarizedAnnihilationCrossSection.hh.

◆ diffXSFactor

G4double G4PolarizedAnnihilationCrossSection::diffXSFactor
private

Definition at line 91 of file G4PolarizedAnnihilationCrossSection.hh.

◆ ISPnd

G4double G4PolarizedAnnihilationCrossSection::ISPnd
private

Definition at line 100 of file G4PolarizedAnnihilationCrossSection.hh.

◆ ISPxx

G4double G4PolarizedAnnihilationCrossSection::ISPxx
private

Definition at line 100 of file G4PolarizedAnnihilationCrossSection.hh.

◆ ISPyy

G4double G4PolarizedAnnihilationCrossSection::ISPyy
private

Definition at line 100 of file G4PolarizedAnnihilationCrossSection.hh.

◆ ISPzz

G4double G4PolarizedAnnihilationCrossSection::ISPzz
private

Definition at line 100 of file G4PolarizedAnnihilationCrossSection.hh.

◆ phi0

G4double G4PolarizedAnnihilationCrossSection::phi0
private

Definition at line 93 of file G4PolarizedAnnihilationCrossSection.hh.

◆ phi2

G4ThreeVector G4PolarizedAnnihilationCrossSection::phi2
private

Definition at line 95 of file G4PolarizedAnnihilationCrossSection.hh.

◆ phi3

G4ThreeVector G4PolarizedAnnihilationCrossSection::phi3
private

Definition at line 97 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polXS

G4double G4PolarizedAnnihilationCrossSection::polXS
private

Definition at line 99 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polxx

G4double G4PolarizedAnnihilationCrossSection::polxx
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polxy

G4double G4PolarizedAnnihilationCrossSection::polxy
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polxz

G4double G4PolarizedAnnihilationCrossSection::polxz
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polyx

G4double G4PolarizedAnnihilationCrossSection::polyx
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polyy

G4double G4PolarizedAnnihilationCrossSection::polyy
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polyz

G4double G4PolarizedAnnihilationCrossSection::polyz
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polzx

G4double G4PolarizedAnnihilationCrossSection::polzx
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polzy

G4double G4PolarizedAnnihilationCrossSection::polzy
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ polzz

G4double G4PolarizedAnnihilationCrossSection::polzz
private

Definition at line 89 of file G4PolarizedAnnihilationCrossSection.hh.

◆ re2

G4double G4PolarizedAnnihilationCrossSection::re2
private

Definition at line 91 of file G4PolarizedAnnihilationCrossSection.hh.

◆ totalXSFactor

G4double G4PolarizedAnnihilationCrossSection::totalXSFactor
private

Definition at line 91 of file G4PolarizedAnnihilationCrossSection.hh.

◆ unpXS

G4double G4PolarizedAnnihilationCrossSection::unpXS
private

Definition at line 99 of file G4PolarizedAnnihilationCrossSection.hh.


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