Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4IonCoulombCrossSection Class Reference

#include <G4IonCoulombCrossSection.hh>

Public Member Functions

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

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),
73 alpha2(fine_structure_const*fine_structure_const)
74{
75 fNistManager = G4NistManager::Instance();
76 fG4pow = G4Pow::GetInstance();
77 theProton = G4Proton::Proton();
78 particle = nullptr;
79
80 G4double p0 = electron_mass_c2*classic_electr_radius;
81 coeff = twopi*p0*p0;
82
83 cosTetMinNuc=0;
84 cosTetMaxNuc=0;
85 nucXSection =0;
86
87 chargeSquare = spin = mass = 0.0;
88 tkinLab = momLab2 = invbetaLab2 = tkin = mom2 = invbeta2 = 0.0;
89
90 targetZ = targetMass = screenZ = ScreenRSquare = etag = 0.0;
91}
double G4double
Definition: G4Types.hh:83
static G4NistManager * Instance()
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
static G4Proton * Proton()
Definition: G4Proton.cc:92

◆ ~G4IonCoulombCrossSection()

G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )
default

◆ 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}

◆ Initialise()

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

Definition at line 95 of file G4IonCoulombCrossSection.cc.

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

Referenced by G4IonCoulombScatteringModel::Initialise().

◆ NuclearCrossSection()

G4double G4IonCoulombCrossSection::NuclearCrossSection ( )

Definition at line 186 of file G4IonCoulombCrossSection.cc.

187{
188 // This method needs initialisation before be called
189 // scattering with target nucleus
190 G4double fac = coeff*targetZ*(targetZ)*chargeSquare*invbeta2/mom2;
191
192 nucXSection = 0.0;
193
194 G4double x = 1.0 - cosTetMinNuc;
195 G4double x1 = x + screenZ;
196
197 // scattering with nucleus
198 if(cosTetMaxNuc < cosTetMinNuc) {
199 nucXSection = fac*(cosTetMinNuc - cosTetMaxNuc)/
200 (x1*(1.0 - cosTetMaxNuc + screenZ));
201 }
202
203 return nucXSection;
204}

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

◆ operator=()

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

◆ SampleCosineTheta()

G4double G4IonCoulombCrossSection::SampleCosineTheta ( )

Definition at line 208 of file G4IonCoulombCrossSection.cc.

209{
210 G4double z1 = 0.0;
211 if(cosTetMaxNuc < cosTetMinNuc) {
212
213 G4double x1 = 1. - cosTetMinNuc + screenZ;
214 G4double x2 = 1. - cosTetMaxNuc + screenZ;
215 G4double dx = cosTetMinNuc - cosTetMaxNuc;
216 z1 = x1*x2/(x1 + G4UniformRand()*dx) - screenZ;
217 }
218 return z1;
219}
#define G4UniformRand()
Definition: Randomize.hh:52

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

◆ SetupKinematic()

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

Definition at line 107 of file G4IonCoulombCrossSection.cc.

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

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

◆ SetupParticle()

void G4IonCoulombCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

Definition at line 147 of file G4IonCoulombCrossSection.hh.

148{
149 particle = p;
150 mass = particle->GetPDGMass();
151 spin = particle->GetPDGSpin();
152 if(0.0 != spin) { spin = 0.5; }
153 G4double q = particle->GetPDGCharge()/CLHEP::eplus;
154 chargeSquare = q*q;
155 tkin = 0.0;
156}
G4double GetPDGCharge() const

Referenced by Initialise().

◆ SetupTarget()

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

Definition at line 139 of file G4IonCoulombCrossSection.cc.

141{
142 if(Z != targetZ || e != etag) {
143 etag = e;
144 targetZ = Z;
145 G4int iz= G4lrint(Z);
146
147 SetScreenRSquare(iz);
148 screenZ = 0;
149 screenZ = ScreenRSquare/mom2;
150 //heavycorr = 0;
151 // G4cout<< "heavycorr "<<heavycorr<<G4endl;
152
153 G4double corr=5.*twopi*Z*std::sqrt(chargeSquare*alpha2);
154 corr=G4Exp(G4Log(corr)*0.04);
155 screenZ *=0.5*(1.13 + corr*3.76*Z*Z*chargeSquare*invbeta2*alpha2);
156 // G4cout<<" heavycorr Z e corr....2As "<< heavycorr << "\t"
157 // <<Z <<"\t"<<e/MeV <<"\t"<<screenZ<<G4endl;
158
159 if(1 == iz && particle == theProton && cosTetMaxNuc < 0.0) {
160 cosTetMaxNuc = 0.0;
161 }
162 }
163}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:180
G4double G4Log(G4double x)
Definition: G4Log.hh:227
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
int G4lrint(double ad)
Definition: templates.hh:134

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


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