89 minNumberInteractionsBohr(10.0),
98 particleMass = chargeSquare = ipotFluct = electronDensity = f1Fluct = f2Fluct
99 = e1Fluct = e2Fluct = e1LogFluct = e2LogFluct = ipotLogFluct = e0 = esmall
101 m_Inv_particleMass = m_massrate =
DBL_MAX;
118 m_Inv_particleMass = 1.0 / particleMass;
143 if (meanLoss < minLoss) {
return meanLoss; }
147 G4double tau = tkin * m_Inv_particleMass;
150 G4double beta2 = tau*(tau + 2.0)/gam2;
161 (meanLoss >= minNumberInteractionsBohr*tmax))
164 (1.+m_massrate*(2.*gam+m_massrate)) ;
165 if (tmaxkine <= 2.*tmax)
169 * electronDensity * chargeSquare);
176 G4double twomeanLoss = meanLoss + meanLoss;
179 }
while (0.0 > loss || twomeanLoss < loss);
194 if (material != lastMaterial) {
204 esmall = 0.5*sqrt(e0*ipotFluct);
209 if(tmax <= e0) {
return meanLoss; }
213 if(meanLoss < 25.*ipotFluct)
224 for (
G4int istep=0; istep < nstep; ++istep) {
228 G4double a1 = 0. , a2 = 0., a3 = 0. ;
230 if(tmax > ipotFluct) {
233 if(w2 > ipotLogFluct) {
234 G4double C = meanLoss*(1.-rate)/(w2-ipotLogFluct);
235 a1 = C*f1Fluct*(w2-e1LogFluct)/e1Fluct;
236 if(w2 > e2LogFluct) {
237 a2 = C*f2Fluct*(w2-e2LogFluct)/e2Fluct;
245 a1 = meanLoss*(1.-rate)/e1;
268 a3 = rate*meanLoss*(tmax-e0)/(e0*tmax*
G4Log(w1));
322 alfa = w1*(nmaxCont+a3)/(w1*nmaxCont+a3);
324 G4double namean = a3*w1*(alfa-1.)/((w1-1.)*alfa);
325 emean += namean*e0*alfa1;
326 sig2e += e0*e0*namean*(alfa-alfa1*alfa1);
371 * electronDensity * chargeSquare;
382 if(part != particle) {
387 if( particleMass != 0.0 ){
388 m_Inv_particleMass = 1.0 / particleMass;
ThreeVector shoot(const G4int Ap, const G4int Af)
G4IonisParamMat * GetIonisation() const
G4long G4Poisson(G4double mean)
G4double GetKineticEnergy() const
G4double GetEnergy2fluct() const
G4double GetLogEnergy2fluct() const
G4UniversalFluctuation(const G4String &nam="UniFluc")
G4ParticleDefinition * GetDefinition() const
G4double GetLogMeanExcEnergy() const
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double, G4double)
G4double GetEnergy0fluct() const
virtual ~G4UniversalFluctuation()
virtual void SetParticleAndCharge(const G4ParticleDefinition *, G4double q2)
G4double GetElectronDensity() const
virtual void InitialiseMe(const G4ParticleDefinition *)
virtual G4double SampleFluctuations(const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double, G4double)
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double GetLogEnergy1fluct() const
G4double GetPDGMass() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double GetMeanExcitationEnergy() const
G4double GetF2fluct() const
G4double GetPDGCharge() const
G4double GetF1fluct() const
const G4Material * GetMaterial() const
G4double GetEnergy1fluct() const