Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions | Protected Attributes
G4VCrossSectionDataSet Class Reference

#include <G4VCrossSectionDataSet.hh>

Inheritance diagram for G4VCrossSectionDataSet:
CexmcFakeCrossSectionData G4BGGNucleonElasticXS G4BGGNucleonInelasticXS G4BGGPionElasticXS G4BGGPionInelasticXS G4ChipsAntiBaryonElasticXS G4ChipsAntiBaryonInelasticXS G4ChipsHyperonElasticXS G4ChipsHyperonInelasticXS G4ChipsKaonMinusElasticXS G4ChipsKaonMinusInelasticXS G4ChipsKaonPlusElasticXS G4ChipsKaonPlusInelasticXS G4ChipsKaonZeroElasticXS G4ChipsKaonZeroInelasticXS G4ChipsNeutronElasticXS G4ChipsNeutronInelasticXS G4ChipsPionMinusElasticXS G4ChipsPionMinusInelasticXS G4ChipsPionPlusElasticXS G4ChipsPionPlusInelasticXS G4ChipsProtonElasticXS G4ChipsProtonInelasticXS G4CrossSectionElastic G4CrossSectionInelastic G4CrossSectionPairGG G4DPMJET2_5CrossSection G4ElectroNuclearCrossSection G4EMDissociationCrossSection G4GeneralSpaceNNCrossSection G4GGNuclNuclCrossSection G4GlauberGribovCrossSection G4HadronCaptureDataSet G4HadronElasticDataSet G4HadronFissionDataSet G4HadronInelasticDataSet G4IonProtonCrossSection G4IonsKoxCrossSection G4IonsShenCrossSection G4IonsSihverCrossSection G4KokoulinMuonNuclearXS G4LENDCrossSection G4NeutronCaptureXS G4NeutronElasticXS G4NeutronHPCaptureData G4NeutronHPElasticData G4NeutronHPFissionData G4NeutronHPInelasticData G4NeutronHPJENDLHEData G4NeutronHPThermalScatteringData G4NeutronInelasticCrossSection G4NeutronInelasticXS G4NucleonNuclearCrossSection G4PhotoNuclearCrossSection G4PiNuclearCrossSection G4ProtonInelasticCrossSection G4TripathiCrossSection G4TripathiLightCrossSection G4UPiNuclearCrossSection

Public Member Functions

 G4VCrossSectionDataSet (const G4String &nam="")
 
