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

#include <G4IonCoulombCrossSection.hh>

Public Member Functions

 G4IonCoulombCrossSection ()
 
 G4IonCoulombCrossSection (const G4IonCoulombCrossSection &)=delete
 
G4double GetMomentum2 ()
 
void Initialise (const G4ParticleDefinition *, G4double cosThetaLim)
 
G4double NuclearCrossSection ()
 
G4IonCoulombCrossSectionoperator= (const G4IonCoulombCrossSection &right)=delete
 
G4double SampleCosineTheta ()
 
void SetupKinematic (G4double kinEnergy, G4double tmass)
 
void SetupParticle (const G4ParticleDefinition *)
 
void SetupTarget (G4double Z, G4double kinEnergy, G4int heavycorr)
 
 ~G4IonCoulombCrossSection ()
 

Private Member Functions

void SetScreenRSquare (G4int iz)
 

Private Attributes

G4double alpha2
 
G4double chargeSquare
 
G4double coeff
 
G4double cosTetMaxNuc
 
G4double cosTetMinNuc
 
G4double cosThetaMax
 
G4double cosThetaMin
 
G4double etag
 
G4PowfG4pow
 
G4NistManagerfNistManager
 
G4double invbeta2
 
G4double invbetaLab2
 
G4double mass
 
G4double mom2
 
G4double momLab2
 
G4double nucXSection
 
const G4ParticleDefinitionparticle
 
G4double ScreenRSquare
 
G4double screenZ
 
G4double spin
 
G4double targetMass
 
G4double targetZ
 
const G4ParticleDefinitiontheProton
 
G4double tkin
 
G4double tkinLab
 

Detailed Description

Definition at line 69 of file G4IonCoulombCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonCoulombCrossSection() [1/2]

G4IonCoulombCrossSection::G4IonCoulombCrossSection ( )
explicit

Definition at line 70 of file G4IonCoulombCrossSection.cc.

70 :
71 cosThetaMin(1.0),
72 cosThetaMax(-1.0),
74{
78 particle=0;
79
81 coeff = twopi*p0*p0;
82
85 nucXSection =0;
86
87 chargeSquare = spin = mass = 0.0;
89
91}
static constexpr double twopi
Definition: G4SIunits.hh:56
double G4double
Definition: G4Types.hh:83
const G4ParticleDefinition * theProton
const G4ParticleDefinition * particle
static G4NistManager * Instance()
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
static G4Proton * Proton()
Definition: G4Proton.cc:92
float electron_mass_c2
Definition: hepunit.py:273
int classic_electr_radius
Definition: hepunit.py:287
int fine_structure_const
Definition: hepunit.py:286

References chargeSquare, source.hepunit::classic_electr_radius, coeff, cosTetMaxNuc, cosTetMinNuc, source.hepunit::electron_mass_c2, etag, fG4pow, fNistManager, G4Pow::GetInstance(), G4NistManager::Instance(), invbeta2, invbetaLab2, mass, mom2, momLab2, nucXSection, particle, G4Proton::Proton(), ScreenRSquare, screenZ, spin, targetMass, targetZ, theProton, tkin, tkinLab, and twopi.

◆ ~G4IonCoulombCrossSection()

G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )

Definition at line 94 of file G4IonCoulombCrossSection.cc.

95{}

◆ G4IonCoulombCrossSection() [2/2]

G4IonCoulombCrossSection::G4IonCoulombCrossSection ( const G4IonCoulombCrossSection )
delete

Member Function Documentation

◆ GetMomentum2()

G4double G4IonCoulombCrossSection::GetMomentum2 ( )
inline

Definition at line 159 of file G4IonCoulombCrossSection.hh.

160{
161 return mom2;
162}

References mom2.

◆ Initialise()

void G4IonCoulombCrossSection::Initialise ( const G4ParticleDefinition p,
G4double  cosThetaLim 
)

Definition at line 99 of file G4IonCoulombCrossSection.cc.

101{
102 SetupParticle(p);
103 nucXSection = tkin = targetZ = mom2 = 0.0;
104 etag = DBL_MAX;
105 particle = p;
106 cosThetaMin = CosThetaLim;
107}
void SetupParticle(const G4ParticleDefinition *)
#define DBL_MAX
Definition: templates.hh:62

References cosThetaMin, DBL_MAX, etag, mom2, nucXSection, particle, SetupParticle(), targetZ, and tkin.

