#include <G4LENeutronInelastic.hh>
Inheritance diagram for G4LENeutronInelastic:
Public Member Functions | |
G4LENeutronInelastic () | |
~G4LENeutronInelastic () | |
G4HadFinalState * | ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) |
virtual void | ModelDescription (std::ostream &outFile) const |
Definition at line 44 of file G4LENeutronInelastic.hh.
G4LENeutronInelastic::G4LENeutronInelastic | ( | ) | [inline] |
Definition at line 48 of file G4LENeutronInelastic.hh.
References G4cout, G4endl, G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().
00048 : G4InelasticInteraction("G4LENeutronInelastic") 00049 { 00050 SetMinEnergy(0.0); 00051 SetMaxEnergy(55.*CLHEP::GeV); 00052 G4cout << "WARNING: model G4LENeutronInelastic is being deprecated and will\n" 00053 << "disappear in Geant4 version 10.0" << G4endl; 00054 }
G4LENeutronInelastic::~G4LENeutronInelastic | ( | ) | [inline] |
G4HadFinalState * G4LENeutronInelastic::ApplyYourself | ( | const G4HadProjectile & | aTrack, | |
G4Nucleus & | targetNucleus | |||
) | [virtual] |
Implements G4HadronicInteraction.
Definition at line 52 of file G4LENeutronInelastic.cc.
References G4InelasticInteraction::CalculateMomenta(), G4Nucleus::Cinema(), G4HadFinalState::Clear(), G4InelasticInteraction::DoIsotopeCounting(), G4Nucleus::EvaporationEffects(), G4cout, G4endl, G4UniformRand, G4HadProjectile::GetDefinition(), G4DynamicParticle::GetDefinition(), G4ReactionProduct::GetKineticEnergy(), G4HadProjectile::GetKineticEnergy(), G4HadProjectile::GetMaterial(), G4ReactionProduct::GetMomentum(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4FastVector< Type, N >::Initialize(), G4InelasticInteraction::isotopeProduction, G4InuclParticleNames::pp, G4Nucleus::ReturnTargetParticle(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4ReactionProduct::SetSide(), G4InelasticInteraction::SetUpChange(), G4HadronicInteraction::theParticleChange, and G4HadronicInteraction::verboseLevel.
Referenced by G4NeutronHPorLEInelasticModel::ApplyYourself().
00054 { 00055 theParticleChange.Clear(); 00056 const G4HadProjectile *originalIncident = &aTrack; 00057 00058 // Create the target particle 00059 G4DynamicParticle* originalTarget = targetNucleus.ReturnTargetParticle(); 00060 00061 if (verboseLevel > 1) { 00062 const G4Material* targetMaterial = aTrack.GetMaterial(); 00063 G4cout << "G4LENeutronInelastic::ApplyYourself called" << G4endl; 00064 G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, "; 00065 G4cout << "target material = " << targetMaterial->GetName() << ", "; 00066 G4cout << "target particle = " << originalTarget->GetDefinition()->GetParticleName() 00067 << G4endl; 00068 } 00069 00070 G4ReactionProduct modifiedOriginal; 00071 modifiedOriginal = *originalIncident; 00072 G4ReactionProduct targetParticle; 00073 targetParticle = *originalTarget; 00074 if (originalIncident->GetKineticEnergy()/GeV < 0.01 + 2.*G4UniformRand()/9.) { 00075 SlowNeutron(originalIncident, modifiedOriginal, targetParticle, targetNucleus); 00076 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00077 delete originalTarget; 00078 return &theParticleChange; 00079 } 00080 00081 // Fermi motion and evaporation 00082 // As of Geant3, the Fermi energy calculation had not been done 00083 G4double ek = originalIncident->GetKineticEnergy()/MeV; 00084 G4double amas = originalIncident->GetDefinition()->GetPDGMass()/MeV; 00085 00086 G4double tkin = targetNucleus.Cinema(ek); 00087 ek += tkin; 00088 modifiedOriginal.SetKineticEnergy( ek*MeV ); 00089 G4double et = ek + amas; 00090 G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00091 G4double pp = modifiedOriginal.GetMomentum().mag()/MeV; 00092 if (pp > 0.0) { 00093 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00094 modifiedOriginal.SetMomentum(momentum * (p/pp) ); 00095 } 00096 00097 // calculate black track energies 00098 tkin = targetNucleus.EvaporationEffects( ek ); 00099 ek -= tkin; 00100 modifiedOriginal.SetKineticEnergy( ek*MeV ); 00101 et = ek + amas; 00102 p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00103 pp = modifiedOriginal.GetMomentum().mag()/MeV; 00104 if (pp > 0.0) { 00105 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00106 modifiedOriginal.SetMomentum(momentum * (p/pp) ); 00107 } 00108 const G4double cutOff = 0.1; 00109 if (modifiedOriginal.GetKineticEnergy()/MeV <= cutOff) { 00110 SlowNeutron(originalIncident, modifiedOriginal, targetParticle, targetNucleus); 00111 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00112 delete originalTarget; 00113 return &theParticleChange; 00114 } 00115 00116 G4ReactionProduct currentParticle = modifiedOriginal; 00117 currentParticle.SetSide(1); // incident always goes in forward hemisphere 00118 targetParticle.SetSide(-1); // target always goes in backward hemisphere 00119 G4bool incidentHasChanged = false; 00120 G4bool targetHasChanged = false; 00121 G4bool quasiElastic = false; 00122 G4FastVector<G4ReactionProduct,GHADLISTSIZE> vec; // vec will contain the secondary particles 00123 G4int vecLen = 0; 00124 vec.Initialize(0); 00125 00126 Cascade(vec, vecLen, originalIncident, currentParticle, targetParticle, 00127 incidentHasChanged, targetHasChanged, quasiElastic); 00128 00129 CalculateMomenta(vec, vecLen, originalIncident, originalTarget, 00130 modifiedOriginal, targetNucleus, currentParticle, 00131 targetParticle, incidentHasChanged, targetHasChanged, 00132 quasiElastic); 00133 00134 SetUpChange(vec, vecLen, currentParticle, targetParticle, incidentHasChanged); 00135 00136 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00137 delete originalTarget; 00138 return &theParticleChange; 00139 }
void G4LENeutronInelastic::ModelDescription | ( | std::ostream & | outFile | ) | const [virtual] |
Reimplemented from G4HadronicInteraction.
Definition at line 37 of file G4LENeutronInelastic.cc.
00038 { 00039 outFile << "G4LENeutronInelastic is one of the Low Energy Parameterized\n" 00040 << "(LEP) models used to implement inelastic neutron scattering\n" 00041 << "from nuclei. It is a re-engineered version of the GHEISHA\n" 00042 << "code of H. Fesefeldt. It divides the initial collision\n" 00043 << "products into backward- and forward-going clusters which are\n" 00044 << "then decayed into final state hadrons. The model does not\n" 00045 << "conserve energy on an event-by-event basis. It may be\n" 00046 << "applied to neutrons with initial energies between 0 and 25\n" 00047 << "GeV.\n"; 00048 }