Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCL::CoulombNonRelativistic Class Reference

#include <G4INCLCoulombNonRelativistic.hh>

Inheritance diagram for G4INCL::CoulombNonRelativistic:
Collaboration diagram for G4INCL::CoulombNonRelativistic:

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. More...
 
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. More...
 
void distortOut (ParticleList const &pL, Nucleus const *const n) const
 Modify the momenta of the outgoing particles. More...
 
G4double maxImpactParameter (ParticleSpecies const &p, const G4double kinE, Nucleus const *const n) const
 Return the maximum impact parameter for Coulomb-distorted trajectories. More...
 
- Public Member Functions inherited from G4INCL::ICoulomb
 ICoulomb ()
 
virtual ~ICoulomb ()
 

Detailed Description

Definition at line 56 of file G4INCLCoulombNonRelativistic.hh.

Constructor & Destructor Documentation

G4INCL::CoulombNonRelativistic::CoulombNonRelativistic ( )
inline

Definition at line 58 of file G4INCLCoulombNonRelativistic.hh.

58 {}
virtual G4INCL::CoulombNonRelativistic::~CoulombNonRelativistic ( )
inlinevirtual

Definition at line 59 of file G4INCLCoulombNonRelativistic.hh.

59 {}

Member Function Documentation

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
pincoming particle
ndistorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 50 of file G4INCLCoulombNonRelativistic.cc.

50  {
51  // No distortion for neutral particles
52  if(p->getZ()!=0) {
53  const G4bool success = coulombDeviation(p, n);
54  if(!success) // transparent
55  return NULL;
56  }
57 
58  // Rely on the CoulombNone slave to compute the straight-line intersection
59  // and actually bring the particle to the surface of the nucleus
60  return theCoulombNoneSlave.bringToSurface(p,n);
61  }
const char * p
Definition: xmltok.h:285
bool G4bool
Definition: G4Types.hh:79
ParticleEntryAvatar * bringToSurface(Particle *const p, Nucleus *const n) const
Position the particle on the surface of the nucleus.

Here is the call graph for this function:

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
cincoming cluster
ndistorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 63 of file G4INCLCoulombNonRelativistic.cc.

63  {
64  // Neutral clusters?!
65 // assert(c->getZ()>0);
66 
67  // Perform the actual Coulomb deviation
68  const G4bool success = coulombDeviation(c, n);
69  if(!success) {
70  return IAvatarList();
71  }
72 
73  // Rely on the CoulombNone slave to compute the straight-line intersection
74  // and actually bring the particle to the surface of the nucleus
75  return theCoulombNoneSlave.bringToSurface(c,n);
76  }
bool G4bool
Definition: G4Types.hh:79
UnorderedVector< IAvatar * > IAvatarList
ParticleEntryAvatar * bringToSurface(Particle *const p, Nucleus *const n) const
Position the particle on the surface of the nucleus.

Here is the call graph for this function:

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
pLlist of outgoing particles
ndistorting nucleus

Implements G4INCL::ICoulomb.

Definition at line 78 of file G4INCLCoulombNonRelativistic.cc.

79  {
80 
81  for(ParticleIter particle=pL.begin(), e=pL.end(); particle!=e; ++particle) {
82 
83  const G4int Z = (*particle)->getZ();
84  if(Z == 0) continue;
85 
86  const G4double tcos=1.-0.000001;
87 
88  const G4double et1 = PhysicalConstants::eSquared * nucleus->getZ();
89  const G4double transmissionRadius =
90  nucleus->getDensity()->getTransmissionRadius(*particle);
91 
92  const ThreeVector position = (*particle)->getPosition();
93  ThreeVector momentum = (*particle)->getMomentum();
94  const G4double r = position.mag();
95  const G4double p = momentum.mag();
96  const G4double cosTheta = position.dot(momentum)/(r*p);
97  if(cosTheta < 0.999999) {
98  const G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta);
99  const G4double eta = et1 * Z / (*particle)->getKineticEnergy();
100  if(eta > transmissionRadius-0.0001) {
101  // If below the Coulomb barrier, radial emission:
102  momentum = position * (p/r);
103  (*particle)->setMomentum(momentum);
104  } else {
105  const G4double b0 = 0.5 * (eta + std::sqrt(eta*eta +
106  4. * std::pow(transmissionRadius*sinTheta,2)
107  * (1.-eta/transmissionRadius)));
108  const G4double bInf = std::sqrt(b0*(b0-eta));
109  const G4double thr = std::atan(eta/(2.*bInf));
110  G4double uTemp = (1.-b0/transmissionRadius) * std::sin(thr) +
111  b0/transmissionRadius;
112  if(uTemp>tcos) uTemp=tcos;
113  const G4double thd = Math::arcCos(cosTheta)-Math::piOverTwo + thr +
114  Math::arcCos(uTemp);
115  const G4double c1 = std::sin(thd)*cosTheta/sinTheta + std::cos(thd);
116  const G4double c2 = -p*std::sin(thd)/(r*sinTheta);
117  const ThreeVector newMomentum = momentum*c1 + position*c2;
118  (*particle)->setMomentum(newMomentum);
119  }
120  }
121  }
122  }
G4double arcCos(const G4double x)
Calculates arccos with some tolerance on illegal arguments.
const G4double eSquared
Coulomb conversion factor [MeV*fm].
const char * p
Definition: xmltok.h:285
int G4int
Definition: G4Types.hh:78
const G4double piOverTwo
double G4double
Definition: G4Types.hh:76
ParticleList::const_iterator ParticleIter

Here is the call graph for this function:

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 124 of file G4INCLCoulombNonRelativistic.cc.

125  {
126  const G4double theMinimumDistance = minimumDistance(p, kinE, n);
127  G4double rMax = n->getUniverseRadius();
128  if(p.theType == Composite)
129  rMax += 2.*ParticleTable::getLargestNuclearRadius(p.theA, p.theZ);
130  const G4double theMaxImpactParameterSquared = rMax*(rMax-theMinimumDistance);
131  if(theMaxImpactParameterSquared<=0.)
132  return 0.;
133  const G4double theMaxImpactParameter = std::sqrt(theMaxImpactParameterSquared);
134  return theMaxImpactParameter;
135  }
const char * p
Definition: xmltok.h:285
G4double getLargestNuclearRadius(const G4int A, const G4int Z)
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:


The documentation for this class was generated from the following files: