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