Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Attributes
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 ( )

Definition at line 67 of file G4IonCoulombCrossSection.cc.

References chargeSquare, python.hepunit::classic_electr_radius, coeff, cosTetMaxNuc, cosTetMinNuc, ecut, python.hepunit::electron_mass_c2, etag, G4NistManager::Instance(), invbeta2, invbetaLab2, mass, mom2, momLab2, nucXSection, particle, G4Proton::Proton(), screenZ, spin, targetMass, targetZ, tkin, tkinLab, and python.hepunit::twopi.

67  :
68  cosThetaMin(1.0),
69  cosThetaMax(-1.0),
71 {
72  fNistManager = G4NistManager::Instance();
73  theProton = G4Proton::Proton();
74  particle=0;
75 
77  coeff = twopi*p0*p0;
78 
79  cosTetMinNuc=0;
80  cosTetMaxNuc=0;
81  nucXSection =0;
82 
83 
84  chargeSquare = spin = mass =0;
86  tkin = mom2 = invbeta2=0;
87 
88  targetZ = targetMass = screenZ =0;
89  ScreenRSquare=0.;
90 
91  etag = ecut = 0.0;
92 
93 }
static G4NistManager * Instance()
const G4ParticleDefinition * particle
static G4Proton * Proton()
Definition: G4Proton.cc:93
float electron_mass_c2
Definition: hepunit.py:274
double G4double
Definition: G4Types.hh:76
G4IonCoulombCrossSection::~G4IonCoulombCrossSection ( )
virtual

Definition at line 96 of file G4IonCoulombCrossSection.cc.

97 {}

Member Function Documentation

G4double G4IonCoulombCrossSection::GetMomentum2 ( )
inline

Definition at line 177 of file G4IonCoulombCrossSection.hh.

References mom2.

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

177  {
178  return mom2;
179 }
void G4IonCoulombCrossSection::Initialise ( const G4ParticleDefinition p,
G4double  cosThetaLim 
)

Definition at line 100 of file G4IonCoulombCrossSection.cc.

References cosThetaMin, DBL_MAX, DBL_MIN, ecut, etag, mom2, nucXSection, particle, SetupParticle(), targetZ, and tkin.

Referenced by G4IonCoulombScatteringModel::Initialise().

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 }
const char * p
Definition: xmltok.h:285
const G4ParticleDefinition * particle
void SetupParticle(const G4ParticleDefinition *)
#define DBL_MIN
Definition: templates.hh:75
#define DBL_MAX
Definition: templates.hh:83
G4double G4IonCoulombCrossSection::NuclearCrossSection ( )

Definition at line 211 of file G4IonCoulombCrossSection.cc.

References chargeSquare, coeff, cosTetMaxNuc, cosTetMinNuc, invbeta2, mom2, nucXSection, screenZ, and targetZ.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

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
224  if(cosTetMaxNuc < cosTetMinNuc) {
225 
227  (x1*(1.0 - cosTetMaxNuc + screenZ));
228 
229  }
230 
231  return nucXSection;
232 }
double G4double
Definition: G4Types.hh:76
G4double G4IonCoulombCrossSection::SampleCosineTheta ( )

Definition at line 236 of file G4IonCoulombCrossSection.cc.

References cosTetMaxNuc, cosTetMinNuc, G4UniformRand, and screenZ.

Referenced by G4IonCoulombScatteringModel::SampleSecondaries().

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:87
double G4double
Definition: G4Types.hh:76
void G4IonCoulombCrossSection::SetupKinematic ( G4double  kinEnergy,
G4double  cut,
G4int  iz 
)

Definition at line 116 of file G4IonCoulombCrossSection.cc.

References python.hepunit::amu_c2, cosTetMaxNuc, cosTetMinNuc, cosThetaMax, cosThetaMin, ecut, G4NistManager::GetAtomicMassAmu(), invbeta2, invbetaLab2, mass, mom2, momLab2, targetMass, tkin, and tkinLab.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

