Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4SingleScatter Class Reference

#include <G4ScreenedNuclearRecoil.hh>

Inheritance diagram for G4SingleScatter:
Collaboration diagram for G4SingleScatter:

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 193 of file G4ScreenedNuclearRecoil.hh.

Constructor & Destructor Documentation

G4SingleScatter::G4SingleScatter ( )
inline

Definition at line 197 of file G4ScreenedNuclearRecoil.hh.

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

Definition at line 200 of file G4ScreenedNuclearRecoil.hh.

200 {}

Member Function Documentation

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

Implements G4ScreenedCollisionStage.

Definition at line 752 of file G4ScreenedNuclearRecoil.cc.

753  {
754 
755  if(!master->GetValidCollision()) return;
756 
757  G4CoulombKinematicsInfo &kin=master->GetKinematics();
758  G4ParticleChange &aParticleChange=master->GetParticleChange();
759 
760  const G4DynamicParticle* incidentParticle = aTrack.GetDynamicParticle();
761  G4double incidentEnergy = incidentParticle->GetKineticEnergy();
762  G4double eRecoil=kin.eRecoil;
763 
764  G4double azimuth=G4UniformRand()*(2.0*pi);
765  G4double sa=std::sin(azimuth);
766  G4double ca=std::cos(azimuth);
767 
768  G4ThreeVector recoilMomentumDirection(kin.sinZeta*ca,
769  kin.sinZeta*sa, kin.cosZeta);
770  G4ParticleMomentum incidentDirection =
771  incidentParticle->GetMomentumDirection();
772  recoilMomentumDirection=
773  recoilMomentumDirection.rotateUz(incidentDirection);
774  G4ThreeVector recoilMomentum=
775  recoilMomentumDirection*std::sqrt(2.0*eRecoil*kin.a2*amu_c2);
776 
777  if(aParticleChange.GetEnergy() != 0.0) {
778  // DoKinematics hasn't stopped it!
779  G4ThreeVector beamMomentum=
780  incidentParticle->GetMomentum()-recoilMomentum;
781  aParticleChange.ProposeMomentumDirection(beamMomentum.unit()) ;
782  aParticleChange.ProposeEnergy(incidentEnergy-eRecoil);
783  }
784 
785  if(kin.recoilIon) {
786  G4DynamicParticle* recoil =
787  new G4DynamicParticle (kin.recoilIon,
788  recoilMomentumDirection,eRecoil) ;
789 
790  aParticleChange.SetNumberOfSecondaries(1);
791  aParticleChange.AddSecondary(recoil);
792  }
793 }
G4double GetKineticEnergy() const
G4ParticleDefinition * recoilIon
#define G4UniformRand()
Definition: Randomize.hh:97
const G4ThreeVector & GetMomentumDirection() const
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:38
void SetNumberOfSecondaries(G4int totSecondaries)
Hep3Vector unit() const
void ProposeEnergy(G4double finalEnergy)
void AddSecondary(G4Track *aSecondary)
G4double GetEnergy() const
static constexpr double pi
Definition: G4SIunits.hh:75
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
double G4double
Definition: G4Types.hh:76
float amu_c2
Definition: hepunit.py:277
G4ThreeVector GetMomentum() const

Here is the call graph for this function:


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