Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 ( )
explicit

Definition at line 70 of file G4IonCoulombCrossSection.cc.

70  :
71  cosThetaMin(1.0),
72  cosThetaMax(-1.0),
74 {
75  fNistManager = G4NistManager::Instance();
76  fG4pow = G4Pow::GetInstance();
77  theProton = G4Proton::Proton();
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 
90  targetZ = targetMass = screenZ = ScreenRSquare = etag = 0.0;
91 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
static G4NistManager * Instance()
static constexpr double twopi
Definition: G4SIunits.hh:76
static constexpr double electron_mass_c2
static constexpr double classic_electr_radius
static G4Proton * Proton()
Definition: G4Proton.cc:93
double G4double
Definition: G4Types.hh:76
static constexpr double fine_structure_const

Here is the call graph for this function:

G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )
virtual

Definition at line 94 of file G4IonCoulombCrossSection.cc.

95 {}

Member Function Documentation

G4double G4IonCoulombCrossSection::GetMomentum2 ( )
inline

Definition at line 159 of file G4IonCoulombCrossSection.hh.

160 {
161  return mom2;
162 }
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 }
const char * p
Definition: xmltok.h:285
void SetupParticle(const G4ParticleDefinition *)
#define DBL_MAX
Definition: templates.hh:83

Here is the call graph for this function:

Here is the caller graph for this function:

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 }
static const G4double fac
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

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:97
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

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 }
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

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 }
const char * p
Definition: xmltok.h:285
static constexpr double eplus
G4double GetPDGMass() const
G4double GetPDGSpin() const
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:

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 }
int G4int
Definition: G4Types.hh:78
static constexpr double twopi
Definition: G4SIunits.hh:76
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:


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