Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4PolarizedBremsstrahlungCrossSection Class Reference

#include <G4PolarizedBremsstrahlungCrossSection.hh>

Inheritance diagram for G4PolarizedBremsstrahlungCrossSection:
Collaboration diagram for G4PolarizedBremsstrahlungCrossSection:

Public Member Functions

 G4PolarizedBremsstrahlungCrossSection ()
 
virtual void Initialize (G4double eps, G4double X, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) override
 
virtual G4double XSection (const G4StokesVector &pol2, const G4StokesVector &pol3) override
 
G4StokesVector GetPol2 () override
 
G4StokesVector GetPol3 () override
 
- Public Member Functions inherited from G4VPolarizedCrossSection
 G4VPolarizedCrossSection ()
 
virtual ~G4VPolarizedCrossSection ()
 
virtual G4double TotalXSection (G4double xmin, G4double xmax, G4double y, const G4StokesVector &pol0, const G4StokesVector &pol1)
 
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 G4PolarizedBremsstrahlungCrossSection.hh.

Constructor & Destructor Documentation

G4PolarizedBremsstrahlungCrossSection::G4PolarizedBremsstrahlungCrossSection ( )

Definition at line 75 of file G4PolarizedBremsstrahlungCrossSection.cc.

76 {
77  InitializeMe();
78 }

Member Function Documentation

G4StokesVector G4PolarizedBremsstrahlungCrossSection::GetPol2 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 203 of file G4PolarizedBremsstrahlungCrossSection.cc.

204 {
205  // electron/positron
206  return theFinalLeptonPolarization;
207 }
G4StokesVector G4PolarizedBremsstrahlungCrossSection::GetPol3 ( )
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 208 of file G4PolarizedBremsstrahlungCrossSection.cc.

209 {
210  // photon
211  return theFinalGammaPolarization;;
212 }
void G4PolarizedBremsstrahlungCrossSection::Initialize ( G4double  eps,
G4double  X,
G4double  phi,
const G4StokesVector p0,
const G4StokesVector p1,
G4int  flag = 0 
)
overridevirtual

Reimplemented from G4VPolarizedCrossSection.

Definition at line 81 of file G4PolarizedBremsstrahlungCrossSection.cc.

