#include <G4NeutronInelasticCrossSection.hh>
Inheritance diagram for G4NeutronInelasticCrossSection:
Public Member Functions | |
G4NeutronInelasticCrossSection () | |
~G4NeutronInelasticCrossSection () | |
virtual G4bool | IsElementApplicable (const G4DynamicParticle *aPart, G4int Z, const G4Material *) |
virtual G4double | GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *) |
G4double | GetCrossSection (G4double kineticEnergy, G4int Z, G4int A) |
virtual void | CrossSectionDescription (std::ostream &) const |
Definition at line 44 of file G4NeutronInelasticCrossSection.hh.
G4NeutronInelasticCrossSection::G4NeutronInelasticCrossSection | ( | ) |
Definition at line 40 of file G4NeutronInelasticCrossSection.cc.
00041 : G4VCrossSectionDataSet("Wellisch-Laidlaw"), 00042 minEnergy(19.9*MeV), maxEnergy(19.9*GeV) 00043 {}
G4NeutronInelasticCrossSection::~G4NeutronInelasticCrossSection | ( | ) |
void G4NeutronInelasticCrossSection::CrossSectionDescription | ( | std::ostream & | ) | const [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 49 of file G4NeutronInelasticCrossSection.cc.
00050 { 00051 outFile << "G4NeutronInelasticCrossSection calculates the inelastic neutron\n" 00052 << "scattering cross section for nuclei using the Wellisch-Laidlaw\n" 00053 << "parameterization between 19.9 MeV and 19.9 GeV. Above 19.9 GeV\n" 00054 << "the cross section is assumed to be constant.\n"; 00055 }
G4double G4NeutronInelasticCrossSection::GetCrossSection | ( | G4double | kineticEnergy, | |
G4int | Z, | |||
G4int | A | |||
) |
Definition at line 74 of file G4NeutronInelasticCrossSection.cc.
References A13, G4Pow::GetInstance(), G4Pow::logZ(), G4INCL::Math::pi, and G4Pow::Z13().
Referenced by GetElementCrossSection(), and G4NeutronIsoIsoCrossSections::Init().
00076 { 00077 if(anEnergy > maxEnergy) { anEnergy = maxEnergy; } 00078 G4double cross_section = 0.0; 00079 if(anEnergy < keV) { return cross_section; } 00080 00081 G4Pow* g4pow = G4Pow::GetInstance(); 00082 G4double A13 = g4pow->Z13(A); 00083 00084 G4double elog = std::log10(anEnergy/MeV); 00085 G4int nOfNeutrons = A - Z; 00086 G4double atomicNumber = G4double(A); 00087 const G4double p1=1.3773; 00088 G4double p2 = 1. + 10./atomicNumber - 0.0006*atomicNumber; 00089 G4double p3 = 0.6+ 13./atomicNumber - 0.0005*atomicNumber; 00090 G4double p4 = 7.2449 - 0.018242*atomicNumber; 00091 G4double p5 = 1.64 - 1.8/atomicNumber - 0.0005*atomicNumber; 00092 G4double p6 = 1. + 200./atomicNumber + 0.02*atomicNumber; 00093 G4double p7 = (atomicNumber-70.)*(atomicNumber-200.)/11000.; 00094 00095 G4double logN = g4pow->logZ(nOfNeutrons); 00096 G4double part1 = pi*p1*p1*logN; 00097 G4double part2 = 1.+ A13 - p2*(1.-1./A13); 00098 00099 G4double firstexp = -p4*(elog-p5); 00100 G4double first = 1. + std::exp(firstexp); 00101 G4double corr = 1. + p3*(1.-1./first); 00102 00103 G4double secondexp= -p6*(elog-p7); 00104 G4double secondv = 1.+std::exp(secondexp); 00105 G4double corr2 = 1./secondv; 00106 00107 G4double xsec = corr*corr2*part1*part2*10.*millibarn; 00108 if(xsec < 0.0) { xsec = 0.0; } 00109 return xsec; 00110 }
G4double G4NeutronInelasticCrossSection::GetElementCrossSection | ( | const G4DynamicParticle * | , | |
G4int | Z, | |||
const G4Material * | ||||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 66 of file G4NeutronInelasticCrossSection.cc.
References GetCrossSection(), G4DynamicParticle::GetKineticEnergy(), and G4NistManager::Instance().
00068 { 00069 G4int A = G4int(G4NistManager::Instance()->GetAtomicMassAmu(Z)); 00070 return GetCrossSection(aPart->GetKineticEnergy(), Z, A); 00071 }
G4bool G4NeutronInelasticCrossSection::IsElementApplicable | ( | const G4DynamicParticle * | aPart, | |
G4int | Z, | |||
const G4Material * | ||||
) | [virtual] |
Reimplemented from G4VCrossSectionDataSet.
Definition at line 58 of file G4NeutronInelasticCrossSection.cc.
References G4DynamicParticle::GetKineticEnergy().
00060 { 00061 G4double e = part->GetKineticEnergy(); 00062 return (1 < Z && e > minEnergy); 00063 }