Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // Geant4 Class file 26 // Geant4 Class file 27 // 27 // 28 // File name: G4PolarizedAnnihilationXS 28 // File name: G4PolarizedAnnihilationXS 29 // 29 // 30 // Author: Andreas Schaelicke 30 // Author: Andreas Schaelicke 31 // 31 // 32 // Class Description: 32 // Class Description: 33 // * calculates the differential cross secti 33 // * calculates the differential cross section in e+e- -> gamma gamma 34 34 35 #include "G4PolarizedAnnihilationXS.hh" 35 #include "G4PolarizedAnnihilationXS.hh" 36 36 37 #include "G4PhysicalConstants.hh" 37 #include "G4PhysicalConstants.hh" 38 38 39 G4PolarizedAnnihilationXS::G4PolarizedAnnihila 39 G4PolarizedAnnihilationXS::G4PolarizedAnnihilationXS() 40 : polxx(0.) 40 : polxx(0.) 41 , polyy(0.) 41 , polyy(0.) 42 , polzz(0.) 42 , polzz(0.) 43 , polxz(0.) 43 , polxz(0.) 44 , polzx(0.) 44 , polzx(0.) 45 , polxy(0.) 45 , polxy(0.) 46 , polyx(0.) 46 , polyx(0.) 47 , polyz(0.) 47 , polyz(0.) 48 , polzy(0.) 48 , polzy(0.) 49 , fPhi0(0.) 49 , fPhi0(0.) 50 { 50 { 51 fPhi2 = G4ThreeVector(0., 0., 0.); 51 fPhi2 = G4ThreeVector(0., 0., 0.); 52 fPhi3 = G4ThreeVector(0., 0., 0.); 52 fPhi3 = G4ThreeVector(0., 0., 0.); 53 fDice = 0.; 53 fDice = 0.; 54 fPolXS = 0.; 54 fPolXS = 0.; 55 fUnpXS = 0.; 55 fUnpXS = 0.; 56 ISPxx = ISPyy = ISPzz = ISPnd = 0.; 56 ISPxx = ISPyy = ISPzz = ISPnd = 0.; 57 } 57 } 58 58 59 //....oooOO0OOooo........oooOO0OOooo........oo 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 G4PolarizedAnnihilationXS::~G4PolarizedAnnihil 60 G4PolarizedAnnihilationXS::~G4PolarizedAnnihilationXS() {} 61 61 62 //....oooOO0OOooo........oooOO0OOooo........oo 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 63 void G4PolarizedAnnihilationXS::TotalXS() 63 void G4PolarizedAnnihilationXS::TotalXS() 64 { 64 { 65 // total cross section is sum of 65 // total cross section is sum of 66 // + unpol xsec "sigma0" 66 // + unpol xsec "sigma0" 67 // + longitudinal polarised cross section " 67 // + longitudinal polarised cross section "sigma_zz" times 68 // pol_3(e-)*pol_3(e+) 68 // pol_3(e-)*pol_3(e+) 69 // + transverse contribution "(sigma_xx+sig 69 // + transverse contribution "(sigma_xx+sigma_yy)/2" times 70 // pol_T(e-)*pol_T(e+) 70 // pol_T(e-)*pol_T(e+) 71 // (Note: if both beams are transversely 71 // (Note: if both beams are transversely polarised, i.e. pol_T(e-)!=0 and 72 // pol_T(e+)!=0, and sigma_xx!=sigma_yy 72 // pol_T(e+)!=0, and sigma_xx!=sigma_yy, then the diff. cross section 73 // will exhibit a azimuthal asymmetry e 73 // will exhibit a azimuthal asymmetry even if pol_T(e-)*pol_T(e+)==0) 74 } 74 } 75 75 76 //....oooOO0OOooo........oooOO0OOooo........oo 76 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 77 void G4PolarizedAnnihilationXS::Initialize( 77 void G4PolarizedAnnihilationXS::Initialize( 78 G4double eps, G4double gam, 78 G4double eps, G4double gam, 79 G4double, // phi 79 G4double, // phi 80 const G4StokesVector& pol0, // positron pol 80 const G4StokesVector& pol0, // positron polarization 81 const G4StokesVector& pol1, // electron pol 81 const G4StokesVector& pol1, // electron polarization 82 G4int flag) 82 G4int flag) 83 { 83 { 84 G4double diffXSFactor = re2 / (gam - 1.); 84 G4double diffXSFactor = re2 / (gam - 1.); 85 DefineCoefficients(pol0, pol1); 85 DefineCoefficients(pol0, pol1); 86 86 87 // prepare dicing 87 // prepare dicing 88 fDice = 0.; 88 fDice = 0.; 89 G4double symmXS = 89 G4double symmXS = 90 0.125 * ((-1. / sqr(gam + 1.)) / sqr(eps) 90 0.125 * ((-1. / sqr(gam + 1.)) / sqr(eps) + 91 ((sqr(gam) + 4. * gam - 1.) / sqr 91 ((sqr(gam) + 4. * gam - 1.) / sqr(gam + 1.)) / eps - 1.); 92 92 93 G4ThreeVector epsVector(1. / sqr(eps), 1. / 93 G4ThreeVector epsVector(1. / sqr(eps), 1. / eps, 1.); 94 G4ThreeVector oneEpsVector(1. / sqr(1. - eps 94 G4ThreeVector oneEpsVector(1. / sqr(1. - eps), 1. / (1. - eps), 1.); 95 G4ThreeVector sumEpsVector(epsVector + oneEp 95 G4ThreeVector sumEpsVector(epsVector + oneEpsVector); 96 G4ThreeVector difEpsVector(epsVector - oneEp 96 G4ThreeVector difEpsVector(epsVector - oneEpsVector); 97 G4ThreeVector calcVector(0., 0., 0.); 97 G4ThreeVector calcVector(0., 0., 0.); 98 98 99 // temporary variables 99 // temporary variables 100 G4double helpVar2 = 0., helpVar1 = 0.; 100 G4double helpVar2 = 0., helpVar1 = 0.; 101 101 102 // unpolarised contribution 102 // unpolarised contribution 103 helpVar1 = (gam * gam + 4. * gam + 1.) / s 103 helpVar1 = (gam * gam + 4. * gam + 1.) / sqr(gam + 1.); 104 helpVar2 = -1. / sqr(gam + 1.); 104 helpVar2 = -1. / sqr(gam + 1.); 105 calcVector = G4ThreeVector(helpVar2, helpVar 105 calcVector = G4ThreeVector(helpVar2, helpVar1, -1.); 106 fUnpXS = 0.125 * calcVector * sumEpsVect 106 fUnpXS = 0.125 * calcVector * sumEpsVector; 107 107 108 // initial particles polarised contribution 108 // initial particles polarised contribution 109 helpVar2 = 1. / sqr(gam + 1.); 109 helpVar2 = 1. / sqr(gam + 1.); 110 helpVar1 = -(gam * gam + 4. * gam + 1.) / 110 helpVar1 = -(gam * gam + 4. * gam + 1.) / sqr(gam + 1.); 111 calcVector = G4ThreeVector(helpVar2, helpVar 111 calcVector = G4ThreeVector(helpVar2, helpVar1, 0.5 * (gam + 3.)); 112 ISPxx = 0.25 * (calcVector * sumEpsVect 112 ISPxx = 0.25 * (calcVector * sumEpsVector) / (gam - 1.); 113 113 114 helpVar1 = 1. / sqr(gam + 1.); 114 helpVar1 = 1. / sqr(gam + 1.); 115 calcVector = G4ThreeVector(-helpVar1, 2. * g 115 calcVector = G4ThreeVector(-helpVar1, 2. * gam * helpVar1, -1.); 116 ISPyy = 0.125 * calcVector * sumEpsVect 116 ISPyy = 0.125 * calcVector * sumEpsVector; 117 117 118 helpVar1 = 1. / (gam - 1.); 118 helpVar1 = 1. / (gam - 1.); 119 helpVar2 = 1. / sqr(gam + 1.); 119 helpVar2 = 1. / sqr(gam + 1.); 120 calcVector = G4ThreeVector( 120 calcVector = G4ThreeVector( 121 -(gam * gam + 1.) * helpVar2, 121 -(gam * gam + 1.) * helpVar2, 122 (gam * gam * (gam + 1.) + 7. * gam + 3.) * 122 (gam * gam * (gam + 1.) + 7. * gam + 3.) * helpVar2, -(gam + 3.)); 123 ISPzz = 0.125 * helpVar1 * (calcVector * sum 123 ISPzz = 0.125 * helpVar1 * (calcVector * sumEpsVector); 124 124 125 helpVar1 = std::sqrt(std::fabs(eps * (1. - 125 helpVar1 = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.)); 126 calcVector = G4ThreeVector(-1. / (gam * gam 126 calcVector = G4ThreeVector(-1. / (gam * gam - 1.), 2. / (gam - 1.), 0.); 127 ISPnd = 0.125 * (calcVector * difEpsVec 127 ISPnd = 0.125 * (calcVector * difEpsVector) * helpVar1; 128 128 129 fPolXS = ISPxx * polxx + ISPyy * polyy + ISP 129 fPolXS = ISPxx * polxx + ISPyy * polyy + ISPzz * polzz; 130 fPolXS += ISPnd * (polzx + polxz); 130 fPolXS += ISPnd * (polzx + polxz); 131 fPhi0 = fUnpXS + fPolXS; 131 fPhi0 = fUnpXS + fPolXS; 132 fDice = symmXS; 132 fDice = symmXS; 133 133 134 if(polzz != 0.) 134 if(polzz != 0.) 135 { 135 { 136 fDice *= (1. + (polzz * ISPzz / fUnpXS)); 136 fDice *= (1. + (polzz * ISPzz / fUnpXS)); 137 if(fDice < 0.) 137 if(fDice < 0.) 138 fDice = 0.; 138 fDice = 0.; 139 } 139 } 140 // prepare final state coefficients 140 // prepare final state coefficients 141 if(flag == 2) 141 if(flag == 2) 142 { 142 { 143 // circular polarisation 143 // circular polarisation 144 G4double circ1 = 0., circ2 = 0., circ3 = 0 144 G4double circ1 = 0., circ2 = 0., circ3 = 0.; 145 helpVar1 = 8. * sqr(1. - eps) * sqr(eps) * 145 helpVar1 = 8. * sqr(1. - eps) * sqr(eps) * (gam - 1.) * sqr(gam + 1.) / 146 std::sqrt(gam * gam - 1.); 146 std::sqrt(gam * gam - 1.); 147 helpVar2 = sqr(gam + 1.) * sqr(eps) * (-2. 147 helpVar2 = sqr(gam + 1.) * sqr(eps) * (-2. * eps + 3.) - 148 (gam * gam + 3. * gam + 2.) * e 148 (gam * gam + 3. * gam + 2.) * eps; 149 circ1 = helpVar2 + gam; 149 circ1 = helpVar2 + gam; 150 circ1 /= helpVar1; 150 circ1 /= helpVar1; 151 circ2 = helpVar2 + 1.; 151 circ2 = helpVar2 + 1.; 152 circ2 /= helpVar1; 152 circ2 /= helpVar1; 153 helpVar1 = std::sqrt(std::fabs(eps * (1. - 153 helpVar1 = std::sqrt(std::fabs(eps * (1. - eps) * 2. * (gam + 1.) - 1.)); 154 helpVar1 /= std::sqrt(gam * gam - 1.); 154 helpVar1 /= std::sqrt(gam * gam - 1.); 155 calcVector = G4ThreeVector(1., -2. * gam, 155 calcVector = G4ThreeVector(1., -2. * gam, 0.); 156 circ3 = 0.125 * (calcVector * sumEpsV 156 circ3 = 0.125 * (calcVector * sumEpsVector) / (gam + 1.); 157 circ3 *= helpVar1; 157 circ3 *= helpVar1; 158 158 159 fPhi2.setZ(circ2 * pol1.z() + circ1 * pol0 159 fPhi2.setZ(circ2 * pol1.z() + circ1 * pol0.z() + 160 circ3 * (pol1.x() + pol0.x())); 160 circ3 * (pol1.x() + pol0.x())); 161 fPhi3.setZ(-circ1 * pol1.z() - circ2 * pol 161 fPhi3.setZ(-circ1 * pol1.z() - circ2 * pol0.z() - 162 circ3 * (pol1.x() + pol0.x())); 162 circ3 * (pol1.x() + pol0.x())); 163 163 164 // common to both linear polarisation 164 // common to both linear polarisation 165 calcVector = G4ThreeVector(-1., 2 165 calcVector = G4ThreeVector(-1., 2. * gam, 0.); 166 G4double linearZero = 0.125 * (calcVector 166 G4double linearZero = 0.125 * (calcVector * sumEpsVector) / sqr(gam + 1.); 167 167 168 // Linear Polarisation #1 168 // Linear Polarisation #1 169 helpVar1 = std::sqrt(std::fabs(2. * (gam + 169 helpVar1 = std::sqrt(std::fabs(2. * (gam + 1.) * (1. - eps) * eps - 1.)) / 170 ((gam + 1.) * eps * (1. - eps)) 170 ((gam + 1.) * eps * (1. - eps)); 171 helpVar2 = helpVar1 * helpVar1; 171 helpVar2 = helpVar1 * helpVar1; 172 172 173 // photon 1 173 // photon 1 174 G4double diagContrib = 0.125 * helpVar2 * 174 G4double diagContrib = 0.125 * helpVar2 * (polxx + polyy - polzz); 175 G4double nonDiagContrib = 175 G4double nonDiagContrib = 176 0.125 * helpVar1 * (-polxz / (1. - eps) 176 0.125 * helpVar1 * (-polxz / (1. - eps) + polzx / eps); 177 177 178 fPhi2.setX(linearZero + diagContrib + nonD 178 fPhi2.setX(linearZero + diagContrib + nonDiagContrib); 179 179 180 // photon 2 180 // photon 2 181 nonDiagContrib = 0.125 * helpVar1 * (polxz 181 nonDiagContrib = 0.125 * helpVar1 * (polxz / eps - polzx / (1. - eps)); 182 182 183 fPhi3.setX(linearZero + diagContrib + nonD 183 fPhi3.setX(linearZero + diagContrib + nonDiagContrib); 184 184 185 // Linear Polarisation #2 185 // Linear Polarisation #2 186 helpVar1 = 186 helpVar1 = 187 std::sqrt(gam * gam - 1.) * (2. * (gam + 187 std::sqrt(gam * gam - 1.) * (2. * (gam + 1.) * eps * (1. - eps) - 1.); 188 helpVar1 /= 8. * sqr(1. - eps) * sqr(eps) 188 helpVar1 /= 8. * sqr(1. - eps) * sqr(eps) * sqr(gam + 1.) * (gam - 1.); 189 helpVar2 = std::sqrt((gam * gam - 1.) * 189 helpVar2 = std::sqrt((gam * gam - 1.) * 190 std::fabs(2. * (gam + 190 std::fabs(2. * (gam + 1.) * eps * (1. - eps) - 1.)); 191 helpVar2 /= 8. * sqr(1. - eps) * sqr(eps) 191 helpVar2 /= 8. * sqr(1. - eps) * sqr(eps) * sqr(gam + 1.) * (gam - 1.); 192 192 193 G4double contrib21 = (-polxy + polyx) * he 193 G4double contrib21 = (-polxy + polyx) * helpVar1; 194 G4double contrib32 = 194 G4double contrib32 = 195 -(eps * (gam + 1.) - 1.) * polyz + (eps 195 -(eps * (gam + 1.) - 1.) * polyz + (eps * (gam + 1.) - gam) * polzy; 196 196 197 contrib32 *= helpVar2; 197 contrib32 *= helpVar2; 198 fPhi2.setY(contrib21 + contrib32); 198 fPhi2.setY(contrib21 + contrib32); 199 199 200 contrib32 = 200 contrib32 = 201 -(eps * (gam + 1.) - gam) * polyz + (eps 201 -(eps * (gam + 1.) - gam) * polyz + (eps * (gam + 1.) - 1.) * polzy; 202 contrib32 *= helpVar2; 202 contrib32 *= helpVar2; 203 fPhi3.setY(contrib21 + contrib32); 203 fPhi3.setY(contrib21 + contrib32); 204 } 204 } 205 fPhi0 *= diffXSFactor; 205 fPhi0 *= diffXSFactor; 206 fPhi2 *= diffXSFactor; 206 fPhi2 *= diffXSFactor; 207 fPhi3 *= diffXSFactor; 207 fPhi3 *= diffXSFactor; 208 } 208 } 209 209 210 //....oooOO0OOooo........oooOO0OOooo........oo 210 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 211 G4double G4PolarizedAnnihilationXS::XSection(c 211 G4double G4PolarizedAnnihilationXS::XSection(const G4StokesVector& pol2, 212 c 212 const G4StokesVector& pol3) 213 { 213 { 214 G4double xs = fPhi0 + pol2 * fPhi2 + pol3 * 214 G4double xs = fPhi0 + pol2 * fPhi2 + pol3 * fPhi3; 215 return xs; 215 return xs; 216 } 216 } 217 217 218 // calculate total cross section 218 // calculate total cross section 219 //....oooOO0OOooo........oooOO0OOooo........oo 219 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 220 G4double G4PolarizedAnnihilationXS::TotalXSect 220 G4double G4PolarizedAnnihilationXS::TotalXSection(G4double, G4double, 221 221 G4double gam, 222 222 const G4StokesVector& pol0, 223 223 const G4StokesVector& pol1) 224 { 224 { 225 G4double totalXSFactor = pi * re2 / (gam + 1 225 G4double totalXSFactor = pi * re2 / (gam + 1.); // atomic number ignored 226 DefineCoefficients(pol0, pol1); 226 DefineCoefficients(pol0, pol1); 227 227 228 G4double xs = 0.; 228 G4double xs = 0.; 229 229 230 G4double gam2 = gam * gam; 230 G4double gam2 = gam * gam; 231 G4double sqrtgam1 = std::sqrt(gam2 - 1.); 231 G4double sqrtgam1 = std::sqrt(gam2 - 1.); 232 G4double logMEM = std::log(gam + sqrtgam1) 232 G4double logMEM = std::log(gam + sqrtgam1); 233 G4double unpME = (gam * (gam + 4.) + 1.) 233 G4double unpME = (gam * (gam + 4.) + 1.) * logMEM; 234 unpME += -(gam + 3.) * sqrtgam1; 234 unpME += -(gam + 3.) * sqrtgam1; 235 unpME /= 4. * (gam2 - 1.); 235 unpME /= 4. * (gam2 - 1.); 236 G4double longPart = (3 + gam * (gam * (gam + 236 G4double longPart = (3 + gam * (gam * (gam + 1.) + 7.)) * logMEM; 237 longPart += -(5. + gam * (3 * gam + 4.)) * s 237 longPart += -(5. + gam * (3 * gam + 4.)) * sqrtgam1; 238 longPart /= 4. * sqr(gam - 1.) * (gam + 1.); 238 longPart /= 4. * sqr(gam - 1.) * (gam + 1.); 239 G4double tranPart = -(5 * gam + 1.) * logMEM 239 G4double tranPart = -(5 * gam + 1.) * logMEM; 240 tranPart += (gam + 5.) * sqrtgam1; 240 tranPart += (gam + 5.) * sqrtgam1; 241 tranPart /= 4. * sqr(gam - 1.) * (gam + 1.); 241 tranPart /= 4. * sqr(gam - 1.) * (gam + 1.); 242 242 243 xs += unpME; 243 xs += unpME; 244 xs += polzz * longPart; 244 xs += polzz * longPart; 245 xs += (polxx + polyy) * tranPart; 245 xs += (polxx + polyy) * tranPart; 246 246 247 return xs * totalXSFactor; 247 return xs * totalXSFactor; 248 } 248 } 249 249 250 //....oooOO0OOooo........oooOO0OOooo........oo 250 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 251 G4StokesVector G4PolarizedAnnihilationXS::GetP 251 G4StokesVector G4PolarizedAnnihilationXS::GetPol2() 252 { 252 { 253 // Note, mean polarization can not contain c 253 // Note, mean polarization can not contain correlation effects. 254 return G4StokesVector(1. / fPhi0 * fPhi2); 254 return G4StokesVector(1. / fPhi0 * fPhi2); 255 } 255 } 256 256 257 //....oooOO0OOooo........oooOO0OOooo........oo 257 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 258 G4StokesVector G4PolarizedAnnihilationXS::GetP 258 G4StokesVector G4PolarizedAnnihilationXS::GetPol3() 259 { 259 { 260 // Note, mean polarization can not contain c 260 // Note, mean polarization can not contain correlation effects. 261 return G4StokesVector(1. / fPhi0 * fPhi3); 261 return G4StokesVector(1. / fPhi0 * fPhi3); 262 } 262 } 263 //....oooOO0OOooo........oooOO0OOooo........oo 263 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 264 void G4PolarizedAnnihilationXS::DefineCoeffici 264 void G4PolarizedAnnihilationXS::DefineCoefficients(const G4StokesVector& pol0, 265 265 const G4StokesVector& pol1) 266 { 266 { 267 polxx = pol0.x() * pol1.x(); 267 polxx = pol0.x() * pol1.x(); 268 polyy = pol0.y() * pol1.y(); 268 polyy = pol0.y() * pol1.y(); 269 polzz = pol0.z() * pol1.z(); 269 polzz = pol0.z() * pol1.z(); 270 270 271 polxz = pol0.x() * pol1.z(); 271 polxz = pol0.x() * pol1.z(); 272 polzx = pol0.z() * pol1.x(); 272 polzx = pol0.z() * pol1.x(); 273 273 274 polyz = pol0.y() * pol1.z(); 274 polyz = pol0.y() * pol1.z(); 275 polzy = pol0.z() * pol1.y(); 275 polzy = pol0.z() * pol1.y(); 276 276 277 polxy = pol0.x() * pol1.y(); 277 polxy = pol0.x() * pol1.y(); 278 polyx = pol0.y() * pol1.x(); 278 polyx = pol0.y() * pol1.x(); 279 } 279 } 280 280 281 //....oooOO0OOooo........oooOO0OOooo........oo 281 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 282 G4double G4PolarizedAnnihilationXS::GetXmin(G4 282 G4double G4PolarizedAnnihilationXS::GetXmin(G4double y) 283 { 283 { 284 return 0.5 * (1. - std::sqrt((y - 1.) / (y + 284 return 0.5 * (1. - std::sqrt((y - 1.) / (y + 1.))); 285 } 285 } 286 286 287 //....oooOO0OOooo........oooOO0OOooo........oo 287 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 288 G4double G4PolarizedAnnihilationXS::GetXmax(G4 288 G4double G4PolarizedAnnihilationXS::GetXmax(G4double y) 289 { 289 { 290 return 0.5 * (1. + std::sqrt((y - 1.) / (y + 290 return 0.5 * (1. + std::sqrt((y - 1.) / (y + 1.))); 291 } 291 } 292 292 293 //....oooOO0OOooo........oooOO0OOooo........oo 293 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 294 G4double G4PolarizedAnnihilationXS::DiceEpsilo 294 G4double G4PolarizedAnnihilationXS::DiceEpsilon() { return fDice; } 295 295 296 //....oooOO0OOooo........oooOO0OOooo........oo 296 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 297 G4double G4PolarizedAnnihilationXS::getVar(G4i 297 G4double G4PolarizedAnnihilationXS::getVar(G4int choice) 298 { 298 { 299 if(choice == -1) 299 if(choice == -1) 300 return fPolXS / fUnpXS; 300 return fPolXS / fUnpXS; 301 if(choice == 0) 301 if(choice == 0) 302 return fUnpXS; 302 return fUnpXS; 303 if(choice == 1) 303 if(choice == 1) 304 return ISPxx; 304 return ISPxx; 305 if(choice == 2) 305 if(choice == 2) 306 return ISPyy; 306 return ISPyy; 307 if(choice == 3) 307 if(choice == 3) 308 return ISPzz; 308 return ISPzz; 309 if(choice == 4) 309 if(choice == 4) 310 return ISPnd; 310 return ISPnd; 311 return 0; 311 return 0; 312 } 312 } 313 313