Geant4 11.1.1
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 ()
 
void fillFinalState (FinalState *fs)
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
FinalStategetFinalState ()
 
virtual void fillFinalState (FinalState *fs)=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 45 of file G4INCLParticleEntryChannel.cc.

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

◆ ~ParticleEntryChannel()

G4INCL::ParticleEntryChannel::~ParticleEntryChannel ( )
virtual

Definition at line 49 of file G4INCLParticleEntryChannel.cc.

50 {}

Member Function Documentation

◆ fillFinalState()

void G4INCL::ParticleEntryChannel::fillFinalState ( FinalState fs)
virtual

Implements G4INCL::IChannel.

Definition at line 52 of file G4INCLParticleEntryChannel.cc.

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

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