#include <G4INCLPionNucleonChannel.hh>
Inheritance diagram for G4INCL::PionNucleonChannel:
Public Member Functions | |
PionNucleonChannel (Particle *, Particle *, Nucleus *, const G4bool localE=false) | |
virtual | ~PionNucleonChannel () |
FinalState * | getFinalState () |
Definition at line 46 of file G4INCLPionNucleonChannel.hh.
G4INCL::PionNucleonChannel::PionNucleonChannel | ( | Particle * | , | |
Particle * | , | |||
Nucleus * | , | |||
const G4bool | localE = false | |||
) |
G4INCL::PionNucleonChannel::~PionNucleonChannel | ( | ) | [virtual] |
FinalState * G4INCL::PionNucleonChannel::getFinalState | ( | ) | [virtual] |
Implements G4INCL::IChannel.
Definition at line 56 of file G4INCLPionNucleonChannel.cc.
References G4INCL::FinalState::addDestroyedParticle(), G4INCL::FinalState::addModifiedParticle(), G4INCL::NuclearPotential::INuclearPotential::computePotentialEnergy(), G4INCL::DeltaMinus, G4INCL::DeltaPlus, G4INCL::DeltaPlusPlus, G4INCL::DeltaZero, ERROR, G4INCL::Particle::getEnergy(), G4INCL::Particle::getMomentum(), G4INCL::Nucleus::getPotential(), G4INCL::Particle::getPotentialEnergy(), G4INCL::Particle::isNucleon(), G4INCL::ParticleConfig::isPair(), G4INCL::ThreeVector::mag2(), G4INCL::Neutron, G4INCL::PiMinus, G4INCL::PiPlus, G4INCL::PiZero, G4INCL::Proton, G4INCL::Particle::setEnergy(), G4INCL::Particle::setMass(), G4INCL::Particle::setMomentum(), G4INCL::Particle::setType(), and G4INCL::Nucleus::updatePotentialEnergy().
00056 { 00057 FinalState *fs = new FinalState; 00058 00059 Particle * nucleon; 00060 Particle * pion; 00061 if(particle1->isNucleon()) { 00062 nucleon = particle1; 00063 pion = particle2; 00064 } else { 00065 nucleon = particle2; 00066 pion = particle1; 00067 } 00068 00069 ParticleType deltaType = DeltaZero; 00070 if(ParticleConfig::isPair(particle1, particle2, Proton, PiPlus)) { 00071 deltaType = DeltaPlusPlus; 00072 } else if(ParticleConfig::isPair(particle1, particle2, Neutron, PiPlus)) { 00073 deltaType = DeltaPlus; 00074 } else if(ParticleConfig::isPair(particle1, particle2, Proton, PiZero)) { 00075 deltaType = DeltaPlus; 00076 } else if(ParticleConfig::isPair(particle1, particle2, Neutron, PiZero)) { 00077 deltaType = DeltaZero; 00078 } else if(ParticleConfig::isPair(particle1, particle2, Proton, PiMinus)) { 00079 deltaType = DeltaZero; 00080 } else if(ParticleConfig::isPair(particle1, particle2, Neutron, PiMinus)) { 00081 deltaType = DeltaMinus; 00082 } else { 00083 ERROR("Unknown particle pair in Pi-N collision." << std::endl); 00084 } 00085 00086 G4double deltaEnergy = nucleon->getEnergy() - nucleon->getPotentialEnergy() 00087 + pion->getEnergy() - pion->getPotentialEnergy(); 00088 00089 nucleon->setType(deltaType); // nucleon becomes the delta 00090 deltaEnergy += theNucleus->getPotential()->computePotentialEnergy(nucleon); 00091 nucleon->setEnergy(deltaEnergy); // set the energy of the delta 00092 00093 ThreeVector deltaMomentum = nucleon->getMomentum() + pion->getMomentum(); 00094 nucleon->setMomentum(deltaMomentum); 00095 00096 const G4double deltaMass = std::sqrt(deltaEnergy*deltaEnergy - deltaMomentum.mag2()); 00097 nucleon->setMass(deltaMass); 00098 theNucleus->updatePotentialEnergy(nucleon); 00099 00100 fs->addModifiedParticle(nucleon); // nucleon became a delta 00101 fs->addDestroyedParticle(pion); // pion was removed 00102 return fs; 00103 }