155 if (photonEnergy < smallEnergy )
166 G4cout <<
"G4LowEnergyGammaConversion::PostStepDoIt - element = 0" <<
G4endl;
171 G4cout <<
"G4LowEnergyGammaConversion::PostStepDoIt - ionisation = 0" <<
G4endl;
176 if (photonEnergy > 50. *
MeV) fZ += 8. * (element->
GetfCoulomb());
180 G4double screenMax = std::exp ((42.24 - fZ)/8.368) - 0.952 ;
184 G4double epsilon1 = 0.5 - 0.5 * std::sqrt(1. - screenMin / screenMax) ;
186 G4double epsilonRange = 0.5 - epsilonMin ;
192 G4double f10 = ScreenFunction1(screenMin) - fZ;
193 G4double f20 = ScreenFunction2(screenMin) - fZ;
200 epsilon = 0.5 - epsilonRange * std::pow(
G4UniformRand(), 0.3333) ;
201 screen = screenFactor / (epsilon * (1. -
epsilon));
202 gReject = (ScreenFunction1(screen) - fZ) / f10 ;
207 screen = screenFactor / (epsilon * (1 -
epsilon));
208 gReject = (ScreenFunction2(screen) - fZ) / f20 ;
221 electronTotEnergy = (1. -
epsilon) * photonEnergy;
222 positronTotEnergy = epsilon * photonEnergy;
226 positronTotEnergy = (1. -
epsilon) * photonEnergy;
227 electronTotEnergy = epsilon * photonEnergy;
253 G4double dxEle= std::sin(thetaEle)*std::cos(phi),dyEle= std::sin(thetaEle)*std::sin(phi),dzEle=std::cos(thetaEle);
254 G4double dxPos=-std::sin(thetaPos)*std::cos(phi),dyPos=-std::sin(thetaPos)*std::sin(phi),dzPos=std::cos(thetaPos);
273 electronDirection.rotateUz(photonDirection);
282 localEnergyDeposit += electronKineEnergy ;
291 localEnergyDeposit += positronKineEnergy ;
292 positronKineEnergy = 0. ;
296 positronDirection.rotateUz(photonDirection);
300 positronDirection, positronKineEnergy);
G4double GetKineticEnergy() const
const G4DynamicParticle * GetDynamicParticle() const
const G4MaterialCutsCouple * GetMaterialCutsCouple() const
G4double GetfCoulomb() const
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
static constexpr double twopi
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetMomentumDirection() const
G4double GetlogZ3() const
virtual G4bool Escape(const G4ParticleDefinition *particle, const G4MaterialCutsCouple *couple, G4double energy, G4double safety) const =0
virtual void Initialize(const G4Track &)
static G4Positron * Positron()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetNumberOfSecondaries(G4int totSecondaries)
G4StepPoint * GetPostStepPoint() const
G4IonisParamElm * GetIonisation() const
void ProposeEnergy(G4double finalEnergy)
G4ParticleChange aParticleChange
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4double GetSafety() const
void AddSecondary(G4Track *aSecondary)
static G4Electron * Electron()
static constexpr double MeV
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void ProposeTrackStatus(G4TrackStatus status)
virtual G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
const G4Element * SelectRandomElement(const G4MaterialCutsCouple *material, G4double e) const
double epsilon(double density, double temperature)