Geant4-11
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Attributes
G4ionEffectiveCharge Class Reference

#include <G4ionEffectiveCharge.hh>

Public Member Functions

G4double EffectiveCharge (const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)
 
G4double EffectiveChargeSquareRatio (const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)
 
 G4ionEffectiveCharge ()
 
 G4ionEffectiveCharge (const G4ionEffectiveCharge &)=delete
 
G4ionEffectiveChargeoperator= (const G4ionEffectiveCharge &right)=delete
 
 ~G4ionEffectiveCharge ()=default
 

Private Attributes

G4double chargeCorrection
 
G4double effCharge
 
G4double energyBohr
 
G4double energyHighLimit
 
G4double energyLowLimit
 
G4Powg4calc
 
G4double inveplus
 
G4double lastKinEnergy
 
const G4MateriallastMat = nullptr
 
const G4ParticleDefinitionlastPart = nullptr
 
G4double massFactor
 
G4double minCharge
 

Detailed Description

Definition at line 61 of file G4ionEffectiveCharge.hh.

Constructor & Destructor Documentation

◆ G4ionEffectiveCharge() [1/2]

G4ionEffectiveCharge::G4ionEffectiveCharge ( )
explicit

Definition at line 64 of file G4ionEffectiveCharge.cc.

65{
66 chargeCorrection = 1.0;
71 minCharge = 1.0;
72 lastKinEnergy = 0.0;
76}
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
static constexpr double eplus
static constexpr double amu_c2
static constexpr double proton_mass_c2
static constexpr double keV
static constexpr double MeV

References CLHEP::amu_c2, chargeCorrection, effCharge, energyBohr, energyHighLimit, energyLowLimit, CLHEP::eplus, g4calc, G4Pow::GetInstance(), inveplus, CLHEP::keV, lastKinEnergy, massFactor, CLHEP::MeV, minCharge, and CLHEP::proton_mass_c2.

◆ ~G4ionEffectiveCharge()

G4ionEffectiveCharge::~G4ionEffectiveCharge ( )
default

◆ G4ionEffectiveCharge() [2/2]

G4ionEffectiveCharge::G4ionEffectiveCharge ( const G4ionEffectiveCharge )
delete

Member Function Documentation

◆ EffectiveCharge()

G4double G4ionEffectiveCharge::EffectiveCharge ( const G4ParticleDefinition p,
const G4Material material,
G4double  kineticEnergy 
)

Definition at line 80 of file G4ionEffectiveCharge.cc.

83{
84 if(p == lastPart && material == lastMat && kineticEnergy == lastKinEnergy)
85 return effCharge;
86
87 lastPart = p;
89 lastKinEnergy = kineticEnergy;
90
91 G4double mass = p->GetPDGMass();
94 chargeCorrection = 1.0;
95
96 // The aproximation of ion effective charge from:
97 // J.F.Ziegler, J.P. Biersack, U. Littmark
98 // The Stopping and Range of Ions in Matter,
99 // Vol.1, Pergamon Press, 1985
100 // Fast ions or hadrons
101 G4double reducedEnergy = kineticEnergy * CLHEP::proton_mass_c2/mass;
102
103 //G4cout << "e= " << reducedEnergy << " Zi= " << Zi << " "
104 //<< material->GetName() << G4endl;
105
106 if(Zi <= 1 || reducedEnergy > effCharge*energyHighLimit ) {
107 return effCharge;
108 }
109 G4double z = material->GetIonisation()->GetZeffective();
110 reducedEnergy = std::max(reducedEnergy,energyLowLimit);
111
112 // Helium ion case
113 if( Zi <= 2 ) {
114
115 static const G4double c[6] =
116 {0.2865,0.1266,-0.001429,0.02402,-0.01135,0.001475};
117
118 G4double Q = std::max(0.0,G4Log(reducedEnergy*massFactor));
119 G4double x = c[0];
120 G4double y = 1.0;
121 for (G4int i=1; i<6; ++i) {
122 y *= Q;
123 x += y * c[i] ;
124 }
125 G4double ex = (x < 0.2) ? x * (1 - 0.5*x) : 1. - G4Exp(-x);
126
127 G4double tq = 7.6 - Q;
128 G4double tq2= tq*tq;
129 G4double tt = ( 0.007 + 0.00005 * z );
130 if(tq2 < 0.2) { tt *= (1.0 - tq2 + 0.5*tq2*tq2); }
131 else { tt *= G4Exp(-tq2); }
132
133 effCharge *= (1.0 + tt) * std::sqrt(ex);
134
135 // Heavy ion case
136 } else {
137
138 G4double zi13 = g4calc->Z13(Zi);
139 G4double zi23 = zi13*zi13;
140
141 // v1 is ion velocity in vF unit
142 G4double eF = material->GetIonisation()->GetFermiEnergy();
143 G4double v1sq = reducedEnergy/eF;
144 G4double vFsq = eF/energyBohr;
145 G4double vF = std::sqrt(eF/energyBohr);
146
147 G4double y = ( v1sq > 1.0 )
148 // Faster than Fermi velocity
149 ? vF * std::sqrt(v1sq) * ( 1.0 + 0.2/v1sq ) / zi23
150 // Slower than Fermi velocity
151 : 0.692308 * vF * (1.0 + 0.666666*v1sq + v1sq*v1sq/15.0) / zi23;
152
153 G4double y3 = G4Exp(0.3*G4Log(y));
154 // G4cout<<"y= "<<y<<" y3= "<<y3<<" v1= "<<v1<<" vF= "<<vF<<G4endl;
155 G4double q = std::max(1.0 - G4Exp( 0.803*y3 - 1.3167*y3*y3 - 0.38157*y
156 - 0.008983*y*y), minCharge/effCharge);
157
158 // compute charge correction
159 G4double tq = 7.6 - G4Log(reducedEnergy/CLHEP::keV);
160 G4double tq2= tq*tq;
161 G4double sq = 1.0 + ( 0.18 + 0.0015 * z )*G4Exp(-tq2)/ (Zi*Zi);
162 // G4cout << "sq= " << sq << G4endl;
163
164 // Screen length according to
165 // J.F.Ziegler and J.M.Manoyan, The stopping of ions in compaunds,
166 // Nucl. Inst. & Meth. in Phys. Res. B35 (1988) 215-228.
167
168 G4double lambda = 10.0 * vF *g4calc->A23(1.0 - q)/ (zi13 * (6.0 + q));
169 G4double lambda2 = lambda*lambda;
170 G4double xx = (0.5/q - 0.5)*G4Log(1.0 + lambda2)/vFsq;
171
172 effCharge *= q;
173 chargeCorrection = sq * (1.0 + xx);
174 }
175 // G4cout << "G4ionEffectiveCharge: charge= " << charge << " q= " << q
176 // << " chargeCor= " << chargeCorrection
177 // << " e(MeV)= " << kineticEnergy/MeV << G4endl;
178 return effCharge;
179}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4double GetPDGCharge() const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
G4double A23(G4double A) const
Definition: G4Pow.hh:131
const G4Material * lastMat
const G4ParticleDefinition * lastPart
T max(const T t1, const T t2)
brief Return the largest of the two arguments
string material
Definition: eplot.py:19
static double Q[]
int G4lrint(double ad)
Definition: templates.hh:134