Referenced by G4IonCoulombScatteringModel::Initialise().

◆ NuclearCrossSection()

G4double G4IonCoulombCrossSection::NuclearCrossSection ( )

Definition at line 190 of file G4IonCoulombCrossSection.cc.

191{
192 // This method needs initialisation before be called
193 // scattering with target nucleus
195
196 nucXSection = 0.0;
197
198 G4double x = 1.0 - cosTetMinNuc;
199 G4double x1 = x + screenZ;
200
201 // scattering with nucleus
204 (x1*(1.0 - cosTetMaxNuc + screenZ));
205 }
206
207 return nucXSection;
208}
static const G4double fac

References chargeSquare, coeff, cosTetMaxNuc, cosTetMinNuc, fac, invbeta2, mom2, nucXSection, screenZ, and targetZ.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

◆ operator=()

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

◆ SampleCosineTheta()

G4double G4IonCoulombCrossSection::SampleCosineTheta ( )

Definition at line 212 of file G4IonCoulombCrossSection.cc.

213{
214 G4double z1 = 0.0;
216
217 G4double x1 = 1. - cosTetMinNuc + screenZ;
218 G4double x2 = 1. - cosTetMaxNuc + screenZ;
220 z1 = x1*x2/(x1 + G4UniformRand()*dx) - screenZ;
221 }
222 return z1;
223}
#define G4UniformRand()
Definition: Randomize.hh:52

References cosTetMaxNuc, cosTetMinNuc, G4UniformRand, and screenZ.

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

◆ SetScreenRSquare()

void G4IonCoulombCrossSection::SetScreenRSquare ( G4int  iz)
private

Definition at line 171 of file G4IonCoulombCrossSection.cc.

172{
173 //for proton Thomas-Fermi screening length
174 G4int Z1 = G4lrint(std::sqrt(chargeSquare));
175 G4double Z113 = fG4pow->Z13(iz);
176 G4double Z1023 = fG4pow->powZ(Z1,0.23);
177 G4double Z2023 = fG4pow->powZ(iz,0.23);
178 G4double x=a0*(Z1023+Z2023);
179
180 // Universal screening length
181 if(particle == theProton){
182 x = a0*Z113;
183 }
184
185 ScreenRSquare = alpha2*x*x;
186}
const G4double a0
int G4int
Definition: G4Types.hh:85
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:225
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123
static const G4double Z1[5]
Definition: paraMaker.cc:41
int G4lrint(double ad)
Definition: templates.hh:134

References a0, alpha2, chargeSquare, fG4pow, G4lrint(), particle, G4Pow::powZ(), ScreenRSquare, theProton, anonymous_namespace{paraMaker.cc}::Z1, and G4Pow::Z13().

Referenced by SetupTarget().

◆ SetupKinematic()

void G4IonCoulombCrossSection::SetupKinematic ( G4double  kinEnergy,
G4double  tmass 
)

Definition at line 111 of file G4IonCoulombCrossSection.cc.

112{
113 if(ekin != tkinLab || tmass != targetMass) {
114
115 // lab
116 tkinLab = ekin;
117 momLab2 = tkinLab*(tkinLab + 2.0*mass);
119
120 G4double etot = tkinLab + mass;
121 G4double ptot = sqrt(momLab2);
122 G4double m12 = mass*mass;
123 // relativistic reduced mass from publucation
124 // A.P. Martynenko, R.N. Faustov, Teoret. mat. Fiz. 64 (1985) 179
125
126 //incident particle & target nucleus
127 targetMass = tmass;
128 G4double Ecm=sqrt(m12 + targetMass*targetMass + 2.0*etot*targetMass);
129 G4double mu_rel=mass*targetMass/Ecm;
130 G4double momCM= ptot*targetMass/Ecm;
131 // relative system
132 mom2 = momCM*momCM;
133 invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
134 tkin = momCM*sqrt(invbeta2) - mu_rel;//Ekin of mu_rel
135
138 }
139}

References cosTetMaxNuc, cosTetMinNuc, cosThetaMax, cosThetaMin, invbeta2, invbetaLab2, mass, mom2, momLab2, targetMass, tkin, and tkinLab.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom(), and G4IonCoulombScatteringModel::SampleSecondaries().

◆ SetupParticle()

void G4IonCoulombCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

◆ SetupTarget()

