G4RPGNeutronInelastic Class Reference

#include <G4RPGNeutronInelastic.hh>

Inheritance diagram for G4RPGNeutronInelastic:

G4RPGNucleonInelastic G4RPGInelastic G4HadronicInteraction

Public Member Functions

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

Detailed Description

Definition at line 43 of file G4RPGNeutronInelastic.hh.


Constructor & Destructor Documentation

G4RPGNeutronInelastic::G4RPGNeutronInelastic (  )  [inline]

Definition at line 47 of file G4RPGNeutronInelastic.hh.

00047                            : G4RPGNucleonInelastic("RPGNeutronInelastic")
00048    {}

G4RPGNeutronInelastic::~G4RPGNeutronInelastic (  )  [inline]

Definition at line 50 of file G4RPGNeutronInelastic.hh.

00051    {}


Member Function Documentation

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

Implements G4HadronicInteraction.

Definition at line 35 of file G4RPGNeutronInelastic.cc.

References G4RPGInelastic::CalculateMomenta(), G4Nucleus::Cinema(), G4HadFinalState::Clear(), G4Nucleus::EvaporationEffects(), G4UniformRand, G4HadProjectile::GetDefinition(), G4ReactionProduct::GetKineticEnergy(), G4HadProjectile::GetKineticEnergy(), G4ReactionProduct::GetMomentum(), G4ParticleDefinition::GetPDGMass(), G4FastVector< Type, N >::Initialize(), G4InuclParticleNames::pp, G4Nucleus::ReturnTargetParticle(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4ReactionProduct::SetSide(), G4RPGInelastic::SetUpChange(), and G4HadronicInteraction::theParticleChange.

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


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