Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4SingleScatter Class Reference

#include <G4ScreenedNuclearRecoil.hh>

Inheritance diagram for G4SingleScatter:
G4ScreenedCoulombCrossSectionInfo G4ScreenedCollisionStage

Public Member Functions

 G4SingleScatter ()
 
virtual void DoCollisionStep (class G4ScreenedNuclearRecoil *master, const class G4Track &aTrack, const class G4Step &aStep)
 
virtual ~G4SingleScatter ()
 
- Public Member Functions inherited from G4ScreenedCollisionStage
virtual ~G4ScreenedCollisionStage ()
 

Additional Inherited Members

Detailed Description

Definition at line 178 of file G4ScreenedNuclearRecoil.hh.

Constructor & Destructor Documentation

G4SingleScatter::G4SingleScatter ( )
inline

Definition at line 181 of file G4ScreenedNuclearRecoil.hh.

181 { }
virtual G4SingleScatter::~G4SingleScatter ( )
inlinevirtual

Definition at line 184 of file G4ScreenedNuclearRecoil.hh.

184 {}

Member Function Documentation

void G4SingleScatter::DoCollisionStep ( class G4ScreenedNuclearRecoil master,
const class G4Track aTrack,
const class G4Step aStep 
)
virtual

Implements G4ScreenedCollisionStage.

Definition at line 661 of file G4ScreenedNuclearRecoil.cc.

References G4CoulombKinematicsInfo::a2, G4ParticleChange::AddSecondary(), python.hepunit::amu_c2, G4CoulombKinematicsInfo::cosZeta, G4CoulombKinematicsInfo::eRecoil, G4UniformRand, G4Track::GetDynamicParticle(), G4ParticleChange::GetEnergy(), G4ScreenedNuclearRecoil::GetKinematics(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMomentum(), G4DynamicParticle::GetMomentumDirection(), G4ScreenedNuclearRecoil::GetParticleChange(), G4ScreenedNuclearRecoil::GetValidCollision(), G4ParticleChange::ProposeEnergy(), G4ParticleChange::ProposeMomentumDirection(), G4CoulombKinematicsInfo::recoilIon, CLHEP::Hep3Vector::rotateUz(), G4VParticleChange::SetNumberOfSecondaries(), G4CoulombKinematicsInfo::sinZeta, and CLHEP::Hep3Vector::unit().

662  {
663 
664  if(!master->GetValidCollision()) return;
665 
666  G4CoulombKinematicsInfo &kin=master->GetKinematics();
667  G4ParticleChange &aParticleChange=master->GetParticleChange();
668 
669  const G4DynamicParticle* incidentParticle = aTrack.GetDynamicParticle();
670  G4double incidentEnergy = incidentParticle->GetKineticEnergy();
671  G4double eRecoil=kin.eRecoil;
672 
673  G4double azimuth=G4UniformRand()*(2.0*CLHEP::pi);
674  G4double sa=std::sin(azimuth);
675  G4double ca=std::cos(azimuth);
676 
677  G4ThreeVector recoilMomentumDirection(kin.sinZeta*ca, kin.sinZeta*sa, kin.cosZeta);
678  G4ParticleMomentum incidentDirection = incidentParticle->GetMomentumDirection();
679  recoilMomentumDirection=recoilMomentumDirection.rotateUz(incidentDirection);
680  G4ThreeVector recoilMomentum=recoilMomentumDirection*std::sqrt(2.0*eRecoil*kin.a2*amu_c2);
681 
682  if(aParticleChange.GetEnergy() != 0.0) { // DoKinematics hasn't stopped it!
683  G4ThreeVector beamMomentum=incidentParticle->GetMomentum()-recoilMomentum;
684  aParticleChange.ProposeMomentumDirection(beamMomentum.unit()) ;
685  aParticleChange.ProposeEnergy(incidentEnergy-eRecoil);
686  }
687 
688  if(kin.recoilIon) {
689  G4DynamicParticle* recoil = new G4DynamicParticle (kin.recoilIon,
690  recoilMomentumDirection,eRecoil) ;
691 
692  aParticleChange.SetNumberOfSecondaries(1);
693  aParticleChange.AddSecondary(recoil);
694  }
695 }
G4double GetKineticEnergy() const
G4ParticleDefinition * recoilIon
#define G4UniformRand()
Definition: Randomize.hh:87
const G4ThreeVector & GetMomentumDirection() const
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:72
void SetNumberOfSecondaries(G4int totSecondaries)
Hep3Vector unit() const
void ProposeEnergy(G4double finalEnergy)
void AddSecondary(G4Track *aSecondary)
G4double GetEnergy() const
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
double G4double
Definition: G4Types.hh:76
float amu_c2
Definition: hepunit.py:277
G4ThreeVector GetMomentum() const

The documentation for this class was generated from the following files: