Geant4  10.02.p03
G4IonCoulombCrossSection Class Reference

#include <G4IonCoulombCrossSection.hh>

Collaboration diagram for G4IonCoulombCrossSection:

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

Private Member Functions

void SetScreenRSquare (G4int iz)
 
G4IonCoulombCrossSectionoperator= (const G4IonCoulombCrossSection &right)
 
 G4IonCoulombCrossSection (const G4IonCoulombCrossSection &)
 

Private Attributes

const G4ParticleDefinitiontheProton
 
G4NistManagerfNistManager
 
G4PowfG4pow
 
G4double coeff
 
G4double cosThetaMin
 
G4double cosThetaMax
 
G4double cosTetMinNuc
 
G4double cosTetMaxNuc
 
G4double nucXSection
 
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
 
G4double alpha2
 
G4double ScreenRSquare
 

Detailed Description

Definition at line 69 of file G4IonCoulombCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonCoulombCrossSection() [1/2]

G4IonCoulombCrossSection::G4IonCoulombCrossSection ( )

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 
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 
91 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
const G4ParticleDefinition * theProton
static G4NistManager * Instance()
const G4ParticleDefinition * particle
int fine_structure_const
Definition: hepunit.py:287
static const double twopi
Definition: G4SIunits.hh:75
static G4Proton * Proton()
Definition: G4Proton.cc:93
float electron_mass_c2
Definition: hepunit.py:274
int classic_electr_radius
Definition: hepunit.py:288
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:

◆ ~G4IonCoulombCrossSection()

G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )
virtual

Definition at line 94 of file G4IonCoulombCrossSection.cc.

95 {}

◆ G4IonCoulombCrossSection() [2/2]

G4IonCoulombCrossSection::G4IonCoulombCrossSection ( const G4IonCoulombCrossSection )
private

Member Function Documentation

◆ GetMomentum2()

G4double G4IonCoulombCrossSection::GetMomentum2 ( )
inline

Definition at line 158 of file G4IonCoulombCrossSection.hh.

159 {
160  return mom2;
161 }

◆ Initialise()

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

Definition at line 99 of file G4IonCoulombCrossSection.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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
202  if(cosTetMaxNuc < cosTetMinNuc) {
203  nucXSection = fac*(cosTetMinNuc - cosTetMaxNuc)/
204  (x1*(1.0 - cosTetMaxNuc + screenZ));
205  }
206 
207  return nucXSection;
208 }
Double_t x1[nxs]
static const G4double fac
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ operator=()

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

◆ 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;
220  z1 = x1*x2/(x1 + G4UniformRand()*dx) - screenZ;
221  }
222  return z1;
223 }
Double_t x2[nxs]
#define G4UniformRand()
Definition: Randomize.hh:97
Double_t x1[nxs]
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ 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
const G4ParticleDefinition * theProton
int G4int
Definition: G4Types.hh:78
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:254
const G4ParticleDefinition * particle
G4double iz
Definition: TRTMaterials.hh:39
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
int G4lrint(double ad)
Definition: templates.hh:163
double G4double
Definition: G4Types.hh:76
Double_t Z1
Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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 
138  }
139 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ SetupParticle()

void G4IonCoulombCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

Definition at line 146 of file G4IonCoulombCrossSection.hh.

147 {
148  particle = p;
149  mass = particle->GetPDGMass();
150  spin = particle->GetPDGSpin();
151  if(0.0 != spin) { spin = 0.5; }
152  G4double q = std::fabs(particle->GetPDGCharge()/CLHEP::eplus);
153  chargeSquare = q*q;
154  tkin = 0.0;
155 }
const G4ParticleDefinition * particle
static const double eplus
double G4double
Definition: G4Types.hh:76
G4double GetPDGCharge() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ 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;
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 }
const G4ParticleDefinition * theProton
int G4int
Definition: G4Types.hh:78
const G4ParticleDefinition * particle
Float_t Z
G4double iz
Definition: TRTMaterials.hh:39
static const double twopi
Definition: G4SIunits.hh:75
G4double G4Log(G4double x)
Definition: G4Log.hh:230
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
int G4lrint(double ad)
Definition: templates.hh:163
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ alpha2

