G4INCL::ParticleEntryChannel Class Reference

#include <G4INCLParticleEntryChannel.hh>

Inheritance diagram for G4INCL::ParticleEntryChannel:

G4INCL::IChannel

Public Member Functions

 ParticleEntryChannel (Nucleus *n, Particle *p)
virtual ~ParticleEntryChannel ()
FinalStategetFinalState ()

Detailed Description

Definition at line 47 of file G4INCLParticleEntryChannel.hh.


Constructor & Destructor Documentation

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

Definition at line 44 of file G4INCLParticleEntryChannel.cc.

00045     :theNucleus(n), theParticle(p)
00046   {}

G4INCL::ParticleEntryChannel::~ParticleEntryChannel (  )  [virtual]

Definition at line 48 of file G4INCLParticleEntryChannel.cc.

00049   {}


Member Function Documentation

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   }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:54:07 2013 for Geant4 by  doxygen 1.4.7