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

#include <G4PhotoNuclearCrossSection.hh>

Inheritance diagram for G4PhotoNuclearCrossSection:
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
 
 G4PhotoNuclearCrossSection ()
 
G4double GetCrossSection (const G4DynamicParticle *, const G4Element *, const G4Material *mat=nullptr)
 
virtual G4double GetElementCrossSection (const G4DynamicParticle *, G4int Z, const G4Material *)
 
virtual G4double GetIsoCrossSection (const G4DynamicParticle *dynPart, G4int Z, G4int A, const G4Isotope *, const G4Element *elm, const G4Material *mat)
 
G4double GetMaxKinEnergy () const
 
G4double GetMinKinEnergy () const
 
const G4StringGetName () const
 
virtual G4int GetVerboseLevel () const
 
virtual G4bool IsElementApplicable (const G4DynamicParticle *particle, G4int Z, const G4Material *)
 
virtual G4bool IsIsoApplicable (const G4DynamicParticle *particle, G4int Z, G4int A, const G4Element *elm=0, const G4Material *mat=0)
 
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 ~G4PhotoNuclearCrossSection ()
 

Static Public Member Functions

static const char * Default_Name ()
 

Protected Attributes

G4String name
 
G4int verboseLevel
 

Private Member Functions

G4double EquLinearFit (G4double X, G4int N, const G4double X0, const G4double XD, const G4double *Y)
 
G4int GetFunctions (G4double a, G4double *y, G4double *z)
 
G4double ThresholdEnergy (G4int Z, G4int N)
 

Private Attributes

G4doubledeuteron_GDR = nullptr
 
G4doubledeuteron_HR = nullptr
 
G4double deuteron_SP = 0.0
 
G4double deuteron_TH = 0.0
 
std::vector< G4doubleeTH
 
std::vector< G4double * > GDR
 
G4doublehe3_GDR = nullptr
 
G4doublehe3_HR = nullptr
 
G4double he3_SP = 0.0
 
G4double he3_TH = 0.0
 
std::vector< G4double * > HEN
 
G4bool isForAllAtomsAndEnergies
 
G4double lastE = 0.0
 
G4doublelastGDR = nullptr
 
G4doublelastHEN = nullptr
 
G4double lastSig = 0.0
 
G4double lastSP = 0.0
 
G4double lastTH = 0.0
 
G4int lastZ = 0
 
G4double maxKinEnergy
 
G4double minKinEnergy
 
G4double mNeut
 
G4double mProt
 
G4NistManagernistmngr
 
G4CrossSectionDataSetRegistryregistry
 
std::vector< G4doublespA
 
G4doubletriton_GDR = nullptr
 
G4doubletriton_HR = nullptr
 
G4double triton_SP = 0.0
 
G4double triton_TH = 0.0
 

Detailed Description

Definition at line 42 of file G4PhotoNuclearCrossSection.hh.

Constructor & Destructor Documentation

◆ G4PhotoNuclearCrossSection()

G4PhotoNuclearCrossSection::G4PhotoNuclearCrossSection ( )

Definition at line 1486 of file G4PhotoNuclearCrossSection.cc.

1490{
1493
1494 GDR.resize(120, nullptr);
1495 HEN.resize(120, nullptr);
1496 spA.resize(120, 0.0);
1497 eTH.resize(120, 0.0);
1498}
static G4NistManager * Instance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4VCrossSectionDataSet(const G4String &nam="")
void SetForAllAtomsAndEnergies(G4bool val)

References eTH, GDR, HEN, G4NistManager::Instance(), nistmngr, G4VCrossSectionDataSet::SetForAllAtomsAndEnergies(), and spA.

◆ ~G4PhotoNuclearCrossSection()

G4PhotoNuclearCrossSection::~G4PhotoNuclearCrossSection ( )
virtual

Definition at line 1501 of file G4PhotoNuclearCrossSection.cc.

1502{
1503 for (auto & ptr : GDR) { delete [] ptr; }
1504 for (auto & ptr : HEN) { delete [] ptr; }
1505}

References GDR, and HEN.

Member Function Documentation

◆ BuildPhysicsTable()

void G4VCrossSectionDataSet::BuildPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ 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
double G4double
Definition: G4Types.hh:83
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 G4PhotoNuclearCrossSection::CrossSectionDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 1509 of file G4PhotoNuclearCrossSection.cc.

