G4RPGXiZeroInelastic Class Reference

#include <G4RPGXiZeroInelastic.hh>

Inheritance diagram for G4RPGXiZeroInelastic:

G4RPGInelastic G4HadronicInteraction

Public Member Functions

 G4RPGXiZeroInelastic ()
 ~G4RPGXiZeroInelastic ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)

Detailed Description

Definition at line 44 of file G4RPGXiZeroInelastic.hh.


Constructor & Destructor Documentation

G4RPGXiZeroInelastic::G4RPGXiZeroInelastic (  )  [inline]

Definition at line 48 of file G4RPGXiZeroInelastic.hh.

References G4HadronicInteraction::SetMaxEnergy(), and G4HadronicInteraction::SetMinEnergy().

00048                            : G4RPGInelastic("G4RPGXiZeroInelastic")
00049     {
00050       SetMinEnergy( 0.0 );
00051       SetMaxEnergy( 25.*CLHEP::GeV );
00052     }

G4RPGXiZeroInelastic::~G4RPGXiZeroInelastic (  )  [inline]

Definition at line 54 of file G4RPGXiZeroInelastic.hh.

00055     { }


Member Function Documentation

G4HadFinalState * G4RPGXiZeroInelastic::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
) [virtual]

Implements G4HadronicInteraction.

Definition at line 35 of file G4RPGXiZeroInelastic.cc.

References G4RPGInelastic::CalculateMomenta(), G4Nucleus::Cinema(), G4Nucleus::EvaporationEffects(), G4cout, G4endl, G4HadProjectile::Get4Momentum(), G4HadProjectile::GetDefinition(), G4DynamicParticle::GetDefinition(), G4ReactionProduct::GetKineticEnergy(), G4HadProjectile::GetKineticEnergy(), G4HadProjectile::GetMaterial(), G4ReactionProduct::GetMomentum(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4FastVector< Type, N >::Initialize(), isAlive, G4InuclParticleNames::pp, G4Nucleus::ReturnTargetParticle(), G4HadFinalState::SetEnergyChange(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4HadFinalState::SetMomentumChange(), G4ReactionProduct::SetSide(), G4HadFinalState::SetStatusChange(), G4RPGInelastic::SetUpChange(), G4HadronicInteraction::theParticleChange, and G4HadronicInteraction::verboseLevel.

00037 {    
00038   const G4HadProjectile *originalIncident = &aTrack;
00039   if (originalIncident->GetKineticEnergy() <= 0.1*MeV) {
00040     theParticleChange.SetStatusChange(isAlive);
00041     theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy());
00042     theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); 
00043     return &theParticleChange;      
00044   }
00045 
00046   // create the target particle
00047   G4DynamicParticle* originalTarget = targetNucleus.ReturnTargetParticle();
00048     
00049   if (verboseLevel > 1) {
00050     const G4Material *targetMaterial = aTrack.GetMaterial();
00051     G4cout << "G4RPGXiZeroInelastic::ApplyYourself called" << G4endl;
00052     G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, ";
00053     G4cout << "target material = " << targetMaterial->GetName() << ", ";
00054     G4cout << "target particle = " << originalTarget->GetDefinition()->GetParticleName()
00055            << G4endl;
00056   }
00057 
00058   // Fermi motion and evaporation
00059   // As of Geant3, the Fermi energy calculation had not been Done
00060   G4double ek = originalIncident->GetKineticEnergy()/MeV;
00061   G4double amas = originalIncident->GetDefinition()->GetPDGMass()/MeV;
00062   G4ReactionProduct modifiedOriginal;
00063   modifiedOriginal = *originalIncident;
00064     
00065     G4double tkin = targetNucleus.Cinema( ek );
00066     ek += tkin;
00067     modifiedOriginal.SetKineticEnergy( ek*MeV );
00068     G4double et = ek + amas;
00069     G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) );
00070     G4double pp = modifiedOriginal.GetMomentum().mag()/MeV;
00071     if( pp > 0.0 )
00072     {
00073       G4ThreeVector momentum = modifiedOriginal.GetMomentum();
00074       modifiedOriginal.SetMomentum( momentum * (p/pp) );
00075     }
00076     //
00077     // calculate black track energies
00078     //
00079     tkin = targetNucleus.EvaporationEffects( ek );
00080     ek -= tkin;
00081     modifiedOriginal.SetKineticEnergy( ek*MeV );
00082     et = ek + amas;
00083     p = std::sqrt( std::abs((et-amas)*(et+amas)) );
00084     pp = modifiedOriginal.GetMomentum().mag()/MeV;
00085     if( pp > 0.0 )
00086     {
00087       G4ThreeVector momentum = modifiedOriginal.GetMomentum();
00088       modifiedOriginal.SetMomentum( momentum * (p/pp) );
00089     }
00090   G4ReactionProduct currentParticle = modifiedOriginal;
00091   G4ReactionProduct targetParticle;
00092   targetParticle = *originalTarget;
00093   currentParticle.SetSide( 1 ); // incident always goes in forward hemisphere
00094   targetParticle.SetSide( -1 );  // target always goes in backward hemisphere
00095   G4bool incidentHasChanged = false;
00096   G4bool targetHasChanged = false;
00097   G4bool quasiElastic = false;
00098   G4FastVector<G4ReactionProduct,GHADLISTSIZE> vec;  // vec will contain the secondary particles
00099   G4int vecLen = 0;
00100   vec.Initialize( 0 );
00101     
00102   const G4double cutOff = 0.1;
00103   if (currentParticle.GetKineticEnergy()/MeV > cutOff)
00104     Cascade(vec, vecLen, originalIncident, currentParticle, targetParticle,
00105             incidentHasChanged, targetHasChanged, quasiElastic);
00106     
00107   CalculateMomenta(vec, vecLen, originalIncident, originalTarget,
00108                    modifiedOriginal, targetNucleus, currentParticle,
00109                    targetParticle, incidentHasChanged, targetHasChanged,
00110                    quasiElastic);
00111     
00112   SetUpChange(vec, vecLen, currentParticle, targetParticle, incidentHasChanged);
00113     
00114   delete originalTarget;
00115   return &theParticleChange;
00116 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:19 2013 for Geant4 by  doxygen 1.4.7