void G4IonCoulombCrossSection::SetupTarget ( G4double  Z,
G4double  kinEnergy,
G4int  heavycorr 
)

Definition at line 143 of file G4IonCoulombCrossSection.cc.

145{
146 if(Z != targetZ || e != etag) {
147 etag = e;
148 targetZ = Z;
149 G4int iz= G4lrint(Z);
150
152 screenZ = 0;
154 //heavycorr = 0;
155 // G4cout<< "heavycorr "<<heavycorr<<G4endl;
156
157 G4double corr=5.*twopi*Z*std::sqrt(chargeSquare*alpha2);
158 corr=G4Exp(G4Log(corr)*0.04);
159 screenZ *=0.5*(1.13 + corr*3.76*Z*Z*chargeSquare*invbeta2*alpha2);
160 // G4cout<<" heavycorr Z e corr....2As "<< heavycorr << "\t"
161 // <<Z <<"\t"<<e/MeV <<"\t"<<screenZ<<G4endl;
162
163 if(1 == iz && particle == theProton && cosTetMaxNuc < 0.0) {
164 cosTetMaxNuc = 0.0;
165 }
166 }
167}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
const G4int Z[17]

References alpha2, chargeSquare, cosTetMaxNuc, etag, G4Exp(), G4Log(), G4lrint(), invbeta2, mom2, particle, ScreenRSquare, screenZ, SetScreenRSquare(), targetZ, theProton, twopi, and Z.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom(), and G4IonCoulombScatteringModel::SampleSecondaries().

Field Documentation

◆ alpha2

G4double G4IonCoulombCrossSection::alpha2
private

Definition at line 140 of file G4IonCoulombCrossSection.hh.

Referenced by SetScreenRSquare(), and SetupTarget().

◆ chargeSquare

G4double G4IonCoulombCrossSection::chargeSquare
private

◆ coeff

G4double G4IonCoulombCrossSection::coeff
private

Definition at line 104 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and NuclearCrossSection().

◆ cosTetMaxNuc

G4double G4IonCoulombCrossSection::cosTetMaxNuc
private

◆ cosTetMinNuc

G4double G4IonCoulombCrossSection::cosTetMinNuc
private

◆ cosThetaMax

G4double G4IonCoulombCrossSection::cosThetaMax
private

Definition at line 108 of file G4IonCoulombCrossSection.hh.

Referenced by SetupKinematic().

◆ cosThetaMin

G4double G4IonCoulombCrossSection::cosThetaMin
private

Definition at line 107 of file G4IonCoulombCrossSection.hh.

Referenced by Initialise(), and SetupKinematic().

◆ etag

G4double G4IonCoulombCrossSection::etag
private

Definition at line 117 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), Initialise(), and SetupTarget().

◆ fG4pow

G4Pow* G4IonCoulombCrossSection::fG4pow
private

Definition at line 102 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetScreenRSquare().

◆ fNistManager

G4NistManager* G4IonCoulombCrossSection::fNistManager
private

Definition at line 101 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection().

◆ invbeta2

G4double G4IonCoulombCrossSection::invbeta2
private

◆ invbetaLab2

G4double G4IonCoulombCrossSection::invbetaLab2
private

Definition at line 129 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ mass

G4double G4IonCoulombCrossSection::mass
private

◆ mom2

G4double G4IonCoulombCrossSection::mom2
private

◆ momLab2

G4double G4IonCoulombCrossSection::momLab2
private

Definition at line 128 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ nucXSection

G4double G4IonCoulombCrossSection::nucXSection
private

◆ particle

const G4ParticleDefinition* G4IonCoulombCrossSection::particle
private

◆ ScreenRSquare

G4double G4IonCoulombCrossSection::ScreenRSquare
private

◆ screenZ

G4double G4IonCoulombCrossSection::screenZ
private

◆ spin

G4double G4IonCoulombCrossSection::spin
private

Definition at line 123 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupParticle().

◆ targetMass

G4double G4IonCoulombCrossSection::targetMass
private

Definition at line 138 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ targetZ

G4double G4IonCoulombCrossSection::targetZ
private

◆ theProton

const G4ParticleDefinition* G4IonCoulombCrossSection::theProton
private

◆ tkin

G4double G4IonCoulombCrossSection::tkin
private

◆ tkinLab

G4double G4IonCoulombCrossSection::tkinLab
private

Definition at line 127 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().


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