61 G4double G4WentzelVIRelXSection::ScreenRSquare[] = {0.0};
 
   62 G4double G4WentzelVIRelXSection::FormFactor[]    = {0.0};
 
   77   lowEnergyLimit = 1.0*
eV;
 
   85   if(0.0 == ScreenRSquare[0]) {
 
   89     ScreenRSquare[0] = alpha2*a0*a0;
 
   90     for(
G4int j=1; j<100; ++j) {
 
   93       ScreenRSquare[j] = 0.5*alpha2*x*
x;
 
   94       x = fNistManager->
GetA27(j);
 
   95       FormFactor[j] = constn*x*
x;
 
   99   elecXSRatio = factB = factD = formfactA = screenZ = 0.0;
 
  100   cosTetMaxElec = cosTetMaxNuc = invbeta2 = kinFactor = gam0pcmp = pcmp2 = 1.0;
 
  119   tkin = mom2 = momCM2 = 0.0;
 
  122   cosThetaMax = CosThetaLim;
 
  136   if(0.0 != spin) { spin = 0.5; }
 
  139   charge3 = chargeSquare*q;
 
  150   G4double cosTetMaxNuc2 = cosTetMaxNuc;
 
  151   if(Z != targetZ || tkin != etag) {
 
  154     if(targetZ > 99) { targetZ = 99; }
 
  163     kinFactor = coeff*targetZ*chargeSquare*invbeta2/mom2;
 
  165     screenZ = ScreenRSquare[targetZ]/mom2;
 
  167       screenZ *= 
std::min(Z*1.13,1.13 +3.76*Z*Z*invbeta2*alpha2*chargeSquare);
 
  179     if(targetZ == 1 && cosTetMaxNuc2 < 0.0 && particle == theProton) {
 
  182     formfactA = FormFactor[targetZ]*mom2;
 
  185     ComputeMaxElectronScattering(cut); 
 
  187   return cosTetMaxNuc2;
 
  196   if(cosTMax >= 1.0) { 
return xsec; }
 
  210     x = (1.0 - costm)/screenZ;
 
  213       y  = x2*(1.0 - 1.3333333*x + 3*
x2);
 
  214       if(0.0 < factB) { y -= fb*x2*x*(0.6666667 - 
x); }
 
  217       xlog = 
G4Log(1.0 + x);  
 
  219       if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
 
  224       if(nwarnings < nwarnlimit) {
 
  225     G4cout << 
"G4WentzelVIRelXSection::ComputeTransportCrossSectionPerAtom scattering on e- <0" 
  228            << 
" e(MeV)= " << tkin << 
" p(MeV/c)= " << sqrt(mom2) 
 
  229            << 
" Z= " << targetZ << 
"  "  
  231     G4cout << 
" 1-costm= " << 1.0-costm << 
" screenZ= " << screenZ 
 
  248     x = (1.0 - cosTMax)/screenZ;
 
  251       y  = x2*(1.0 - 1.3333333*x + 3*
x2); 
 
  252       if(0.0 < factB) { y -= fb*x2*x*(0.6666667 - 
x); }
 
  255       xlog = 
G4Log(1.0 + x);  
 
  257       if(0.0 < factB) { y -= fb*(x + x1 - 2*xlog); }
 
  262       if(nwarnings < nwarnlimit) {
 
  263     G4cout << 
"G4WentzelVIRelXSection::ComputeTransportCrossSectionPerAtom scattering on e- <0" 
  266            << 
" e(MeV)= " << tkin << 
" Z= " << targetZ << 
"  "  
  268     G4cout << 
" formfactA= " << formfactA << 
" screenZ= " << screenZ 
 
  269            << 
" x= " << 
" x1= " << x1 <<
G4endl;
 
  273     xSection += y*targetZ; 
 
  275   xSection *= kinFactor;
 
  299   if(elecRatio > 0.0) {
 
  302       cost1 = 
std::max(cost1,cosTetMaxElec);
 
  303       cost2 = 
std::max(cost2,cosTetMaxElec);
 
  306   if(cost1 < cost2) { 
return v; }
 
  315   G4double grej = (1. - z1*factB + factB1*targetZ*sqrt(z1*factB)*(2 - z1))/( (1.0 + z1*factD)*fm*fm );
 
  321   if(cost > 1.0)       { cost = 1.0; }
 
  322   else if(cost < -1.0) { cost =-1.0; }
 
  323   G4double sint = sqrt((1.0 - cost)*(1.0 + cost));
 
  337 G4WentzelVIRelXSection::ComputeMaxElectronScattering(
G4double cutEnergy)
 
  343       (1.0 + 2.0*ratio*(tau + 1.0) + ratio*ratio);
 
  349     if(particle == theElectron) { tmax *= 0.5; }
 
  357       G4double mom22 = t1*(t1 + 2.0*mass);
 
  358       G4double ctm = (mom2 + mom22 - mom21)*0.5/sqrt(mom2*mom22);
 
  359       if(ctm <  1.0) { cosTetMaxElec = ctm; }
 
  360       if(particle == theElectron && cosTetMaxElec < 0.0) { cosTetMaxElec = 0.0; }
 
void set(double x, double y, double z)
 
static G4Pow * GetInstance()
 
G4ThreeVector SampleSingleScattering(G4double CosThetaMin, G4double CosThetaMax, G4double elecRatio=0.0)
 
static G4LossTableManager * Instance()
 
G4double FactorForAngleLimit() const 
 
G4double ComputeTransportCrossSectionPerAtom(G4double CosThetaMax)
 
static G4NistManager * Instance()
 
const G4String & GetParticleName() const 
 
G4double SetupTarget(G4int Z, G4double cut=DBL_MAX)
 
void SetupParticle(const G4ParticleDefinition *)
 
G4GLOB_DLL std::ostream G4cout
 
G4double Z13(G4int Z) const 
 
static G4Proton * Proton()
 
G4double G4Log(G4double x)
 
static G4Positron * Positron()
 
G4double GetPDGMass() const 
 
T max(const T t1, const T t2)
brief Return the largest of the two arguments 
 
G4double GetAtomicMassAmu(const G4String &symb) const 
 
T min(const T t1, const T t2)
brief Return the smallest of the two arguments 
 
G4double GetPDGSpin() const 
 
static G4Electron * Electron()
 
void Initialise(const G4ParticleDefinition *, G4double CosThetaLim)
 
G4double GetPDGCharge() const 
 
void SetTargetMass(G4double value)
 
virtual ~G4WentzelVIRelXSection()