Geant4  10.02.p03
G4IonsShenCrossSection Class Reference

#include <G4IonsShenCrossSection.hh>

Inheritance diagram for G4IonsShenCrossSection:
Collaboration diagram for G4IonsShenCrossSection:

Public Member Functions

 G4IonsShenCrossSection ()
 
virtual ~G4IonsShenCrossSection ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *aDP, G4int Z, const G4Material *)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
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 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 calEcmValue (const G4double, const G4double, const G4double)
 
G4double calCeValue (const G4double)
 

Private Attributes

const G4double upperLimit
 
const G4double r0
 

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 51 of file G4IonsShenCrossSection.hh.

Constructor & Destructor Documentation

◆ G4IonsShenCrossSection()

G4IonsShenCrossSection::G4IonsShenCrossSection ( )

Definition at line 42 of file G4IonsShenCrossSection.cc.

43  : G4VCrossSectionDataSet("IonsShen"),
44  upperLimit( 10*GeV ),
45 // lowerLimit( 10*MeV ),
46  r0 ( 1.1 )
47 {}
G4VCrossSectionDataSet(const G4String &nam="")
static const double GeV
Definition: G4SIunits.hh:214

◆ ~G4IonsShenCrossSection()

G4IonsShenCrossSection::~G4IonsShenCrossSection ( )
virtual

Definition at line 49 of file G4IonsShenCrossSection.cc.

50 {}

Member Function Documentation

◆ calCeValue()

G4double G4IonsShenCrossSection::calCeValue ( const G4double  ke)
private

Definition at line 144 of file G4IonsShenCrossSection.cc.