1510{
1511 outFile << "G4PhotoNuclearCrossSection provides the total inelastic\n"
1512 << "cross section for photon interactions with nuclei. The\n"
1513 << "cross section is a parameterization of data which covers\n"
1514 << "all incident gamma energies.\n";
1515}

◆ Default_Name()

static const char * G4PhotoNuclearCrossSection::Default_Name ( )
inlinestatic

Definition at line 49 of file G4PhotoNuclearCrossSection.hh.

49{return "PhotoNuclearXS";}

Referenced by G4ElectroVDNuclearModel::G4ElectroVDNuclearModel().

◆ DumpPhysicsTable()

void G4VCrossSectionDataSet::DumpPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ EquLinearFit()

G4double G4PhotoNuclearCrossSection::EquLinearFit ( G4double  X,
G4int  N,
const G4double  X0,
const G4double  XD,
const G4double Y 
)
private

Definition at line 1740 of file G4PhotoNuclearCrossSection.cc.

1743{
1744 if(DX<=0. || N<2)
1745 {
1746 G4cout<<"***G4PhotoNuclearCrossSection::EquLinearFit: DX="
1747 <<DX<<", N="<<N<<", X0="<<X0<<", X="<<X<<", Y[0]="<<Y[0]<<G4endl;
1748 return Y[0];
1749 }
1750 G4int N2=N-2;
1751 G4double d=(X-X0)/DX;
1752 G4int j=static_cast<int>(d);
1753 if (j<0) j=0;
1754 else if(j>N2) j=N2;
1755 d-=j; // excess
1756 G4double yi=Y[j];
1757 G4double sigma=yi+(Y[j+1]-yi)*d;
1758 return sigma;
1759}
G4double Y(G4double density)
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout

References G4cout, G4endl, and Y().

Referenced by GetElementCrossSection(), and GetIsoCrossSection().

