Geant4 9.6.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 SetupParticle (const G4ParticleDefinition *)
 
void SetupKinematic (G4double kinEnergy, G4double cut, G4int iz)
 
void SetupTarget (G4double Z, G4double kinEnergy, G4int heavycorr)
 
G4double GetMomentum2 ()
 

Protected Attributes

G4double coeff
 
G4double cosThetaMin
 
G4double cosThetaMax
 
G4double cosTetMinNuc
 
G4double cosTetMaxNuc
 
G4double nucXSection
 
G4double ecut
 
G4double etag
 
const G4ParticleDefinitionparticle
 
G4double chargeSquare
 
G4double spin
 
G4double mass
 
G4double tkinLab
 
G4double momLab2
 
G4double invbetaLab2
 
G4double tkin
 
G4double mom2
 
G4double invbeta2
 
G4double targetZ
 
G4double targetMass
 
G4double screenZ
 

Detailed Description

Definition at line 76 of file G4IonCoulombCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonCoulombCrossSection()

G4IonCoulombCrossSection::G4IonCoulombCrossSection ( )

Definition at line 67 of file G4IonCoulombCrossSection.cc.

67 :
68 cosThetaMin(1.0),
69 cosThetaMax(-1.0),
70 alpha2(fine_structure_const*fine_structure_const)
71{
72 fNistManager = G4NistManager::Instance();
73 theProton = G4Proton::Proton();
74 particle=0;
75
76 G4double p0 = electron_mass_c2*classic_electr_radius;
77 coeff = twopi*p0*p0;
78
81 nucXSection =0;
82
83
84 chargeSquare = spin = mass =0;
86 tkin = mom2 = invbeta2=0;
87
89 ScreenRSquare=0.;
90
91 etag = ecut = 0.0;
92
93}
double G4double
Definition: G4Types.hh:64
const G4ParticleDefinition * particle
static G4NistManager * Instance()
static G4Proton * Proton()
Definition: G4Proton.cc:93

◆ ~G4IonCoulombCrossSection()

G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )
virtual

Definition at line 96 of file G4IonCoulombCrossSection.cc.

97{}

Member Function Documentation

◆ GetMomentum2()

G4double G4IonCoulombCrossSection::GetMomentum2 ( )
inline

Definition at line 177 of file G4IonCoulombCrossSection.hh.

177 {
178 return mom2;
179}

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

◆ Initialise()

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

Definition at line 100 of file G4IonCoulombCrossSection.cc.

102{
103
104 SetupParticle(p);
105 nucXSection = 0.0;
106 tkin = targetZ = mom2 = DBL_MIN;
107 ecut = etag = DBL_MAX;
108 particle = p;
109
110
111 cosThetaMin = CosThetaLim;
112
113}
void SetupParticle(const G4ParticleDefinition *)
#define DBL_MIN
Definition: templates.hh:75
#define DBL_MAX
Definition: templates.hh:83

Referenced by G4IonCoulombScatteringModel::Initialise().

◆ NuclearCrossSection()

G4double G4IonCoulombCrossSection::NuclearCrossSection ( )

Definition at line 211 of file G4IonCoulombCrossSection.cc.

212{
213 // This method needs initialisation before be called
214
215 // scattering with target nucleus
217
218 nucXSection = 0.0;
219
220 G4double x = 1.0 - cosTetMinNuc;
221 G4double x1 = x + screenZ;
222
223 // scattering with nucleus
225
227 (x1*(1.0 - cosTetMaxNuc + screenZ));
228
229 }
230
231 return nucXSection;
232}

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

◆ SampleCosineTheta()

G4double G4IonCoulombCrossSection::SampleCosineTheta ( )

Definition at line 236 of file G4IonCoulombCrossSection.cc.

237{
238
239 if(cosTetMaxNuc >= cosTetMinNuc) return 0.0;
240
241 G4double x1 = 1. - cosTetMinNuc + screenZ;
242 G4double x2 = 1. - cosTetMaxNuc + screenZ;
244 G4double /*grej,*/ z1;
245
246 z1 = x1*x2/(x1 + G4UniformRand()*dx) - screenZ;
247 //grej = 1.0/(1.0 + z1);
248 return z1;
249}
#define G4UniformRand()
Definition: Randomize.hh:53

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

◆ SetupKinematic()

void G4IonCoulombCrossSection::SetupKinematic ( G4double  kinEnergy,
G4double  cut,
G4int  iz 
)

Definition at line 116 of file G4IonCoulombCrossSection.cc.