118 {
119  if(ekin != tkinLab || ecut != cut) {
120 
121  // lab
122  tkinLab = ekin;
123  momLab2 = tkinLab*(tkinLab + 2.0*mass);
124  invbetaLab2 = 1.0 + mass*mass/momLab2;
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 iz
Definition: TRTMaterials.hh:39
G4double GetAtomicMassAmu(const G4String &symb) const
double G4double
Definition: G4Types.hh:76
float amu_c2
Definition: hepunit.py:277
void G4IonCoulombCrossSection::SetupParticle ( const G4ParticleDefinition p)
inline

Definition at line 164 of file G4IonCoulombCrossSection.hh.

References chargeSquare, G4ParticleDefinition::GetPDGCharge(), G4ParticleDefinition::GetPDGMass(), G4ParticleDefinition::GetPDGSpin(), mass, particle, spin, and tkin.

Referenced by Initialise().

165 {
166  particle = p;
167  mass = particle->GetPDGMass();
168  spin = particle->GetPDGSpin();
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 }
const char * p
Definition: xmltok.h:285
const G4ParticleDefinition * particle
G4double GetPDGMass() const
G4double GetPDGSpin() const
double G4double
Definition: G4Types.hh:76
G4double GetPDGCharge() const
void G4IonCoulombCrossSection::SetupTarget ( G4double  Z,
G4double  kinEnergy,
G4int  heavycorr 
)

Definition at line 154 of file G4IonCoulombCrossSection.cc.

References chargeSquare, cosTetMaxNuc, etag, invbeta2, iz, mom2, particle, screenZ, targetZ, and python.hepunit::twopi.

Referenced by G4IonCoulombScatteringModel::ComputeCrossSectionPerAtom().

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:78
const G4ParticleDefinition * particle
G4double iz
Definition: TRTMaterials.hh:39
double G4double
Definition: G4Types.hh:76

Field Documentation

G4double G4IonCoulombCrossSection::chargeSquare
protected
G4double G4IonCoulombCrossSection::coeff
protected

Definition at line 113 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and NuclearCrossSection().

G4double G4IonCoulombCrossSection::cosTetMaxNuc
protected
G4double G4IonCoulombCrossSection::cosTetMinNuc
protected
G4double G4IonCoulombCrossSection::cosThetaMax
protected

Definition at line 117 of file G4IonCoulombCrossSection.hh.

Referenced by SetupKinematic().

G4double G4IonCoulombCrossSection::cosThetaMin
protected

Definition at line 116 of file G4IonCoulombCrossSection.hh.

Referenced by Initialise(), and SetupKinematic().

G4double G4IonCoulombCrossSection::ecut
protected
G4double G4IonCoulombCrossSection::etag
protected

Definition at line 129 of file G4IonCoulombCrossSection.hh.

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

G4double G4IonCoulombCrossSection::invbeta2
protected
G4double G4IonCoulombCrossSection::invbetaLab2
protected

Definition at line 141 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

G4double G4IonCoulombCrossSection::mass
protected
G4double G4IonCoulombCrossSection::mom2
protected
G4double G4IonCoulombCrossSection::momLab2
protected

Definition at line 140 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

G4double G4IonCoulombCrossSection::nucXSection
protected
const G4ParticleDefinition* G4IonCoulombCrossSection::particle
protected
G4double G4IonCoulombCrossSection::screenZ
protected
G4double G4IonCoulombCrossSection::spin
protected

Definition at line 135 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupParticle().

G4double G4IonCoulombCrossSection::targetMass
protected

Definition at line 150 of file G4IonCoulombCrossSection.hh.

Referenced by G4IonCoulombCrossSection(), and SetupKinematic().

G4double G4IonCoulombCrossSection::targetZ
protected
G4double G4IonCoulombCrossSection::tkin
protected
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: