#include <G4PolarizedPairProductionCrossSection.hh>
Inheritance diagram for G4PolarizedPairProductionCrossSection:
Public Member Functions | |
G4PolarizedPairProductionCrossSection () | |
virtual void | Initialize (G4double eps, G4double X, G4double phi, const G4StokesVector &p0, const G4StokesVector &p1, G4int flag=0) |
virtual G4double | XSection (const G4StokesVector &pol2, const G4StokesVector &pol3) |
G4StokesVector | GetPol2 () |
G4StokesVector | GetPol3 () |
Definition at line 53 of file G4PolarizedPairProductionCrossSection.hh.
G4PolarizedPairProductionCrossSection::G4PolarizedPairProductionCrossSection | ( | ) |
G4StokesVector G4PolarizedPairProductionCrossSection::GetPol2 | ( | ) | [virtual] |
Reimplemented from G4VPolarizedCrossSection.
Definition at line 195 of file G4PolarizedPairProductionCrossSection.cc.
G4StokesVector G4PolarizedPairProductionCrossSection::GetPol3 | ( | ) | [virtual] |
Reimplemented from G4VPolarizedCrossSection.
Definition at line 200 of file G4PolarizedPairProductionCrossSection.cc.
void G4PolarizedPairProductionCrossSection::Initialize | ( | G4double | eps, | |
G4double | X, | |||
G4double | phi, | |||
const G4StokesVector & | p0, | |||
const G4StokesVector & | p1, | |||
G4int | flag = 0 | |||
) | [virtual] |
Reimplemented from G4VPolarizedCrossSection.
Definition at line 80 of file G4PolarizedPairProductionCrossSection.cc.
References G4VPolarizedCrossSection::fCoul, G4cout, G4endl, G4StokesVector::SetPhoton(), and G4VPolarizedCrossSection::theZ.
00086 { 00087 G4double aLept1E = aGammaE - aLept0E; 00088 00089 G4double Stokes_P3 = beamPol.z() ; 00090 // ************************************************************************** 00091 00092 G4double m0_c2 = electron_mass_c2; 00093 G4double Lept0E = aLept0E/m0_c2+1., Lept0E2 = Lept0E * Lept0E ; 00094 G4double GammaE = aGammaE/m0_c2; 00095 G4double Lept1E = aLept1E/m0_c2-1., Lept1E2 = Lept1E * Lept1E ; 00096 00097 00098 // const G4Element* theSelectedElement = theModel->SelectedAtom(); 00099 00100 // ******* Gamma Transvers Momentum 00101 00102 G4double TMom = std::sqrt(Lept0E2 -1.)* sintheta, u = TMom , u2 =u * u ; 00103 G4double Xsi = 1./(1.+u2) , Xsi2 = Xsi * Xsi ; 00104 00105 // G4double theZ = theSelectedElement->GetZ(); 00106 00107 // G4double fCoul = theSelectedElement->GetfCoulomb(); 00108 G4double delta = 12. * std::pow(theZ, 1./3.) * Lept0E * Lept1E * Xsi / (121. * GammaE); 00109 G4double GG=0.; 00110 00111 if(delta < 0.5) { 00112 GG = std::log(2.* Lept0E * Lept1E / GammaE) - 2. - fCoul; 00113 } 00114 else if ( delta < 120) { 00115 for (G4int j=2; j<=19; j++) { 00116 if(SCRN[1][j] >= delta) { 00117 GG =std::log(2 * Lept0E * Lept1E / GammaE) - 2 - fCoul 00118 -(SCRN[2][j-1]+(delta-SCRN[1][j-1])*(SCRN[2][j]-SCRN[2][j-1])/(SCRN[1][j]-SCRN[1][j-1])); 00119 break; 00120 } 00121 } 00122 } 00123 else { 00124 G4double alpha_sc = (111 * std::pow(theZ, -1./3.)) / Xsi; 00125 GG = std::log(alpha_sc)- 2 - fCoul; 00126 } 00127 00128 if(GG<-1) GG=-1; // *KL* do we need this ?! 00129 00130 00131 G4double I_Lepton = (Lept0E2 + Lept1E2)*(3+2*GG) + 2 * Lept0E * Lept1E * (1 + 4 * u2 * Xsi2 * GG); 00132 00133 // G4double D_Lepton1 = -8 * Lept0E * Lept1E * u2 * Xsi2 * GG / I_Lepton; 00134 00135 G4double L_Lepton1 = GammaE * ((Lept0E - Lept1E) * (3. + 2. * GG)+2 * Lept1E * (1 + 4 * u2 * Xsi2 * GG))/I_Lepton; 00136 00137 G4double T_Lepton1 = 4 * GammaE * Lept1E * Xsi * u * (1. - 2. * Xsi) * GG / I_Lepton ; 00138 00139 00140 G4double Stokes_S1 = (Stokes_P3 * T_Lepton1) ; 00141 G4double Stokes_S2 = 0; 00142 G4double Stokes_S3 = (Stokes_P3 * L_Lepton1) ; 00143 00144 00145 theFinalElectronPolarization.setX(Stokes_S1); 00146 theFinalElectronPolarization.setY(Stokes_S2); 00147 theFinalElectronPolarization.setZ(Stokes_S3); 00148 00149 if(theFinalElectronPolarization.mag2()>1) { 00150 G4cout<<" WARNING in pol-conv theFinalElectronPolarization \n"; 00151 G4cout 00152 <<"\t"<<theFinalElectronPolarization 00153 <<"\t GG\t"<<GG 00154 <<"\t delta\t"<<delta 00155 <<G4endl; 00156 theFinalElectronPolarization.setX(0); 00157 theFinalElectronPolarization.setY(0); 00158 theFinalElectronPolarization.setZ(Stokes_S3); 00159 if(Stokes_S3>1) theFinalElectronPolarization.setZ(1); 00160 } 00161 00162 00163 G4double L_Lepton2 = GammaE * ((Lept1E - Lept0E) * (3. + 2. * GG)+2 * Lept0E * (1 + 4 * u2 * Xsi2 * GG))/I_Lepton; 00164 00165 G4double T_Lepton2 = 4 * GammaE * Lept0E * Xsi * u * (1. - 2. * Xsi) * GG / I_Lepton ; 00166 00167 G4double Stokes_SS1 = (Stokes_P3 * T_Lepton2) ; 00168 G4double Stokes_SS2 = 0; 00169 G4double Stokes_SS3 = (Stokes_P3 * L_Lepton2) ; 00170 00171 theFinalPositronPolarization.SetPhoton(); 00172 00173 theFinalPositronPolarization.setX(Stokes_SS1); 00174 theFinalPositronPolarization.setY(Stokes_SS2); 00175 theFinalPositronPolarization.setZ(Stokes_SS3); 00176 00177 if(theFinalPositronPolarization.mag2()>1) { 00178 G4cout<<" WARNING in pol-conv theFinalPositronPolarization \n"; 00179 G4cout 00180 <<"\t"<<theFinalPositronPolarization 00181 <<"\t GG\t"<<GG 00182 <<"\t delta\t"<<delta 00183 <<G4endl; 00184 } 00185 }
G4double G4PolarizedPairProductionCrossSection::XSection | ( | const G4StokesVector & | pol2, | |
const G4StokesVector & | pol3 | |||
) | [virtual] |
Implements G4VPolarizedCrossSection.
Definition at line 187 of file G4PolarizedPairProductionCrossSection.cc.
References G4cout.
00189 { 00190 G4cout<<"ERROR dummy routine G4PolarizedPairProductionCrossSection::XSection called \n"; 00191 return 0; 00192 }