Geant4-11
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes
G4IonsShenCrossSection Class Reference

#include <G4IonsShenCrossSection.hh>

Inheritance diagram for G4IonsShenCrossSection:
G4VCrossSectionDataSet

Public Member Functions

virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
G4double ComputeCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
virtual void CrossSectionDescription (std::ostream &) const
 
virtual void DumpPhysicsTable (const G4ParticleDefinition &)
 
bool ForAllAtomsAndEnergies () const
 
 G4IonsShenCrossSection ()
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
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)
 
G4double GetMaxKinEnergy () const
 
G4double GetMinKinEnergy () const
 
const G4StringGetName () const
 
virtual G4int GetVerboseLevel () const
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *aDP, G4int Z, const G4Material *)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
 
virtual const G4IsotopeSelectIsotope (const G4Element *, G4double kinEnergy, G4double logE)
 
void SetForAllAtomsAndEnergies (G4bool val)
 
void SetMaxKinEnergy (G4double value)
 
void SetMinKinEnergy (G4double value)
 
void SetName (const G4String &nam)
 
virtual void SetVerboseLevel (G4int value)
 
virtual ~G4IonsShenCrossSection ()
 

Protected Attributes

G4String name
 
G4int verboseLevel
 

Private Member Functions

G4double calCeValue (const G4double)
 
G4double calEcmValue (const G4double, const G4double, const G4double)
 

Private Attributes

G4bool isForAllAtomsAndEnergies
 
G4double maxKinEnergy
 
G4double minKinEnergy
 
const G4double r0
 
G4CrossSectionDataSetRegistryregistry
 
const G4double upperLimit
 

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{}
static constexpr double GeV
Definition: G4SIunits.hh:203
G4VCrossSectionDataSet(const G4String &nam="")

◆ ~G4IonsShenCrossSection()

G4IonsShenCrossSection::~G4IonsShenCrossSection ( )
virtual

Definition at line 49 of file G4IonsShenCrossSection.cc.

50{}

Member Function Documentation

◆ BuildPhysicsTable()

void G4VCrossSectionDataSet::BuildPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ 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:83

Referenced by GetIsoCrossSection().

◆ 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}

Referenced by GetIsoCrossSection().

◆ ComputeCrossSection()

G4double G4VCrossSectionDataSet::ComputeCrossSection ( const G4DynamicParticle part,
const G4Element elm,
const G4Material mat = nullptr 
)
inherited

Definition at line 81 of file G4VCrossSectionDataSet.cc.

84{
85 G4int Z = elm->GetZasInt();
86
87 if (IsElementApplicable(part, Z, mat)) {
88 return GetElementCrossSection(part, Z, mat);
89 }
90
91 // isotope-wise cross section making sum over available
92 // isotope cross sections, which may be incomplete, so
93 // the result is corrected
94 size_t nIso = elm->GetNumberOfIsotopes();
95 G4double fact = 0.0;
96 G4double xsec = 0.0;
97
98 // user-defined isotope abundances
99 const G4IsotopeVector* isoVector = elm->GetIsotopeVector();
100 const G4double* abundVector = elm->GetRelativeAbundanceVector();
101
102 for (size_t j=0; j<nIso; ++j) {
103 const G4Isotope* iso = (*isoVector)[j];
104 G4int A = iso->GetN();
105 if(abundVector[j] > 0.0 && IsIsoApplicable(part, Z, A, elm, mat)) {
106 fact += abundVector[j];
107 xsec += abundVector[j]*GetIsoCrossSection(part, Z, A, iso, elm, mat);
108 }
109 }
110 return (fact > 0.0) ? xsec/fact : 0.0;
111}
std::vector< G4Isotope * > G4IsotopeVector
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:167
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:159
G4int GetZasInt() const
Definition: G4Element.hh:132
G4IsotopeVector * GetIsotopeVector() const
Definition: G4Element.hh:163
G4int GetN() const
Definition: G4Isotope.hh:93
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=nullptr, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=nullptr, const G4Material *mat=nullptr)
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat=nullptr)

References A, G4VCrossSectionDataSet::GetElementCrossSection(), G4VCrossSectionDataSet::GetIsoCrossSection(), G4Element::GetIsotopeVector(), G4Isotope::GetN(), G4Element::GetNumberOfIsotopes(), G4Element::GetRelativeAbundanceVector(), G4Element::GetZasInt(), G4VCrossSectionDataSet::IsElementApplicable(), G4VCrossSectionDataSet::IsIsoApplicable(), and Z.

Referenced by G4VCrossSectionDataSet::GetCrossSection().

◆ 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}

