#include <G4RPGAntiKZeroInelastic.hh>
Inheritance diagram for G4RPGAntiKZeroInelastic:
Public Member Functions | |
G4RPGAntiKZeroInelastic () | |
~G4RPGAntiKZeroInelastic () | |
G4HadFinalState * | ApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) |
Definition at line 45 of file G4RPGAntiKZeroInelastic.hh.
G4RPGAntiKZeroInelastic::G4RPGAntiKZeroInelastic | ( | ) | [inline] |
Definition at line 49 of file G4RPGAntiKZeroInelastic.hh.
References G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().
00049 : G4RPGInelastic("G4RPGAntiKZeroInelastic") 00050 { 00051 SetMinEnergy( 0.0 ); 00052 SetMaxEnergy( 25.*CLHEP::GeV ); 00053 }
G4RPGAntiKZeroInelastic::~G4RPGAntiKZeroInelastic | ( | ) | [inline] |
G4HadFinalState * G4RPGAntiKZeroInelastic::ApplyYourself | ( | const G4HadProjectile & | aTrack, | |
G4Nucleus & | targetNucleus | |||
) | [virtual] |
Implements G4HadronicInteraction.
Definition at line 36 of file G4RPGAntiKZeroInelastic.cc.
References G4RPGInelastic::CalculateMomenta(), G4Nucleus::Cinema(), G4Nucleus::EvaporationEffects(), G4cout, G4endl, G4HadProjectile::GetDefinition(), G4DynamicParticle::GetDefinition(), G4ReactionProduct::GetKineticEnergy(), G4HadProjectile::GetKineticEnergy(), G4HadProjectile::GetMaterial(), G4ReactionProduct::GetMomentum(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4FastVector< Type, N >::Initialize(), G4InuclParticleNames::pp, G4HadReentrentException::Report(), G4Nucleus::ReturnTargetParticle(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4ReactionProduct::SetSide(), G4RPGInelastic::SetUpChange(), G4HadronicInteraction::theParticleChange, and G4HadronicInteraction::verboseLevel.
Referenced by G4RPGKShortInelastic::ApplyYourself(), and G4RPGKLongInelastic::ApplyYourself().
00038 { 00039 const G4HadProjectile *originalIncident = &aTrack; 00040 // 00041 // create the target particle 00042 // 00043 G4DynamicParticle *originalTarget = targetNucleus.ReturnTargetParticle(); 00044 00045 if( verboseLevel > 1 ) 00046 { 00047 const G4Material *targetMaterial = aTrack.GetMaterial(); 00048 G4cout << "G4RPGAntiKZeroInelastic::ApplyYourself called" << G4endl; 00049 G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, "; 00050 G4cout << "target material = " << targetMaterial->GetName() << ", "; 00051 G4cout << "target particle = " << originalTarget->GetDefinition()->GetParticleName() 00052 << G4endl; 00053 } 00054 // 00055 // Fermi motion and evaporation 00056 // As of Geant3, the Fermi energy calculation had not been Done 00057 // 00058 G4double ek = originalIncident->GetKineticEnergy()/MeV; 00059 G4double amas = originalIncident->GetDefinition()->GetPDGMass()/MeV; 00060 G4ReactionProduct modifiedOriginal; 00061 modifiedOriginal = *originalIncident; 00062 00063 G4double tkin = targetNucleus.Cinema( ek ); 00064 ek += tkin; 00065 modifiedOriginal.SetKineticEnergy( ek*MeV ); 00066 G4double et = ek + amas; 00067 G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00068 G4double pp = modifiedOriginal.GetMomentum().mag()/MeV; 00069 if( pp > 0.0 ) 00070 { 00071 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00072 modifiedOriginal.SetMomentum( momentum * (p/pp) ); 00073 } 00074 // 00075 // calculate black track energies 00076 // 00077 tkin = targetNucleus.EvaporationEffects( ek ); 00078 ek -= tkin; 00079 modifiedOriginal.SetKineticEnergy( ek*MeV ); 00080 et = ek + amas; 00081 p = std::sqrt( std::abs((et-amas)*(et+amas)) ); 00082 pp = modifiedOriginal.GetMomentum().mag()/MeV; 00083 if( pp > 0.0 ) 00084 { 00085 G4ThreeVector momentum = modifiedOriginal.GetMomentum(); 00086 modifiedOriginal.SetMomentum( momentum * (p/pp) ); 00087 } 00088 G4ReactionProduct currentParticle = modifiedOriginal; 00089 G4ReactionProduct targetParticle; 00090 targetParticle = *originalTarget; 00091 currentParticle.SetSide( 1 ); // incident always goes in forward hemisphere 00092 targetParticle.SetSide( -1 ); // target always goes in backward hemisphere 00093 G4bool incidentHasChanged = false; 00094 G4bool targetHasChanged = false; 00095 G4bool quasiElastic = false; 00096 G4FastVector<G4ReactionProduct,GHADLISTSIZE> vec; // vec will contain the secondary particles 00097 G4int vecLen = 0; 00098 vec.Initialize( 0 ); 00099 00100 const G4double cutOff = 0.1; 00101 if( currentParticle.GetKineticEnergy()/MeV > cutOff ) 00102 Cascade( vec, vecLen, 00103 originalIncident, currentParticle, targetParticle, 00104 incidentHasChanged, targetHasChanged, quasiElastic ); 00105 00106 try 00107 { 00108 CalculateMomenta( vec, vecLen, 00109 originalIncident, originalTarget, modifiedOriginal, 00110 targetNucleus, currentParticle, targetParticle, 00111 incidentHasChanged, targetHasChanged, quasiElastic ); 00112 } 00113 catch(G4HadReentrentException aR) 00114 { 00115 aR.Report(G4cout); 00116 throw G4HadReentrentException(__FILE__, __LINE__, "Bailing out"); 00117 } 00118 SetUpChange( vec, vecLen, 00119 currentParticle, targetParticle, 00120 incidentHasChanged ); 00121 00122 delete originalTarget; 00123 return &theParticleChange; 00124 }