#include <G4LETritonInelastic.hh>
Inheritance diagram for G4LETritonInelastic:
Public Member Functions | |
G4LETritonInelastic () | |
~G4LETritonInelastic () | |
G4HadFinalState * | ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) |
virtual void | ModelDescription (std::ostream &outFile) const |
Definition at line 45 of file G4LETritonInelastic.hh.
G4LETritonInelastic::G4LETritonInelastic | ( | ) | [inline] |
Definition at line 49 of file G4LETritonInelastic.hh.
References G4cout, G4endl, G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().
00049 : G4InelasticInteraction("G4LETritonInelastic") 00050 { 00051 SetMinEnergy( 0.0 ); 00052 // SetMaxEnergy( 100.*CLHEP::MeV ); // NUCREC only worked for energies < 100MeV 00053 // Work around to avoid exception in G4EnergyRangeManager 00054 SetMaxEnergy(10.*CLHEP::TeV); // NUCREC only worked for energies < 100MeV 00055 G4cout << "WARNING: model G4LETritonInelastic is being deprecated and will\n" 00056 << "disappear in Geant4 version 10.0" << G4endl; 00057 }
G4LETritonInelastic::~G4LETritonInelastic | ( | ) | [inline] |
G4HadFinalState * G4LETritonInelastic::ApplyYourself | ( | const G4HadProjectile & | aTrack, | |
G4Nucleus & | targetNucleus | |||
) | [virtual] |
Implements G4HadronicInteraction.
Definition at line 51 of file G4LETritonInelastic.cc.
References G4HadFinalState::AddSecondary(), G4Nucleus::AtomicMass(), G4HadFinalState::Clear(), G4InelasticInteraction::DoIsotopeCounting(), G4cout, G4endl, G4HadProjectile::Get4Momentum(), G4Nucleus::GetA_asInt(), G4HadProjectile::GetKineticEnergy(), G4HadProjectile::GetMaterial(), G4Material::GetName(), G4Nucleus::GetZ_asInt(), G4FastVector< Type, N >::Initialize(), isAlive, G4InelasticInteraction::isotopeProduction, G4ReactionDynamics::NuclearReaction(), G4DynamicParticle::SetDefinition(), G4HadFinalState::SetEnergyChange(), G4DynamicParticle::SetMomentum(), G4HadFinalState::SetMomentumChange(), G4HadFinalState::SetStatusChange(), G4HadronicInteraction::theParticleChange, G4InelasticInteraction::theReactionDynamics, and G4HadronicInteraction::verboseLevel.
00053 { 00054 G4bool triton_debug = false; 00055 if (getenv("TritonLEDebug")) triton_debug = true; 00056 theParticleChange.Clear(); 00057 const G4HadProjectile *originalIncident = &aTrack; 00058 if (triton_debug) G4cout << "entering LETritonInelastic " 00059 << originalIncident->GetKineticEnergy() << G4endl; 00060 if (originalIncident->GetKineticEnergy() <= 0.1*MeV) { 00061 theParticleChange.SetStatusChange(isAlive); 00062 theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy()); 00063 theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); 00064 return &theParticleChange; 00065 } 00066 00067 if (verboseLevel > 1) { 00068 const G4Material *targetMaterial = aTrack.GetMaterial(); 00069 G4cout << "G4LETritonInelastic::ApplyYourself called" << G4endl; 00070 G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, "; 00071 G4cout << "target material = " << targetMaterial->GetName() << ", "; 00072 } 00073 00074 if (triton_debug) G4cout << "running LETritonInelastic 1" << G4endl; 00075 00076 // Work-around for lack of model above 100 MeV 00077 if (originalIncident->GetKineticEnergy()/MeV > 100. || 00078 originalIncident->GetKineticEnergy() <= 0.) { 00079 theParticleChange.SetStatusChange(isAlive); 00080 theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy()); 00081 theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); 00082 return &theParticleChange; 00083 } 00084 00085 if (triton_debug) G4cout << "running LETritonInelastic 2" << G4endl; 00086 00087 G4double A = targetNucleus.GetA_asInt(); 00088 G4double Z = targetNucleus.GetZ_asInt(); 00089 G4double theAtomicMass = targetNucleus.AtomicMass(A, Z); 00090 G4double massVec[9]; 00091 massVec[0] = targetNucleus.AtomicMass( A+3.0, Z+1.0 ); 00092 massVec[1] = targetNucleus.AtomicMass( A+2.0, Z+1.0 ); 00093 massVec[2] = targetNucleus.AtomicMass( A+2.0, Z ); 00094 massVec[3] = targetNucleus.AtomicMass( A+1.0, Z ); 00095 massVec[4] = theAtomicMass; 00096 massVec[5] = massVec[3]; //0.; 00097 if (A > 1.0 && Z > 1.0) massVec[5] = targetNucleus.AtomicMass(A-1.0, Z-1.0); 00098 massVec[6] = targetNucleus.AtomicMass(A+1.0, Z+1.0); 00099 massVec[7] = massVec[3]; 00100 massVec[8] = massVec[2]; //0.; 00101 if (Z > 1.0) massVec[8] = targetNucleus.AtomicMass(A+1.0, Z-1.0); 00102 00103 G4FastVector<G4ReactionProduct,4> vec; // vec will contain the secondary particles 00104 G4int vecLen = 0; 00105 vec.Initialize(0); 00106 00107 if (triton_debug) G4cout << "running LETritonInelastic 3" << G4endl; 00108 theReactionDynamics.NuclearReaction(vec, vecLen, originalIncident, 00109 targetNucleus, theAtomicMass, massVec); 00110 if (triton_debug) G4cout << "running LETritonInelastic 4" << G4endl; 00111 00112 G4double p = vec[0]->GetMomentum().mag(); 00113 theParticleChange.SetMomentumChange( vec[0]->GetMomentum()*(1./p) ); 00114 theParticleChange.SetEnergyChange( vec[0]->GetKineticEnergy() ); 00115 delete vec[0]; 00116 00117 if (vecLen <= 1) { 00118 theParticleChange.SetStatusChange(isAlive); 00119 theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy()); 00120 theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); 00121 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00122 return &theParticleChange; 00123 } 00124 00125 G4DynamicParticle *pd; 00126 for (G4int i = 1; i < vecLen; ++i) { 00127 pd = new G4DynamicParticle(); 00128 pd->SetDefinition( vec[i]->GetDefinition() ); 00129 pd->SetMomentum( vec[i]->GetMomentum() ); 00130 theParticleChange.AddSecondary( pd ); 00131 delete vec[i]; 00132 } 00133 00134 if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 00135 00136 if (triton_debug) G4cout << "leaving LETritonInelastic" << G4endl; 00137 return &theParticleChange; 00138 }
void G4LETritonInelastic::ModelDescription | ( | std::ostream & | outFile | ) | const [virtual] |
Reimplemented from G4HadronicInteraction.
Definition at line 36 of file G4LETritonInelastic.cc.
00037 { 00038 outFile << "G4LETritonInelastic is one of the Low Energy Parameterized\n" 00039 << "(LEP) models used to implement inelastic triton scattering\n" 00040 << "from nuclei. It is a re-engineered version of the GHEISHA\n" 00041 << "code of H. Fesefeldt. It divides the initial collision\n" 00042 << "products into backward- and forward-going clusters which are\n" 00043 << "then decayed into final state hadrons. The model does not\n" 00044 << "conserve energy on an event-by-event basis. It may be\n" 00045 << "applied to tritons with initial energies between 0 and 25\n" 00046 << "GeV.\n"; 00047 }