89 minNumberInteractionsBohr(10.0),
146 if (meanLoss <
minLoss) {
return meanLoss; }
150 CLHEP::HepRandomEngine* rndmEngineF = G4Random::getTheEngine();
155 G4double beta2 = tau*(tau + 2.0)/gam2;
168 G4double tmaxkine = 2.*electron_mass_c2*beta2*gam2/
170 if (tmaxkine <= 2.*tmax)
173 siga = sqrt((1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
181 G4double twomeanLoss = meanLoss + meanLoss;
185 }
while (0.0 > loss || twomeanLoss < loss);
215 if(tmax <=
e0) {
return meanLoss; }
221 if(rndmEngineF->flat()*
ipotFluct< 0.04*meanLoss)
231 for (
G4int istep=0; istep < nstep; ++istep) {
233 loss = a1 = a2 = a3 = 0.;
247 if(rndmEngineF->flat() <
G4Exp(-sa1))
250 a1 = meanLoss*(1.-
rate)/
e1;
288 if(emean > 0.0) {
SampleGauss(rndmEngineF, emean, sig2e, loss); }
300 G4double namean = a3*w1*(alfa-1.)/((w1-1.)*alfa);
301 emean += namean*
e0*alfa1;
302 sig2e +=
e0*
e0*namean*(alfa-alfa1*alfa1);
320 if(emean > 0.0) {
SampleGauss(rndmEngineF, emean, sig2e, loss); }
346 G4double siga = (1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double m_Inv_particleMass
G4IonisParamMat * GetIonisation() const
G4long G4Poisson(G4double mean)
G4double GetKineticEnergy() const
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double, G4double) override
void AddExcitation(CLHEP::HepRandomEngine *rndm, G4double a, G4double e, G4double &eav, G4double &eloss, G4double &esig2)
G4double GetEnergy2fluct() const
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double, G4double) override
const G4Material * lastMaterial
G4double GetLogEnergy2fluct() const
G4UniversalFluctuation(const G4String &nam="UniFluc")
G4ParticleDefinition * GetDefinition() const
G4double GetLogMeanExcEnergy() const
G4double minNumberInteractionsBohr
G4double GetEnergy0fluct() const
virtual void SetParticleAndCharge(const G4ParticleDefinition *, G4double q2) final
virtual ~G4UniversalFluctuation()
G4double GetElectronDensity() const
static constexpr double eplus
static constexpr double eV
const G4ParticleDefinition * particle
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
virtual void InitialiseMe(const G4ParticleDefinition *) final
G4double GetLogEnergy1fluct() const
G4double GetPDGMass() const
void SampleGauss(CLHEP::HepRandomEngine *rndm, G4double eav, G4double esig2, G4double &eloss)
G4double GetMeanExcitationEnergy() const
G4double GetF2fluct() const
G4double GetPDGCharge() const
G4double GetF1fluct() const
const G4Material * GetMaterial() const
G4double GetEnergy1fluct() const