64G4double G4ICRU49NuclearStoppingModel::Z23[] = {0.0};
73 theZieglerFactor = eV*cm2*1.0e-15;
91void G4ICRU49NuclearStoppingModel::InitialiseArray()
95 G4MUTEXLOCK(&G4ICRU49NuclearStoppingModel::ICRU49NuclearMutex);
98 for(
G4int i=2; i<100; ++i) {
99 Z23[i] = g4calc->
powZ(i, 0.23);
102#ifdef G4MULTITHREADED
104 G4MUTEXUNLOCK(&G4ICRU49NuclearStoppingModel::ICRU49NuclearMutex);
113 std::vector<G4DynamicParticle*>*,
129 if(kinEnergy <= 0.0) {
return nloss; }
135 if(kinEnergy*proton_mass_c2/mass1 > z1*z1*MeV) {
return nloss; }
145 for (
G4int iel=0; iel<numberOfElements; ++iel) {
146 const G4Element* element = (*theElementVector)[iel] ;
149 nloss += (NuclearStoppingPower(kinEnergy, z1, z2, mass1, mass2))
152 nloss *= theZieglerFactor;
160G4ICRU49NuclearStoppingModel::NuclearStoppingPower(
G4double kineticEnergy,
164 G4double energy = kineticEnergy/keV ;
172 rm = (mass1 + mass2)*(Z23[iz1] + Z23[iz2]);
174 rm = (mass1 + mass2)*g4calc->
Z13(
G4lrint(z2));
181 static const G4double nuca[104][2] = {
300 if (er >= nuca[0][0]) { nloss = nuca[0][1]; }
303 for (
G4int i=102; i>=0; --i) {
309 nloss = (ai - ai1)*(er - edi1)/(edi - edi1) + ai1;
317 G4double sig = 4.0 * mass1 * mass2 / ((mass1 + mass2)*(mass1 + mass2)*
318 (4.0 + 0.197/(er*er) + 6.584/er));
320 nloss *= G4RandGauss::shoot(1.0,sig);
323 nloss *= 8.462 * z12 * mass1 / rm;
325 nloss = std::max(nloss, 0.0);
std::vector< G4Element * > G4ElementVector
#define G4MUTEX_INITIALIZER
#define G4MUTEXLOCK(mutex)
#define G4MUTEXUNLOCK(mutex)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double, G4double) final
virtual ~G4ICRU49NuclearStoppingModel()
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) final
G4ICRU49NuclearStoppingModel(const G4String &nam="ICRU49NucStopping")
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX) final
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
const G4double * GetAtomicNumDensityVector() const
G4double GetPDGMass() const
G4double GetPDGCharge() const
static G4Pow * GetInstance()
G4double powZ(G4int Z, G4double y) const
G4double Z13(G4int Z) const
G4double energy(const ThreeVector &p, const G4double m)