65G4double G4ICRU49NuclearStoppingModel::ad[] = {0.0};
66G4double G4ICRU49NuclearStoppingModel::ed[] = {0.0};
73 theZieglerFactor = eV*cm2*1.0e-15;
75 if(ad[0] == 0.0) { InitialiseNuclearStopping(); }
93 std::vector<G4DynamicParticle*>*,
109 if(kinEnergy <= 0.0) {
return nloss; }
115 if(kinEnergy*proton_mass_c2/mass1 > z1*z1*MeV) {
return nloss; }
125 for (
G4int iel=0; iel<numberOfElements; iel++) {
126 const G4Element* element = (*theElementVector)[iel] ;
129 nloss += (NuclearStoppingPower(kinEnergy, z1, z2, mass1, mass2))
132 nloss *= theZieglerFactor;
139G4ICRU49NuclearStoppingModel::NuclearStoppingPower(
G4double kineticEnergy,
143 G4double energy = kineticEnergy/keV ;
150 if(iz1 > 1) { rm = (mass1 + mass2)*(g4pow->
Z23(iz1) + g4pow->
Z23(iz2)); }
151 else { rm = (mass1 + mass2)*g4pow->
Z13(iz2); }
153 G4double er = 32.536 * mass2 * energy / ( z12 * rm ) ;
155 if (er >= ed[0]) { nloss = ad[0]; }
158 for (
G4int i=102; i>=0; --i)
161 nloss = (ad[i] - ad[i+1])*(er - ed[i+1])/(ed[i] - ed[i+1]) + ad[i+1];
171 G4double sig = 4.0 * mass1 * mass2 / ((mass1 + mass2)*(mass1 + mass2)*
172 (4.0 + 0.197/(er*er) + 6.584/er));
174 nloss *= G4RandGauss::shoot(1.0,sig);
175 lossFlucFlag =
false;
178 nloss *= 8.462 * z12 * mass1 / rm;
180 if ( nloss < 0.0) { nloss = 0.0; }
187void G4ICRU49NuclearStoppingModel::InitialiseNuclearStopping()
308 for(
G4int i=0; i<104; ++i) {
std::vector< G4Element * > G4ElementVector
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
virtual ~G4ICRU49NuclearStoppingModel()
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double)
G4ICRU49NuclearStoppingModel(const G4String &nam="ICRU49NucStopping")
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() const
G4double GetPDGMass() const
G4double GetPDGCharge() const
static G4Pow * GetInstance()