Geant4  10.02.p03
G4PolarizedBhabhaCrossSection Class Reference

#include <G4PolarizedBhabhaCrossSection.hh>

Inheritance diagram for G4PolarizedBhabhaCrossSection:
Collaboration diagram for G4PolarizedBhabhaCrossSection:

Public Member Functions

 G4PolarizedBhabhaCrossSection ()
 
virtual ~G4PolarizedBhabhaCrossSection ()
 
void Initialize (G4double x, G4double y, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0)
 
G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3)
 
G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1)
 
G4StokesVector GetPol2 ()
 
G4StokesVector GetPol3 ()
 
- Public Member Functions inherited from G4VPolarizedCrossSection
 G4VPolarizedCrossSection ()
 
virtual ~G4VPolarizedCrossSection ()
 
G4double GetYmin ()
 
virtual G4double GetXmin (G4double y)
 
virtual G4double GetXmax (G4double y)
 
void SetMaterial (G4double A, G4double Z, G4double coul)
 

Private Attributes

G4double phi0
 
G4ThreeVector phi2
 
G4ThreeVector phi3
 

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 52 of file G4PolarizedBhabhaCrossSection.hh.

Constructor & Destructor Documentation

◆ G4PolarizedBhabhaCrossSection()

G4PolarizedBhabhaCrossSection::G4PolarizedBhabhaCrossSection ( )

Definition at line 56 of file G4PolarizedBhabhaCrossSection.cc.

56  : phi0(1.)
57 {
58 }

◆ ~G4PolarizedBhabhaCrossSection()

G4PolarizedBhabhaCrossSection::~G4PolarizedBhabhaCrossSection ( )
virtual

Definition at line 59 of file G4PolarizedBhabhaCrossSection.cc.

60 {
61 }

Member Function Documentation

◆ GetPol2()

G4StokesVector G4PolarizedBhabhaCrossSection::GetPol2 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 298 of file G4PolarizedBhabhaCrossSection.cc.

299 {
300  // Note, mean polarization can not contain correlation
301  // effects.
302  return 1./phi0 * phi2;
303 }

◆ GetPol3()

G4StokesVector G4PolarizedBhabhaCrossSection::GetPol3 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 304 of file G4PolarizedBhabhaCrossSection.cc.

305 {
306  // Note, mean polarization can not contain correlation
307  // effects.
308  return 1./phi0 * phi3;
309 }

◆ Initialize()

void G4PolarizedBhabhaCrossSection::Initialize ( G4double  x,
G4double  y,
G4double  phi,
const G4StokesVector p0,
const G4StokesVector p1,
G4int  flag = 0 
)
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 62 of file G4PolarizedBhabhaCrossSection.cc.