◆ DumpPhysicsTable()

void G4VCrossSectionDataSet::DumpPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ ForAllAtomsAndEnergies()

bool G4VCrossSectionDataSet::ForAllAtomsAndEnergies ( ) const
inlineinherited

◆ GetCrossSection()

G4double G4VCrossSectionDataSet::GetCrossSection ( const G4DynamicParticle dp,
const G4Element elm,
const G4Material mat = nullptr 
)
inlineinherited

Definition at line 187 of file G4VCrossSectionDataSet.hh.

190{
191 return ComputeCrossSection(dp, elm, mat);
192}
G4double ComputeCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)

References G4VCrossSectionDataSet::ComputeCrossSection().

◆ 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}
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
static G4NistManager * Instance()
int G4lrint(double ad)
Definition: templates.hh:134

References A, G4lrint(), GetIsoCrossSection(), G4NistManager::Instance(), and Z.

◆ 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
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}
G4double B(G4double temperature)
static constexpr double millibarn
Definition: G4SIunits.hh:86
static constexpr double eplus
Definition: G4SIunits.hh:184
static constexpr double MeV
Definition: G4SIunits.hh:200
static constexpr double pi
Definition: G4SIunits.hh:55
double mag() const
G4double GetMass() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4ThreeVector GetMomentum() const
G4double calEcmValue(const G4double, const G4double, const G4double)
G4double calCeValue(const G4double)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGCharge() const
Definition: G4Pow.hh:49
static G4Pow * GetInstance()
Definition: G4Pow.cc:41
G4double A13(G4double A) const
Definition: G4Pow.cc:120
G4double Z13(G4int Z) const
Definition: G4Pow.hh:123

References G4Pow::A13(), B(), calCeValue(), calEcmValue(), eplus, G4lrint(), G4ParticleDefinition::GetBaryonNumber(), G4DynamicParticle::GetDefinition(), G4Pow::GetInstance(), G4DynamicParticle::GetKineticEnergy(), G4DynamicParticle::GetMass(), G4DynamicParticle::GetMomentum(), G4NucleiProperties::GetNuclearMass(), G4ParticleDefinition::GetPDGCharge(), CLHEP::Hep3Vector::mag(), MeV, millibarn, pi, r0, upperLimit, and G4Pow::Z13().

Referenced by GetElementCrossSection().

◆ GetMaxKinEnergy()

G4double G4VCrossSectionDataSet::GetMaxKinEnergy ( ) const
inlineinherited

◆ GetMinKinEnergy()

G4double G4VCrossSectionDataSet::GetMinKinEnergy ( ) const
inlineinherited

◆ GetName()

const G4String & G4VCrossSectionDataSet::GetName ( ) const
inlineinherited

◆ GetVerboseLevel()

G4int G4VCrossSectionDataSet::GetVerboseLevel ( ) const
inlinevirtualinherited

◆ 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}

References G4ParticleDefinition::GetBaryonNumber(), and G4DynamicParticle::GetDefinition().

◆ IsIsoApplicable()

G4bool G4VCrossSectionDataSet::IsIsoApplicable ( const G4DynamicParticle ,
G4int  Z,
G4int  A,
const G4Element elm = nullptr,
const G4Material mat = nullptr 
)
virtualinherited

◆ SelectIsotope()

const G4Isotope * G4VCrossSectionDataSet::SelectIsotope ( const G4Element anElement,
G4double  kinEnergy,
G4double  logE 
)
virtualinherited

Reimplemented in G4GammaNuclearXS, G4NeutronCaptureXS, G4NeutronElasticXS, G4NeutronInelasticXS, and G4ParticleInelasticXS.

Definition at line 149 of file G4VCrossSectionDataSet.cc.

151{
152 size_t nIso = anElement->GetNumberOfIsotopes();
153 const G4Isotope* iso = anElement->GetIsotope(0);
154
155 // more than 1 isotope
156 if(1 < nIso) {
157 const G4double* abundVector = anElement->GetRelativeAbundanceVector();
158 G4double sum = 0.0;
160 for (size_t j=0; j<nIso; ++j) {
161 sum += abundVector[j];
162 if(q <= sum) {
163 iso = anElement->GetIsotope(j);
164 break;
165 }
166 }
167 }
168 return iso;
169}
#define G4UniformRand()
Definition: Randomize.hh:52
const G4Isotope * GetIsotope(G4int iso) const
Definition: G4Element.hh:170

References G4UniformRand, G4Element::GetIsotope(), G4Element::GetNumberOfIsotopes(), and G4Element::GetRelativeAbundanceVector().

◆ SetForAllAtomsAndEnergies()