118{
119 if(ekin != tkinLab || ecut != cut) {
120
121 // lab
122 tkinLab = ekin;
123 momLab2 = tkinLab*(tkinLab + 2.0*mass);
125
126 G4double etot = tkinLab + mass;
127 G4double ptot = sqrt(momLab2);
128 G4double m12 = mass*mass;
129
130 targetMass=fNistManager->GetAtomicMassAmu(iz)*amu_c2;
131
132 // relativistic reduced mass from publucation
133 // A.P. Martynenko, R.N. Faustov, Teoret. mat. Fiz. 64 (1985) 179
134
135 //incident particle & target nucleus
136 G4double Ecm=sqrt(m12 + targetMass*targetMass + 2.0*etot*targetMass);
137 G4double mu_rel=mass*targetMass/Ecm;
138 G4double momCM= ptot*targetMass/Ecm;
139 // relative system
140 mom2 = momCM*momCM;
141 invbeta2 = 1.0 + mu_rel*mu_rel/mom2;
142 tkin = momCM*sqrt(invbeta2) - mu_rel;//Ekin of mu_rel
143 //.........................................................
144
147
148 }
149
150}
G4double GetAtomicMassAmu(const G4String &symb) const

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

◆ SetupParticle()

void G4IonCoulombCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

Definition at line 164 of file G4IonCoulombCrossSection.hh.

165{
166 particle = p;
169 if(0.0 != spin) { spin = 0.5; }
170 G4double q = std::fabs(particle->GetPDGCharge()/CLHEP::eplus);
171 chargeSquare = q*q;
172 tkin = 0.0;
173}
G4double GetPDGCharge() const

Referenced by Initialise(), and G4IonCoulombScatteringModel::SetupParticle().

◆ SetupTarget()

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

Definition at line 154 of file G4IonCoulombCrossSection.cc.

155{
156 if(Z != targetZ || e != etag) {
157 etag = e;
158 targetZ = Z;
159 G4int iz= G4int(Z);
160
161 SetScreenRSquare(iz);
162 screenZ =0;
163 screenZ = ScreenRSquare/mom2;
164
165 // G4cout<< "heavycorr "<<heavycorr<<G4endl;
166
167 if(heavycorr!=0 && particle != theProton){
168 G4double corr=5.*twopi*Z*std::sqrt(chargeSquare*alpha2);
169 corr=std::pow(corr,0.12);
170 screenZ *=(1.13 + corr*3.76*Z*Z*chargeSquare*invbeta2*alpha2)/2.;
171// G4cout<<" heavycorr Z e corr....2As "<< heavycorr << "\t"
172// <<Z <<"\t"<<e/MeV <<"\t"<<screenZ<<G4endl;
173
174 }else{ screenZ *=(1.13 + 3.76*Z*Z*chargeSquare*invbeta2*alpha2)/2.;
175// G4cout<<" heavycorr Z e....2As "<< heavycorr << "\t"
176// <<Z <<"\t"<< e/MeV <<"\t" <<screenZ<<G4endl;
177 }
178
179 if(1 == iz && particle == theProton && cosTetMaxNuc < 0.0) {
180 cosTetMaxNuc = 0.0;
181 }
182
183 }
184}
int G4int
Definition: G4Types.hh:66

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

Member Data Documentation

◆ chargeSquare

G4double G4IonCoulombCrossSection::chargeSquare
protected

◆ coeff

G4double G4IonCoulombCrossSection::coeff
protected

Definition at line 113 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and NuclearCrossSection().

◆ cosTetMaxNuc

G4double G4IonCoulombCrossSection::cosTetMaxNuc
protected

◆ cosTetMinNuc

G4double G4IonCoulombCrossSection::cosTetMinNuc
protected

◆ cosThetaMax

G4double G4IonCoulombCrossSection::cosThetaMax
protected

Definition at line 117 of file G4IonCoulombCrossSection.hh.

Referenced by SetupKinematic().

◆ cosThetaMin

G4double G4IonCoulombCrossSection::cosThetaMin
protected

Definition at line 116 of file G4IonCoulombCrossSection.hh.

Referenced by Initialise(), and SetupKinematic().

◆ ecut

G4double G4IonCoulombCrossSection::ecut
protected

◆ etag

G4double G4IonCoulombCrossSection::etag
protected

Definition at line 129 of file G4IonCoulombCrossSection.hh.

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

◆ invbeta2

G4double G4IonCoulombCrossSection::invbeta2
protected

◆ invbetaLab2

G4double G4IonCoulombCrossSection::invbetaLab2
protected

Definition at line 141 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ mass

G4double G4IonCoulombCrossSection::mass
protected

◆ mom2

G4double G4IonCoulombCrossSection::mom2
protected

◆ momLab2

G4double G4IonCoulombCrossSection::momLab2
protected

Definition at line 140 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ nucXSection

G4double G4IonCoulombCrossSection::nucXSection
protected

◆ particle

const G4ParticleDefinition* G4IonCoulombCrossSection::particle
protected

◆ screenZ

G4double G4IonCoulombCrossSection::screenZ
protected

◆ spin

G4double G4IonCoulombCrossSection::spin
protected

Definition at line 135 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupParticle().

◆ targetMass

G4double G4IonCoulombCrossSection::targetMass
protected

Definition at line 150 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

◆ targetZ

G4double G4IonCoulombCrossSection::targetZ
protected

◆ tkin

G4double G4IonCoulombCrossSection::tkin
protected

◆ tkinLab

G4double G4IonCoulombCrossSection::tkinLab
protected

Definition at line 139 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().


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