90 fDirectEnergyLossProcess->GetDEDX(fPreStepKinEnergy, fCurrentCouple);
101 if(Tkin != fPreStepKinEnergy && fIsIon)
103 G4double chargeSqRatio = fCurrentModel->GetChargeSquareRatio(
104 fDirectPartDef, fCurrentMaterial, Tkin);
105 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio, chargeSqRatio);
108 G4double r = fDirectEnergyLossProcess->GetRange(Tkin, fCurrentCouple);
109 if(dlength <= fLinLossLimit * r)
111 degain = DEDX_before * dlength;
116 G4double E = fDirectEnergyLossProcess->GetKineticEnergy(x, fCurrentCouple);
119 G4double chargeSqRatio = fCurrentModel->GetChargeSquareRatio(
120 fDirectPartDef, fCurrentMaterial, E);
121 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio, chargeSqRatio);
122 G4double x1 = fDirectEnergyLossProcess->GetRange(E, fCurrentCouple);
125 constexpr G4int iimax = 100;
126 while(std::abs(x - x1) > 0.01 * x)
128 E = fDirectEnergyLossProcess->GetKineticEnergy(x, fCurrentCouple);
129 chargeSqRatio = fCurrentModel->GetChargeSquareRatio(
130 fDirectPartDef, fCurrentMaterial, E);
131 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio,
133 x1 = fDirectEnergyLossProcess->GetRange(E, fCurrentCouple);
144 G4double tmax = fCurrentModel->MaxSecondaryKinEnergy(dynParticle);
145 fCurrentTcut = std::min(fCurrentTcut, tmax);
150 fCurrentModel->CorrectionsAlongStep(fCurrentMaterial, fDirectPartDef, Tkin,
151 fCurrentTcut, dlength, degain);
155 if(fLossFluctuationFlag)
157 deltaE = fCurrentModel->GetModelOfFluctuations()->SampleFluctuations(
158 fCurrentCouple, dynParticle, fCurrentTcut, tmax, dlength, degain)
172 G4double chargeSqRatio = fCurrentModel->GetChargeSquareRatio(
173 fDirectPartDef, fCurrentMaterial, Tkin);
174 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio, chargeSqRatio);
177 G4double DEDX_after = fDirectEnergyLossProcess->GetDEDX(Tkin, fCurrentCouple);
178 G4double weight_correction = DEDX_after / DEDX_before;
210 fCurrentModel = fDirectEnergyLossProcess->SelectModelForMaterial(
212 G4double emax_model = fCurrentModel->HighEnergyLimit();
216 G4double chargeSqRatio = fCurrentModel->GetChargeSquareRatio(
217 fDirectPartDef, fCurrentMaterial, fPreStepKinEnergy);
218 preStepChargeSqRatio = chargeSqRatio;
219 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio,
220 preStepChargeSqRatio);
223 G4double maxE = 1.1 * fPreStepKinEnergy;
225 if(fPreStepKinEnergy < fCurrentTcut)
226 maxE = std::min(fCurrentTcut, maxE);
228 maxE = std::min(emax_model * 1.001, maxE);
231 fDirectEnergyLossProcess->GetRange(fPreStepKinEnergy, fCurrentCouple);
235 G4double chargeSqRatioAtEmax = fCurrentModel->GetChargeSquareRatio(
236 fDirectPartDef, fCurrentMaterial, maxE);
237 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio,
238 chargeSqRatioAtEmax);
241 G4double r1 = fDirectEnergyLossProcess->GetRange(maxE, fCurrentCouple);
244 fDirectEnergyLossProcess->SetDynamicMassCharge(fMassRatio,
245 preStepChargeSqRatio);
247 return std::max(r1 - preStepRange, 0.001 * mm);
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
G4double GetKineticEnergy() const
void SetKineticEnergy(G4double aEnergy)