242 if(cut >= emax) {
return; }
280 ((kineticEnergy > epeaklimit) || (kineticEnergy < elowlimit))) {
282 if(ylim > vmax) { vmax = ylim; }
284 if(x0 < 0.05) { vmax *= 1.2; }
288 static const G4int ncountmax = 100;
295 if(x < 0.0) { x = 0.0; }
296 gammaEnergy = sqrt(x);
297 G4double x1 = gammaEnergy/kineticEnergy;
304 G4double e2 = kineticEnergy - gammaEnergy;
308 if(xxx < expnumlim) { v = 0.0; }
309 else { v *=
G4Exp(xxx); }
312 if (v > 1.05*vmax && nwarn < 5) {
315 ed <<
"### G4SeltzerBergerModel Warning: Majoranta exceeded! "
316 << v <<
" > " << vmax <<
" by " << v/vmax
318 <<
" Egamma(MeV)= " << gammaEnergy
319 <<
" Ee(MeV)= " << kineticEnergy
323 ed <<
"\n ### G4SeltzerBergerModel Warnings stopped";
325 G4Exception(
"G4SeltzerBergerModel::SampleScattering",
"em0044",
329 if(v >= vmax*rndm[1]) {
break; }
344 vdp->push_back(gamma);
347 - gammaEnergy*gammaDirection).unit();
357 G4double finalE = kineticEnergy - gammaEnergy;
G4double SecondaryThreshold() const
void SetCurrentElement(G4int)
std::ostringstream G4ExceptionDescription
G4double GetKineticEnergy() const
static constexpr double keV
G4VEmAngularDistribution * GetAngularDistribution()
const G4String & GetParticleName() const
const G4ParticleDefinition * particle
static constexpr double twopi
static constexpr double electron_mass_c2
G4ParticleDefinition * theGamma
G4double Value(G4double x, G4double y, size_t &lastidx, size_t &lastidy) const
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
const G4ThreeVector & GetMomentumDirection() const
static constexpr double MeV
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void SetProposedMomentumDirection(const G4ThreeVector &dir)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static const G4double emax
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double) override
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double MeV
static const G4double epeaklimit
G4ParticleChangeForLoss * fParticleChange
void ProposeTrackStatus(G4TrackStatus status)
static const G4double elowlimit
static constexpr double fine_structure_const
virtual void flatArray(const int size, double *vect)=0
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual G4double Value(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
const G4Material * GetMaterial() const