Geant4-11
Public Member Functions | Private Member Functions | Private Attributes
G4hIonEffChargeSquare Class Reference

#include <G4hIonEffChargeSquare.hh>

Inheritance diagram for G4hIonEffChargeSquare:
G4VLowEnergyModel

Public Member Functions

 G4hIonEffChargeSquare (const G4String &name)
 
G4double HighEnergyLimit (const G4ParticleDefinition *aParticle) const override
 
G4double HighEnergyLimit (const G4ParticleDefinition *aParticle, const G4Material *material) const override
 
G4bool IsInCharge (const G4DynamicParticle *particle, const G4Material *material) const override
 
G4bool IsInCharge (const G4ParticleDefinition *aParticle, const G4Material *material) const override
 
G4double LowEnergyLimit (const G4ParticleDefinition *aParticle) const override
 
G4double LowEnergyLimit (const G4ParticleDefinition *aParticle, const G4Material *material) const override
 
G4double TheValue (const G4DynamicParticle *particle, const G4Material *material) override
 
G4double TheValue (const G4ParticleDefinition *aParticle, const G4Material *material, G4double kineticEnergy) override
 
 ~G4hIonEffChargeSquare ()
 

Private Member Functions

G4double IonEffChargeSquare (const G4Material *material, G4double kineticEnergy, G4double particleMass, G4double ionCharge) const
 

Private Attributes

const G4double theHeMassAMU
 

Detailed Description

Definition at line 61 of file G4hIonEffChargeSquare.hh.

Constructor & Destructor Documentation

◆ G4hIonEffChargeSquare()

G4hIonEffChargeSquare::G4hIonEffChargeSquare ( const G4String name)
explicit

Definition at line 67 of file G4hIonEffChargeSquare.cc.

69 theHeMassAMU(4.0026)
70{;}
G4VLowEnergyModel(const G4String &name)
const char * name(G4int ptype)

◆ ~G4hIonEffChargeSquare()

G4hIonEffChargeSquare::~G4hIonEffChargeSquare ( )

Definition at line 74 of file G4hIonEffChargeSquare.cc.

75{;}

Member Function Documentation

◆ HighEnergyLimit() [1/2]

G4double G4hIonEffChargeSquare::HighEnergyLimit ( const G4ParticleDefinition aParticle) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 126 of file G4hIonEffChargeSquare.cc.

128{
129 return 1.0*TeV ;
130}
static constexpr double TeV
Definition: G4SIunits.hh:204

References TeV.

◆ HighEnergyLimit() [2/2]

G4double G4hIonEffChargeSquare::HighEnergyLimit ( const G4ParticleDefinition aParticle,
const G4Material material 
) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 108 of file G4hIonEffChargeSquare.cc.

111{
112 return 1.0*TeV ;
113}

References TeV.

◆ IonEffChargeSquare()

G4double G4hIonEffChargeSquare::IonEffChargeSquare ( const G4Material material,
G4double  kineticEnergy,
G4double  particleMass,
G4double  ionCharge 
) const
private

Definition at line 158 of file G4hIonEffChargeSquare.cc.

