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 ()
 
G4IonCoulombCrossSection & operator= (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
 
G4Pow * fG4pow
 
G4NistManager * fNistManager
 
G4double invbeta2
 
G4double invbetaLab2
 
G4double mass
 
G4double mom2
 
G4double momLab2
 
G4double nucXSection
 
const G4ParticleDefinition * particle
 
G4double ScreenRSquare
 
G4double screenZ
 
G4double spin
 
G4double targetMass
 
G4double targetZ
 
const G4ParticleDefinition * theProton
 
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: