Geant4 9.6.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.
 
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 57 of file G4INCLCoulombNonRelativistic.hh.

Constructor & Destructor Documentation

◆ CoulombNonRelativistic()

G4INCL::CoulombNonRelativistic::CoulombNonRelativistic ( )
inline

Definition at line 59 of file G4INCLCoulombNonRelativistic.hh.

59{}

◆ ~CoulombNonRelativistic()

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

Definition at line 60 of file G4INCLCoulombNonRelativistic.hh.

60{}

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

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

51 {
52 // No distortion for neutral particles
53 if(p->getZ()!=0) {
54 const G4bool success = coulombDeviation(p, n);
55 if(!success) // transparent
56 return NULL;
57 }
58
59 // Rely on the CoulombNone slave to compute the straight-line intersection
60 // and actually bring the particle to the surface of the nucleus
61 return theCoulombNoneSlave.bringToSurface(p,n);
62 }

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

80 {
81
82 for(ParticleIter particle=pL.begin(); particle!=pL.end(); ++particle) {
83
84 const G4int Z = (*particle)->getZ();
85 if(Z == 0) continue;
86
87 const G4double tcos=1.-0.000001;
88
89 const G4double et1 = PhysicalConstants::eSquared * nucleus->getZ();
90 const G4double transmissionRadius =
91 nucleus->getDensity()->getTransmissionRadius(*particle);
92
93 const ThreeVector position = (*particle)->getPosition();
94 ThreeVector momentum = (*particle)->getMomentum();
95 const G4double r = position.mag();
96 const G4double p = momentum.mag();
97 const G4double cosTheta = position.dot(momentum)/(r*p);
98 if(cosTheta < 0.999999) {
99 const G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta);
100 const G4double eta = et1 * Z / (*particle)->getKineticEnergy();
101 if(eta > transmissionRadius-0.0001) {
102 // If below the Coulomb barrier, radial emission:
103 momentum = position * (p/r);
104 (*particle)->setMomentum(momentum);
105 } else {
106 const G4double b0 = 0.5 * (eta + std::sqrt(eta*eta +
107 4. * std::pow(transmissionRadius*sinTheta,2)
108 * (1.-eta/transmissionRadius)));
109 const G4double bInf = std::sqrt(b0*(b0-eta));
110 const G4double thr = std::atan(eta/(2.*bInf));
111 G4double uTemp = (1.-b0/transmissionRadius) * std::sin(thr) +
112 b0/transmissionRadius;
113 if(uTemp>tcos) uTemp=tcos;
114 const G4double thd = std::acos(cosTheta)-Math::piOverTwo + thr +
115 std::acos(uTemp);
116 const G4double c1 = std::sin(thd)*cosTheta/sinTheta + std::cos(thd);
117 const G4double c2 = -p*std::sin(thd)/(r*sinTheta);
118 const ThreeVector newMomentum = momentum*c1 + position*c2;
119 (*particle)->setMomentum(newMomentum);
120 }
121 }
122 }
123 }
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
const G4double piOverTwo
const G4double eSquared
Coulomb conversion factor [MeV*fm].
std::list< G4INCL::Particle * >::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 125 of file G4INCLCoulombNonRelativistic.cc.

126 {
127 G4double theMaxImpactParameter = maxImpactParameterParticle(p, kinE, n);
128 if(theMaxImpactParameter <= 0.)
129 return 0.;
130 if(p.theType == Composite)
131 theMaxImpactParameter += 2.*ParticleTable::getNuclearRadius(p.theA, p.theZ);
132 return theMaxImpactParameter;
133 }
static G4double getNuclearRadius(const G4int A, const G4int Z)

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