86 {
87 // G4cout<<"G4PolarizedBremsstrahlungCrossSection::Initialize \n"
88 // <<"lepE = "<<aLept0E
89 // <<"gamE = "<<aGammaE
90 // <<"sint = "<<sintheta<<"\n"
91 // <<"beamPol="<<beamPol<<"\n";
92 
93  G4double aLept1E = aLept0E - aGammaE;
94 
95  G4double Stokes_S1 = beamPol.x() ;
96  G4double Stokes_S2 = beamPol.y() ;
97  G4double Stokes_S3 = beamPol.z() ;
98  // **************************************************************************
99 
100  G4double m0_c2 = electron_mass_c2;
101  G4double Lept0E = aLept0E/m0_c2+1., Lept0E2 = Lept0E * Lept0E ;
102  G4double GammaE = aGammaE/m0_c2, GammaE2 = GammaE * GammaE ;
103  G4double Lept1E = aLept1E/m0_c2+1., Lept1E2 = Lept1E * Lept1E ;
104 
105 
106  // const G4Element* theSelectedElement = theModel->SelectedAtom();
107 
108  // ******* Gamma Transvers Momentum
109 
110  G4double TMom = std::sqrt(Lept0E2 -1.)* sintheta;
111  G4double u = TMom , u2 =u * u ;
112  G4double Xsi = 1./(1.+u2) , Xsi2 = Xsi * Xsi ;
113 
114  // G4double theZ = theSelectedElement->GetZ();
115 
116  // G4double fCoul = theSelectedElement->GetfCoulomb();
117  G4double delta = 12. * std::pow(theZ, 1./3.) *
118  Lept0E * Lept1E * Xsi / (121. * GammaE);
119  G4double GG=0.;
120 
121  if(delta < 0.5) {
122  GG = std::log(2.* Lept0E * Lept1E / GammaE) - 2. - fCoul;
123  }
124  else if ( delta < 120) {
125  for (G4int j=2; j<=19; j++) {
126  if(SCRN[1][j] >= delta) {
127  GG =std::log(2 * Lept0E * Lept1E / GammaE) - 2 - fCoul
128  -(SCRN[2][j-1]+(delta-SCRN[1][j-1])*(SCRN[2][j]-SCRN[2][j-1])
129  /(SCRN[1][j]-SCRN[1][j-1]));
130  break;
131  }
132  }
133  }
134  else {
135  G4double alpha_sc = (111. * std::pow(theZ, -1./3.)) / Xsi;
136  GG = std::log(alpha_sc)- 2. - fCoul;
137  }
138 
139  if(GG<-1.) GG=-1.; // *KL* do we need this ?!
140 
141  G4double I_Lept = (Lept0E2 + Lept1E2) * (3.+2.*GG) - 2 * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
142  G4double F_Lept = Lept1E * 4. * GammaE * u * Xsi * (1. - 2 * Xsi) * GG / I_Lept;
143  G4double E_Lept = Lept0E * 4. * GammaE * u * Xsi * (2. * Xsi - 1.) * GG / I_Lept;
144  G4double M_Lept = 4. * Lept0E * Lept1E * (1. + GG - 2. * Xsi2 * u2 * GG) / I_Lept ;
145  G4double P_Lept = GammaE2 * (1. + 8. * GG * (Xsi - 0.5)*(Xsi - 0.5)) / I_Lept ;
146 
147  G4double Stokes_SS1 = M_Lept * Stokes_S1 + E_Lept * Stokes_S3;
148  G4double Stokes_SS2 = M_Lept * Stokes_S2 ;
149  G4double Stokes_SS3 = (M_Lept + P_Lept) * Stokes_S3 + F_Lept * Stokes_S1;
150 
151  theFinalLeptonPolarization.setX(Stokes_SS1);
152  theFinalLeptonPolarization.setY(Stokes_SS2);
153  theFinalLeptonPolarization.setZ(Stokes_SS3);
154 
155  if(theFinalLeptonPolarization.mag2()>1) {
156  G4cout<<" WARNING in pol-brem theFinalLeptonPolarization \n";
157  G4cout
158  <<"\t"<<theFinalLeptonPolarization
159  <<"\t GG\t"<<GG
160  <<"\t delta\t"<<delta
161  <<G4endl;
162  theFinalLeptonPolarization.setX(0);
163  theFinalLeptonPolarization.setY(0);
164  theFinalLeptonPolarization.setZ(Stokes_SS3);
165  if(Stokes_SS3>1) theFinalLeptonPolarization.setZ(1);
166  }
167 
168 
169  G4double I_Gamma = (Lept0E2 + Lept1E2)*(3.+2.*GG) - 2. * Lept0E * Lept1E * (1. + 4. * u2 * Xsi2 * GG);
170  G4double D_Gamma = 8. * Lept0E * Lept1E * u2 * Xsi2 * GG / I_Gamma;
171  G4double L_Gamma = GammaE * ((Lept0E + Lept1E) * (3. + 2. * GG)
172  - 2. * Lept1E * (1. + 4. * u2 * Xsi2 * GG))/I_Gamma;
173  G4double T_Gamma = 4. * GammaE * Lept1E * Xsi * u * (2. * Xsi - 1.) * GG / I_Gamma ;
174 
175  G4double Stokes_P1 = D_Gamma ;
176  G4double Stokes_P2 = 0.;
177  G4double Stokes_P3 = (Stokes_S3*L_Gamma + Stokes_S1*T_Gamma) ;
178 
179  theFinalGammaPolarization.SetPhoton();
180 
181  theFinalGammaPolarization.setX(Stokes_P1);
182  theFinalGammaPolarization.setY(Stokes_P2);
183  theFinalGammaPolarization.setZ(Stokes_P3);
184 
185  if(theFinalGammaPolarization.mag2()>1) {
186  G4cout<<" WARNING in pol-brem theFinalGammaPolarization \n";
187  G4cout
188  <<"\t"<<theFinalGammaPolarization
189  <<"\t GG\t"<<GG
190  <<"\t delta\t"<<delta
191  <<G4endl;
192  }
193 }
int G4int
Definition: G4Types.hh:78
void setY(double)
void setZ(double)
void setX(double)
G4GLOB_DLL std::ostream G4cout
float electron_mass_c2
Definition: hepunit.py:274
double mag2() const
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

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

Implements G4VPolarizedCrossSection.

Definition at line 195 of file G4PolarizedBremsstrahlungCrossSection.cc.

197 {
198  G4cout<<"ERROR dummy routine G4PolarizedBremsstrahlungCrossSection::XSection called \n";
199  return 0.;
200 }
G4GLOB_DLL std::ostream G4cout

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