G4LENeutronInelastic Class Reference

#include <G4LENeutronInelastic.hh>

Inheritance diagram for G4LENeutronInelastic:

G4InelasticInteraction G4HadronicInteraction

Public Member Functions

 G4LENeutronInelastic ()
 ~G4LENeutronInelastic ()
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
virtual void ModelDescription (std::ostream &outFile) const

Detailed Description

Definition at line 44 of file G4LENeutronInelastic.hh.


Constructor & Destructor Documentation

G4LENeutronInelastic::G4LENeutronInelastic (  )  [inline]

Definition at line 48 of file G4LENeutronInelastic.hh.

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

00048                            : G4InelasticInteraction("G4LENeutronInelastic")
00049     {
00050       SetMinEnergy(0.0);
00051       SetMaxEnergy(55.*CLHEP::GeV);
00052       G4cout << "WARNING: model G4LENeutronInelastic is being deprecated and will\n"
00053              << "disappear in Geant4 version 10.0"  << G4endl;
00054     }

G4LENeutronInelastic::~G4LENeutronInelastic (  )  [inline]

Definition at line 56 of file G4LENeutronInelastic.hh.

00056 {}


Member Function Documentation

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

Implements G4HadronicInteraction.

Definition at line 52 of file G4LENeutronInelastic.cc.

References G4InelasticInteraction::CalculateMomenta(), G4Nucleus::Cinema(), G4HadFinalState::Clear(), G4InelasticInteraction::DoIsotopeCounting(), G4Nucleus::EvaporationEffects(), G4cout, G4endl, G4UniformRand, G4HadProjectile::GetDefinition(), G4DynamicParticle::GetDefinition(), G4ReactionProduct::GetKineticEnergy(), G4HadProjectile::GetKineticEnergy(), G4HadProjectile::GetMaterial(), G4ReactionProduct::GetMomentum(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), G4ParticleDefinition::GetPDGMass(), G4FastVector< Type, N >::Initialize(), G4InelasticInteraction::isotopeProduction, G4InuclParticleNames::pp, G4Nucleus::ReturnTargetParticle(), G4ReactionProduct::SetKineticEnergy(), G4ReactionProduct::SetMomentum(), G4ReactionProduct::SetSide(), G4InelasticInteraction::SetUpChange(), G4HadronicInteraction::theParticleChange, and G4HadronicInteraction::verboseLevel.

Referenced by G4NeutronHPorLEInelasticModel::ApplyYourself().

00054 {
00055   theParticleChange.Clear();
00056   const G4HadProjectile *originalIncident = &aTrack;
00057 
00058   // Create the target particle
00059   G4DynamicParticle* originalTarget = targetNucleus.ReturnTargetParticle();
00060     
00061   if (verboseLevel > 1) {
00062     const G4Material* targetMaterial = aTrack.GetMaterial();
00063     G4cout << "G4LENeutronInelastic::ApplyYourself called" << G4endl;
00064     G4cout << "kinetic energy = " << originalIncident->GetKineticEnergy()/MeV << "MeV, ";
00065     G4cout << "target material = " << targetMaterial->GetName() << ", ";
00066     G4cout << "target particle = " << originalTarget->GetDefinition()->GetParticleName()
00067            << G4endl;
00068   }
00069  
00070   G4ReactionProduct modifiedOriginal;
00071   modifiedOriginal = *originalIncident;
00072   G4ReactionProduct targetParticle;
00073   targetParticle = *originalTarget;
00074   if (originalIncident->GetKineticEnergy()/GeV < 0.01 + 2.*G4UniformRand()/9.) {
00075     SlowNeutron(originalIncident, modifiedOriginal, targetParticle, targetNucleus);
00076     if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus);
00077     delete originalTarget;
00078     return &theParticleChange;
00079   }
00080 
00081   // Fermi motion and evaporation
00082   // As of Geant3, the Fermi energy calculation had not been done
00083   G4double ek = originalIncident->GetKineticEnergy()/MeV;
00084   G4double amas = originalIncident->GetDefinition()->GetPDGMass()/MeV;
00085     
00086   G4double tkin = targetNucleus.Cinema(ek);
00087   ek += tkin;
00088   modifiedOriginal.SetKineticEnergy( ek*MeV );
00089   G4double et = ek + amas;
00090   G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) );
00091   G4double pp = modifiedOriginal.GetMomentum().mag()/MeV;
00092   if (pp > 0.0) {
00093     G4ThreeVector momentum = modifiedOriginal.GetMomentum();
00094     modifiedOriginal.SetMomentum(momentum * (p/pp) );
00095   }
00096 
00097   // calculate black track energies
00098   tkin = targetNucleus.EvaporationEffects( ek );
00099   ek -= tkin;
00100   modifiedOriginal.SetKineticEnergy( ek*MeV );
00101   et = ek + amas;
00102   p = std::sqrt( std::abs((et-amas)*(et+amas)) );
00103   pp = modifiedOriginal.GetMomentum().mag()/MeV;
00104   if (pp > 0.0) {
00105     G4ThreeVector momentum = modifiedOriginal.GetMomentum();
00106     modifiedOriginal.SetMomentum(momentum * (p/pp) );
00107   }
00108   const G4double cutOff = 0.1;
00109   if (modifiedOriginal.GetKineticEnergy()/MeV <= cutOff) {
00110     SlowNeutron(originalIncident, modifiedOriginal, targetParticle, targetNucleus);
00111     if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus);
00112     delete originalTarget;
00113     return &theParticleChange;
00114   }
00115 
00116   G4ReactionProduct currentParticle = modifiedOriginal;
00117   currentParticle.SetSide(1);  // incident always goes in forward hemisphere
00118   targetParticle.SetSide(-1);  // target always goes in backward hemisphere
00119   G4bool incidentHasChanged = false;
00120   G4bool targetHasChanged = false;
00121   G4bool quasiElastic = false;
00122   G4FastVector<G4ReactionProduct,GHADLISTSIZE> vec;  // vec will contain the secondary particles
00123   G4int vecLen = 0;
00124   vec.Initialize(0);
00125     
00126   Cascade(vec, vecLen, originalIncident, currentParticle, targetParticle,
00127           incidentHasChanged, targetHasChanged, quasiElastic);
00128     
00129   CalculateMomenta(vec, vecLen, originalIncident, originalTarget,
00130                    modifiedOriginal, targetNucleus, currentParticle,
00131                    targetParticle, incidentHasChanged, targetHasChanged,
00132                    quasiElastic);
00133     
00134   SetUpChange(vec, vecLen, currentParticle, targetParticle, incidentHasChanged);
00135    
00136   if (isotopeProduction) DoIsotopeCounting(originalIncident, targetNucleus); 
00137   delete originalTarget;
00138   return &theParticleChange;
00139 }

void G4LENeutronInelastic::ModelDescription ( std::ostream &  outFile  )  const [virtual]

Reimplemented from G4HadronicInteraction.

Definition at line 37 of file G4LENeutronInelastic.cc.

00038 {
00039   outFile << "G4LENeutronInelastic is one of the Low Energy Parameterized\n"
00040           << "(LEP) models used to implement inelastic neutron scattering\n"
00041           << "from nuclei.  It is a re-engineered version of the GHEISHA\n"
00042           << "code of H. Fesefeldt.  It divides the initial collision\n"
00043           << "products into backward- and forward-going clusters which are\n"
00044           << "then decayed into final state hadrons.  The model does not\n"
00045           << "conserve energy on an event-by-event basis.  It may be\n"
00046           << "applied to neutrons with initial energies between 0 and 25\n"
00047           << "GeV.\n";
00048 }


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