- Timestamp:
- May 28, 2009, 4:26:57 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/standard/src/G4eCoulombScatteringModel.cc
r1007 r1055 24 24 // ******************************************************************** 25 25 // 26 // $Id: G4eCoulombScatteringModel.cc,v 1. 59 2008/10/22 18:39:29 vnivanch Exp $27 // GEANT4 tag $Name: geant4-09-0 2$26 // $Id: G4eCoulombScatteringModel.cc,v 1.69 2009/05/10 16:09:29 vnivanch Exp $ 27 // GEANT4 tag $Name: geant4-09-03-beta-cand-01 $ 28 28 // 29 29 // ------------------------------------------------------------------- … … 66 66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 67 67 68 G4double G4eCoulombScatteringModel::ScreenRSquare[] = {0.0}; 69 G4double G4eCoulombScatteringModel::FormFactor[] = {0.0}; 70 68 71 using namespace std; 69 72 … … 84 87 currentMaterial = 0; 85 88 currentElement = 0; 86 a0 = alpha2*electron_mass_c2*electron_mass_c2/(0.885*0.885);89 lowEnergyLimit = keV; 87 90 G4double p0 = electron_mass_c2*classic_electr_radius; 88 91 coeff = twopi*p0*p0; 89 constn = 6.937e-6/(MeV*MeV);90 92 tkin = targetZ = mom2 = DBL_MIN; 91 93 elecXSection = nucXSection = 0.0; 92 recoilThreshold = DBL_MAX;94 recoilThreshold = 100.*keV; 93 95 ecut = DBL_MAX; 94 96 particle = 0; 95 97 currentCouple = 0; 96 for(size_t j=0; j<100; j++) { 97 FF[j] = 0.0; 98 } 98 99 // Thomas-Fermi screening radii 100 // Formfactors from A.V. Butkevich et al., NIM A 488 (2002) 282 101 102 if(0.0 == ScreenRSquare[0]) { 103 G4double a0 = electron_mass_c2/0.88534; 104 G4double constn = 6.937e-6/(MeV*MeV); 105 106 ScreenRSquare[0] = alpha2*a0*a0; 107 for(G4int j=1; j<100; j++) { 108 G4double x = a0*fNistManager->GetZ13(j); 109 ScreenRSquare[j] = alpha2*x*x; 110 x = fNistManager->GetA27(j); 111 FormFactor[j] = constn*x*x; 112 } 113 } 99 114 } 100 115 … … 121 136 if(!isInitialised) { 122 137 isInitialised = true; 123 124 if(pParticleChange) 125 fParticleChange = 126 reinterpret_cast<G4ParticleChangeForGamma*>(pParticleChange); 127 else 128 fParticleChange = new G4ParticleChangeForGamma(); 138 fParticleChange = GetParticleChangeForGamma(); 129 139 } 130 140 if(mass < GeV && particle->GetParticleType() != "nucleus") { … … 157 167 G4double ctm = (mom2 + mom22 - mom21)*0.5/sqrt(mom2*mom22); 158 168 //G4cout << "ctm= " << ctm << G4endl; 159 if(ctm < 1.0) cosTetMaxElec = ctm; 169 if(ctm < 1.0) cosTetMaxElec = ctm; 170 if(ctm < -1.0) cosTetMaxElec = -1.0; 160 171 } 161 172 } … … 196 207 { 197 208 // This method needs initialisation before be called 198 199 G4double fac = coeff*targetZ*chargeSquare*invbeta2/mom2; 209 G4double fac = coeff*targetZ*chargeSquare*kinFactor; 200 210 elecXSection = 0.0; 201 211 nucXSection = 0.0; … … 216 226 G4double s = screenZ*formfactA; 217 227 G4double z1 = 1.0 - cosTetMaxNuc2 + screenZ; 218 G4double d = (1.0 - s)/formfactA; 228 G4double s1 = 1.0 - s; 229 G4double d = s1/formfactA; 219 230 //G4cout <<"x1= "<<x1<<" z1= " <<z1<<" s= "<<s << " d= " <<d <<G4endl; 220 231 if(d < 0.2*x1) { … … 226 237 G4double x2 = x1 + d; 227 238 G4double z2 = z1 + d; 228 x = (1.0 + 2.0*s)*((cosTetMinNuc - cosTetMaxNuc2)*(1.0/(x1*z1) + 1.0/(x2*z2)) - 229 2.0*log(z1*x2/(z2*x1))/d); 239 x = (1.0/x1 - 1.0/z1 + 1.0/x2 - 1.0/z2 - 2.0*log(z1*x2/(z2*x1))/d)/(s1*s1); 230 240 } 231 241 nucXSection += fac*targetZ*x; 232 242 } 233 234 243 //G4cout<<" cross(bn)= "<<nucXSection/barn<<" xsElec(bn)= "<<elecXSection/barn 235 244 // << " Asc= " << screenZ << G4endl; … … 283 292 G4int ia = SelectIsotopeNumber(currentElement); 284 293 G4double Trec = z1*mom2/(amu_c2*G4double(ia)); 285 G4double th = 286 std::min(recoilThreshold, 287 targetZ*currentElement->GetIonisation()->GetMeanExcitationEnergy()); 288 289 if(Trec > th) { 290 G4int iz = G4int(targetZ); 294 295 if(Trec > recoilThreshold) { 291 296 G4ParticleDefinition* ion = theParticleTable->FindIon(iz, ia, 0, iz); 292 297 Trec = z1*mom2/ion->GetPDGMass();
Note: See TracChangeset
for help on using the changeset viewer.