Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
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. 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 55 of file G4INCLCoulombNonRelativistic.hh.

Constructor & Destructor Documentation

G4INCL::CoulombNonRelativistic::CoulombNonRelativistic ( )
inline

Definition at line 57 of file G4INCLCoulombNonRelativistic.hh.

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

Definition at line 58 of file G4INCLCoulombNonRelativistic.hh.

58 {}

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

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

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

References G4INCL::CoulombNone::bringToSurface().

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

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

78  {
79 
80  for(ParticleIter particle=pL.begin(), e=pL.end(); particle!=e; ++particle) {
81 
82  const G4int Z = (*particle)->getZ();
83  if(Z == 0) continue;
84 
85  const G4double tcos=1.-0.000001;
86 
87  const G4double et1 = PhysicalConstants::eSquared * nucleus->getZ();
88  const G4double transmissionRadius =
89  nucleus->getDensity()->getTransmissionRadius(*particle);
90 
91  const ThreeVector position = (*particle)->getPosition();
92  ThreeVector momentum = (*particle)->getMomentum();
93  const G4double r = position.mag();
94  const G4double p = momentum.mag();
95  const G4double cosTheta = position.dot(momentum)/(r*p);
96  if(cosTheta < 0.999999) {
97  const G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta);
98  const G4double eta = et1 * Z / (*particle)->getKineticEnergy();
99  if(eta > transmissionRadius-0.0001) {
100  // If below the Coulomb barrier, radial emission:
101  momentum = position * (p/r);
102  (*particle)->setMomentum(momentum);
103  } else {
104  const G4double b0 = 0.5 * (eta + std::sqrt(eta*eta +
105  4. * std::pow(transmissionRadius*sinTheta,2)
106  * (1.-eta/transmissionRadius)));
107  const G4double bInf = std::sqrt(b0*(b0-eta));
108  const G4double thr = std::atan(eta/(2.*bInf));
109  G4double uTemp = (1.-b0/transmissionRadius) * std::sin(thr) +
110  b0/transmissionRadius;
111  if(uTemp>tcos) uTemp=tcos;
112  const G4double thd = std::acos(cosTheta)-Math::piOverTwo + thr +
113  std::acos(uTemp);
114  const G4double c1 = std::sin(thd)*cosTheta/sinTheta + std::cos(thd);
115  const G4double c2 = -p*std::sin(thd)/(r*sinTheta);
116  const ThreeVector newMomentum = momentum*c1 + position*c2;
117  (*particle)->setMomentum(newMomentum);
118  }
119  }
120  }
121  }
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
tuple c1
Definition: plottest35.py:14
ParticleList::const_iterator ParticleIter
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::getLargestNuclearRadius(), G4INCL::Nucleus::getUniverseRadius(), G4INCL::ParticleSpecies::theA, G4INCL::ParticleSpecies::theType, and G4INCL::ParticleSpecies::theZ.

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

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