86 minNumberInteractionsBohr(10.0),
87 theBohrBeta2(50.0*keV/proton_mass_c2),
95 particleMass = chargeSquare = ipotFluct = electronDensity = f1Fluct = f2Fluct
96 = e1Fluct = e2Fluct = e1LogFluct = e2LogFluct = ipotLogFluct = e0 = esmall
135 if (meanLoss < minLoss) {
return meanLoss; }
142 G4double beta2 = tau*(tau + 2.0)/gam2;
150 if ((particleMass > electron_mass_c2) &&
151 (meanLoss >= minNumberInteractionsBohr*tmax))
153 G4double massrate = electron_mass_c2/particleMass ;
154 G4double tmaxkine = 2.*electron_mass_c2*beta2*gam2/
155 (1.+massrate*(2.*gam+massrate)) ;
156 if (tmaxkine <= 2.*tmax)
159 siga = sqrt((1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
160 * electronDensity * chargeSquare);
168 G4double twomeanLoss = meanLoss + meanLoss;
170 loss = G4RandGauss::shoot(meanLoss,siga);
171 }
while (0.0 > loss || twomeanLoss < loss);
186 if (material != lastMaterial) {
196 esmall = 0.5*sqrt(e0*ipotFluct);
197 lastMaterial = material;
201 if(tmax <= e0) {
return meanLoss; }
205 if(meanLoss < 25.*ipotFluct)
216 for (
G4int istep=0; istep < nstep; ++istep) {
220 G4double a1 = 0. , a2 = 0., a3 = 0. ;
222 if(tmax > ipotFluct) {
223 G4double w2 = log(2.*electron_mass_c2*beta2*gam2)-beta2;
225 if(w2 > ipotLogFluct) {
226 G4double C = meanLoss*(1.-rate)/(w2-ipotLogFluct);
227 a1 = C*f1Fluct*(w2-e1LogFluct)/e1Fluct;
228 if(w2 > e2LogFluct) {
229 a2 = C*f2Fluct*(w2-e2LogFluct)/e2Fluct;
237 a1 = meanLoss*(1.-rate)/e1;
260 a3 = rate*meanLoss*(tmax-e0)/(e0*tmax*log(w1));
300 loss += max(0.,G4RandGauss::shoot(emean,sige));
313 alfa = w1*(nmaxCont+a3)/(w1*nmaxCont+a3);
314 G4double alfa1 = alfa*log(alfa)/(alfa-1.);
315 G4double namean = a3*w1*(alfa-1.)/((w1-1.)*alfa);
316 emean += namean*e0*alfa1;
317 sig2e += e0*e0*namean*(alfa-alfa1*alfa1);
332 lossc += max(0.,G4RandGauss::shoot(emean,sige));
359 G4double beta2 = 1.0 - 1.0/(gam*gam);
361 G4double siga = (1.0/beta2 - 0.5) * twopi_mc2_rcl2 * tmax * length
362 * electronDensity * chargeSquare;
373 if(part != particle) {
G4long G4Poisson(G4double mean)
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetF2fluct() const
G4double GetLogEnergy1fluct() const
G4double GetLogEnergy2fluct() const
G4double GetMeanExcitationEnergy() const
G4double GetF1fluct() const
G4double GetEnergy2fluct() const
G4double GetEnergy1fluct() const
G4double GetEnergy0fluct() const
G4double GetLogMeanExcEnergy() const
G4IonisParamMat * GetIonisation() const
G4double GetElectronDensity() const
G4double GetPDGMass() const
G4double GetPDGCharge() const
virtual G4double Dispersion(const G4Material *, const G4DynamicParticle *, G4double &, G4double &)
virtual void SetParticleAndCharge(const G4ParticleDefinition *, G4double q2)
virtual void InitialiseMe(const G4ParticleDefinition *)
virtual G4double SampleFluctuations(const G4Material *, const G4DynamicParticle *, G4double &, G4double &, G4double &)
G4UniversalFluctuation(const G4String &nam="UniFluc")
virtual ~G4UniversalFluctuation()