G4double G4IonCoulombCrossSection::alpha2
private

Definition at line 139 of file G4IonCoulombCrossSection.hh.

◆ chargeSquare

G4double G4IonCoulombCrossSection::chargeSquare
private

Definition at line 121 of file G4IonCoulombCrossSection.hh.

◆ coeff

G4double G4IonCoulombCrossSection::coeff
private

Definition at line 103 of file G4IonCoulombCrossSection.hh.

◆ cosTetMaxNuc

G4double G4IonCoulombCrossSection::cosTetMaxNuc
private

Definition at line 110 of file G4IonCoulombCrossSection.hh.

◆ cosTetMinNuc

G4double G4IonCoulombCrossSection::cosTetMinNuc
private

Definition at line 109 of file G4IonCoulombCrossSection.hh.

◆ cosThetaMax

G4double G4IonCoulombCrossSection::cosThetaMax
private

Definition at line 107 of file G4IonCoulombCrossSection.hh.

◆ cosThetaMin

G4double G4IonCoulombCrossSection::cosThetaMin
private

Definition at line 106 of file G4IonCoulombCrossSection.hh.

◆ etag

G4double G4IonCoulombCrossSection::etag
private

Definition at line 116 of file G4IonCoulombCrossSection.hh.

◆ fG4pow

G4Pow* G4IonCoulombCrossSection::fG4pow
private

Definition at line 101 of file G4IonCoulombCrossSection.hh.

◆ fNistManager

G4NistManager* G4IonCoulombCrossSection::fNistManager
private

Definition at line 100 of file G4IonCoulombCrossSection.hh.

◆ invbeta2

G4double G4IonCoulombCrossSection::invbeta2
private

Definition at line 133 of file G4IonCoulombCrossSection.hh.

◆ invbetaLab2

G4double G4IonCoulombCrossSection::invbetaLab2
private

Definition at line 128 of file G4IonCoulombCrossSection.hh.

◆ mass

G4double G4IonCoulombCrossSection::mass
private

Definition at line 123 of file G4IonCoulombCrossSection.hh.

◆ mom2

G4double G4IonCoulombCrossSection::mom2
private

Definition at line 132 of file G4IonCoulombCrossSection.hh.

◆ momLab2

G4double G4IonCoulombCrossSection::momLab2
private

Definition at line 127 of file G4IonCoulombCrossSection.hh.

◆ nucXSection

G4double G4IonCoulombCrossSection::nucXSection
private

Definition at line 113 of file G4IonCoulombCrossSection.hh.

◆ particle

const G4ParticleDefinition* G4IonCoulombCrossSection::particle
private

Definition at line 119 of file G4IonCoulombCrossSection.hh.

◆ ScreenRSquare

G4double G4IonCoulombCrossSection::ScreenRSquare
private

Definition at line 140 of file G4IonCoulombCrossSection.hh.

◆ screenZ

G4double G4IonCoulombCrossSection::screenZ
private

Definition at line 138 of file G4IonCoulombCrossSection.hh.

◆ spin

G4double G4IonCoulombCrossSection::spin
private

Definition at line 122 of file G4IonCoulombCrossSection.hh.

◆ targetMass

G4double G4IonCoulombCrossSection::targetMass
private

Definition at line 137 of file G4IonCoulombCrossSection.hh.

◆ targetZ

G4double G4IonCoulombCrossSection::targetZ
private

Definition at line 136 of file G4IonCoulombCrossSection.hh.

◆ theProton

const G4ParticleDefinition* G4IonCoulombCrossSection::theProton
private

Definition at line 98 of file G4IonCoulombCrossSection.hh.

◆ tkin

G4double G4IonCoulombCrossSection::tkin
private

Definition at line 131 of file G4IonCoulombCrossSection.hh.

◆ tkinLab

G4double G4IonCoulombCrossSection::tkinLab
private

Definition at line 126 of file G4IonCoulombCrossSection.hh.


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