163{
164 // The aproximation of ion effective charge from:
165 // J.F.Ziegler, J.P. Biersack, U. Littmark
166 // The Stopping and Range of Ions in Matter,
167 // Vol.1, Pergamon Press, 1985
168
169 // Fast ions or hadrons
170 G4double reducedEnergy = kineticEnergy * proton_mass_c2/particleMass ;
171 if(reducedEnergy < 1.0*keV) reducedEnergy = 1.0*keV;
172 if( (reducedEnergy > ionCharge * 10.0 * MeV) ||
173 (ionCharge < 1.5) ) return ionCharge*ionCharge ;
174
175 static const G4double vFermi[92] = {
176 1.0309, 0.15976, 0.59782, 1.0781, 1.0486, 1.0, 1.058, 0.93942, 0.74562, 0.3424,
177 0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712,
178 0.81707, 0.9943, 1.1423, 1.2381, 1.1222, 0.92705, 1.0047, 1.2, 1.0661, 0.97411,
179 0.84912, 0.95, 1.0903, 1.0429, 0.49715, 0.37755, 0.35211, 0.57801, 0.77773, 1.0207,
180 1.029, 1.2542, 1.122, 1.1241, 1.0882, 1.2709, 1.2542, 0.90094, 0.74093, 0.86054,
181 0.93155, 1.0047, 0.55379, 0.43289, 0.32636, 0.5131, 0.695, 0.72591, 0.71202, 0.67413,
182 0.71418, 0.71453, 0.5911, 0.70263, 0.68049, 0.68203, 0.68121, 0.68532, 0.68715, 0.61884,
183 0.71801, 0.83048, 1.1222, 1.2381, 1.045, 1.0733, 1.0953, 1.2381, 1.2879, 0.78654,
184 0.66401, 0.84912, 0.88433, 0.80746, 0.43357, 0.41923, 0.43638, 0.51464, 0.73087, 0.81065,
185 1.9578, 1.0257} ;
186
187 static const G4double c[6] = {0.2865, 0.1266, -0.001429,
188 0.02402,-0.01135, 0.001475} ;
189
190 // get elements in the actual material,
191 const G4ElementVector* theElementVector = material->GetElementVector() ;
192 const G4double* theAtomicNumDensityVector =
193 material->GetAtomicNumDensityVector() ;
194 const G4int NumberOfElements = material->GetNumberOfElements() ;
195
196 // loop for the elements in the material
197 // to find out average values Z, vF, lF
198 G4double z = 0.0, vF = 0.0, norm = 0.0 ;
199
200 if( 1 == NumberOfElements ) {
201 z = material->GetZ() ;
202 G4int iz = G4int(z) - 1 ;
203 if(iz < 0) iz = 0 ;
204 else if(iz > 91) iz = 91 ;
205 vF = vFermi[iz] ;
206
207 } else {
208 for (G4int iel=0; iel<NumberOfElements; iel++)
209 {
210 const G4Element* element = (*theElementVector)[iel] ;
211 G4double z2 = element->GetZ() ;
212 const G4double weight = theAtomicNumDensityVector[iel] ;
213 norm += weight ;
214 z += z2 * weight ;
215 G4int iz = G4int(z2) - 1 ;
216 if(iz < 0) iz = 0 ;
217 else if(iz > 91) iz =91 ;
218 vF += vFermi[iz] * weight ;
219 }
220 z /= norm ;
221 vF /= norm ;
222 }
223
224 // Helium ion case
225 if( ionCharge < 2.5 ) {
226
227 G4double e = std::log(std::max(1.0, kineticEnergy / (keV*theHeMassAMU) )) ;
228 G4double x = c[0] ;
229 G4double y = 1.0 ;
230 for (G4int i=1; i<6; i++) {
231 y *= e ;
232 x += y * c[i] ;
233 }
234 G4double q = 7.6 - e ;
235 q = 1.0 + ( 0.007 + 0.00005 * z ) * G4Exp( -q*q ) ;
236 return 4.0 * q * q * (1.0 - G4Exp(-x)) ;
237
238 // Heavy ion case
239 } else {
240
241 // v1 is ion velocity in vF unit
242 G4double v1 = std::sqrt( reducedEnergy / (25.0 * keV) )/ vF ;
243 G4double y ;
244 G4double z13 = std::pow(ionCharge, 0.3333) ;
245
246 // Faster than Fermi velocity
247 if ( v1 > 1.0 ) {
248 y = vF * v1 * ( 1.0 + 0.2 / (v1*v1) ) / (z13*z13) ;
249
250 // Slower than Fermi velocity
251 } else {
252 y = 0.6923 * vF * (1.0 + 2.0*v1*v1/3.0 + v1*v1*v1*v1/15.0) / (z13*z13) ;
253 }
254
255 G4double y3 = std::pow(y, 0.3) ;
256 G4double q = 1.0 - G4Exp( 0.803*y3 - 1.3167*y3*y3 -
257 0.38157*y - 0.008983*y*y ) ;
258 if( q < 0.0 ) q = 0.0 ;
259
260 G4double sLocal = 7.6 - std::log(std::max(1.0, reducedEnergy/keV)) ;
261 sLocal = 1.0 + ( 0.18 + 0.0015 * z ) * G4Exp( -sLocal*sLocal )/ (ionCharge*ionCharge) ;
262
263 // Screen length according to
264 // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
265 // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
266
267 G4double lambda = 10.0 * vF * std::pow(1.0-q, 0.6667) / (z13 * (6.0 + q)) ;
268 G4double qeff = ionCharge * sLocal *
269 ( q + 0.5*(1.0-q) * std::log(1.0 + lambda*lambda) / (vF*vF) ) ;
270 if( 0.1 > qeff ) qeff = 0.1 ;
271 return qeff*qeff ;
272 }
273}
std::vector< const G4Element * > G4ElementVector
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
static constexpr double keV
Definition: G4SIunits.hh:202
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double GetZ() const
Definition: G4Element.hh:131
T max(const T t1, const T t2)
brief Return the largest of the two arguments
string material
Definition: eplot.py:19
float proton_mass_c2
Definition: hepunit.py:274

