Geant4  10.02.p03
G4IonsKoxCrossSection Class Reference

#include <G4IonsKoxCrossSection.hh>

Inheritance diagram for G4IonsKoxCrossSection:
Collaboration diagram for G4IonsKoxCrossSection:

Public Member Functions

 G4IonsKoxCrossSection ()
 
 ~G4IonsKoxCrossSection ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *aDP, G4int Z, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual void CrossSectionDescription (std::ostream &) const
 
- Public Member Functions inherited from G4VCrossSectionDataSet
 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
virtual G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
virtual G4int GetVerboseLevel () const
 
virtual void SetVerboseLevel (G4int value)
 
G4double GetMinKinEnergy () const
 
void SetMinKinEnergy (G4double value)
 
G4double GetMaxKinEnergy () const
 
void SetMaxKinEnergy (G4double value)
 
const G4StringGetName () const
 

Private Member Functions

G4double calEcm (G4double, G4double, G4double)
 
G4double calCeValue (G4double)
 

Private Attributes

G4double r0
 
G4double rc
 

Additional Inherited Members

- Protected Member Functions inherited from G4VCrossSectionDataSet
void SetName (const G4String &)
 
- Protected Attributes inherited from G4VCrossSectionDataSet
G4int verboseLevel
 

Detailed Description

Definition at line 46 of file G4IonsKoxCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonsKoxCrossSection()

G4IonsKoxCrossSection::G4IonsKoxCrossSection ( )

Definition at line 41 of file G4IonsKoxCrossSection.cc.

42  : G4VCrossSectionDataSet("IonsKox"),
43 // lowerLimit ( 10*MeV ),
44  r0 ( 1.1*fermi ), rc ( 1.3*fermi )
45 {}
G4VCrossSectionDataSet(const G4String &nam="")
static const double fermi
Definition: G4SIunits.hh:102

◆ ~G4IonsKoxCrossSection()

G4IonsKoxCrossSection::~G4IonsKoxCrossSection ( )

Definition at line 47 of file G4IonsKoxCrossSection.cc.

48 {}

Member Function Documentation

◆ calCeValue()

G4double G4IonsKoxCrossSection::calCeValue ( G4double  ke)
private

Definition at line 125 of file G4IonsKoxCrossSection.cc.