145 {
146  // Calculate c value
147  // This value is indepenent from projectile and target particle
148  // ke is projectile kinetic energy per nucleon in the Lab system
149  // with MeV unit
150  // fitting function is made by T. Koi
151  // There are no data below 30 MeV/n in Kox et al.,
152 
153  G4double Ce;
154  G4double log10_ke = std::log10 ( ke );
155  if (log10_ke > 1.5)
156  {
157  Ce = -10.0/std::pow(G4double(log10_ke), G4double(5)) + 2.0;
158  }
159  else
160  {
161  Ce = (-10.0/std::pow(G4double(1.5), G4double(5) ) + 2.0) /
162  std::pow(G4double(1.5) , G4double(3)) * std::pow(G4double(log10_ke), G4double(3));
163  }
164  return Ce;
165 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ calEcmValue()

G4double G4IonsShenCrossSection::calEcmValue ( const G4double  mp,
const G4double  mt,
const G4double  Plab 
)
private

Definition at line 133 of file G4IonsShenCrossSection.cc.

135 {
136  G4double Elab = std::sqrt ( mp * mp + Plab * Plab );
137  G4double Ecm = std::sqrt ( mp * mp + mt * mt + 2 * Elab * mt );
138  G4double Pcm = Plab * mt / Ecm;
139  G4double KEcm = std::sqrt ( Pcm * Pcm + mp * mp ) - mp;
140  return KEcm;
141 }
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ CrossSectionDescription()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 53 of file G4IonsShenCrossSection.cc.

54 {
55  outFile << "G4IonsShenCrossSection calculates the total reaction cross\n"
56  << "section for nucleus-nucleus scattering using the Shen\n"
57  << "parameterization. It is valid for projectiles and targets of\n"
58  << "all Z, and projectile energies up to 1 TeV/n. Above 10 GeV/n"
59  << "the cross section is constant. Below 10 MeV/n zero cross\n"
60  << "is returned.\n";
61 }

◆ GetElementCrossSection()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 70 of file G4IonsShenCrossSection.cc.

73 {
74  G4int A = G4lrint(G4NistManager::Instance()->GetAtomicMassAmu(Z));
75  return GetIsoCrossSection(aParticle, Z, A);
76 }
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
double A(double temperature)
Float_t Z
int G4lrint(double ad)
Definition: templates.hh:163
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
Here is the call graph for this function:

◆ GetIsoCrossSection()

G4double G4IonsShenCrossSection::GetIsoCrossSection ( const G4DynamicParticle aParticle,
G4int  Z,
G4int  A,
const G4Isotope iso = 0,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 78 of file G4IonsShenCrossSection.cc.

84 {
85  G4double xsection = 0.0;
86 
87  G4int Ap = aParticle->GetDefinition()->GetBaryonNumber();
88  G4int Zp = G4lrint(aParticle->GetDefinition()->GetPDGCharge()/eplus);
89  G4double ke_per_N = aParticle->GetKineticEnergy() / Ap;
90  if ( ke_per_N > upperLimit ) { ke_per_N = upperLimit; }
91 
92  // Apply energy check, if less than lower limit then 0 value is returned
93  //if ( ke_per_N < lowerLimit ) { return xsection; }
94 
95  G4Pow* g4pow = G4Pow::GetInstance();
96 
97  G4double cubicrAt = g4pow->Z13(At);
98  G4double cubicrAp = g4pow->Z13(Ap);
99 
100  G4double Rt = 1.12 * cubicrAt - 0.94 * ( 1.0 / cubicrAt );
101  G4double Rp = 1.12 * cubicrAp - 0.94 * ( 1.0 / cubicrAp );
102 
103  G4double r = Rt + Rp + 3.2; // in fm
104  G4double b = 1.0; // in MeV/fm
105  G4double targ_mass = G4NucleiProperties::GetNuclearMass(At, Zt);
106 
107  G4double proj_mass = aParticle->GetMass();
108  G4double proj_momentum = aParticle->GetMomentum().mag();
109 
110  G4double Ecm = calEcmValue (proj_mass, targ_mass, proj_momentum);
111 
112  G4double B = 1.44 * Zt * Zp / r - b * Rt * Rp / ( Rt + Rp );
113  if(Ecm <= B) { return xsection; }
114 
115  G4double c = calCeValue ( ke_per_N / MeV );
116 
117  G4double R1 = r0 * (cubicrAt + cubicrAp + 1.85*cubicrAt*cubicrAp/(cubicrAt + cubicrAp) - c);
118 
119  G4double R2 = 1.0 * ( At - 2 * Zt ) * Zp / ( Ap * At );
120 
121 
122  G4double R3 = (0.176 / g4pow->A13(Ecm)) * cubicrAt * cubicrAp /(cubicrAt + cubicrAp);
123 
124  G4double R = R1 + R2 + R3;
125 
126  xsection = 10 * pi * R * R * ( 1 - B / Ecm );
127  xsection = xsection * millibarn; // mulitply xsection by millibarn
128 
129  return xsection;
130 }
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)
Definition: G4Pow.hh:56
int G4int
Definition: G4Types.hh:78
G4double GetKineticEnergy() const
G4double calCeValue(const G4double)
G4ThreeVector GetMomentum() const
double mag() const
G4double Z13(G4int Z) const
Definition: G4Pow.hh:127
G4double A13(G4double A) const
Definition: G4Pow.hh:132
static const double pi
Definition: G4SIunits.hh:74
int G4lrint(double ad)
Definition: templates.hh:163
G4double calEcmValue(const G4double, const G4double, const G4double)
static const double millibarn
Definition: G4SIunits.hh:105
G4ParticleDefinition * GetDefinition() const
double G4double
Definition: G4Types.hh:76
static const double eplus
Definition: G4SIunits.hh:196
G4double GetPDGCharge() const
Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsElementApplicable()

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

Reimplemented from G4VCrossSectionDataSet.

Definition at line 63 of file G4IonsShenCrossSection.cc.

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

Member Data Documentation

◆ r0

const G4double G4IonsShenCrossSection::r0
private

Definition at line 78 of file G4IonsShenCrossSection.hh.

◆ upperLimit

const G4double G4IonsShenCrossSection::upperLimit
private

Definition at line 76 of file G4IonsShenCrossSection.hh.


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