#include <G4INCLParticleEntryChannel.hh>
Inheritance diagram for G4INCL::ParticleEntryChannel:
Public Member Functions | |
ParticleEntryChannel (Nucleus *n, Particle *p) | |
virtual | ~ParticleEntryChannel () |
FinalState * | getFinalState () |
Definition at line 47 of file G4INCLParticleEntryChannel.hh.
Definition at line 44 of file G4INCLParticleEntryChannel.cc.
00045 :theNucleus(n), theParticle(p) 00046 {}
G4INCL::ParticleEntryChannel::~ParticleEntryChannel | ( | ) | [virtual] |
FinalState * G4INCL::ParticleEntryChannel::getFinalState | ( | ) | [virtual] |
Implements G4INCL::IChannel.
Definition at line 51 of file G4INCLParticleEntryChannel.cc.
References G4INCL::FinalState::addEnteringParticle(), G4INCL::ProjectileRemnant::computeExcitationEnergy(), DEBUG, G4INCL::Particle::getA(), G4INCL::Particle::getEmissionQValueCorrection(), G4INCL::Particle::getEnergy(), G4INCL::NuclearPotential::INuclearPotential::getFermiEnergy(), G4INCL::Particle::getID(), G4INCL::Particle::getINCLMass(), G4INCL::Particle::getKineticEnergy(), G4INCL::Particle::getMomentum(), G4INCL::Nucleus::getPotential(), G4INCL::Nucleus::getProjectileRemnant(), G4INCL::Particle::getTableMass(), G4INCL::ParticleTable::getTableMass, G4INCL::Particle::getZ(), G4INCL::Particle::isNucleon(), G4INCL::Nucleus::isNucleusNucleusCollision(), G4INCL::FinalState::makeParticleBelowFermi(), G4INCL::FinalState::makeParticleBelowZero(), G4INCL::Particle::print(), G4INCL::ProjectileRemnant::removeParticle(), and G4INCL::FinalState::setTotalEnergyBeforeInteraction().
00051 { 00052 // Behaves slightly differency if a third body (the projectile) is present 00053 G4bool isNN = theNucleus->isNucleusNucleusCollision(); 00054 00055 /* Corrections to the energy of the entering nucleon 00056 * 00057 * In particle-nucleus reactions, the goal of this correction is to satisfy 00058 * energy conservation in particle-nucleus reactions using real particle 00059 * and nuclear masses. 00060 * 00061 * In nucleus-nucleus reactions, in addition to the above, the correction 00062 * is determined by a model for the excitation energy of the 00063 * quasi-projectile (QP). The energy of the entering nucleon is such that 00064 * the QP excitation energy, as determined by conservation, is what given 00065 * by our model. 00066 * 00067 * Possible choices for the correction (or, equivalently, for the QP excitation energy): 00068 * 1. the correction is 0. (same as in particle-nucleus); 00069 * 2. the correction is the separation energy of the entering nucleon in 00070 * the current QP; 00071 * 3. the QP excitation energy is given by A. Boudard's algorithm, as 00072 * implemented in INCL4.2-HI/Geant4. 00073 * 00074 * Ideally, the QP excitation energy should always be >=0. Algorithms 1. 00075 * and 2. do not guarantee this, although violations to the rule seem to be 00076 * more severe for 1. than for 2.. Algorithm 3., by construction, yields 00077 * non-negative QP excitation energies. 00078 */ 00079 G4double theCorrection; 00080 if(isNN) { 00081 // assert(theParticle->isNucleon()); 00082 ProjectileRemnant * const projectileRemnant = theNucleus->getProjectileRemnant(); 00083 // assert(projectileRemnant); 00084 00085 // No correction (model 1. above) 00086 /* 00087 theCorrection = theParticle->getEmissionQValueCorrection( 00088 theNucleus->getA() + theParticle->getA(), 00089 theNucleus->getZ() + theParticle->getZ()) 00090 + theParticle->getTableMass() - theParticle->getINCLMass(); 00091 const G4double theProjectileCorrection = 0.; 00092 */ 00093 00094 // Correct the energy of the entering particle for the Q-value of the 00095 // emission from the projectile (model 2. above) 00096 /* 00097 theCorrection = theParticle->getTransferQValueCorrection( 00098 projectileRemnant->getA(), projectileRemnant->getZ(), 00099 theNucleus->getA(), theNucleus->getZ()); 00100 G4double theProjectileCorrection; 00101 if(projectileRemnant->getA()>theParticle->getA()) { // if there are any particles left 00102 // Compute the projectile Q-value (to be used as a correction to the 00103 // other components of the projectile remnant) 00104 theProjectileCorrection = ParticleTable::getTableQValue( 00105 projectileRemnant->getA() - theParticle->getA(), 00106 projectileRemnant->getZ() - theParticle->getZ(), 00107 theParticle->getA(), 00108 theParticle->getZ()); 00109 } else 00110 theProjectileCorrection = 0.; 00111 */ 00112 00113 // Fix the correction in such a way that the quasi-projectile excitation 00114 // energy is given by A. Boudard's INCL4.2-HI model. 00115 const G4double theProjectileExcitationEnergy = 00116 (projectileRemnant->getA()-theParticle->getA()>1) ? 00117 (projectileRemnant->computeExcitationEnergy(theParticle->getID())) : 00118 0.; 00119 const G4double theProjectileEffectiveMass = 00120 ParticleTable::getTableMass(projectileRemnant->getA() - theParticle->getA(), projectileRemnant->getZ() - theParticle->getZ()) 00121 + theProjectileExcitationEnergy; 00122 const ThreeVector &theProjectileMomentum = projectileRemnant->getMomentum() - theParticle->getMomentum(); 00123 const G4double theProjectileEnergy = std::sqrt(theProjectileMomentum.mag2() + theProjectileEffectiveMass*theProjectileEffectiveMass); 00124 const G4double theProjectileCorrection = theProjectileEnergy - (projectileRemnant->getEnergy() - theParticle->getEnergy()); 00125 theCorrection = theParticle->getEmissionQValueCorrection( 00126 theNucleus->getA() + theParticle->getA(), 00127 theNucleus->getZ() + theParticle->getZ()) 00128 + theParticle->getTableMass() - theParticle->getINCLMass() 00129 + theProjectileCorrection; 00130 00131 projectileRemnant->removeParticle(theParticle, theProjectileCorrection); 00132 } else { 00133 const G4int ACN = theNucleus->getA() + theParticle->getA(); 00134 const G4int ZCN = theNucleus->getZ() + theParticle->getZ(); 00135 // Correction to the Q-value of the entering particle 00136 theCorrection = theParticle->getEmissionQValueCorrection(ACN,ZCN); 00137 DEBUG("The following Particle enters with correction " << theCorrection 00138 << theParticle->print() << std::endl); 00139 } 00140 00141 const G4double energyBefore = theParticle->getEnergy() - theCorrection; 00142 G4bool success = particleEnters(theCorrection); 00143 FinalState *fs = new FinalState(); 00144 fs->addEnteringParticle(theParticle); 00145 00146 if(!success) { 00147 fs->makeParticleBelowZero(); 00148 } else if(theParticle->isNucleon() && 00149 theParticle->getKineticEnergy()<theNucleus->getPotential()->getFermiEnergy(theParticle)) { 00150 // If the participant is a nucleon entering below its Fermi energy, force a 00151 // compound nucleus 00152 fs->makeParticleBelowFermi(); 00153 } 00154 00155 fs->setTotalEnergyBeforeInteraction(energyBefore); 00156 return fs; 00157 }