Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4PolarizedAnnihilationCrossSection Class Reference

#include <G4PolarizedAnnihilationCrossSection.hh>

Inheritance diagram for G4PolarizedAnnihilationCrossSection:
G4VPolarizedCrossSection

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)
 

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 ( )

Definition at line 52 of file G4PolarizedAnnihilationCrossSection.cc.

References python.hepunit::classic_electr_radius.

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.;
64  ISPxx=ISPyy=ISPzz=ISPnd=0.;
65 }
CLHEP::Hep3Vector G4ThreeVector
G4PolarizedAnnihilationCrossSection::~G4PolarizedAnnihilationCrossSection ( )
virtual

Definition at line 69 of file G4PolarizedAnnihilationCrossSection.cc.

70 {
71 }

Member Function Documentation

G4double G4PolarizedAnnihilationCrossSection::DiceEpsilon ( )

Definition at line 317 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

318 {
319  return dice;
320 }
void G4PolarizedAnnihilationCrossSection::getCoeff ( )
G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol2 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 272 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

273 {
274  // Note, mean polarization can not contain correlation
275  // effects.
276  return 1./phi0 * phi2;
277 }
G4StokesVector G4PolarizedAnnihilationCrossSection::GetPol3 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 281 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

282 {
283  // Note, mean polarization can not contain correlation
284  // effects.
285  return 1./phi0 * phi3;
286 }
G4double G4PolarizedAnnihilationCrossSection::getVar ( G4int  choice)

Definition at line 322 of file G4PolarizedAnnihilationCrossSection.cc.

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

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 }
subroutine choice(MNUM, RR, ICHAN, PROB1, PROB2, PROB3, AMRX, GAMRX, AMRA, GAMRA, AMRB, GAMRB)
Definition: leptonew.f:1817
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 }
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 }
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.

References G4InuclParticleNames::gam, CLHEP::Hep3Vector::setX(), CLHEP::Hep3Vector::setY(), CLHEP::Hep3Vector::setZ(), sqr(), CLHEP::Hep3Vector::x(), and CLHEP::Hep3Vector::z().

Referenced by G4PolarizedAnnihilationModel::SampleSecondaries().

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 setY(double)
void setZ(double)
void setX(double)
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
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.

References G4InuclParticleNames::gam, python.hepunit::pi, and sqr().

Referenced by G4PolarizedAnnihilationModel::ComputeAsymmetriesPerElectron().

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 }
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
G4double G4PolarizedAnnihilationCrossSection::XSection ( const G4StokesVector pol2,
const G4StokesVector pol3 
)
virtual

Implements G4VPolarizedCrossSection.

Definition at line 229 of file G4PolarizedAnnihilationCrossSection.cc.

231 {
232  G4double xs=phi0+pol2*phi2+pol3*phi3;
233  return xs;
234 }
double G4double
Definition: G4Types.hh:76

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