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

#include <G4PolarizedComptonCrossSection.hh>

Inheritance diagram for G4PolarizedComptonCrossSection:
G4VPolarizedCrossSection

Public Member Functions

 G4PolarizedComptonCrossSection ()
 
virtual ~G4PolarizedComptonCrossSection ()
 
virtual void Initialize (G4double eps, G4double X, 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)
 

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 57 of file G4PolarizedComptonCrossSection.hh.

Constructor & Destructor Documentation

G4PolarizedComptonCrossSection::G4PolarizedComptonCrossSection ( )

Definition at line 51 of file G4PolarizedComptonCrossSection.cc.

References python.hepunit::classic_electr_radius, python.hepunit::hbarc, python.hepunit::pi, G4VPolarizedCrossSection::SetYmin(), and sqr().

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

Definition at line 70 of file G4PolarizedComptonCrossSection.cc.

71 {}

Member Function Documentation

G4StokesVector G4PolarizedComptonCrossSection::GetPol2 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 214 of file G4PolarizedComptonCrossSection.cc.

Referenced by G4PolarizedComptonModel::SampleSecondaries().

215 {
216  // Note, mean polarization can not contain correlation
217  // effects.
218  return 1./phi0 * phi2;
219 }
G4StokesVector G4PolarizedComptonCrossSection::GetPol3 ( )
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 223 of file G4PolarizedComptonCrossSection.cc.

Referenced by G4PolarizedComptonModel::SampleSecondaries().

224 {
225  // Note, mean polarization can not contain correlation
226  // effects.
227  return 1./phi0 * phi3;
228 }
void G4PolarizedComptonCrossSection::Initialize ( G4double  eps,
G4double  X,
G4double  phi,
const G4StokesVector p0,
const G4StokesVector p1,
G4int  flag = 0 
)
virtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 74 of file G4PolarizedComptonCrossSection.cc.

References sqr(), CLHEP::Hep3Vector::x(), CLHEP::Hep3Vector::y(), and CLHEP::Hep3Vector::z().

Referenced by G4PolarizedComptonModel::SampleSecondaries().

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

Reimplemented from G4VPolarizedCrossSection.

Definition at line 186 of file G4PolarizedComptonCrossSection.cc.

References python.hepunit::classic_electr_radius, G4InuclParticleNames::k0, G4StokesVector::p3(), python.hepunit::pi, sqr(), G4VPolarizedCrossSection::theZ, and CLHEP::Hep3Vector::z().

189 {
190 
191  // G4double k0 = gammaEnergy / electron_mass_c2 ;
192  G4double k1 = 1 + 2*k0 ;
193 
194 // // pi*re^2
195 // G4double re=2.81794e-15; //m
196 // G4double barn=1.e-28; //m^2
197  G4double Z=theZ;
198 
200  * classic_electr_radius ; // *1./barn;
201 
202  G4double pre = unit/(sqr(k0)*sqr(1.+2.*k0));
203 
204  G4double xs_0 = ((k0 - 2.)*k0 -2.)*sqr(k1)*std::log(k1) + 2.*k0*(k0*(k0 + 1.)*(k0 + 8.) + 2.);
205  G4double xs_pol = (k0 + 1.)*sqr(k1)*std::log(k1) - 2.*k0*(5.*sqr(k0) + 4.*k0 + 1.);
206 
207  return pre*(xs_0/k0 + pol0.p3()*pol1.z()*xs_pol);
208 }
double z() const
G4double p3() const
T sqr(const T &x)
Definition: templates.hh:145
double G4double
Definition: G4Types.hh:76
G4double G4PolarizedComptonCrossSection::XSection ( const G4StokesVector pol2,
const G4StokesVector pol3 
)
virtual

Implements G4VPolarizedCrossSection.

Definition at line 159 of file G4PolarizedComptonCrossSection.cc.

References G4StokesVector::ZERO.

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

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