virtual ~G4VCrossSectionDataSet ()
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
 
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 GetElementCrossSection (const G4DynamicParticle *, G4int Z, 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 void CrossSectionDescription (std::ostream &) const
 
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
 

Protected Member Functions

void SetName (const G4String &)
 

Protected Attributes

G4int verboseLevel
 

Detailed Description

Definition at line 70 of file G4VCrossSectionDataSet.hh.

Constructor & Destructor Documentation

G4VCrossSectionDataSet::G4VCrossSectionDataSet ( const G4String nam = "")

Definition at line 54 of file G4VCrossSectionDataSet.cc.

References G4CrossSectionDataSetRegistry::Instance(), and G4CrossSectionDataSetRegistry::Register().

54  :
55  verboseLevel(0),minKinEnergy(0.0),maxKinEnergy(100*TeV),name(nam)
56 {
58 }
const XML_Char * name
static G4CrossSectionDataSetRegistry * Instance()
void Register(G4VCrossSectionDataSet *)
G4VCrossSectionDataSet::~G4VCrossSectionDataSet ( )
virtual

Member Function Documentation

void G4VCrossSectionDataSet::BuildPhysicsTable ( const G4ParticleDefinition )
virtual
G4double G4VCrossSectionDataSet::ComputeCrossSection ( const G4DynamicParticle part,
const G4Element elm,
const G4Material mat = 0 
)

Definition at line 83 of file G4VCrossSectionDataSet.cc.

References G4lrint(), GetElementCrossSection(), GetIsoCrossSection(), G4NistManager::GetIsotopeAbundance(), G4Element::GetIsotopeVector(), G4Isotope::GetN(), G4NistManager::GetNistFirstIsotopeN(), G4Element::GetNumberOfIsotopes(), G4NistManager::GetNumberOfNistIsotopes(), G4Element::GetRelativeAbundanceVector(), G4Element::GetZ(), G4NistManager::Instance(), IsElementApplicable(), IsIsoApplicable(), and G4InuclParticleNames::nn.

Referenced by GetCrossSection().

86 {
87  G4int Z = G4lrint(elm->GetZ());
88 
89  if (IsElementApplicable(part, Z, mat)) {
90  return GetElementCrossSection(part, Z, mat);
91  }
92 
93  // isotope-wise cross section making sum over available
94  // isotope cross sections, which may be incomplete, so
95  // the result is corrected
96  G4int nIso = elm->GetNumberOfIsotopes();
97  G4double fact = 0.0;
98  G4double xsec = 0.0;
99  G4Isotope* iso = 0;
100 
101  if (0 < nIso) {
102 
103  // user-defined isotope abundances
104  G4IsotopeVector* isoVector = elm->GetIsotopeVector();
105  G4double* abundVector = elm->GetRelativeAbundanceVector();
106 
107  for (G4int j = 0; j<nIso; ++j) {
108  iso = (*isoVector)[j];
109  G4int A = iso->GetN();
110  if(abundVector[j] > 0.0 && IsIsoApplicable(part, Z, A, elm, mat)) {
111  fact += abundVector[j];
112  xsec += abundVector[j]*GetIsoCrossSection(part, Z, A, iso, elm, mat);
113  }
114  }
115 
116  } else {
117 
118  // natural isotope abundances
120  G4int n0 = nist->GetNistFirstIsotopeN(Z);
121  G4int nn = nist->GetNumberOfNistIsotopes(Z);
122  for (G4int A = n0; A < n0+nn; ++A) {
123  G4double abund = nist->GetIsotopeAbundance(Z, A);
124  if(abund > 0.0 && IsIsoApplicable(part, Z, A, elm, mat)) {
125  fact += abund;
126  xsec += abund*GetIsoCrossSection(part, Z, A, iso, elm, mat);
127  }
128  }
129  }
130  if(fact > 0.0) { xsec /= fact; }
131  return xsec;
132 }
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:158
virtual G4bool IsIsoApplicable(const G4DynamicParticle *, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
std::vector< G4Isotope * > G4IsotopeVector
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
G4double GetZ() const
Definition: G4Element.hh:131
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
G4int GetNistFirstIsotopeN(G4int Z) const
G4int GetN() const
Definition: G4Isotope.hh:94
virtual G4bool IsElementApplicable(const G4DynamicParticle *, G4int Z, const G4Material *mat=0)
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:166
G4double GetIsotopeAbundance(G4int Z, G4int N) const
G4int GetNumberOfNistIsotopes(G4int Z) const
G4IsotopeVector * GetIsotopeVector() const
Definition: G4Element.hh:162
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)
double G4double
Definition: G4Types.hh:76
void G4VCrossSectionDataSet::CrossSectionDescription ( std::ostream &  outFile) const
virtual
void G4VCrossSectionDataSet::DumpPhysicsTable ( const G4ParticleDefinition )
virtual
G4double G4VCrossSectionDataSet::GetCrossSection ( const G4DynamicParticle dp,
const G4Element elm,
const G4Material mat = 0 
)
inline

Definition at line 180 of file G4VCrossSectionDataSet.hh.

References ComputeCrossSection().

183 {
184  return ComputeCrossSection(dp, elm, mat);
185 }
G4double ComputeCrossSection(const G4DynamicParticle *, const G4Element *, const G4Material *mat=0)
G4double G4VCrossSectionDataSet::GetElementCrossSection ( const G4DynamicParticle dynPart,
G4int  Z,
const G4Material mat = 0 
)
virtual

Reimplemented in G4GeneralSpaceNNCrossSection, G4TripathiLightCrossSection, G4EMDissociationCrossSection, G4BGGPionInelasticXS, G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS, G4BGGPionElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS, G4CrossSectionElastic, G4CrossSectionInelastic, G4CrossSectionPairGG, G4IonProtonCrossSection, G4NeutronElasticXS, G4ElectroNuclearCrossSection, G4KokoulinMuonNuclearXS, G4GGNuclNuclCrossSection, G4ProtonInelasticCrossSection, G4IonsShenCrossSection, G4HadronCaptureDataSet, G4NucleonNuclearCrossSection, G4HadronElasticDataSet, G4IonsKoxCrossSection, G4IonsSihverCrossSection, G4HadronFissionDataSet, G4HadronInelasticDataSet, G4PhotoNuclearCrossSection, G4NeutronInelasticCrossSection, G4TripathiCrossSection, and G4PiNuclearCrossSection.

Definition at line 135 of file G4VCrossSectionDataSet.cc.

References G4cout, G4endl, G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), and python.hepunit::MeV.