void G4VCrossSectionDataSet::SetForAllAtomsAndEnergies ( G4bool  val)
inlineinherited

◆ SetMaxKinEnergy()

void G4VCrossSectionDataSet::SetMaxKinEnergy ( G4double  value)
inlineinherited

◆ SetMinKinEnergy()

void G4VCrossSectionDataSet::SetMinKinEnergy ( G4double  value)
inlineinherited

◆ SetName()

void G4VCrossSectionDataSet::SetName ( const G4String nam)
inlineinherited

Definition at line 240 of file G4VCrossSectionDataSet.hh.

241{
242 name = nam;
243}

References G4VCrossSectionDataSet::name.

Referenced by G4ParticleHPInelasticData::G4ParticleHPInelasticData().

◆ SetVerboseLevel()

void G4VCrossSectionDataSet::SetVerboseLevel ( G4int  value)
inlinevirtualinherited

Field Documentation

◆ isForAllAtomsAndEnergies

G4bool G4VCrossSectionDataSet::isForAllAtomsAndEnergies
privateinherited

◆ maxKinEnergy

G4double G4VCrossSectionDataSet::maxKinEnergy
privateinherited

◆ minKinEnergy

G4double G4VCrossSectionDataSet::minKinEnergy
privateinherited

◆ name

G4String G4VCrossSectionDataSet::name
protectedinherited

◆ r0

const G4double G4IonsShenCrossSection::r0
private

Definition at line 78 of file G4IonsShenCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ registry

G4CrossSectionDataSetRegistry* G4VCrossSectionDataSet::registry
privateinherited

◆ upperLimit

const G4double G4IonsShenCrossSection::upperLimit
private

Definition at line 76 of file G4IonsShenCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ verboseLevel

G4int G4VCrossSectionDataSet::verboseLevel
protectedinherited

Definition at line 168 of file G4VCrossSectionDataSet.hh.

Referenced by G4BGGNucleonElasticXS::BuildPhysicsTable(), G4BGGPionElasticXS::BuildPhysicsTable(), G4BGGPionInelasticXS::BuildPhysicsTable(), G4GammaNuclearXS::BuildPhysicsTable(), G4NeutronCaptureXS::BuildPhysicsTable(), G4NeutronElasticXS::BuildPhysicsTable(), G4NeutronInelasticXS::BuildPhysicsTable(), G4ParticleInelasticXS::BuildPhysicsTable(), G4BGGNucleonInelasticXS::BuildPhysicsTable(), G4LENDCrossSection::create_used_target_map(), G4BGGNucleonElasticXS::G4BGGNucleonElasticXS(), G4BGGNucleonInelasticXS::G4BGGNucleonInelasticXS(), G4BGGPionElasticXS::G4BGGPionElasticXS(), G4BGGPionInelasticXS::G4BGGPionInelasticXS(), G4GammaNuclearXS::G4GammaNuclearXS(), G4NeutronCaptureXS::G4NeutronCaptureXS(), G4NeutronElasticXS::G4NeutronElasticXS(), G4NeutronInelasticXS::G4NeutronInelasticXS(), G4ParticleInelasticXS::G4ParticleInelasticXS(), G4NeutronCaptureXS::GetElementCrossSection(), G4NeutronElasticXS::GetElementCrossSection(), G4NeutronInelasticXS::GetElementCrossSection(), G4BGGNucleonElasticXS::GetElementCrossSection(), G4BGGPionElasticXS::GetElementCrossSection(), G4BGGPionInelasticXS::GetElementCrossSection(), G4BGGNucleonInelasticXS::GetElementCrossSection(), G4GammaNuclearXS::GetElementCrossSection(), G4ParticleInelasticXS::GetElementCrossSection(), G4BGGNucleonElasticXS::GetIsoCrossSection(), G4BGGPionElasticXS::GetIsoCrossSection(), G4BGGPionInelasticXS::GetIsoCrossSection(), G4GammaNuclearXS::GetIsoCrossSection(), G4BGGNucleonInelasticXS::GetIsoCrossSection(), G4VCrossSectionDataSet::GetVerboseLevel(), G4NeutronElasticXS::Initialise(), G4ParticleInelasticXS::IsoCrossSection(), G4NeutronCaptureXS::IsoCrossSection(), G4NeutronInelasticXS::IsoCrossSection(), G4GammaNuclearXS::RetrieveVector(), G4NeutronCaptureXS::RetrieveVector(), G4NeutronInelasticXS::RetrieveVector(), G4ParticleInelasticXS::RetrieveVector(), and G4VCrossSectionDataSet::SetVerboseLevel().


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