◆ 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 G4PhotoNuclearCrossSection::GetElementCrossSection ( const G4DynamicParticle aPart,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 1629 of file G4PhotoNuclearCrossSection.cc.

1631{
1632 const G4double Energy = aPart->GetKineticEnergy()/MeV;
1633
1634 if (Energy<THmin) return 0.;
1635 G4double sigma=0.;
1636
1637 if(ZZ!=lastZ) // Otherwise the set of parameters is ready
1638 {
1639 lastZ = ZZ; // The last Z of calculated nucleus
1640 if(GDR[ZZ]) // Calculated nuclei in DB
1641 {
1642 lastGDR=GDR[ZZ]; // Pointer to prepared GDR cross sections
1643 lastHEN=HEN[ZZ]; // Pointer to prepared High Energy cross sections
1644 lastTH =eTH[ZZ]; // Energy Threshold
1645 lastSP =spA[ZZ]; // Shadowing coefficient for UHE
1646 }
1647 else
1648 {
1649 G4double Aa = nistmngr->GetAtomicMassAmu(ZZ); // average A
1650 G4int N = static_cast<G4int>(Aa) - ZZ;
1651
1652 G4double lnA=G4Log(Aa); // The nucleus is not found in DB. It is new.
1653 if(Aa==1.) lastSP=1.; // The Reggeon shadowing (A=1)
1654 else lastSP=Aa*(1.-shc*lnA); // The Reggeon shadowing
1655 lastTH=ThresholdEnergy(ZZ, N); // Energy Threshold
1656 lastGDR = new G4double[nL]; // Allocate memory for the new
1657 // GDR cross sections
1658 lastHEN = new G4double[nH]; // Allocate memory for the new
1659 // HEN cross sections
1660 G4int er=GetFunctions(Aa,lastGDR,lastHEN); // new ZeroPosition and
1661 // filling of the functions
1662 if(er<1) G4cerr << "***G4PhotoNucCrossSection::GetCrossSection: A="
1663 << Aa << " failed" << G4endl;
1664
1665 GDR[ZZ]=lastGDR; // added GDR, found by AH 10/7/02
1666 HEN[ZZ]=lastHEN; // added HEN, found by AH 10/7/02
1667 eTH[ZZ]=lastTH; // Threshold Energy
1668 spA[ZZ]=lastSP; // Pomeron Shadowing
1669 } // End of creation of the new set of parameters
1670 }// End of parameters udate
1671
1672 //
1673 // =================== NOW the Magic Formula ===================
1674 //
1675 if (Energy<lastTH)
1676 {
1677 lastE=Energy;
1678 lastSig=0.;
1679 return 0.;
1680 }
1681 else if (Energy<Emin) // GDR region (approximated in E, not in lnE)
1682 {
1683 sigma=EquLinearFit(Energy,nL,THmin,dE,lastGDR);
1684 }
1685 else if (Energy<Emax) // High Energy region
1686 {
1687 G4double lE=G4Log(Energy);
1688 sigma=EquLinearFit(lE,nH,milE,dlE,lastHEN);
1689 }
1690 else // UHE region (calculation, but not so frequent)
1691 {
1692 G4double lE=G4Log(Energy);
1693 sigma=lastSP*(poc*(lE-pos)+shd*G4Exp(-reg*lE));
1694 }
1695 // End of "sigma" calculation
1696
1697 sigma = std::max(sigma, 0.);
1698 return sigma*millibarn;
1699}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:179
G4double G4Log(G4double x)
Definition: G4Log.hh:226
static const G4double shc
static const G4int nL
static const G4double pos
static const G4double THmin
static const G4int nH
static const G4double reg
static const G4double milE
static const G4double dlE
static const G4double shd
static const G4double Emax
static const G4double poc
static const G4double Emin
static const G4double dE
static constexpr double millibarn
Definition: G4SIunits.hh:86
static constexpr double MeV
Definition: G4SIunits.hh:200
G4GLOB_DLL std::ostream G4cerr
G4double GetKineticEnergy() const
G4double GetAtomicMassAmu(const G4String &symb) const
G4double EquLinearFit(G4double X, G4int N, const G4double X0, const G4double XD, const G4double *Y)
G4int GetFunctions(G4double a, G4double *y, G4double *z)
G4double ThresholdEnergy(G4int Z, G4int N)
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References dE, dlE, Emax, Emin, EquLinearFit(), eTH, G4cerr, G4endl, G4Exp(), G4Log(), GDR, G4NistManager::GetAtomicMassAmu(), GetFunctions(), G4DynamicParticle::GetKineticEnergy(), HEN, lastE, lastGDR, lastHEN, lastSig, lastSP, lastTH, lastZ, G4INCL::Math::max(), MeV, milE, millibarn, nH, nistmngr, nL, poc, pos, reg, shc, shd, spA, THmin, and ThresholdEnergy().

Referenced by G4ElectroVDNuclearModel::CalculateEMVertex(), and GetIsoCrossSection().

◆ GetFunctions()

G4int G4PhotoNuclearCrossSection::GetFunctions ( G4double  a,
G4double y,
G4double z 
)
private

Definition at line 1764 of file G4PhotoNuclearCrossSection.cc.

1765{
1766 if(a<=.9)
1767 {
1768 G4cout << "***G4PhotoNuclearCS::GetFunctions: A=" << a
1769 << "(?). No CS returned!" << G4endl;
1770 return -1;
1771 }
1772 G4int r=0; // Low channel for GDR (filling-flag for GDR)
1773 for(G4int i=0; i<nLA; ++i) if(std::abs(a-LA[i])<.0005)
1774 {
1775 for(G4int k=0; k<nL; ++k) y[k]=SL[i][k];
1776 r=1; // Flag of filled GDR part
1777 }
1778 G4int h=0;
1779 for(G4int j=0; j<nHA; ++j) if(std::abs(a-HA[j])<.0005)
1780 {
1781 for(G4int k=0; k<nH; ++k) z[k]=SH[j][k];
1782 h=1; // Flag of filled GDR part
1783 }
1784 if(0 == r) // GDR part is not filled
1785 {
1786 G4int k=0; // !! To be good for different compilers !!
1787 for(k=1; k<nLA; ++k) if(a<LA[k]) break;
1788 if(k<1) k=1; // Extrapolation from the first bin (D/He)
1789 if(k>=nLA) k=nLA-1; // Extrapolation from the last bin (U)
1790 G4int k1=k-1;
1791 G4double xi=LA[k1];
1792 G4double b=(a-xi)/(LA[k]-xi);
1793 for(G4int q=0; q<nL; ++q)
1794 {
1795 if(a>1.5)
1796 {
1797 G4double yi=SL[k1][q];
1798 y[q]=yi+(SL[k][q]-yi)*b;
1799 }
1800 else y[q]=0.;
1801 }
1802 r=1;
1803 }
1804 if(0 == h) // High Energy part is not filled
1805 {
1806 G4int k=0;
1807 for(k=1; k<nHA; ++k) if(a<HA[k]) break;
1808 if(k<1) k=1; // Extrapolation from the first bin (D/He)
1809 if(k>=nHA) k=nHA-1; // Extrapolation from the last bin (Pu)
1810 G4int k1=k-1;
1811 G4double xi=HA[k1];
1812 G4double b=(a-xi)/(HA[k]-xi);
1813 for(G4int q=0; q<nH; ++q)
1814 {
1815 G4double zi=SH[k1][q];
1816 z[q]=zi+(SH[k][q]-zi)*b;
1817 }
1818 h=1;
1819 }
1820 return r*h;
1821}
static const G4double * SH[nHA]
static const G4int nLA
static const G4double HA[nHA]
static const G4double * SL[nLA]
static const G4int nHA
static const G4double LA[nLA]

References G4cout, G4endl, HA, LA, nH, nHA, nL, nLA, SH, and SL.

Referenced by GetElementCrossSection().

◆ GetIsoCrossSection()

G4double G4PhotoNuclearCrossSection::GetIsoCrossSection ( const G4DynamicParticle dynPart,
G4int  Z,
G4int  A,
const G4Isotope ,
const G4Element elm,
const G4Material mat 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 1542 of file G4PhotoNuclearCrossSection.cc.

1547{
1548 G4double Energy = aPart->GetKineticEnergy()/MeV;
1549 if (Energy < THmin) return 0.;
1550
1551 G4double sigma;
1552 G4double lE;
1553 if (Z == 1 && A == 2) {
1554 // init the XS table if need be
1555 if (deuteron_GDR == nullptr) {
1556 deuteron_TH = ThresholdEnergy(1,1); // threshold calculation is correct
1557 deuteron_GDR = new G4double[nL]; // direct copies
1558 for (G4int i = 0; i < nL; ++i) deuteron_GDR[i] = SL[0][i]; // A = 2 -> SL0
1559 deuteron_HR = new G4double[nH];
1560 for (G4int i = 0; i < nH; ++i) deuteron_HR[i] = SH[1][i]; // A = 2 -> SH1
1561 deuteron_SP = 1; // as would be assigned for proton
1562 }
1563 if (Energy < deuteron_TH) {
1564 sigma = 0.;
1565 } else if (Energy < Emin) { // GDR region (approximated in E, not in lnE)
1566 sigma = EquLinearFit(Energy,nL,THmin,dE,deuteron_GDR);
1567 } else if (Energy < Emax) { // High Energy region
1568 lE = G4Log(Energy);
1569 sigma = EquLinearFit(lE,nH,milE,dlE,deuteron_HR);
1570 } else { // Very high energy region
1571 lE = G4Log(Energy);
1572 sigma = deuteron_SP*(poc*(lE-pos)+shd*std::exp(-reg*lE));
1573 }
1574
1575 } else if (Z == 1 && A == 3) {
1576 if (triton_GDR == nullptr) {
1578 triton_GDR = new G4double[nL]; // same as for deuteron since no A = 3 entry
1579 for (G4int i = 0; i < nL; ++i) triton_GDR[i] = SL[0][i]; // A = 3 -> SL0
1580 triton_HR = new G4double[nH];
1581 for (G4int i = 0; i < nH; ++i) triton_HR[i] = SH[2][i]; // A = 3 -> SH2
1582 triton_SP = 1;
1583 }
1584 if (Energy < triton_TH) {
1585 sigma = 0.;
1586 } else if (Energy < Emin) { // GDR region
1587 sigma = EquLinearFit(Energy,nL,THmin,dE,triton_GDR);
1588 } else if (Energy < Emax) { // High Energy region
1589 lE = G4Log(Energy);
1590 sigma = EquLinearFit(lE,nH,milE,dlE,triton_HR);
1591 } else {
1592 lE = G4Log(Energy);
1593 sigma = triton_SP*(poc*(lE-pos)+shd*std::exp(-reg*lE));
1594 }
1595
1596 } else if (Z == 2 && A == 3) {
1597 if (he3_GDR == nullptr) {
1598 he3_TH = ThresholdEnergy(2,1);
1599 he3_GDR = new G4double[nL]; // same as for deuteron since no A = 3 entry
1600 for (G4int i = 0 ; i < nL ; ++i) he3_GDR[i] = SL[0][i]; // A = 3 -> SL0
1601 he3_HR = new G4double[nH];
1602 for (G4int i = 0 ; i < nH ; ++i) he3_HR[i] = SH[2][i]; // A = 3 -> SH2
1603 he3_SP = 2;
1604 }
1605 if (Energy < he3_TH) {
1606 sigma = 0.;
1607 } else if (Energy < Emin) { // GDR region
1608 sigma = EquLinearFit(Energy,nL,THmin,dE,he3_GDR);
1609 } else if (Energy < Emax) { // High Energy region
1610 lE = G4Log(Energy);
1611 sigma = EquLinearFit(lE,nH,milE,dlE,he3_HR);
1612 } else {
1613 lE = G4Log(Energy);
1614 sigma = he3_SP*(poc*(lE-pos)+shd*std::exp(-reg*lE));
1615 }
1616
1617 } else {
1618 return GetElementCrossSection(aPart, Z, mat);
1619 }
1620
1621 if(sigma < 0.) sigma = 0.;
1622 return sigma*millibarn;
1623}
virtual G4double GetElementCrossSection(const G4DynamicParticle *, G4int Z, const G4Material *)

References A, dE, deuteron_GDR, deuteron_HR, deuteron_SP, deuteron_TH, dlE, Emax, Emin, EquLinearFit(), G4Log(), GetElementCrossSection(), G4DynamicParticle::GetKineticEnergy(), he3_GDR, he3_HR, he3_SP, he3_TH, MeV, milE, millibarn, nH, nL, poc, pos, reg, SH, shd, SL, THmin, ThresholdEnergy(), triton_GDR, triton_HR, triton_SP, triton_TH, and Z.

◆ 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 G4PhotoNuclearCrossSection::IsElementApplicable ( const G4DynamicParticle particle,
G4int  Z,
const G4Material  
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 1533 of file G4PhotoNuclearCrossSection.cc.

1535{
1536 return true;
1537}

◆ IsIsoApplicable()

G4bool G4PhotoNuclearCrossSection::IsIsoApplicable ( const G4DynamicParticle particle,
G4int  Z,
G4int  A,
const G4Element elm = 0,
const G4Material mat = 0 
)
virtual

Reimplemented from G4VCrossSectionDataSet.

Definition at line 1520 of file G4PhotoNuclearCrossSection.cc.

1524{
1525 // explicitly allow deuterium and tritium
1526 if ((Z == 1 && A == 2) || (Z == 1 && A == 3) ||
1527 (Z == 2 && A == 3) ) return true;
1528 return false;
1529}

References A, and Z.

◆ 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

◆ ThresholdEnergy()

G4double G4PhotoNuclearCrossSection::ThresholdEnergy ( G4int  Z,
G4int  N 
)
private

Definition at line 1703 of file G4PhotoNuclearCrossSection.cc.

1704{
1705 G4int A = Z + N;
1706 if (A < 1) return infEn;
1707
1708 // Thresholds for p, d, t, 3He in lab frame
1709 else if (A == 1) return 144.6821; // pi0 production
1710 else if (Z == 1 && N == 1) return 2.2263; // disintegration
1711 else if (Z == 1 && N == 2) return 6.2650; // n separation
1712 else if (Z == 2 && N == 1) return 5.4994; // p separation
1713
1714 G4double mT = 0.;
1717 } else {
1718 return infEn;
1719 }
1720
1721 G4double mP = infEn;
1724 }
1725 G4double mN = infEn;
1728 }
1729
1730 G4double dP = mP + mProt - mT;
1731 G4double dN = mN + mNeut - mT;
1732 if (dP < dN) dN = dP;
1733 return dN;
1734}
static const G4double infEn
static G4bool IsInStableTable(const G4double A, const G4double Z)

