Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // ------------------------------------------- 27 // 28 // Geant4 Class file 29 // 30 // File name: G4PolarizedGammaConversionXS 31 // 32 // Author: Andreas Schaelicke on the ba 33 34 #include "G4PolarizedGammaConversionXS.hh" 35 36 G4double G4PolarizedGammaConversionXS::SCRN[2] 37 { 0.5, 1.0, 2.0, 4.0, 8.0, 15.0, 20.0, 25.0, 38 60.0, 70.0, 80.0, 90.0, 100.0, 120.0 }, 39 { 0.0145, 0.0490, 0.1400, 0.3312, 0.6758, 1. 40 2.001, 2.114, 2.216, 2.393, 2.545, 2.676, 41 }; 42 43 G4PolarizedGammaConversionXS::G4PolarizedGamma 44 { 45 fFinalElectronPolarization = G4StokesVector: 46 fFinalPositronPolarization = G4StokesVector: 47 } 48 49 G4PolarizedGammaConversionXS::~G4PolarizedGamm 50 51 void G4PolarizedGammaConversionXS::Initialize( 52 G4double aGammaE, G4double aLept0E, G4double 53 const G4StokesVector& beamPol, const G4Stoke 54 { 55 G4double aLept1E = aGammaE - aLept0E; 56 57 G4double Stokes_P3 = beamPol.z(); 58 59 G4double Lept0E = aLept0E / CLHEP::electron 60 G4double Lept0E2 = Lept0E * Lept0E; 61 G4double GammaE = aGammaE / CLHEP::electron 62 G4double Lept1E = aLept1E / CLHEP::electron 63 G4double Lept1E2 = Lept1E * Lept1E; 64 65 // ******* Gamma Transvers Momentum 66 G4double TMom = std::sqrt(Lept0E2 - 1.) * si 67 G4double u = TMom; 68 G4double u2 = u * u; 69 G4double Xsi = 1. / (1. + u2); 70 G4double Xsi2 = Xsi * Xsi; 71 72 G4double delta = 73 12. * std::pow(fZ, 1. / 3.) * Lept0E * Lep 74 G4double GG = 0.; 75 76 if(delta < 0.5) 77 { 78 GG = std::log(2. * Lept0E * Lept1E / Gamma 79 } 80 else if(delta < 120.) 81 { 82 for(G4int j = 1; j < 19; ++j) 83 { 84 if(SCRN[0][j] >= delta) 85 { 86 GG = std::log(2. * Lept0E * Lept1E / G 87 (SCRN[1][j - 1] + (delta - SCRN[0 88 (SCRN[1][j] - 89 (SCRN[0][j] - 90 break; 91 } 92 } 93 } 94 else 95 { 96 G4double alpha_sc = (111. * std::pow(fZ, - 97 GG = std::log(alpha_sc) - 2 98 } 99 100 if(GG < -1.) 101 GG = -1.; 102 103 G4double I_Lepton = (Lept0E2 + Lept1E2) * (3 104 2. * Lept0E * Lept1E * ( 105 106 G4double L_Lepton1 = GammaE * 107 ((Lept0E - Lept1E) * (3 108 2 * Lept1E * (1. + 4. 109 I_Lepton; 110 111 G4double T_Lepton1 = 112 4. * GammaE * Lept1E * Xsi * u * (1. - 2. 113 114 G4double Stokes_S1 = (Stokes_P3 * T_Lepton1) 115 G4double Stokes_S2 = 0.; 116 G4double Stokes_S3 = (Stokes_P3 * L_Lepton1) 117 118 fFinalElectronPolarization.setX(Stokes_S1); 119 fFinalElectronPolarization.setY(Stokes_S2); 120 fFinalElectronPolarization.setZ(Stokes_S3); 121 122 if(fFinalElectronPolarization.mag2() > 1.) 123 { 124 G4ExceptionDescription ed; 125 ed << "\t" << fFinalElectronPolarization < 126 << delta << "\n"; 127 G4Exception("G4PolarizedGammaConversionXS: 128 JustWarning, ed); 129 fFinalElectronPolarization.setX(0.); 130 fFinalElectronPolarization.setY(0.); 131 fFinalElectronPolarization.setZ(Stokes_S3) 132 if(Stokes_S3 > 1.) 133 fFinalElectronPolarization.setZ(1.); 134 } 135 136 G4double L_Lepton2 = GammaE * 137 ((Lept1E - Lept0E) * (3 138 2 * Lept0E * (1. + 4. 139 I_Lepton; 140 141 G4double T_Lepton2 = 142 4. * GammaE * Lept0E * Xsi * u * (1. - 2. 143 144 G4double Stokes_SS1 = (Stokes_P3 * T_Lepton2 145 G4double Stokes_SS2 = 0.; 146 G4double Stokes_SS3 = (Stokes_P3 * L_Lepton2 147 148 fFinalPositronPolarization.SetPhoton(); 149 150 fFinalPositronPolarization.setX(Stokes_SS1); 151 fFinalPositronPolarization.setY(Stokes_SS2); 152 fFinalPositronPolarization.setZ(Stokes_SS3); 153 154 if(fFinalPositronPolarization.mag2() > 1.) 155 { 156 G4ExceptionDescription ed; 157 ed << "\t" << fFinalPositronPolarization < 158 << delta << "\n"; 159 G4Exception("G4PolarizedGammaConversionXS: 160 JustWarning, ed); 161 } 162 } 163 164 G4double G4PolarizedGammaConversionXS::XSectio 165 166 { 167 G4ExceptionDescription ed; 168 ed << "ERROR dummy routine G4PolarizedGammaC 169 "called \n"; 170 G4Exception("G4PolarizedGammaConversionXS::I 171 FatalException, ed); 172 return 0.; 173 } 174 175 // return expected mean polarisation 176 G4StokesVector G4PolarizedGammaConversionXS::G 177 { 178 // electron/positron 179 return fFinalElectronPolarization; 180 } 181 182 G4StokesVector G4PolarizedGammaConversionXS::G 183 { 184 // photon 185 return fFinalPositronPolarization; 186 } 187