References G4Exp(), G4Element::GetZ(), keV, G4InuclParticleNames::lambda, eplot::material, G4INCL::Math::max(), MeV, source.hepunit::proton_mass_c2, and theHeMassAMU.

Referenced by TheValue().

◆ IsInCharge() [1/2]

G4bool G4hIonEffChargeSquare::IsInCharge ( const G4DynamicParticle particle,
const G4Material material 
) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 142 of file G4hIonEffChargeSquare.cc.

144{
145 return true ;
146}

◆ IsInCharge() [2/2]

G4bool G4hIonEffChargeSquare::IsInCharge ( const G4ParticleDefinition aParticle,
const G4Material material 
) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 150 of file G4hIonEffChargeSquare.cc.

152{
153 return true ;
154}

◆ LowEnergyLimit() [1/2]

G4double G4hIonEffChargeSquare::LowEnergyLimit ( const G4ParticleDefinition aParticle) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 134 of file G4hIonEffChargeSquare.cc.

136{
137 return 0.0 ;
138}

◆ LowEnergyLimit() [2/2]

G4double G4hIonEffChargeSquare::LowEnergyLimit ( const G4ParticleDefinition aParticle,
const G4Material material 
) const
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 117 of file G4hIonEffChargeSquare.cc.

120{
121 return 0.0 ;
122}

◆ TheValue() [1/2]

G4double G4hIonEffChargeSquare::TheValue ( const G4DynamicParticle particle,
const G4Material material 
)
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 79 of file G4hIonEffChargeSquare.cc.

81{
82 G4double energy = particle->GetKineticEnergy() ;
83 G4double particleMass = particle->GetMass() ;
84 G4double charge = (particle->GetDefinition()->GetPDGCharge())/eplus ;
85
86 G4double q = IonEffChargeSquare(material,energy,particleMass,charge) ;
87
88 return q ;
89}
static constexpr double eplus
Definition: G4SIunits.hh:184
G4double GetMass() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetPDGCharge() const
G4double IonEffChargeSquare(const G4Material *material, G4double kineticEnergy, G4double particleMass, G4double ionCharge) const
G4double energy(const ThreeVector &p, const G4double m)

References G4INCL::KinematicsUtils::energy(), eplus, G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMass(), G4ParticleDefinition::GetPDGCharge(), IonEffChargeSquare(), and eplot::material.

◆ TheValue() [2/2]

G4double G4hIonEffChargeSquare::TheValue ( const G4ParticleDefinition aParticle,
const G4Material material,
G4double  kineticEnergy 
)
overridevirtual

Implements G4VLowEnergyModel.

Definition at line 93 of file G4hIonEffChargeSquare.cc.

96{
97 // SetRateMass(aParticle) ;
98 G4double particleMass = aParticle->GetPDGMass() ;
99 G4double charge = (aParticle->GetPDGCharge())/eplus ;
100
101 G4double q = IonEffChargeSquare(material,kineticEnergy,particleMass,charge) ;
102
103 return q ;
104}

References eplus, G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), IonEffChargeSquare(), and eplot::material.

Field Documentation

◆ theHeMassAMU

const G4double G4hIonEffChargeSquare::theHeMassAMU
private

Definition at line 100 of file G4hIonEffChargeSquare.hh.

Referenced by IonEffChargeSquare().


The documentation for this class was generated from the following files: