Geant4 10.7.0
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 ()
 
virtual ~G4IonCoulombCrossSection ()
 
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 ()
 

Detailed Description

Definition at line 69 of file G4IonCoulombCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonCoulombCrossSection()

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=0;
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 ( )
virtual

Definition at line 94 of file G4IonCoulombCrossSection.cc.

95{}

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

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
194 G4double fac = coeff*targetZ*(targetZ)*chargeSquare*invbeta2/mom2;
195
196 nucXSection = 0.0;
197
198 G4double x = 1.0 - cosTetMinNuc;
199 G4double x1 = x + screenZ;
200
201 // scattering with nucleus
202 if(cosTetMaxNuc < cosTetMinNuc) {
203 nucXSection = fac*(cosTetMinNuc - cosTetMaxNuc)/
204 (x1*(1.0 - cosTetMaxNuc + screenZ));
205 }
206
207 return nucXSection;
208}

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

◆ SampleCosineTheta()

G4double G4IonCoulombCrossSection::SampleCosineTheta ( )

Definition at line 212 of file G4IonCoulombCrossSection.cc.

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

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

◆ 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);
118 invbetaLab2 = 1.0 + mass*mass/momLab2;
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
136 cosTetMinNuc = cosThetaMin;
137 cosTetMaxNuc = cosThetaMax;
138 }
139}

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 143 of file G4IonCoulombCrossSection.cc.

145{
146 if(Z != targetZ || e != etag) {
147 etag = e;
148 targetZ = Z;
149 G4int iz= G4lrint(Z);
150
151 SetScreenRSquare(iz);
152 screenZ = 0;
153 screenZ = ScreenRSquare/mom2;
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
int G4int
Definition: G4Types.hh:85
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: