34#define INCLXX_IN_GEANT4_MODE 1
45#ifdef INCLXX_IN_GEANT4_MODE
49#ifdef INCLXX_IN_GEANT4_MODE
56 namespace ParticleTable {
140 {0.0,0.0,0.0,0.0,0.0,1.78,1.77,1.77,1.69,1.71,
141 1.69,1.72,1.635,1.730,1.81,1.833,1.798,
142 1.93,0.567,0.571, 0.560,0.549,0.550,0.551,
143 0.580,0.575,0.569,0.537,0.0,0.0};
145 {0.0,0.0,0.0,0.0,0.0,0.334,0.327,0.479,0.631,0.838,
146 0.811,0.84,1.403,1.335,1.25,1.544,1.498,1.57,
147 2.58,2.77, 2.775,2.78,2.88,2.98,3.22,3.03,2.84,
152 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0},
153 {-1.0, -1.0, 2.10, 1.80, 1.70, 1.83, 2.60, 2.50, -1.0, -1.0, -1.0, -1.0, -1.0},
154 {-1.0, -1.0, -1.0, 1.80, 1.68, 1.70, 2.60, 2.50, 2.50, 2.50, 2.50, -1.0, -1.0},
155 {-1.0, -1.0, -1.0, -1.0, 1.70, 1.83, 2.56, 2.40, 2.50, 2.50, 2.50, 2.50, 2.50},
156 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.60, 2.50, 2.50, 2.51, 2.50, 2.50, 2.50},
157 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50, 2.50, 2.45, 2.40, 2.50},
158 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50, 2.50, 2.47},
159 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50, 2.50, 2.50},
160 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 2.50}
165 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0},
166 {-1.0, -1.0, 77.0, 110., 153., 100., 100., 100., -1.0, -1.0, -1.0, -1.0, -1.0},
167 {-1.0, -1.0, -1.0, 110., 153., 100., 100., 100., 100., 100., 100., -1.0, -1.0},
168 {-1.0, -1.0, -1.0, -1.0, 153., 100., 100., 100., 100., 100., 100., 100., 100.},
169 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100., 100., 100.},
170 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100., 100., 100.},
171 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100., 100., 100.},
172 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100., 100., 100.},
173 {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 100.}
298#define INCL_DEFAULT_SEPARATION_ENERGY 6.83
305#undef INCL_DEFAULT_SEPARATION_ENERGY
312#ifdef INCLXX_IN_GEANT4_MODE
377#ifndef INCLXX_IN_GEANT4_MODE
378 std::string dataFilePath;
384#ifdef INCLXX_IN_GEANT4_MODE
424#ifdef INCLXX_IN_GEANT4_MODE
447 if(aFermiMomentum>0.)
506 }
else if(t ==
KPlus) {
508 }
else if(t ==
KZero) {
514 }
else if(t ==
KLong) {
518 }
else if(t ==
Eta) {
520 }
else if(t ==
Omega) {
527 INCL_ERROR(
"Requested isospin of an unknown particle!");
550 std::stringstream stream;
556 std::stringstream stream;
567 std::stringstream stream;
576 return std::string(
"proton");
578 return std::string(
"neutron");
580 return std::string(
"delta++");
582 return std::string(
"delta+");
584 return std::string(
"delta0");
586 return std::string(
"delta-");
588 return std::string(
"pi+");
590 return std::string(
"pi0");
592 return std::string(
"pi-");
594 return std::string(
"lambda");
596 return std::string(
"sigma+");
598 return std::string(
"sigma0");
600 return std::string(
"sigma-");
602 return std::string(
"kaon+");
604 return std::string(
"kaon0");
606 return std::string(
"kaon0bar");
608 return std::string(
"kaon-");
610 return std::string(
"kaonshort");
612 return std::string(
"kaonlong");
614 return std::string(
"composite");
616 return std::string(
"eta");
618 return std::string(
"omega");
620 return std::string(
"etaprime");
622 return std::string(
"photon");
624 return std::string(
"unknown");
629 return std::string(
"p");
631 return std::string(
"n");
633 return std::string(
"d++");
635 return std::string(
"d+");
637 return std::string(
"d0");
639 return std::string(
"d-");
641 return std::string(
"pi+");
643 return std::string(
"pi0");
645 return std::string(
"pi-");
647 return std::string(
"l");
649 return std::string(
"s+");
651 return std::string(
"s0");
653 return std::string(
"s-");
655 return std::string(
"k+");
657 return std::string(
"k0");
659 return std::string(
"k0b");
661 return std::string(
"k-");
663 return std::string(
"ks");
665 return std::string(
"kl");
667 return std::string(
"comp");
669 return std::string(
"eta");
671 return std::string(
"omega");
673 return std::string(
"etap");
675 return std::string(
"photon");
677 return std::string(
"unknown");
699 }
else if(pt ==
KPlus) {
701 }
else if(pt ==
KZero) {
709 }
else if(pt ==
KLong) {
711 }
else if(pt ==
Eta) {
713 }
else if(pt ==
Omega) {
720 INCL_ERROR(
"getMass : Unknown particle type." <<
'\n');
775 INCL_ERROR(
"Particle::getRealMass : Unknown particle type." <<
'\n');
792 else if(
Z==0 &&
S==0)
799#ifndef INCLXX_IN_GEANT4_MODE
800 return ::G4INCL::NuclearMassTable::getMass(
A,
Z,
S);
825 else if(
A==1 &&
Z==0 &&
S==0)
827 else if(
A==1 &&
Z==1 &&
S==0)
829 else if(
A==1 &&
Z==0 &&
S==-1)
967 if(
A > 19 || (A < 6 && A >= 2)) {
971 }
else if(A < clusterTableASize && Z>=0 && Z < clusterTableZSize && A >= 6) {
976 INCL_DEBUG(
"getNuclearRadius: Radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
" is not available" <<
'\n'
977 <<
"returning radius for C12");
985 return 1.225*theDiffusenessParameter*
986 std::sqrt((2.+5.*theRadiusParameter)/(2.+3.*theRadiusParameter));
988 INCL_ERROR(
"getNuclearRadius: No radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
'\n');
1002 G4double r0 = (1.128+0.439*std::pow(
A,-2./3.)) * std::pow(
A, 1.0/3.0);
1006 G4double r0 = (2.745e-4 *
A + 1.063) * std::pow(
A, 1.0/3.0);
1010 if(r0hfb>0.)r0 = r0hfb;
1016 }
else if(A < 6 && A >= 2) {
1017 if(Z<clusterTableZSize && Z>=0) {
1022 INCL_DEBUG(
"getRadiusParameter: Radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
" is not available" <<
'\n'
1023 <<
"returning radius for C12");
1027 INCL_DEBUG(
"getRadiusParameter: Radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
" is not available" <<
'\n'
1028 <<
"returning radius for C12");
1031 }
else if(A <= 19 && A >= 6) {
1033 G4double r0 = (1.128+0.439*std::pow(
A,-2./3.)) * std::pow(
A, 1.0/3.0);
1039 if(r0hfb>0.)
return r0hfb;
1044 INCL_ERROR(
"getRadiusParameter: No radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
'\n');
1053 }
else if(A <= 19 && A >= 6) {
1054 return 5.5 + 0.3 * (
G4double(
A) - 6.0)/12.0;
1058 INCL_ERROR(
"getMaximumNuclearRadius : No maximum radius for nucleus A = " <<
A <<
" Z = " <<
Z <<
'\n');
1081 }
else if(A <= 19 && A >= 6) {
1085 if(ahfb>0.)
return ahfb;
1088 }
else if(A < 6 && A >= 2) {
1089 INCL_ERROR(
"getSurfaceDiffuseness: was called for A = " <<
A <<
" Z = " <<
Z <<
'\n');
1092 INCL_ERROR(
"getSurfaceDiffuseness: No diffuseness for nucleus A = " <<
A <<
" Z = " <<
Z <<
'\n');
1110 INCL_ERROR(
"ParticleTable::getSeparationEnergyINCL : Unknown particle type." <<
'\n');
1124 INCL_ERROR(
"ParticleTable::getSeparationEnergyReal : Unknown particle type." <<
'\n');
1151 INCL_WARN(
"getElementName called with Z<1" <<
'\n');
1160 std::stringstream elementStream;
1162 std::string elementName = elementStream.str();
1164 elementName[0] = std::toupper(elementName.at(0));
1171 pS[0] = ::toupper(pS[0]);
1182 std::string elementName(sel);
1183 std::transform(elementName.begin(), elementName.end(), elementName.begin(), ::tolower);
1188 std::stringstream elementStream(elementName);
1217 static const G4double alphaParam = 259.416;
1218 static const G4double betaParam = 152.824;
1219 static const G4double gammaParam = 9.5157E-2;
1220 return alphaParam - betaParam*std::exp(-gammaParam*((
G4double)
A));
1245 else if (isosp == 0) {
1268 else if (isosp == -1) {
1271 else if (isosp == 1) {
1285 else if (isosp == 0) {
1319 }
else if(pt ==
PiZero) {
1321 }
else if(pt ==
Eta) {
1323 }
else if(pt ==
Omega) {
1333 }
else if(pt ==
KPlus) {
1335 }
else if(pt ==
KMinus) {
1337 }
else if(pt ==
KShort) {
1339 }
else if(pt ==
KLong) {
1342 INCL_ERROR(
"getWidth : Unknown particle type." <<
'\n');
G4double S(G4double temp)
Functions that encapsulate a mass table.
#define INCL_DEFAULT_SEPARATION_ENERGY
static constexpr double MeV
G4double getNeutronHalo() const
Get the neutron-halo size.
FermiMomentumType getFermiMomentumType() const
Get the Fermi-momentum type.
SeparationEnergyType getSeparationEnergyType() const
Get the separation-energy type.
G4double getRPCorrelationCoefficient(const ParticleType t) const
Get the r-p correlation coefficient.
std::string const & getINCLXXDataFilePath() const
G4double getNeutronSkin() const
Get the neutron-skin thickness.
G4double getFermiMomentum() const
Get the Fermi momentum.
G4bool getUseRealMasses() const
Whether to use real masses.
Class that stores isotopic abundances for a given element.
Class that stores isotopic abundances for a given element.
G4int drawRandomIsotope(G4int const Z) const
Draw a random isotope.
IsotopicDistribution const & getIsotopicDistribution(G4int const Z) const
Get an isotopic distribution.
G4double GetNucleusMass(G4int Z, G4int A, G4int nL=0, G4int lvl=0) const
G4double GetPDGMass() const
G4IonTable * GetIonTable() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
void initialize(Config const *const theConfig)
Initialize the clustering model based on the Config object.
G4double getSurfaceDiffusenessHFB(const ParticleType t, const G4int A, const G4int Z)
G4double getRadiusParameterHFB(const ParticleType t, const G4int A, const G4int Z)
Get the radius and diffuseness parameters from HFB calculations.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
const G4double sqrtFiveThirds
const G4double sqrtThreeFifths
G4ThreadLocal G4double KMinusMass
G4ThreadLocal G4double theRealChargedKaonMass
G4ThreadLocal G4double neutronMass
G4ThreadLocal G4double omegaWidth
G4ThreadLocal G4double LambdaWidth
const G4double momentumRMS[clusterTableZSize][clusterTableASize]
const G4double theSigmaPlusWidth
G4ThreadLocal G4IonTable * theG4IonTable
G4ThreadLocal G4double theRealChargedPiMass
G4ThreadLocal G4double theRealSigmaPlusMass
G4ThreadLocal G4double LambdaMass
G4ThreadLocal G4double etaMass
const G4double theSigmaMinusWidth
const G4double thePiZeroWidth
const NaturalIsotopicDistributions * theNaturalIsotopicDistributions
Static instance of the NaturalIsotopicAbundances class.
G4ThreadLocal G4double SigmaMinusMass
const G4double theINCLProtonSeparationEnergy
G4ThreadLocal G4double KLongMass
const G4double theEtaWidth
G4ThreadLocal G4double SigmaPlusMass
G4ThreadLocal G4double rpCorrelationCoefficient[UnknownParticle]
const G4int elementTableSize
G4ThreadLocal G4double SigmaPlusWidth
G4ThreadLocal G4double neutronSkin
G4ThreadLocal G4double protonMass
const NaturalIsotopicDistributions * getNaturalIsotopicDistributions()
Get the singleton instance of the natural isotopic distributions.
const G4double theLambdaWidth
const G4double theKShortWidth
G4ThreadLocal G4double theRealSigmaZeroMass
G4ThreadLocal G4double neutronSeparationEnergy
const G4double mediumRadius[mediumNucleiTableSize]
const G4double theINCLLambdaMass
G4ThreadLocal G4double piPlusMass
const G4double theINCLPhotonMass
char iupacToInt(char c)
Transform a IUPAC char to an char representing an integer digit.
const G4double theINCLLambdaSeparationEnergy
const G4double theINCLNeutronSeparationEnergy
G4ThreadLocal G4double SigmaZeroWidth
const G4double theINCLNucleonMass
G4ThreadLocal G4double etaWidth
G4ThreadLocal G4double KZeroMass
G4ThreadLocal G4double piMinusMass
G4ThreadLocal G4double KShortMass
G4ThreadLocal G4double omegaMass
G4ThreadLocal G4double protonSeparationEnergy
G4ThreadLocal G4double constantFermiMomentum
Default value for constant Fermi momentum.
G4ThreadLocal G4double theRealSigmaMinusMass
G4ThreadLocal G4double theRealLambdaMass
G4ThreadLocal G4double piPlusWidth
G4ThreadLocal G4double theRealNeutronMass
G4ThreadLocal G4double theRealProtonMass
const G4double mediumDiffuseness[mediumNucleiTableSize]
G4ThreadLocal G4double KLongWidth
G4ThreadLocal G4double KPlusWidth
G4ThreadLocal G4double SigmaMinusWidth
const G4double theINCLOmegaMass
const G4double theINCLPionMass
G4ThreadLocal G4double etaPrimeWidth
const G4double theINCLEtaMass
G4ThreadLocal G4double theRealPhotonMass
G4ThreadLocal G4double theRealNeutralKaonMass
G4ThreadLocal G4double theRealEtaPrimeMass
G4ThreadLocal G4double theRealEtaMass
G4ThreadLocal G4double SigmaZeroMass
const G4double theChargedKaonWidth
G4ThreadLocal G4double KShortWidth
G4ThreadLocal G4double lambdaSeparationEnergy
char intToIUPAC(char n)
Transform an integer digit (represented by a char) to a IUPAC char.
G4ThreadLocal G4double KPlusMass
const G4double theKLongWidth
const std::string elementTable[elementTableSize]
Table of chemical element names.
G4ThreadLocal G4double KMinusWidth
G4ThreadLocal G4double theRealOmegaMass
const G4double theINCLEtaPrimeMass
G4ThreadLocal G4double KZeroBarMass
G4ThreadLocal G4double piZeroWidth
const std::string elementIUPACDigits
Digit names to compose IUPAC element names.
G4ThreadLocal G4double etaPrimeMass
const G4double theChargedPiWidth
G4ThreadLocal G4double neutronHalo
const G4double theEtaPrimeWidth
const G4double theSigmaZeroWidth
const G4double theOmegaWidth
const G4int mediumNucleiTableSize
G4ThreadLocal G4double piZeroMass
const G4double positionRMS[clusterTableZSize][clusterTableASize]
G4ThreadLocal G4double theRealPiZeroMass
G4ThreadLocal G4double piMinusWidth
G4ThreadLocal G4double photonMass
G4int getMassNumber(const ParticleType t)
Get mass number from particle type.
G4ThreadLocal FermiMomentumFn getFermiMomentum
const G4double effectiveDeltaWidth
G4int parseElement(std::string pS)
Get the name of the element from the atomic number.
G4ThreadLocal G4double minDeltaMass2
G4double(* FermiMomentumFn)(const G4int, const G4int)
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2)
Get Q-value (in MeV/c^2)
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
void initialize(Config const *const theConfig=0)
Initialize the particle table.
const G4double effectiveDeltaMass
G4double getFermiMomentumMassDependent(const G4int A, const G4int)
Return the value Fermi momentum from a fit.
G4double getTableSpeciesMass(const ParticleSpecies &p)
G4double getLambdaSeparationEnergy()
G4int drawRandomNaturalIsotope(const G4int Z)
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
G4double getNeutronSeparationEnergy()
Getter for neutronSeparationEnergy.
G4ThreadLocal G4double minDeltaMass
const G4int clusterTableZSize
G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z)
G4double getLargestNuclearRadius(const G4int A, const G4int Z)
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
G4double getNeutronHalo()
Get the size of the neutron halo.
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4double(* ParticleMassFn)(const ParticleType)
G4int getStrangenessNumber(const ParticleType t)
Get strangeness number from particle type.
G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
G4double getRPCorrelationCoefficient(const ParticleType t)
Get the value of the r-p correlation coefficient.
G4int parseIUPACElement(std::string const &pS)
Parse a IUPAC element name.
G4double getSeparationEnergyINCL(const ParticleType t, const G4int, const G4int)
Return INCL's default separation energy.
void setNeutronSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
std::string getName(const ParticleType t)
Get the native INCL name of the particle.
G4ThreadLocal G4double minDeltaMassRndm
G4double(* SeparationEnergyFn)(const ParticleType, const G4int, const G4int)
G4double getNeutronSkin()
Get the thickness of the neutron skin.
std::string getIUPACElementName(const G4int Z)
Get the name of an unnamed element from the IUPAC convention.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z)
const G4int clusterTableASize
G4double getFermiMomentumConstantLight(const G4int A, const G4int Z)
Return the constant value of the Fermi momentum - special for light.
void setProtonSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
ParticleType getDeltaType(const G4int isosp)
Get the type of delta.
void setLambdaSeparationEnergy(const G4double sen)
G4double(* NuclearMassFn)(const G4int, const G4int, const G4int)
G4int getChargeNumber(const ParticleType t)
Get charge number from particle type.
G4double getProtonSeparationEnergy()
Getter for protonSeparationEnergy.
IsotopicDistribution const & getNaturalIsotopicDistribution(const G4int Z)
G4double getMomentumRMS(const G4int A, const G4int Z)
Return the RMS of the momentum distribution (light clusters)
ParticleType getAntiKaonType(const G4int isosp)
Get the type of antikaon.
G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy only for light nuclei.
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
G4double getWidth(const ParticleType t)
Get particle width (in s)
std::string getShortName(const ParticleType t)
Get the short INCL name of the particle.
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.
const G4double Pf
Fermi momentum [MeV/c].
@ MassDependentFermiMomentum
@ ConstantLightFermiMomentum
@ RealForLightSeparationEnergy
static const G4double Z1[5]