Referenced by G4CrossSectionPairGG::BuildPhysicsTable(), ComputeCrossSection(), and G4CrossSectionPairGG::GetElementCrossSection().

138 {
139  G4cout << "G4VCrossSectionDataSet::GetCrossSection per element ERROR: "
140  << " there is no cross section for "
141  << dynPart->GetDefinition()->GetParticleName()
142  << " E(MeV)= " << dynPart->GetKineticEnergy()/MeV;
143  if(mat) { G4cout << " inside " << mat->GetName(); }
144  G4cout << " for Z= " << Z << G4endl;
145  throw G4HadronicException(__FILE__, __LINE__,
146  "G4VCrossSectionDataSet::GetElementCrossSection is absent");
147  return 0.0;
148 }
G4double GetKineticEnergy() const
const G4String & GetName() const
Definition: G4Material.hh:176
G4ParticleDefinition * GetDefinition() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
G4double G4VCrossSectionDataSet::GetIsoCrossSection ( const G4DynamicParticle dynPart,
G4int  Z,
G4int  A,
const G4Isotope iso = 0,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented in G4DPMJET2_5CrossSection, G4BGGPionInelasticXS, G4BGGNucleonElasticXS, G4BGGNucleonInelasticXS, G4BGGPionElasticXS, G4NeutronInelasticXS, G4NeutronCaptureXS, G4LENDCrossSection, G4NeutronHPThermalScatteringData, G4GlauberGribovCrossSection, G4IonsShenCrossSection, G4ChipsKaonZeroElasticXS, G4ChipsKaonZeroInelasticXS, G4ChipsNeutronInelasticXS, G4ChipsPionPlusInelasticXS, G4ChipsKaonMinusInelasticXS, G4ChipsKaonPlusInelasticXS, G4NeutronHPElasticData, G4ChipsAntiBaryonElasticXS, G4ChipsKaonMinusElasticXS, G4ChipsNeutronElasticXS, G4ChipsPionMinusElasticXS, G4ChipsPionMinusInelasticXS, G4NeutronHPCaptureData, G4NeutronHPInelasticData, G4ChipsHyperonElasticXS, G4ChipsHyperonInelasticXS, G4ChipsKaonPlusElasticXS, G4ChipsPionPlusElasticXS, G4ChipsProtonElasticXS, G4ChipsProtonInelasticXS, G4NeutronHPFissionData, and G4ChipsAntiBaryonInelasticXS.

Definition at line 151 of file G4VCrossSectionDataSet.cc.

References G4cout, G4endl, G4DynamicParticle::GetDefinition(), G4DynamicParticle::GetKineticEnergy(), G4Element::GetName(), G4Material::GetName(), G4ParticleDefinition::GetParticleName(), and python.hepunit::MeV.

Referenced by G4QMDReaction::ApplyYourself(), and ComputeCrossSection().

156 {
157  G4cout << "G4VCrossSectionDataSet::GetCrossSection per isotope ERROR: "
158  << " there is no cross section for "
159  << dynPart->GetDefinition()->GetParticleName()
160  << " E(MeV)= " << dynPart->GetKineticEnergy()/MeV;
161  if(mat) { G4cout << " inside " << mat->GetName(); }
162  if(elm) { G4cout << " for " << elm->GetName(); }
163  G4cout << " Z= " << Z << " A= " << A << G4endl;
164  throw G4HadronicException(__FILE__, __LINE__,
165  "G4VCrossSectionDataSet::GetIsoCrossSection is absent");
166  return 0.0;
167 }
G4double GetKineticEnergy() const
const G4String & GetName() const
Definition: G4Material.hh:176
G4ParticleDefinition * GetDefinition() const
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
const G4String & GetName() const
Definition: G4Element.hh:127
G4double G4VCrossSectionDataSet::GetMaxKinEnergy ( ) const
inline
G4double G4VCrossSectionDataSet::GetMinKinEnergy ( ) const
inline
const G4String & G4VCrossSectionDataSet::GetName ( void  ) const
inline
G4int G4VCrossSectionDataSet::GetVerboseLevel ( ) const
inlinevirtual
G4bool G4VCrossSectionDataSet::IsElementApplicable ( const G4DynamicParticle ,
G4int  Z,
const G4Material mat = 0 
)
virtual
G4bool G4VCrossSectionDataSet::IsIsoApplicable ( const G4DynamicParticle ,
G4int  Z,
G4int  A,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual
G4Isotope * G4VCrossSectionDataSet::SelectIsotope ( const G4Element anElement,
G4double  kinEnergy 
)
virtual

Reimplemented in G4NeutronInelasticXS, and G4NeutronCaptureXS.

Definition at line 170 of file G4VCrossSectionDataSet.cc.

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

171 {
172  G4int nIso = anElement->GetNumberOfIsotopes();
173  G4IsotopeVector* isoVector = anElement->GetIsotopeVector();
174  G4Isotope* iso = (*isoVector)[0];
175 
176  // more than 1 isotope
177  if(1 < nIso) {
178  G4double* abundVector = anElement->GetRelativeAbundanceVector();
179  G4double sum = 0.0;
180  G4double q = G4UniformRand();
181  for (G4int j = 0; j<nIso; ++j) {
182  sum += abundVector[j];
183  if(q <= sum) {
184  iso = (*isoVector)[j];
185  break;
186  }
187  }
188  }
189  return iso;
190 }
size_t GetNumberOfIsotopes() const
Definition: G4Element.hh:158
std::vector< G4Isotope * > G4IsotopeVector
int G4int
Definition: G4Types.hh:78
#define G4UniformRand()
Definition: Randomize.hh:87
G4double * GetRelativeAbundanceVector() const
Definition: G4Element.hh:166
G4IsotopeVector * GetIsotopeVector() const
Definition: G4Element.hh:162
double G4double
Definition: G4Types.hh:76
void G4VCrossSectionDataSet::SetMaxKinEnergy ( G4double  value)
inline
void G4VCrossSectionDataSet::SetMinKinEnergy ( G4double  value)
inline
void G4VCrossSectionDataSet::SetName ( const G4String nam)
inlineprotected

Definition at line 223 of file G4VCrossSectionDataSet.hh.

224 {
225  name = nam;
226 }
const XML_Char * name
void G4VCrossSectionDataSet::SetVerboseLevel ( G4int  value)
inlinevirtual

Reimplemented in G4NeutronHPCaptureData, G4NeutronHPInelasticData, G4NeutronHPElasticData, and G4NeutronHPFissionData.

Definition at line 193 of file G4VCrossSectionDataSet.hh.

References verboseLevel.

194 {
196 }
const XML_Char int const XML_Char * value

Field Documentation

G4int G4VCrossSectionDataSet::verboseLevel
protected

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