Geant4 11.1.1
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.
 
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 ()
 
virtual ParticleEntryAvatarbringToSurface (Particle *const p, Nucleus *const n) const =0
 Modify the momentum of an incoming particle and position it on the surface of the nucleus.
 
virtual IAvatarList bringToSurface (Cluster *const c, Nucleus *const n) const =0
 Modify the momentum of an incoming cluster and position it on the surface of the target.
 
virtual void distortOut (ParticleList const &pL, Nucleus const *const n) const =0
 Modify the momenta of the outgoing particles.
 
virtual G4double maxImpactParameter (ParticleSpecies const &p, const G4double kinE, Nucleus const *const n) const =0
 Return the maximum impact parameter for Coulomb-distorted trajectories.
 

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 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:86
ParticleEntryAvatar * bringToSurface(Particle *const p, Nucleus *const n) const
Position the particle on the surface of the nucleus.
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 }

◆ 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 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 }
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
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 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 }
G4double getLargestNuclearRadius(const G4int A, const G4int Z)

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