#include <G4LEAntiNeutronInelastic.hh>
Inheritance diagram for G4LEAntiNeutronInelastic:
Public Member Functions | |
G4LEAntiNeutronInelastic (const G4String &name="G4LEAntiNeutronInelastic") | |
~G4LEAntiNeutronInelastic () | |
G4HadFinalState * | ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) |
virtual void | ModelDescription (std::ostream &outFile) const |
Definition at line 46 of file G4LEAntiNeutronInelastic.hh.
G4LEAntiNeutronInelastic::G4LEAntiNeutronInelastic | ( | const G4String & | name = "G4LEAntiNeutronInelastic" |
) |
Definition at line 42 of file G4LEAntiNeutronInelastic.cc.
References G4cout, G4endl, G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().
00043 :G4InelasticInteraction(name) 00044 { 00045 SetMinEnergy(0.0); 00046 SetMaxEnergy(25.*GeV); 00047 G4cout << "WARNING: model G4LEAntiNeutronInelastic is being deprecated and will\n" 00048 << "disappear in Geant4 version 10.0" << G4endl; 00049 }
G4LEAntiNeutronInelastic::~G4LEAntiNeutronInelastic | ( | ) | [inline] |
G4HadFinalState * G4LEAntiNeutronInelastic::ApplyYourself | ( | const G4HadProjectile & | aTrack, | |
G4Nucleus & | targetNucleus | |||
) | [virtual] |
Implements G4HadronicInteraction.
Definition at line 67 of file G4LEAntiNeutronInelastic.cc.
References G4InelasticInteraction::CalculateMomenta(), G4Nucleus::Cinema(), 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(), G4ReactionProduct::GetTotalMomentum(), G4FastVector< Type, N >::Initialize(), G4InelasticInteraction::isotopeProduction, G4InuclParticleNames::pp, G4Nucleus::ReturnTargetParticle(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4ReactionProduct::SetSide(), G4InelasticInteraction::SetUpChange(), G4HadronicInteraction::theParticleChange, and G4HadronicInteraction::verboseLevel.
00069 { 00070 const G4HadProjectile* originalIncident = &aTrack; 00071 00072 // create the target particle 00073 G4DynamicParticle* originalTarget = targetNucleus.ReturnTargetParticle(); 00074 00075 if (verboseLevel > 1) { 00076 const G4Material *targetMaterial = aTrack.GetMaterial(); 00077 G4cout << "G4LEAntiNeutronInelastic::ApplyYourself called" << G4endl; 00078 G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, "; 00079 G4cout << "target material = " << targetMaterial->GetName() << ", "; 00080 G4cout << "target particle = " << originalTarget->GetDefinition()->GetParticleName() 00081 << G4endl; 00082 } 00083 00084 // Fermi motion and evaporation 00085 // As of Geant3, the Fermi energy calculation had not been Done 00086 G4double ek = originalIncident->GetKineticEnergy()/MeV; 00087 G4double amas = originalIncident->GetDefinition()->GetPDGMass()/MeV; 00088 G4ReactionProduct modifiedOriginal; 00089 modifiedOriginal = *originalIncident; 00090 00091 G4double tkin = targetNucleus.Cinema(ek); 00092 ek += tkin; 00093 modifiedOriginal.SetKineticEnergy(ek*MeV); 00094 G4double et = ek + amas; 00095 G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00096 G4double pp = modifiedOriginal.GetMomentum().mag()/MeV; 00097 if (pp > 0.0) { 00098 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00099 modifiedOriginal.SetMomentum( momentum * (p/pp) ); 00100 } 00101 00102 // calculate black track energies 00103 tkin = targetNucleus.EvaporationEffects(ek); 00104 ek -= tkin; 00105 modifiedOriginal.SetKineticEnergy(ek*MeV); 00106 et = ek + amas; 00107 p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00108 pp = modifiedOriginal.GetMomentum().mag()/MeV; 00109 if (pp > 0.0) { 00110 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00111 modifiedOriginal.SetMomentum( momentum * (p/pp) ); 00112 } 00113 00114 G4ReactionProduct currentParticle = modifiedOriginal; 00115 G4ReactionProduct targetParticle; 00116 targetParticle = *originalTarget; 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 const G4double cutOff = 0.1*MeV; 00127 const G4double anni = std::min(1.3*currentParticle.GetTotalMomentum()/GeV, 0.4); 00128 00129 if ((currentParticle.GetKineticEnergy()/MeV > cutOff) || 00130 (G4UniformRand() > anni) ) 00131 Cascade(vec, vecLen, originalIncident, currentParticle, targetParticle, 00132 incidentHasChanged, targetHasChanged, quasiElastic); 00133 else 00134 quasiElastic = true; 00135 00136 CalculateMomenta(vec, vecLen, originalIncident, originalTarget, 00137 modifiedOriginal, targetNucleus, currentParticle, 00138 targetParticle, incidentHasChanged, targetHasChanged, 00139 quasiElastic); 00140 00141 SetUpChange(vec, vecLen, currentParticle, targetParticle, incidentHasChanged); 00142 00143 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00144 00145 delete originalTarget; 00146 return &theParticleChange; 00147 }
void G4LEAntiNeutronInelastic::ModelDescription | ( | std::ostream & | outFile | ) | const [virtual] |
Reimplemented from G4HadronicInteraction.
Definition at line 52 of file G4LEAntiNeutronInelastic.cc.
00053 { 00054 outFile << "G4LEAntiNeutronInelastic is one of the Low Energy\n" 00055 << "Parameterized (LEP) models used to implement inelastic\n" 00056 << "anti-neutron scattering from nuclei. It is a re-engineered\n" 00057 << "version of the GHEISHA code of H. Fesefeldt. It divides the\n" 00058 << "initial collision products into backward- and forward-going\n" 00059 << "clusters which are then decayed into final state hadrons.\n" 00060 << "The model does not conserve energy on an event-by-event\n" 00061 << "basis. It may be applied to anti-neutrons with initial\n" 00062 << "energies between 0 and 25 GeV.\n"; 00063 }