60 G4double G4WentzelOKandVIxSection::ScreenRSquareElec[] = {0.0};
61 G4double G4WentzelOKandVIxSection::ScreenRSquare[] = {0.0};
62 G4double G4WentzelOKandVIxSection::FormFactor[] = {0.0};
77 lowEnergyLimit = 1.0*
eV;
85 if(0.0 == ScreenRSquare[0]) {
89 ScreenRSquare[0] = alpha2*a0*a0;
90 ScreenRSquareElec[0] = ScreenRSquare[0];
91 for(
G4int j=1; j<100; ++j) {
93 if(1 == j) { ScreenRSquare[j] = 0.5*alpha2*a0*a0; }
95 ScreenRSquare[j] = 0.5*(1 + exp(-j*j*0.001))*alpha2*x*x;
96 ScreenRSquareElec[j] = 0.5*alpha2*x*
x;
98 x = fNistManager->
GetA27(j);
99 FormFactor[j] = constn*x*
x;
103 elecXSRatio = factB = factD = formfactA = screenZ = 0.0;
104 cosTetMaxElec = cosTetMaxNuc = invbeta2 = kinFactor = gam0pcmp = pcmp2 = 1.0;
108 tkin = mom2 = momCM2 = factorA2 = mass = spin = chargeSquare = charge3 = 0.0;
127 tkin = mom2 = momCM2 = 0.0;
130 cosThetaMax = CosThetaLim;
132 *CLHEP::hbarc/CLHEP::fermi;
148 if(0.0 != spin) { spin = 0.5; }
151 charge3 = chargeSquare*q;
162 G4double cosTetMaxNuc2 = cosTetMaxNuc;
163 if(Z != targetZ || tkin != etag) {
166 if(targetZ > 99) { targetZ = 99; }
175 kinFactor = coeff*Z*chargeSquare*invbeta2/mom2;
178 screenZ = ScreenRSquare[targetZ]/mom2;
179 }
else if(mass >
MeV) {
180 screenZ = std::min(Z*1.13,1.13 +3.76*Z*Z*invbeta2*alpha2*chargeSquare)*
181 ScreenRSquare[targetZ]/mom2;
184 screenZ = std::min(Z*1.13,(1.13 +3.76*Z*Z
185 *invbeta2*alpha2*std::sqrt(tau/(tau + fG4pow->
Z23(targetZ)))))*
186 ScreenRSquareElec[targetZ]/mom2;
188 if(targetZ == 1 && cosTetMaxNuc2 < 0.0 && particle == theProton) {
191 formfactA = FormFactor[targetZ]*mom2;
194 ComputeMaxElectronScattering(cut);
196 return cosTetMaxNuc2;
205 if(cosTMax >= 1.0) {
return xsec; }
214 G4double costm = std::max(cosTMax,cosTetMaxElec);
219 x = (1.0 - costm)/screenZ;
222 y = x2*(1.0 - 1.3333333*x + 3*
x2);
223 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
228 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
233 if(nwarnings < nwarnlimit) {
234 G4cout <<
"G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom scattering on e- <0"
237 <<
" e(MeV)= " << tkin <<
" p(MeV/c)= " << sqrt(mom2)
238 <<
" Z= " << targetZ <<
" "
240 G4cout <<
" 1-costm= " << 1.0-costm <<
" screenZ= " << screenZ
257 x = (1.0 - cosTMax)/screenZ;
260 y = x2*(1.0 - 1.3333333*x + 3*
x2);
261 if(0.0 < factB) { y -= fb*x2*x*(0.6666667 -
x); }
266 if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
271 if(nwarnings < nwarnlimit) {
272 G4cout <<
"G4WentzelOKandVIxSection::ComputeTransportCrossSectionPerAtom scattering on e- <0"
275 <<
" e(MeV)= " << tkin <<
" Z= " << targetZ <<
" "
277 G4cout <<
" formfactA= " << formfactA <<
" screenZ= " << screenZ
278 <<
" x= " <<
" x1= " << x1 <<
G4endl;
282 xSection += y*targetZ;
284 xSection *= kinFactor;
308 if(elecRatio > 0.0) {
311 cost1 = std::max(cost1,cosTetMaxElec);
312 cost2 = std::max(cost2,cosTetMaxElec);
315 if(cost1 < cost2) {
return v; }
324 G4double grej = (1. - z1*factB + factB1*targetZ*sqrt(z1*factB)*(2 - z1))/( (1.0 + z1*factD)*fm*fm );
330 if(cost > 1.0) { cost = 1.0; }
331 else if(cost < -1.0) { cost =-1.0; }
332 G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
346 G4WentzelOKandVIxSection::ComputeMaxElectronScattering(
G4double cutEnergy)
352 (1.0 + 2.0*ratio*(tau + 1.0) + ratio*ratio);
358 if(particle == theElectron) { tmax *= 0.5; }
360 G4double t = std::min(cutEnergy, tmax);
366 G4double mom22 = t1*(t1 + 2.0*mass);
367 G4double ctm = (mom2 + mom22 - mom21)*0.5/sqrt(mom2*mom22);
368 if(ctm < 1.0) { cosTetMaxElec = ctm; }
369 if(particle == theElectron && cosTetMaxElec < 0.0) { cosTetMaxElec = 0.0; }