References A, anonymous_namespace{G4ChipsKaonMinusInelasticXS.cc}::dP, G4NucleiProperties::GetNuclearMass(), infEn, G4NucleiProperties::IsInStableTable(), mNeut, mProt, and Z.

Referenced by GetElementCrossSection(), and GetIsoCrossSection().

Field Documentation

◆ deuteron_GDR

G4double* G4PhotoNuclearCrossSection::deuteron_GDR = nullptr
private

Definition at line 94 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ deuteron_HR

G4double* G4PhotoNuclearCrossSection::deuteron_HR = nullptr
private

Definition at line 95 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ deuteron_SP

G4double G4PhotoNuclearCrossSection::deuteron_SP = 0.0
private

Definition at line 97 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ deuteron_TH

G4double G4PhotoNuclearCrossSection::deuteron_TH = 0.0
private

Definition at line 96 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ eTH

std::vector<G4double> G4PhotoNuclearCrossSection::eTH
private

◆ GDR

std::vector<G4double*> G4PhotoNuclearCrossSection::GDR
private

◆ he3_GDR

G4double* G4PhotoNuclearCrossSection::he3_GDR = nullptr
private

Definition at line 102 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ he3_HR

G4double* G4PhotoNuclearCrossSection::he3_HR = nullptr
private

