968 G4double totalEnergy = kineticEnergy + mass ;
969 G4double pSquare = kineticEnergy *( totalEnergy + mass) ;
970 G4double eSquare = totalEnergy * totalEnergy;
971 G4double betaSquare = pSquare / eSquare;
974 G4double gamma = kineticEnergy / mass + 1.;
982 if (deltaCut >= tMax)
999 gRej = 1.0 - betaSquare *
x ;
1001 else if (0.5 == spin)
1003 gRej = (1. - betaSquare * x + 0.5 * x*x * rate) / (1. + 0.5 * rate) ;
1007 gRej = (1. - betaSquare *
x ) * (1. + x/(3.*xc)) +
1008 x*x * rate * (1. + 0.5*x/xc) / 3.0 /
1009 (1. + 1./(3.*xc) + rate *(1.+ 0.5/xc) / 3.);
1014 G4double deltaKineticEnergy = x * tMax;
1015 G4double deltaTotalMomentum = std::sqrt(deltaKineticEnergy *
1017 G4double totalMomentum = std::sqrt(pSquare) ;
1021 if ( cosTheta < -1. ) cosTheta = -1.;
1022 if ( cosTheta > 1. ) cosTheta = 1.;
1026 G4double sinTheta = std::sqrt(1. - cosTheta*cosTheta);
1027 G4double dirX = sinTheta * std::cos(phi);
1028 G4double dirY = sinTheta * std::sin(phi);
1032 deltaDirection.rotateUz(particleDirection);
1039 deltaDirection.z());
1043 G4double finalKineticEnergy = kineticEnergy - deltaKineticEnergy;
1044 size_t totalNumber = 1;
1050 size_t nSecondaries = 0;
1051 std::vector<G4DynamicParticle*>* secondaryVector = 0;
1112 if (finalKineticEnergy >= bindingEnergy)
1128 if (secondaryVector != 0)
1130 nSecondaries = secondaryVector->size();
1131 for (
size_t i = 0; i<nSecondaries; i++)
1149 if (e < finalKineticEnergy &&
1154 finalKineticEnergy -=
e;
1181 (*secondaryVector)[i] = 0;
1196 G4double finalPx = totalMomentum*particleDirection.
x() - deltaTotalMomentum*deltaDirection.x();
1197 G4double finalPy = totalMomentum*particleDirection.
y() - deltaTotalMomentum*deltaDirection.y();
1198 G4double finalPz = totalMomentum*particleDirection.
z() - deltaTotalMomentum*deltaDirection.z();
1199 G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz) ;
1200 finalPx /= finalMomentum;
1201 finalPy /= finalMomentum;
1202 finalPz /= finalMomentum;
1208 eDeposit = finalKineticEnergy;
1209 finalKineticEnergy = 0.;
1211 particleDirection.
y(),
1212 particleDirection.
z());
1214 GetAtRestProcessVector()->size())
1237 if (secondaryVector != 0)
1239 for (
size_t l = 0; l < nSecondaries; l++)
1258 delete secondaryVector;
G4AtomicShell * Shell(G4int Z, size_t shellIndex) const
const G4Material * GetMaterial() const
static G4Proton * ProtonDefinition()
void SetMomentumDirection(const G4ThreeVector &aDirection)
G4ProcessManager * GetProcessManager() const
G4double MinKineticEnergy
G4double GetKineticEnergy() const
G4PixeCrossSectionHandler * pixeCrossSectionHandler
G4AtomicDeexcitation atomicDeexcitation
static const double twopi
G4int SelectRandomShell(G4int Z, G4double e) const
G4double GetPDGSpin() const
G4double minElectronEnergy
void LoadShellData(const G4String &dataFile)
void SetKineticEnergy(G4double aEnergy)
G4int SelectRandomAtom(const G4Material *material, G4double e) const
const G4ThreeVector & GetMomentumDirection() const
G4double GetPDGMass() const
G4ParticleChange aParticleChange
static G4Electron * Electron()
G4ParticleDefinition * GetDefinition() const
std::vector< G4DynamicParticle * > * GenerateParticles(G4int Z, G4int shellId)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4double BindingEnergy() const
static G4AtomicTransitionManager * Instance()