References G4Pow::A23(), chargeCorrection, effCharge, energyBohr, energyHighLimit, energyLowLimit, g4calc, G4Exp(), G4Log(), G4lrint(), G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), inveplus, CLHEP::keV, G4InuclParticleNames::lambda, lastKinEnergy, lastMat, lastPart, massFactor, eplot::material, G4INCL::Math::max(), minCharge, CLHEP::proton_mass_c2, Q, and G4Pow::Z13().

Referenced by G4MicroElecInelasticModel::CrossSectionPerVolume(), EffectiveChargeSquareRatio(), G4EmCorrections::GetParticleCharge(), and G4EmCorrections::SetupKinematics().

◆ EffectiveChargeSquareRatio()

G4double G4ionEffectiveCharge::EffectiveChargeSquareRatio ( const G4ParticleDefinition p,
const G4Material material,
G4double  kineticEnergy 
)
inline

Definition at line 106 of file G4ionEffectiveCharge.hh.

110{
111 const G4double aCharge =
113 return aCharge*aCharge;
114}
G4double EffectiveCharge(const G4ParticleDefinition *p, const G4Material *material, G4double kineticEnergy)

References chargeCorrection, EffectiveCharge(), inveplus, and eplot::material.

Referenced by G4EmCorrections::BuildCorrectionVector(), and G4EmCorrections::EffectiveChargeSquareRatio().

◆ operator=()

G4ionEffectiveCharge & G4ionEffectiveCharge::operator= ( const G4ionEffectiveCharge right)
delete

Field Documentation

◆ chargeCorrection

G4double G4ionEffectiveCharge::chargeCorrection
private

◆ effCharge

G4double G4ionEffectiveCharge::effCharge
private

Definition at line 94 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ energyBohr

G4double G4ionEffectiveCharge::energyBohr
private

Definition at line 98 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ energyHighLimit

G4double G4ionEffectiveCharge::energyHighLimit
private

Definition at line 96 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ energyLowLimit

G4double G4ionEffectiveCharge::energyLowLimit
private

Definition at line 97 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ g4calc

G4Pow* G4ionEffectiveCharge::g4calc
private

Definition at line 85 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ inveplus

G4double G4ionEffectiveCharge::inveplus
private

◆ lastKinEnergy

G4double G4ionEffectiveCharge::lastKinEnergy
private

Definition at line 91 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ lastMat

const G4Material* G4ionEffectiveCharge::lastMat = nullptr
private

Definition at line 88 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge().

◆ lastPart

const G4ParticleDefinition* G4ionEffectiveCharge::lastPart = nullptr
private

Definition at line 87 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge().

◆ massFactor

G4double G4ionEffectiveCharge::massFactor
private

Definition at line 99 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().

◆ minCharge

G4double G4ionEffectiveCharge::minCharge
private

Definition at line 100 of file G4ionEffectiveCharge.hh.

Referenced by EffectiveCharge(), and G4ionEffectiveCharge().


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