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

#include <G4INCLParticleEntryChannel.hh>

+ Inheritance diagram for G4INCL::ParticleEntryChannel:

Public Member Functions

 ParticleEntryChannel (Nucleus *n, Particle *p)
 
virtual ~ParticleEntryChannel ()
 
FinalStategetFinalState ()
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
virtual G4INCL::FinalStategetFinalState ()=0
 

Detailed Description

Definition at line 49 of file G4INCLParticleEntryChannel.hh.

Constructor & Destructor Documentation

◆ ParticleEntryChannel()

G4INCL::ParticleEntryChannel::ParticleEntryChannel ( Nucleus n,
Particle p 
)

Definition at line 46 of file G4INCLParticleEntryChannel.cc.

47 :theNucleus(n), theParticle(p)
48 {}

◆ ~ParticleEntryChannel()

G4INCL::ParticleEntryChannel::~ParticleEntryChannel ( )
virtual

Definition at line 50 of file G4INCLParticleEntryChannel.cc.

51 {}

Member Function Documentation

◆ getFinalState()

FinalState * G4INCL::ParticleEntryChannel::getFinalState ( )
virtual

Implements G4INCL::IChannel.

Definition at line 53 of file G4INCLParticleEntryChannel.cc.

53 {
54 // Behaves slightly differency if a third body (the projectile) is present
55 G4bool isNN = theNucleus->isNucleusNucleusCollision();
56
57 /* Corrections to the energy of the entering nucleon
58 *
59 * In particle-nucleus reactions, the goal of this correction is to satisfy
60 * energy conservation in particle-nucleus reactions using real particle
61 * and nuclear masses.
62 *
63 * In nucleus-nucleus reactions, in addition to the above, the correction
64 * is determined by a model for the excitation energy of the
65 * quasi-projectile (QP). The energy of the entering nucleon is such that
66 * the QP excitation energy, as determined by conservation, is what given
67 * by our model.
68 *
69 * Possible choices for the correction (or, equivalently, for the QP excitation energy):
70 * 1. the correction is 0. (same as in particle-nucleus);
71 * 2. the correction is the separation energy of the entering nucleon in
72 * the current QP;
73 * 3. the QP excitation energy is given by A. Boudard's algorithm, as
74 * implemented in INCL4.2-HI/Geant4.
75 *
76 * Ideally, the QP excitation energy should always be >=0. Algorithms 1.
77 * and 2. do not guarantee this, although violations to the rule seem to be
78 * more severe for 1. than for 2.. Algorithm 3., by construction, yields
79 * non-negative QP excitation energies.
80 */
81 G4double theCorrection;
82 if(isNN) {
83// assert(theParticle->isNucleon());
84 ProjectileRemnant * const projectileRemnant = theNucleus->getProjectileRemnant();
85// assert(projectileRemnant);
86
87 // No correction (model 1. above)
88 /*
89 theCorrection = theParticle->getEmissionQValueCorrection(
90 theNucleus->getA() + theParticle->getA(),
91 theNucleus->getZ() + theParticle->getZ())
92 + theParticle->getTableMass() - theParticle->getINCLMass();
93 const G4double theProjectileCorrection = 0.;
94 */
95
96 // Correct the energy of the entering particle for the Q-value of the
97 // emission from the projectile (model 2. above)
98 /*
99 theCorrection = theParticle->getTransferQValueCorrection(
100 projectileRemnant->getA(), projectileRemnant->getZ(),
101 theNucleus->getA(), theNucleus->getZ());
102 G4double theProjectileCorrection;
103 if(projectileRemnant->getA()>theParticle->getA()) { // if there are any particles left
104 // Compute the projectile Q-value (to be used as a correction to the
105 // other components of the projectile remnant)
106 theProjectileCorrection = ParticleTable::getTableQValue(
107 projectileRemnant->getA() - theParticle->getA(),
108 projectileRemnant->getZ() - theParticle->getZ(),
109 theParticle->getA(),
110 theParticle->getZ());
111 } else
112 theProjectileCorrection = 0.;
113 */
114
115 // Fix the correction in such a way that the quasi-projectile excitation
116 // energy is given by A. Boudard's INCL4.2-HI model.
117 const G4double theProjectileExcitationEnergy =
118 (projectileRemnant->getA()-theParticle->getA()>1) ?
119 (projectileRemnant->computeExcitationEnergy(theParticle->getID())) :
120 0.;
121 const G4double theProjectileEffectiveMass =
122 ParticleTable::getTableMass(projectileRemnant->getA() - theParticle->getA(), projectileRemnant->getZ() - theParticle->getZ())
123 + theProjectileExcitationEnergy;
124 const ThreeVector &theProjectileMomentum = projectileRemnant->getMomentum() - theParticle->getMomentum();
125 const G4double theProjectileEnergy = std::sqrt(theProjectileMomentum.mag2() + theProjectileEffectiveMass*theProjectileEffectiveMass);
126 const G4double theProjectileCorrection = theProjectileEnergy - (projectileRemnant->getEnergy() - theParticle->getEnergy());
127 theCorrection = theParticle->getEmissionQValueCorrection(
128 theNucleus->getA() + theParticle->getA(),
129 theNucleus->getZ() + theParticle->getZ())
130 + theParticle->getTableMass() - theParticle->getINCLMass()
131 + theProjectileCorrection;
132
133 projectileRemnant->removeParticle(theParticle, theProjectileCorrection);
134 } else {
135 const G4int ACN = theNucleus->getA() + theParticle->getA();
136 const G4int ZCN = theNucleus->getZ() + theParticle->getZ();
137 // Correction to the Q-value of the entering particle
138 theCorrection = theParticle->getEmissionQValueCorrection(ACN,ZCN);
139 DEBUG("The following Particle enters with correction " << theCorrection
140 << theParticle->print() << std::endl);
141 }
142
143 const G4double energyBefore = theParticle->getEnergy() - theCorrection;
144 G4bool success = particleEnters(theCorrection);
145 FinalState *fs = new FinalState();
146 fs->addEnteringParticle(theParticle);
147
148 if(!success) {
149 fs->makeParticleBelowZero();
150 } else if(theParticle->isNucleon() &&
151 theParticle->getKineticEnergy()<theNucleus->getPotential()->getFermiEnergy(theParticle)) {
152 // If the participant is a nucleon entering below its Fermi energy, force a
153 // compound nucleus
154 fs->makeParticleBelowFermi();
155 }
156
157 fs->setTotalEnergyBeforeInteraction(energyBefore);
158 return fs;
159 }
#define DEBUG(x)
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4double getFermiEnergy(const Particle *const p) const
Return the Fermi energy for a particle.
NuclearPotential::INuclearPotential * getPotential() const
Getter for thePotential.
ProjectileRemnant * getProjectileRemnant() const
Get the projectile remnant.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
static NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4double getINCLMass() const
Get the INCL particle mass.
G4double getEmissionQValueCorrection(const G4int AParent, const G4int ZParent) const
Computes correction on the emission Q-value.
G4double getEnergy() const
G4int getZ() const
Returns the charge number.
G4double getKineticEnergy() const
Get the particle kinetic energy.
const G4INCL::ThreeVector & getMomentum() const
virtual G4double getTableMass() const
Get the tabulated particle mass.
std::string print() const
long getID() const
G4int getA() const
Returns the baryon number.
G4bool isNucleon() const

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