Definition at line 103 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ he3_SP

G4double G4PhotoNuclearCrossSection::he3_SP = 0.0
private

Definition at line 105 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ he3_TH

G4double G4PhotoNuclearCrossSection::he3_TH = 0.0
private

Definition at line 104 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ HEN

std::vector<G4double*> G4PhotoNuclearCrossSection::HEN
private

◆ isForAllAtomsAndEnergies

G4bool G4VCrossSectionDataSet::isForAllAtomsAndEnergies
privateinherited

◆ lastE

G4double G4PhotoNuclearCrossSection::lastE = 0.0
private

Definition at line 86 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastGDR

G4double* G4PhotoNuclearCrossSection::lastGDR = nullptr
private

Definition at line 84 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastHEN

G4double* G4PhotoNuclearCrossSection::lastHEN = nullptr
private

Definition at line 85 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastSig

G4double G4PhotoNuclearCrossSection::lastSig = 0.0
private

Definition at line 83 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastSP

G4double G4PhotoNuclearCrossSection::lastSP = 0.0
private

Definition at line 88 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastTH

G4double G4PhotoNuclearCrossSection::lastTH = 0.0
private

Definition at line 87 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ lastZ

G4int G4PhotoNuclearCrossSection::lastZ = 0
private

Definition at line 82 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetElementCrossSection().