69 {
70  SetXmax(1.);
71 
73  G4double gamma2 = gamma*gamma;
74  G4double gamma3 = gamma2*gamma;
75  G4double gmo = (gamma - 1.);
76  G4double gmo2 = (gamma - 1.)*(gamma - 1.);
77  G4double gmo3 = gmo2*(gamma - 1.);
78  G4double gpo = (gamma + 1.);
79  G4double gpo2 = (gamma + 1.)*(gamma + 1.);
80  G4double gpo3 = gpo2*(gamma + 1.);
81  G4double gpo12 = std::sqrt(gpo);
82  G4double gpo32 = gpo*gpo12;
83  G4double gpo52 = gpo2*gpo12;
84 
85  G4double pref = re2/(gamma - 1.0);
86  G4double sqrttwo=std::sqrt(2.);
87  G4double d = std::sqrt(1./e - 1.);
88  G4double e2 = e*e;
89  G4double e3 = e2*e;
90 
91  // *** new ***
92  G4double gmo12 = std::sqrt(gmo);
93  G4double gmo32 = gmo*gmo12;
94  G4double egmp32 = std::pow(e*(2 + e*gmo)*gpo,(3./2.));
95  G4double e32 = e*std::sqrt(e);
96 
97  G4bool polarized=(!pol0.IsZero())||(!pol1.IsZero());
98 
99  if (flag==0) polarized=false;
100  // Unpolarised part of XS
101  // *AS* UnpME . OK
102  phi0 = 0.;
103  phi0+= e2*gmo3/gpo3;
104  phi0+= -2.*e*gamma*gmo2/gpo3;
105  phi0+= (3.*gamma2 + 6.*gamma + 4.)*gmo/gpo3;
106  phi0+= -(2.*gamma2 + 4.*gamma + 1.)/(e*gpo2);
107  phi0+= gamma2/(e2*(gamma2 - 1.));
108  phi0*=0.25;
109  // Initial state polarisarion dependence
110  if (polarized) {
111  // G4cout<<"Polarized differential Bhabha cross section"<<G4endl;
112  // G4cout<<"Initial state polarisation contributions"<<G4endl;
113  // G4cout<<"Diagonal Matrix Elements"<<G4endl;
114  // *** new ***
115  G4double xx = -((e*gmo - gamma)*(-1 - gamma + e*(e*gmo - gamma)*(3 + gamma)))/(4*e*gpo3);
116  G4double yy = (e3*gmo3 - 2*e2*gmo2*gamma - gpo*(1 + 2*gamma) + e*(-2 + gamma2 + gamma3))/(4*e*gpo3);
117  G4double zz = ((e*gmo - gamma)*(e2*gmo*(3 + gamma) - e*gamma*(3 + gamma) + gpo*(1 + 2*gamma)))/(4*e*gpo3);
118  // ***
119 
120  phi0 += xx*pol0.x()*pol1.x() + yy*pol0.y()*pol1.y() + zz*pol0.z()*pol1.z();
121 
122  {
123  G4double xy = 0;
124  G4double xz = (d*(e*gmo - gamma)*(-1 + 2*e*gmo - gamma))/(2*sqrttwo*gpo52);
125  G4double yx = 0;
126  G4double yz = 0;
127  G4double zx = xz;
128  G4double zy = 0;
129  // G4cout<<"Non-diagonal Matrix Elements"<<G4endl;
130  phi0+=yx*pol0.y()*pol1.x() + xy*pol0.x()*pol1.y();
131  phi0+=zx*pol0.z()*pol1.x() + xz*pol0.x()*pol1.z();
132  phi0+=zy*pol0.z()*pol1.y() + yz*pol0.y()*pol1.z();
133  }
134  }
135  // Final state polarisarion dependence
138 
139  if (flag>=1) {
140  //
141  // Final Positron Ppl
142  //
143  // initial positron Kpl
144  if (!pol0.IsZero()) {
145 
146  G4double xxPplKpl = -((-1 + e)*(e*gmo - gamma)*(-(gamma*gpo) + e*(-2 + gamma + gamma2)))/
147  (4*e2*gpo*std::sqrt(gmo*gpo*(-1 + e + gamma - e*gamma)* (1 + e + gamma - e*gamma)));
148  G4double xyPplKpl = 0;
149  G4double xzPplKpl = ((e*gmo - gamma)*(-1 - gamma + e*gmo*(1 + 2*gamma)))/
150  (2*sqrttwo*e32*gmo*gpo2*std::sqrt(1 + e + gamma - e*gamma));
151  G4double yxPplKpl = 0;
152  G4double yyPplKpl = (gamma2*gpo + e2*gmo2*(3 + gamma) -
153  e*gmo*(1 + 2*gamma*(2 + gamma)))/(4*e2*gmo*gpo2);
154  G4double yzPplKpl = 0;
155  G4double zxPplKpl = ((e*gmo - gamma)*(1 + e*(-1 + 2*e*gmo - 2*gamma)*gmo + gamma))/
156  (2*sqrttwo*e*gmo*gpo2*std::sqrt(e*(1 + e + gamma - e*gamma)));
157  G4double zyPplKpl = 0;
158  G4double zzPplKpl = -((e*gmo - gamma)*std::sqrt((1 - e)/(e - e*gamma2 + gpo2))*
159  (2*e2*gmo2 + gamma + gamma2 - e*(-2 + gamma + gamma2)))/
160  (4*e2*(-1 + gamma2));
161 
162  phi2[0] += xxPplKpl*pol0.x() + xyPplKpl*pol0.y() + xzPplKpl*pol0.z();
163  phi2[1] += yxPplKpl*pol0.x() + yyPplKpl*pol0.y() + yzPplKpl*pol0.z();
164  phi2[2] += zxPplKpl*pol0.x() + zyPplKpl*pol0.y() + zzPplKpl*pol0.z();
165  }
166  // initial electron Kmn
167  if (!pol1.IsZero()) {
168  G4double xxPplKmn = ((-1 + e)*(e*(-2 + gamma)*gmo + gamma))/(4*e*gpo32*std::sqrt(1 + e2*gmo + gamma - 2*e*gamma));
169  G4double xyPplKmn = 0;
170  G4double xzPplKmn = (-1 + e*gmo + gmo*gamma)/(2*sqrttwo*gpo2* std::sqrt(e*(1 + e + gamma - e*gamma)));
171  G4double yxPplKmn = 0;
172  G4double yyPplKmn = (-1 - 2*gamma + e*gmo*(3 + gamma))/(4*e*gpo2);
173  G4double yzPplKmn = 0;
174  G4double zxPplKmn = (1 + 2*e2*gmo2 + gamma + gamma2 + e*(1 + (3 - 4*gamma)*gamma))/
175  (2*sqrttwo*gpo2*std::sqrt(e*(1 + e + gamma - e*gamma)));
176  G4double zyPplKmn = 0;
177  G4double zzPplKmn = -(std::sqrt((1 - e)/(e - e*gamma2 + gpo2))*
178  (2*e2*gmo2 + gamma + 2*gamma2 + e*(2 + gamma - 3*gamma2)))/(4*e*gpo);
179 
180  phi2[0] += xxPplKmn*pol1.x() + xyPplKmn*pol1.y() + xzPplKmn*pol1.z();
181  phi2[1] += yxPplKmn*pol1.x() + yyPplKmn*pol1.y() + yzPplKmn*pol1.z();
182  phi2[2] += zxPplKmn*pol1.x() + zyPplKmn*pol1.y() + zzPplKmn*pol1.z();
183  }
184 //
185 // Final Electron Pmn
186 //
187  // initial positron Kpl
188  if (!pol0.IsZero()) {
189  G4double xxPmnKpl = ((-1 + e*gmo)*(2 + gamma))/(4*gpo* std::sqrt(e*(2 + e*gmo)*gpo));
190  G4double xyPmnKpl = 0;
191  G4double xzPmnKpl = (std::sqrt((-1 + e)/(-2 + e - e*gamma))*
192  (e + gamma + e*gamma - 2*(-1 + e)*gamma2))/(2*sqrttwo*e*gpo2);
193  G4double yxPmnKpl = 0;
194  G4double yyPmnKpl = (-1 - 2*gamma + e*gmo*(3 + gamma))/(4*e*gpo2);
195  G4double yzPmnKpl = 0;
196  G4double zxPmnKpl = -((-1 + e)*(1 + 2*e*gmo)*(e*gmo - gamma))/
197  (2*sqrttwo*e*std::sqrt(-((-1 + e)*(2 + e*gmo)))*gpo2);
198  G4double zyPmnKpl = 0;
199  G4double zzPmnKpl = (-2 + 2*e2*gmo2 + gamma*(-1 + 2*gamma) +
200  e*(-2 + (5 - 3*gamma)*gamma))/(4*std::sqrt(e*(2 + e*gmo))* gpo32);
201 
202  phi3[0] += xxPmnKpl*pol0.x() + xyPmnKpl*pol0.y() + xzPmnKpl*pol0.z();
203  phi3[1] += yxPmnKpl*pol0.x() + yyPmnKpl*pol0.y() + yzPmnKpl*pol0.z();
204  phi3[2] += zxPmnKpl*pol0.x() + zyPmnKpl*pol0.y() + zzPmnKpl*pol0.z();
205  }
206  // initial electron Kmn
207  if (!pol1.IsZero()) {
208  G4double xxPmnKmn = -((2 + e*gmo)*(-1 + e*gmo - gamma)*(e*gmo - gamma)*
209  (-2 + gamma))/(4*gmo*egmp32);
210  G4double xyPmnKmn = 0;
211  G4double xzPmnKmn = ((e*gmo - gamma)*
212  std::sqrt((-1 + e + gamma - e*gamma)/(2 + e*gmo))*
213  (e + gamma - e*gamma + gamma2))/
214  (2*sqrttwo*e2*gmo32*gpo2);
215  G4double yxPmnKmn = 0;
216  G4double yyPmnKmn = (gamma2*gpo + e2*gmo2*(3 + gamma) -
217  e*gmo*(1 + 2*gamma*(2 + gamma)))/(4*e2*gmo*gpo2);
218  G4double yzPmnKmn = 0;
219  G4double zxPmnKmn = -((-1 + e)*(e*gmo - gamma)*(e*gmo + 2*e2*gmo2 - gamma*gpo))/
220  (2*sqrttwo*e2*std::sqrt(-((-1 + e)*(2 + e*gmo)))* gmo*gpo2);
221  G4double zyPmnKmn = 0;
222  G4double zzPmnKmn = ((e*gmo - gamma)*std::sqrt(e/((2 + e*gmo)*gpo))*
223  (-(e*(-2 + gamma)*gmo) + 2*e2*gmo2 + (-2 + gamma)*gpo))/(4*e2*(-1 + gamma2));
224 
225  phi3[0] += xxPmnKmn*pol1.x() + xyPmnKmn*pol1.y() + xzPmnKmn*pol1.z();
226  phi3[1] += yxPmnKmn*pol1.x() + yyPmnKmn*pol1.y() + yzPmnKmn*pol1.z();
227  phi3[2] += zxPmnKmn*pol1.x() + zyPmnKmn*pol1.y() + zzPmnKmn*pol1.z();
228  }
229  }
230  phi0 *= pref;
231  phi2 *= pref;
232  phi3 *= pref;
233 
234 }
Double_t yy
Float_t d
CLHEP::Hep3Vector G4ThreeVector
Double_t xx
static const G4double e2
bool G4bool
Definition: G4Types.hh:79
double x() const
Double_t zz
int classic_electr_radius
Definition: hepunit.py:288
double G4double
Definition: G4Types.hh:76
static const G4double e3
Here is the call graph for this function:

◆ TotalXSection()

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 249 of file G4PolarizedBhabhaCrossSection.cc.

252 {
253  G4double xs=0.;
254 
255  G4double x=xmin;
256 
257  if (xmax != 1.) G4cout<<" warning xmax expected to be 1 but is "<<xmax<< G4endl;
258 
259  // re -> electron radius^2;
261  G4double gamma2=gamma*gamma;
262  G4double gmo2 = (gamma - 1.)*(gamma - 1.);
263  G4double gpo2 = (gamma + 1.)*(gamma + 1.);
264  G4double gpo3 = gpo2*(gamma + 1.);
265  G4double logMEM = std::log(x);
266  G4double pref = twopi*re2/(gamma - 1.0);
267  // unpolarise XS
268  G4double sigma0 = 0.;
269  sigma0 += -gmo2*(gamma - 1.)*x*x*x/3. + gmo2*gamma*x*x;
270  sigma0 += -(gamma - 1.)*(3.*gamma*(gamma + 2.) +4.)*x;
271  sigma0 += (gamma*(gamma*(gamma*(4.*gamma - 1.) - 21.) - 7.)+13.)/(3.*(gamma - 1.));
272  sigma0 /= gpo3;
273  sigma0 += logMEM*(2. - 1./gpo2);
274  sigma0 += gamma2/((gamma2 - 1.)*x);
275  // longitudinal part
276  G4double sigma2=0.;
277  sigma2 += logMEM*gamma*(gamma + 1.)*(2.*gamma + 1.);
278  sigma2 += gamma*(7.*gamma*(gamma + 1.) - 2.)/3.;
279  sigma2 += -(3.*gamma + 1.)*(gamma2 + gamma - 1.)*x;
280  sigma2 += (gamma - 1.)*gamma*(gamma + 3.)*x*x;
281  sigma2 += -gmo2*(gamma + 3.)*x*x*x/3.;
282  sigma2 /= gpo3;
283  // transverse part
284  G4double sigma3=0.;
285  sigma3 += 0.5*(gamma + 1.)*(3.*gamma + 1.)*logMEM;
286  sigma3 += (gamma*(5.*gamma - 4.) - 13.)/6.;
287  sigma3 += 0.5*(gamma2 + 3.)*x;
288  sigma3 += - 2.*(gamma - 1.)*gamma*x*x; // *AS* changed sign
289  sigma3 += 2.*gmo2*x*x*x/3.;
290  sigma3 /= gpo3;
291  // total cross section
292  xs+=pref*(sigma0 + sigma2*pol0.z()*pol1.z() + sigma3*(pol0.x()*pol1.x()+pol0.y()*pol1.y()));
293 
294  return xs;
295 }
G4GLOB_DLL std::ostream G4cout
static const double twopi
Definition: G4SIunits.hh:75
double x() const
int classic_electr_radius
Definition: hepunit.py:288
double y() const
double z() const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ XSection()

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

Implements G4VPolarizedCrossSection.

Definition at line 236 of file G4PolarizedBhabhaCrossSection.cc.

238 {
239  G4double xs=0.;
240  xs+=phi0;
241 
242  G4bool polarized=(!pol2.IsZero())||(!pol3.IsZero());
243  if (polarized) {
244  xs+=phi2*pol2 + phi3*pol3;
245  }
246  return xs;
247 }
bool G4bool
Definition: G4Types.hh:79
G4bool IsZero() const
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

Member Data Documentation

◆ phi0

G4double G4PolarizedBhabhaCrossSection::phi0
private

Definition at line 70 of file G4PolarizedBhabhaCrossSection.hh.

◆ phi2

G4ThreeVector G4PolarizedBhabhaCrossSection::phi2
private

Definition at line 72 of file G4PolarizedBhabhaCrossSection.hh.

◆ phi3

G4ThreeVector G4PolarizedBhabhaCrossSection::phi3
private

Definition at line 74 of file G4PolarizedBhabhaCrossSection.hh.


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