126 {
127  // Calculate c value
128  // This value is indepenent from projectile and target particle
129  // ke is projectile kinetic energy per nucleon in the Lab system with MeV unit
130  // fitting function is made by T. Koi
131  // There are no data below 30 MeV/n in Kox et al.,
132 
133  G4double Ce;
134  G4double log10_ke = std::log10 ( ke );
135  if (log10_ke > 1.5)
136  {
137  Ce = - 10.0 / G4Pow::GetInstance()->powA ( G4double(log10_ke) , G4double(5) ) + 2.0;
138  }
139  else
140  {
141  Ce = (-10.0/G4Pow::GetInstance()->powA(G4double(1.5), G4double(5) ) + 2.0) /
143 
144  }
145  return Ce;
146 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ calEcm()

G4double G4IonsKoxCrossSection::calEcm ( G4double  mp,
G4double  mt,
G4double  Plab 
)
private

Definition at line 115 of file G4IonsKoxCrossSection.cc.

116 {
117  G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
118  G4double Ecm = std::sqrt ( mp * mp + mt * mt + 2 * Elab * mt );
119  G4double Pcm = Plab * mt / Ecm;
120  G4double KEcm = std::sqrt ( Pcm * Pcm + mp * mp ) - mp;
121  return KEcm;
122 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ CrossSectionDescription()

void G4IonsKoxCrossSection::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 51 of file G4IonsKoxCrossSection.cc.

52 {
53  outFile << "G4IonsKoxCrossSection calculates the total reaction cross\n"
54  << "section for nucleus-nucleus scattering using the Kox\n"
55  << "parameterization. It is valid for projectiles and targets\n"
56  << "of all Z, at projectile energies up to 10 GeV/n. If the\n"
57  << "projectile energy is less than 10 MeV/n, a zero cross section\n"
58  << "is returned.\n";
59 }

◆ GetElementCrossSection()

G4double G4IonsKoxCrossSection::GetElementCrossSection ( const G4DynamicParticle aParticle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 68 of file G4IonsKoxCrossSection.cc.

70 {
71  G4double xsection = 0.0;
72 
73  G4int Ap = aParticle->GetDefinition()->GetBaryonNumber();
74  G4int Zp = G4int(aParticle->GetDefinition()->GetPDGCharge() / eplus + 0.5);
75  G4double ke_per_N = aParticle->GetKineticEnergy() / Ap;
76 
77  // Apply energy check, if less than lower limit then 0 value is returned
78  // if ( ke_per_N < lowerLimit ) return xsection;
79 
80  G4int At = G4lrint(G4NistManager::Instance()->GetAtomicMassAmu(ZZ));
81  G4int Zt = ZZ;
82 
83  G4double one_third = 1.0 / 3.0;
84 
85  G4double cubicrAt = G4Pow::GetInstance()->powA ( G4double(At) , G4double(one_third) );
86  G4double cubicrAp = G4Pow::GetInstance()->powA ( G4double(Ap) , G4double(one_third) );
87 
88  // rc divide fermi
89  G4double Bc = Zt * Zp / ( (rc/fermi) * (cubicrAp+cubicrAt) );
90 
91  G4double targ_mass = G4NucleiProperties::GetNuclearMass(At, Zt);
92  G4double proj_mass = aParticle->GetMass();
93  G4double proj_momentum = aParticle->GetMomentum().mag();
94 
95  G4double Ecm = calEcm ( proj_mass , targ_mass , proj_momentum );
96  if( Ecm <= Bc) return xsection;
97 
98  G4double Rvol = r0 * ( cubicrAp + cubicrAt );
99 
100 // G4double ke_per_N = aParticle->GetKineticEnergy() / Ap;
101  G4double c = calCeValue ( ke_per_N / MeV );
102 
103  G4double a = 1.85;
104  G4double Rsurf = r0 * (a*cubicrAp * cubicrAt/(cubicrAp + cubicrAt) - c);
105  G4double D = 5.0 * ( At - 2 * Zt ) * Zp / ( Ap * At );
106  Rsurf = Rsurf + D * fermi; // multiply D by fermi
107 
108  G4double Rint = Rvol + Rsurf;
109  xsection = pi * Rint * Rint * ( 1 - Bc / ( Ecm / MeV ) );
110 
111  return xsection;
112 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
G4double GetMass() const
static const double MeV
Definition: G4SIunits.hh:211
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double calCeValue(G4double)
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
double mag() const
static const double pi
Definition: G4SIunits.hh:74
int G4lrint(double ad)
Definition: templates.hh:163
double D(double temp)
G4ParticleDefinition * GetDefinition() const
G4double powA(G4double A, G4double y) const
Definition: G4Pow.hh:259
double G4double
Definition: G4Types.hh:76
static const double eplus
Definition: G4SIunits.hh:196
G4double GetPDGCharge() const
static const double fermi
Definition: G4SIunits.hh:102
G4double calEcm(G4double, G4double, G4double)
Here is the call graph for this function:

◆ IsElementApplicable()

G4bool G4IonsKoxCrossSection::IsElementApplicable ( const G4DynamicParticle aDP,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 61 of file G4IonsKoxCrossSection.cc.

63 {
64  return (1 <= aDP->GetDefinition()->GetBaryonNumber());
65 }
G4ParticleDefinition * GetDefinition() const
Here is the call graph for this function:

Member Data Documentation

◆ r0

G4double G4IonsKoxCrossSection::r0
private

Definition at line 70 of file G4IonsKoxCrossSection.hh.

◆ rc

G4double G4IonsKoxCrossSection::rc
private

Definition at line 71 of file G4IonsKoxCrossSection.hh.


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