◆ maxKinEnergy

G4double G4VCrossSectionDataSet::maxKinEnergy
privateinherited

◆ minKinEnergy

G4double G4VCrossSectionDataSet::minKinEnergy
privateinherited

◆ mNeut

G4double G4PhotoNuclearCrossSection::mNeut
private

Definition at line 115 of file G4PhotoNuclearCrossSection.hh.

Referenced by ThresholdEnergy().

◆ mProt

G4double G4PhotoNuclearCrossSection::mProt
private

Definition at line 116 of file G4PhotoNuclearCrossSection.hh.

Referenced by ThresholdEnergy().

◆ name

G4String G4VCrossSectionDataSet::name
protectedinherited

◆ nistmngr

G4NistManager* G4PhotoNuclearCrossSection::nistmngr
private

◆ registry

G4CrossSectionDataSetRegistry* G4VCrossSectionDataSet::registry
privateinherited

◆ spA

std::vector<G4double> G4PhotoNuclearCrossSection::spA
private

◆ triton_GDR

G4double* G4PhotoNuclearCrossSection::triton_GDR = nullptr
private

Definition at line 98 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ triton_HR

G4double* G4PhotoNuclearCrossSection::triton_HR = nullptr
private

Definition at line 99 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ triton_SP

G4double G4PhotoNuclearCrossSection::triton_SP = 0.0
private

Definition at line 101 of file G4PhotoNuclearCrossSection.hh.

Referenced by GetIsoCrossSection().

◆ triton_TH

G4double G4PhotoNuclearCrossSection::triton_TH = 0.0
private

Definition at line 100 of file G4PhotoNuclearCrossSection.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: