53   lowEnergyRecoilLimit = 100.*
keV;  
 
   54   lowestEnergyLimit    = 1.*
MeV;  
 
  100   if(ekin <= lowestEnergyLimit || A < 3) {
 
  109     G4cout << 
"G4ChargeExchange::DoIt: Incident particle plab=" 
  110        << plab/
GeV << 
" GeV/c " 
  111        << 
" ekin(MeV) = " << ekin/
MeV << 
"  " 
  121        << 
" PDGcode= " << projPDG << 
" on nucleus Z= " << Z
 
  122        << 
" A= " << A << 
" N= " << N
 
  137   G4bool theHyperon = 
false;
 
  141   if(theParticle == theProton) {
 
  142     theSecondary = theNeutron;
 
  144   } 
else if(theParticle == theNeutron) {
 
  145     theSecondary = theProton;
 
  147   } 
else if(theParticle == thePiPlus) {
 
  148     theSecondary = thePiZero;
 
  150   } 
else if(theParticle == thePiMinus) {
 
  151     theSecondary = thePiZero;
 
  153   } 
else if(theParticle == theKPlus) {
 
  155     else  theSecondary = theK0L;
 
  157   } 
else if(theParticle == theKMinus) {
 
  159     else  theSecondary = theK0L;
 
  161   } 
else if(theParticle == theK0S || theParticle == theK0L) {
 
  163       theSecondary = theKPlus;
 
  166       theSecondary = theKMinus;
 
  169   } 
else if(theParticle == theANeutron) {
 
  170     theSecondary = theAProton;
 
  172   } 
else if(theParticle == theAProton) {
 
  173     theSecondary = theANeutron;
 
  175   } 
else if(theParticle == theL) {
 
  179         theSecondary = theS0;
 
  180       } 
else if (x < 0.4) {
 
  181         theSecondary = theSPlus;
 
  183       } 
else if (x < 0.6) {
 
  184         theSecondary = theProton;
 
  188       } 
else if (x < 0.8) {
 
  189         theSecondary = theProton;
 
  194         theSecondary = theNeutron;
 
  195     theRecoil = theSPlus;
 
  201         theSecondary = theS0;
 
  202       } 
else if (x < 0.4) {
 
  203         theSecondary = theSMinus;
 
  205       } 
else if (x < 0.6) {
 
  206         theSecondary = theNeutron;
 
  210       } 
else if (x < 0.8) {
 
  211         theSecondary = theNeutron;
 
  216         theSecondary = theProton;
 
  217     theRecoil = theSMinus;
 
  224   if (Z == 1 && A == 2) theDef = theD;
 
  225   else if (Z == 1 && A == 3) theDef = theT;
 
  226   else if (Z == 2 && A == 3) theDef = theHe3;
 
  227   else if (Z == 2 && A == 4) theDef = theA;
 
  236   if(theRecoil)  { m21 += theRecoil->
GetPDGMass(); }
 
  237   else           { theRecoil = theDef; }
 
  242   if(etot < m11 + m21) {
 
  249   G4double e1 = 0.5*etot*(1.0 - (m21*m21 - m11*m11)/(etot*etot));
 
  251   G4double ptot = std::sqrt(e1*e1 - m11*m11);
 
  259     G4cout <<
"## G4ChargeExchange t= " << t << 
" tmax= " << tmax
 
  260        << 
" ptot= " << ptot << 
G4endl;
 
  265   if(std::abs(cost) > 1.0) cost = 1.0;
 
  266   G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
 
  271   G4ThreeVector v1(sint*std::cos(phi),sint*std::sin(phi),cost);
 
  293   } 
else if(erec > lowEnergyRecoilLimit) {
 
  297     if(erec < 0.0) erec = 0.0;
 
  307     aa = std::pow(A, 1.63);
 
  308     bb = 14.5*std::pow(A, 0.66);
 
  309     cc = 1.4*std::pow(A, 0.33);
 
  312     aa = std::pow(A, 1.33);
 
  313     bb = 60.*std::pow(A, 0.33);
 
  314     cc = 0.4*std::pow(A, 0.40);
 
  317   G4double x1 = (1.0 - std::exp(-tmax*bb))*aa/bb;
 
  318   G4double x2 = (1.0 - std::exp(-tmax*dd))*cc/dd;