Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCL::CoulombNonRelativistic Class Reference

#include <G4INCLCoulombNonRelativistic.hh>

Inheritance 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.
ParticleEntryAvatarbringToSurfaceAbar (Particle *const p, Nucleus *const n) const
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.
Public Member Functions inherited from G4INCL::ICoulomb
 ICoulomb ()
virtual ~ICoulomb ()

Detailed Description

Definition at line 56 of file G4INCLCoulombNonRelativistic.hh.

Constructor & Destructor Documentation

◆ CoulombNonRelativistic()

G4INCL::CoulombNonRelativistic::CoulombNonRelativistic ( )
inline

Definition at line 58 of file G4INCLCoulombNonRelativistic.hh.

58{}

◆ ~CoulombNonRelativistic()

virtual G4INCL::CoulombNonRelativistic::~CoulombNonRelativistic ( )
inlinevirtual

Definition at line 59 of file G4INCLCoulombNonRelativistic.hh.

59{}

Member Function Documentation

◆ bringToSurface() [1/2]

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

76 {
77 // Neutral clusters?!
78// assert(c->getZ()>0);
79
80 // Perform the actual Coulomb deviation
81 const G4bool success = coulombDeviation(c, n);
82 if(!success) {
83 return IAvatarList();
84 }
85
86 // Rely on the CoulombNone slave to compute the straight-line intersection
87 // and actually bring the particle to the surface of the nucleus
88 return theCoulombNoneSlave.bringToSurface(c,n);
89 }
bool G4bool
Definition G4Types.hh:86
UnorderedVector< IAvatar * > IAvatarList

◆ bringToSurface() [2/2]

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 }

◆ bringToSurfaceAbar()

ParticleEntryAvatar * G4INCL::CoulombNonRelativistic::bringToSurfaceAbar ( Particle *const p,
Nucleus *const n ) const
virtual

Implements G4INCL::ICoulomb.

Definition at line 63 of file G4INCLCoulombNonRelativistic.cc.

63 {
64 // No distortion for neutral particles
65 if(p->getZ()!=0) {
66 const G4bool success = coulombDeviation(p, n);
67 if(!success) // transparent
68 return NULL;
69 }
70
71 // Rely on the CoulombNone slave to compute the straight-line intersection
72 // and actually bring the particle to the surface of the nucleus
73 return theCoulombNoneSlave.bringToSurfaceAbar(p,n);
74 }

◆ distortOut()

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

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

◆ maxImpactParameter()

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

138 {
139 const G4double theMinimumDistance = minimumDistance(p, kinE, n);
140 G4double rMax = n->getUniverseRadius();
141 if(p.theType == Composite){
142 rMax += 2.*ParticleTable::getLargestNuclearRadius(p.theA, p.theZ);
143 }
144 if (p.theType == antiComposite){
145 rMax += 2.*ParticleTable::getLargestNuclearRadius(-(p.theA), -(p.theZ));
146 }
147 const G4double theMaxImpactParameterSquared = rMax*(rMax-theMinimumDistance);
148 if(theMaxImpactParameterSquared<=0.)
149 return 0.;
150 const G4double theMaxImpactParameter = std::sqrt(theMaxImpactParameterSquared);
151 return theMaxImpactParameter;
152 }
G4double getLargestNuclearRadius(const G4int A, const G4int Z)

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