G4RPGAntiKZeroInelastic Class Reference

#include <G4RPGAntiKZeroInelastic.hh>

Inheritance diagram for G4RPGAntiKZeroInelastic:

G4RPGInelastic G4HadronicInteraction

Public Member Functions

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

Detailed Description

Definition at line 45 of file G4RPGAntiKZeroInelastic.hh.


Constructor & Destructor Documentation

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]

Definition at line 55 of file G4RPGAntiKZeroInelastic.hh.

00056     { }


Member Function Documentation

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   }


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