G4INCL::CoulombNonRelativistic Class Reference

#include <G4INCLCoulombNonRelativistic.hh>

Inheritance diagram for G4INCL::CoulombNonRelativistic:

G4INCL::ICoulomb

Public Member Functions

 CoulombNonRelativistic ()
virtual ~CoulombNonRelativistic ()
ParticleEntryAvatarbringToSurface (Particle *const p, Nucleus *const n) const
 Modify the momentum of the particle and position it on the surface of the nucleus.
IAvatarList bringToSurface (Cluster *const c, Nucleus *const n) const
 Modify the momentum of the incoming cluster and position it on the surface of the nucleus.
void distortOut (ParticleList const &pL, Nucleus const *const n) const
 Modify the momenta of the outgoing particles.
G4double maxImpactParameter (ParticleSpecies const &p, const G4double kinE, Nucleus const *const n) const
 Return the maximum impact parameter for Coulomb-distorted trajectories.

Detailed Description

Definition at line 55 of file G4INCLCoulombNonRelativistic.hh.


Constructor & Destructor Documentation

G4INCL::CoulombNonRelativistic::CoulombNonRelativistic (  )  [inline]

Definition at line 57 of file G4INCLCoulombNonRelativistic.hh.

00057 {}

virtual G4INCL::CoulombNonRelativistic::~CoulombNonRelativistic (  )  [inline, virtual]

Definition at line 58 of file G4INCLCoulombNonRelativistic.hh.

00058 {}


Member Function Documentation

IAvatarList G4INCL::CoulombNonRelativistic::bringToSurface ( Cluster *const   c,
Nucleus *const   n 
) const [virtual]

Modify the momentum of the incoming cluster and position it on the surface of the nucleus.

This method performs non-relativistic distortion. The momenta of the particles that compose the cluster are also distorted.

Parameters:
c incoming cluster
n distorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 62 of file G4INCLCoulombNonRelativistic.cc.

References G4INCL::CoulombNone::bringToSurface(), and CLHEP::detail::n.

00062                                                                                                {
00063     // Neutral clusters?!
00064 // assert(c->getZ()>0);
00065 
00066     // Perform the actual Coulomb deviation
00067     const G4bool success = coulombDeviation(c, n);
00068     if(!success) {
00069       return IAvatarList();
00070     }
00071 
00072     // Rely on the CoulombNone slave to compute the straight-line intersection
00073     // and actually bring the particle to the surface of the nucleus
00074     return theCoulombNoneSlave.bringToSurface(c,n);
00075   }

ParticleEntryAvatar * G4INCL::CoulombNonRelativistic::bringToSurface ( Particle *const   p,
Nucleus *const   n 
) const [virtual]

Modify the momentum of the particle and position it on the surface of the nucleus.

This method performs non-relativistic distortion.

Parameters:
p incoming particle
n distorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 49 of file G4INCLCoulombNonRelativistic.cc.

References G4INCL::CoulombNone::bringToSurface(), G4INCL::Particle::getZ(), and CLHEP::detail::n.

00049                                                                                                          {
00050     // No distortion for neutral particles
00051     if(p->getZ()!=0) {
00052       const G4bool success = coulombDeviation(p, n);
00053       if(!success) // transparent
00054         return NULL;
00055     }
00056 
00057     // Rely on the CoulombNone slave to compute the straight-line intersection
00058     // and actually bring the particle to the surface of the nucleus
00059     return theCoulombNoneSlave.bringToSurface(p,n);
00060   }

void G4INCL::CoulombNonRelativistic::distortOut ( ParticleList const &  pL,
Nucleus const *const   n 
) const [virtual]

Modify the momenta of the outgoing particles.

This method performs non-relativistic distortion.

Parameters:
pL list of outgoing particles
n distorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 77 of file G4INCLCoulombNonRelativistic.cc.

References G4INCL::PhysicalConstants::eSquared, G4INCL::Nucleus::getDensity(), G4INCL::NuclearDensity::getTransmissionRadius(), G4INCL::Particle::getZ(), G4INCL::ThreeVector::mag(), G4INCL::Math::piOverTwo, and position.

00078                                            {
00079 
00080     for(ParticleIter particle=pL.begin(); particle!=pL.end(); ++particle) {
00081 
00082       const G4int Z = (*particle)->getZ();
00083       if(Z == 0) continue;
00084 
00085       const G4double tcos=1.-0.000001;
00086 
00087       const G4double et1 = PhysicalConstants::eSquared * nucleus->getZ();
00088       const G4double transmissionRadius =
00089         nucleus->getDensity()->getTransmissionRadius(*particle);
00090 
00091       const ThreeVector position = (*particle)->getPosition();
00092       ThreeVector momentum = (*particle)->getMomentum();
00093       const G4double r = position.mag();
00094       const G4double p = momentum.mag();
00095       const G4double cosTheta = position.dot(momentum)/(r*p);
00096       if(cosTheta < 0.999999) {
00097         const G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta);
00098         const G4double eta = et1 * Z / (*particle)->getKineticEnergy();
00099         if(eta > transmissionRadius-0.0001) {
00100           // If below the Coulomb barrier, radial emission:
00101           momentum = position * (p/r);
00102           (*particle)->setMomentum(momentum);
00103         } else {
00104           const G4double b0 = 0.5 * (eta + std::sqrt(eta*eta +
00105                 4. * std::pow(transmissionRadius*sinTheta,2)
00106                 * (1.-eta/transmissionRadius)));
00107           const G4double bInf = std::sqrt(b0*(b0-eta));
00108           const G4double thr = std::atan(eta/(2.*bInf));
00109           G4double uTemp = (1.-b0/transmissionRadius) * std::sin(thr) +
00110             b0/transmissionRadius;      
00111           if(uTemp>tcos) uTemp=tcos;
00112           const G4double thd = std::acos(cosTheta)-Math::piOverTwo + thr +
00113             std::acos(uTemp);
00114           const G4double c1 = std::sin(thd)*cosTheta/sinTheta + std::cos(thd);
00115           const G4double c2 = -p*std::sin(thd)/(r*sinTheta);
00116           const ThreeVector newMomentum = momentum*c1 + position*c2;
00117           (*particle)->setMomentum(newMomentum);
00118         }
00119       }
00120     }
00121   }

G4double G4INCL::CoulombNonRelativistic::maxImpactParameter ( ParticleSpecies const &  p,
const G4double  kinE,
Nucleus const *const   n 
) const [virtual]

Return the maximum impact parameter for Coulomb-distorted trajectories.

Implements G4INCL::ICoulomb.

Definition at line 123 of file G4INCLCoulombNonRelativistic.cc.

References G4INCL::Composite, G4INCL::ParticleTable::getNuclearRadius(), CLHEP::detail::n, G4INCL::ParticleSpecies::theA, G4INCL::ParticleSpecies::theType, and G4INCL::ParticleSpecies::theZ.

00124                                      {
00125     G4double theMaxImpactParameter = maxImpactParameterParticle(p, kinE, n);
00126     if(theMaxImpactParameter <= 0.)
00127       return 0.;
00128     if(p.theType == Composite)
00129       theMaxImpactParameter +=  2.*ParticleTable::getNuclearRadius(p.theA, p.theZ);
00130     return theMaxImpactParameter;
00131   }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:54:06 2013 for Geant4 by  doxygen 1.4.7