Geant4  10.02.p03
G4INCL::ParticleTable Namespace Reference

Typedefs

typedef G4double(* NuclearMassFn) (const G4int, const G4int)
 
typedef G4double(* ParticleMassFn) (const ParticleType)
 
typedef G4double(* SeparationEnergyFn) (const ParticleType, const G4int, const G4int)
 
typedef G4double(* FermiMomentumFn) (const G4int, const G4int)
 

Functions

void initialize (Config const *const theConfig=0)
 Initialize the particle table. More...
 
G4int getIsospin (const ParticleType t)
 Get the isospin of a particle. More...
 
std::string getName (const ParticleType t)
 Get the native INCL name of the particle. More...
 
std::string getShortName (const ParticleType t)
 Get the short INCL name of the particle. More...
 
std::string getName (const ParticleSpecies &s)
 Get the native INCL name of the particle. More...
 
std::string getShortName (const ParticleSpecies &s)
 Get the short INCL name of the particle. More...
 
std::string getName (const G4int A, const G4int Z)
 Get the native INCL name of the ion. More...
 
std::string getShortName (const G4int A, const G4int Z)
 Get the short INCL name of the ion. More...
 
G4double getINCLMass (const G4int A, const G4int Z)
 Get INCL nuclear mass (in MeV/c^2) More...
 
G4double getINCLMass (const ParticleType t)
 Get INCL particle mass (in MeV/c^2) More...
 
G4double getRealMass (const G4INCL::ParticleType t)
 Get particle mass (in MeV/c^2) More...
 
G4double getRealMass (const G4int A, const G4int Z)
 Get nuclear mass (in MeV/c^2) More...
 
G4double getTableQValue (const G4int A1, const G4int Z1, const G4int A2, const G4int Z2)
 Get Q-value (in MeV/c^2) More...
 
G4double getTableQValue (const G4int A1, const G4int Z1, const G4int A2, const G4int Z2, const G4int A3, const G4int Z3)
 Get Q-value (in MeV/c^2) More...
 
G4double getTableSpeciesMass (const ParticleSpecies &p)
 
G4int getMassNumber (const ParticleType t)
 Get mass number from particle type. More...
 
G4int getChargeNumber (const ParticleType t)
 Get charge number from particle type. More...
 
G4double getNuclearRadius (const ParticleType t, const G4int A, const G4int Z)
 
G4double getLargestNuclearRadius (const G4int A, const G4int Z)
 
G4double getRadiusParameter (const ParticleType t, const G4int A, const G4int Z)
 
G4double getMaximumNuclearRadius (const ParticleType t, const G4int A, const G4int Z)
 
G4double getSurfaceDiffuseness (const ParticleType t, const G4int A, const G4int Z)
 
G4double getMomentumRMS (const G4int A, const G4int Z)
 Return the RMS of the momentum distribution (light clusters) More...
 
G4double getSeparationEnergyINCL (const ParticleType t, const G4int, const G4int)
 Return INCL's default separation energy. More...
 
G4double getSeparationEnergyReal (const ParticleType t, const G4int A, const G4int Z)
 Return the real separation energy. More...
 
G4double getSeparationEnergyRealForLight (const ParticleType t, const G4int A, const G4int Z)
 Return the real separation energy only for light nuclei. More...
 
G4double getProtonSeparationEnergy ()
 Getter for protonSeparationEnergy. More...
 
G4double getNeutronSeparationEnergy ()
 Getter for neutronSeparationEnergy. More...
 
void setProtonSeparationEnergy (const G4double s)
 Setter for protonSeparationEnergy. More...
 
void setNeutronSeparationEnergy (const G4double s)
 Setter for protonSeparationEnergy. More...
 
std::string getElementName (const G4int Z)
 Get the name of the element from the atomic number. More...
 
std::string getIUPACElementName (const G4int Z)
 Get the name of an unnamed element from the IUPAC convention. More...
 
G4int parseElement (std::string pS)
 Get the name of the element from the atomic number. More...
 
G4int parseIUPACElement (std::string const &pS)
 Parse a IUPAC element name. More...
 
IsotopicDistribution const & getNaturalIsotopicDistribution (const G4int Z)
 
G4int drawRandomNaturalIsotope (const G4int Z)
 
G4double getFermiMomentumConstant (const G4int, const G4int)
 Return the constant value of the Fermi momentum. More...
 
G4double getFermiMomentumConstantLight (const G4int A, const G4int Z)
 Return the constant value of the Fermi momentum - special for light. More...
 
G4double getFermiMomentumMassDependent (const G4int A, const G4int)
 Return the value Fermi momentum from a fit. More...
 
G4double getRPCorrelationCoefficient (const ParticleType t)
 Get the value of the r-p correlation coefficient. More...
 
G4double getNeutronSkin ()
 Get the thickness of the neutron skin. More...
 
G4double getNeutronHalo ()
 Get the size of the neutron halo. More...
 
ParticleType getPionType (const G4int isosp)
 Get the type of pion. More...
 
ParticleType getNucleonType (const G4int isosp)
 Get the type of nucleon. More...
 
ParticleType getDeltaType (const G4int isosp)
 Get the type of delta. More...
 

Variables

const G4int maxClusterMass = 12
 
const G4int maxClusterCharge = 8
 
const G4int clusterTableZSize = maxClusterCharge+1
 
const G4int clusterTableASize = maxClusterMass+1
 
const G4double effectiveNucleonMass = 938.2796
 
const G4double effectiveNucleonMass2 = 8.8036860777616e5
 
const G4double effectiveDeltaMass = 1232.0
 
const G4double effectiveDeltaWidth = 130.0
 
const G4double effectivePionMass = 138.0
 
G4ThreadLocal G4double minDeltaMass = 0.
 
G4ThreadLocal G4double minDeltaMass2 = 0.
 
G4ThreadLocal G4double minDeltaMassRndm = 0.
 
G4ThreadLocal NuclearMassFn getTableMass = NULL
 Static pointer to the mass function for nuclei. More...
 
G4ThreadLocal ParticleMassFn getTableParticleMass = NULL
 Static pointer to the mass function for particles. More...
 
G4ThreadLocal SeparationEnergyFn getSeparationEnergy = NULL
 Static pointer to the separation-energy function. More...
 
G4ThreadLocal FermiMomentumFn getFermiMomentum = NULL
 

Typedef Documentation

◆ FermiMomentumFn

typedef G4double(* G4INCL::ParticleTable::FermiMomentumFn) (const G4int, const G4int)

Definition at line 217 of file G4INCLParticleTable.hh.

◆ NuclearMassFn

typedef G4double(* G4INCL::ParticleTable::NuclearMassFn) (const G4int, const G4int)

Definition at line 204 of file G4INCLParticleTable.hh.

◆ ParticleMassFn

typedef G4double(* G4INCL::ParticleTable::ParticleMassFn) (const ParticleType)

Definition at line 205 of file G4INCLParticleTable.hh.

◆ SeparationEnergyFn

typedef G4double(* G4INCL::ParticleTable::SeparationEnergyFn) (const ParticleType, const G4int, const G4int)

Definition at line 212 of file G4INCLParticleTable.hh.

Function Documentation

◆ drawRandomNaturalIsotope()

G4int G4INCL::ParticleTable::drawRandomNaturalIsotope ( const G4int  Z)

Definition at line 789 of file G4INCLParticleTable.cc.

789  {
790  return getNaturalIsotopicDistributions()->drawRandomIsotope(Z);
791  }
Float_t Z
Here is the caller graph for this function:

◆ getChargeNumber()

G4int G4INCL::ParticleTable::getChargeNumber ( const ParticleType  t)

Get charge number from particle type.

Definition at line 574 of file G4INCLParticleTable.cc.

574  {
575  switch(t) {
576  case DeltaPlusPlus:
577  return 2;
578  break;
579  case Proton:
580  case DeltaPlus:
581  case PiPlus:
582  return 1;
583  break;
584  case Neutron:
585  case DeltaZero:
586  case PiZero:
587  return 0;
588  break;
589  case DeltaMinus:
590  case PiMinus:
591  return -1;
592  break;
593  default:
594  return 0;
595  break;
596  }
597  }

◆ getDeltaType()

ParticleType G4INCL::ParticleTable::getDeltaType ( const G4int  isosp)

Get the type of delta.

Definition at line 854 of file G4INCLParticleTable.cc.

854  {
855 // assert(isosp == -3 || isosp == -1 || isosp == 1 || isosp == 3);
856  if (isosp == -3) {
857  return DeltaMinus;
858  }
859  else if (isosp == -1) {
860  return DeltaZero;
861  }
862  else if (isosp == 1) {
863  return DeltaPlus;
864  }
865  else {
866  return DeltaPlusPlus;
867  }
868  }

◆ getElementName()

std::string G4INCL::ParticleTable::getElementName ( const G4int  Z)

Get the name of the element from the atomic number.

Definition at line 740 of file G4INCLParticleTable.cc.

740  {
741  if(Z<1) {
742  INCL_WARN("getElementName called with Z<1" << '\n');
743  return elementTable[0];
744  } else if(Z<elementTableSize)
745  return elementTable[Z];
746  else
747  return getIUPACElementName(Z);
748  }
#define INCL_WARN(x)
Float_t Z
std::string getIUPACElementName(const G4int Z)
Get the name of an unnamed element from the IUPAC convention.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFermiMomentumConstant()

G4double G4INCL::ParticleTable::getFermiMomentumConstant ( const G4int  ,
const G4int   
)

Return the constant value of the Fermi momentum.

Definition at line 793 of file G4INCLParticleTable.cc.

793  {
794  return constantFermiMomentum;
795  }
Here is the caller graph for this function:

◆ getFermiMomentumConstantLight()

G4double G4INCL::ParticleTable::getFermiMomentumConstantLight ( const G4int  A,
const G4int  Z 
)

Return the constant value of the Fermi momentum - special for light.

This function should always return PhysicalConstants::Pf for heavy nuclei, and values from the momentumRMS table for light nuclei.

Parameters
Amass number
Zcharge number

Definition at line 797 of file G4INCLParticleTable.cc.

797  {
798 // assert(Z>0 && A>0 && Z<=A);
800  const G4double rms = momentumRMS[Z][A];
801  return ((rms>0.) ? rms : momentumRMS[6][12]) * Math::sqrtFiveThirds;
802  } else
803  return getFermiMomentumConstant(A,Z);
804  }
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
double A(double temperature)
Float_t Z
const G4double sqrtFiveThirds
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFermiMomentumMassDependent()

G4double G4INCL::ParticleTable::getFermiMomentumMassDependent ( const G4int  A,
const G4int   
)

Return the value Fermi momentum from a fit.

This function returns a fitted Fermi momentum, based on data from Moniz et al., Phys. Rev. Lett. 26 (1971) 445. The fitted functional form is

\[ p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\gamma)} \]

with $\alpha=259.416$ MeV/ $c$, $\beta=152.824$ MeV/ $c$ and $\gamma=9.5157\cdot10^{-2}$.

Parameters
Amass number

Definition at line 806 of file G4INCLParticleTable.cc.

806  {
807 // assert(A>0);
808  static const G4double alphaParam = 259.416; // MeV/c
809  static const G4double betaParam = 152.824; // MeV/c
810  static const G4double gammaParam = 9.5157E-2;
811  return alphaParam - betaParam*std::exp(-gammaParam*((G4double)A));
812  }
double A(double temperature)
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ getINCLMass() [1/2]

G4double G4INCL::ParticleTable::getINCLMass ( const G4int  A,
const G4int  Z 
)

Get INCL nuclear mass (in MeV/c^2)

Definition at line 521 of file G4INCLParticleTable.cc.

521  {
522 // assert(A>=0);
523  // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
524  if(Z<0)
525  return A*neutronMass - Z*getINCLMass(PiMinus);
526  else if(Z>A)
527  return A*protonMass + (A-Z)*getINCLMass(PiPlus);
528  else if(A>1)
529  return Z*(protonMass - protonSeparationEnergy) + (A-Z)*(neutronMass - neutronSeparationEnergy);
530  else if(A==1 && Z==0)
531  return getINCLMass(Neutron);
532  else if(A==1 && Z==1)
533  return getINCLMass(Proton);
534  else
535  return 0.;
536  }
double A(double temperature)
Float_t Z
G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)
Here is the caller graph for this function:

◆ getINCLMass() [2/2]

G4double G4INCL::ParticleTable::getINCLMass ( const ParticleType  t)

Get INCL particle mass (in MeV/c^2)

Definition at line 461 of file G4INCLParticleTable.cc.

461  {
462  if(pt == Proton) {
463  return protonMass;
464  } else if(pt == Neutron) {
465  return neutronMass;
466  } else if(pt == PiPlus) {
467  return piPlusMass;
468  } else if(pt == PiMinus) {
469  return piMinusMass;
470  } else if(pt == PiZero) {
471  return piZeroMass;
472  } else {
473  INCL_ERROR("getMass : Unknown particle type." << '\n');
474  return 0.0;
475  }
476  }
#define INCL_ERROR(x)
TMarker * pt
Definition: egs.C:25

◆ getIsospin()

G4int G4INCL::ParticleTable::getIsospin ( const ParticleType  t)

Get the isospin of a particle.

Definition at line 357 of file G4INCLParticleTable.cc.

357  {
358  // Actually this is the 3rd component of isospin (I_z) multiplied by 2!
359  if(t == Proton) {
360  return 1;
361  } else if(t == Neutron) {
362  return -1;
363  } else if(t == PiPlus) {
364  return 2;
365  } else if(t == PiMinus) {
366  return -2;
367  } else if(t == PiZero) {
368  return 0;
369  } else if(t == DeltaPlusPlus) {
370  return 3;
371  } else if(t == DeltaPlus) {
372  return 1;
373  } else if(t == DeltaZero) {
374  return -1;
375  } else if(t == DeltaMinus) {
376  return -3;
377  }
378 
379  INCL_ERROR("Requested isospin of an unknown particle!");
380  return -10; // Unknown
381  }
#define INCL_ERROR(x)
Here is the caller graph for this function:

◆ getIUPACElementName()

std::string G4INCL::ParticleTable::getIUPACElementName ( const G4int  Z)

Get the name of an unnamed element from the IUPAC convention.

Definition at line 750 of file G4INCLParticleTable.cc.

750  {
751  std::stringstream elementStream;
752  elementStream << Z;
753  std::string elementName = elementStream.str();
754  std::transform(elementName.begin(), elementName.end(), elementName.begin(), intToIUPAC);
755  elementName[0] = std::toupper(elementName.at(0));
756  return elementName;
757  }
Float_t Z
Here is the caller graph for this function:

◆ getLargestNuclearRadius()

G4double G4INCL::ParticleTable::getLargestNuclearRadius ( const G4int  A,
const G4int  Z 
)

Definition at line 627 of file G4INCLParticleTable.cc.

627  {
629  }
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
double A(double temperature)
Float_t Z
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getMassNumber()

G4int G4INCL::ParticleTable::getMassNumber ( const ParticleType  t)

Get mass number from particle type.

Definition at line 553 of file G4INCLParticleTable.cc.

553  {
554  switch(t) {
555  case Proton:
556  case Neutron:
557  case DeltaPlusPlus:
558  case DeltaPlus:
559  case DeltaZero:
560  case DeltaMinus:
561  return 1;
562  break;
563  case PiPlus:
564  case PiMinus:
565  case PiZero:
566  return 0;
567  break;
568  default:
569  return 0;
570  break;
571  }
572  }

◆ getMaximumNuclearRadius()

G4double G4INCL::ParticleTable::getMaximumNuclearRadius ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 663 of file G4INCLParticleTable.cc.

663  {
664  const G4double XFOISA = 8.0;
665  if(A >= 19) {
666  return getNuclearRadius(t,A,Z) + XFOISA * getSurfaceDiffuseness(t,A,Z);
667  } else if(A < 19 && A >= 6) {
668  return 5.5 + 0.3 * (G4double(A) - 6.0)/12.0;
669  } else if(A >= 2) {
670  return getNuclearRadius(t, A, Z) + 4.5;
671  } else {
672  INCL_ERROR("getMaximumNuclearRadius : No maximum radius for nucleus A = " << A << " Z = " << Z << '\n');
673  return 0.0;
674  }
675  }
#define INCL_ERROR(x)
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
double A(double temperature)
Float_t Z
G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z)
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getMomentumRMS()

G4double G4INCL::ParticleTable::getMomentumRMS ( const G4int  A,
const G4int  Z 
)

Return the RMS of the momentum distribution (light clusters)

Definition at line 696 of file G4INCLParticleTable.cc.

696  {
697 // assert(Z>=0 && A>=0 && Z<=A);
699  }
const G4double sqrtThreeFifths
double A(double temperature)
Float_t Z
G4ThreadLocal FermiMomentumFn getFermiMomentum
Here is the caller graph for this function:

◆ getName() [1/3]

std::string G4INCL::ParticleTable::getName ( const ParticleType  t)

Get the native INCL name of the particle.

Definition at line 411 of file G4INCLParticleTable.cc.

411  {
412  if(p == G4INCL::Proton) {
413  return std::string("proton");
414  } else if(p == G4INCL::Neutron) {
415  return std::string("neutron");
416  } else if(p == G4INCL::DeltaPlusPlus) {
417  return std::string("delta++");
418  } else if(p == G4INCL::DeltaPlus) {
419  return std::string("delta+");
420  } else if(p == G4INCL::DeltaZero) {
421  return std::string("delta0");
422  } else if(p == G4INCL::DeltaMinus) {
423  return std::string("delta-");
424  } else if(p == G4INCL::PiPlus) {
425  return std::string("pi+");
426  } else if(p == G4INCL::PiZero) {
427  return std::string("pi0");
428  } else if(p == G4INCL::PiMinus) {
429  return std::string("pi-");
430  } else if(p == G4INCL::Composite) {
431  return std::string("composite");
432  }
433  return std::string("unknown");
434  }
Here is the caller graph for this function:

◆ getName() [2/3]

std::string G4INCL::ParticleTable::getName ( const ParticleSpecies s)

Get the native INCL name of the particle.

Definition at line 390 of file G4INCLParticleTable.cc.

390  {
391  if(s.theType==Composite)
392  return getName(s.theA,s.theZ);
393  else
394  return getName(s.theType);
395  }
static const double s
Definition: G4SIunits.hh:168
std::string getName(const ParticleType t)
Get the native INCL name of the particle.
Here is the call graph for this function:

◆ getName() [3/3]

std::string G4INCL::ParticleTable::getName ( const G4int  A,
const G4int  Z 
)

Get the native INCL name of the ion.

Definition at line 397 of file G4INCLParticleTable.cc.

397  {
398  std::stringstream stream;
399  stream << getElementName(Z) << "-" << A;
400  return stream.str();
401  }
double A(double temperature)
Float_t Z
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.
Here is the call graph for this function:

◆ getNaturalIsotopicDistribution()

IsotopicDistribution const & G4INCL::ParticleTable::getNaturalIsotopicDistribution ( const G4int  Z)

Definition at line 785 of file G4INCLParticleTable.cc.

785  {
786  return getNaturalIsotopicDistributions()->getIsotopicDistribution(Z);
787  }
Float_t Z
Here is the caller graph for this function:

◆ getNeutronHalo()

G4double G4INCL::ParticleTable::getNeutronHalo ( )

Get the size of the neutron halo.

Definition at line 821 of file G4INCLParticleTable.cc.

821 { return neutronHalo; }

◆ getNeutronSeparationEnergy()

G4double G4INCL::ParticleTable::getNeutronSeparationEnergy ( )

Getter for neutronSeparationEnergy.

Definition at line 734 of file G4INCLParticleTable.cc.

734 { return neutronSeparationEnergy; }

◆ getNeutronSkin()

G4double G4INCL::ParticleTable::getNeutronSkin ( )

Get the thickness of the neutron skin.

Definition at line 819 of file G4INCLParticleTable.cc.

819 { return neutronSkin; }

◆ getNuclearRadius()

G4double G4INCL::ParticleTable::getNuclearRadius ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 599 of file G4INCLParticleTable.cc.

599  {
600 // assert(A>=0);
601  if(A >= 19 || (A < 6 && A >= 2)) {
602  // For large (Woods-Saxon or Modified Harmonic Oscillator) or small
603  // (Gaussian) nuclei, the radius parameter is just the nuclear radius
604  return getRadiusParameter(t,A,Z);
605  } else if(A < clusterTableASize && Z>=0 && Z < clusterTableZSize && A >= 6) {
606  const G4double thisRMS = positionRMS[Z][A];
607  if(thisRMS>0.0)
608  return thisRMS;
609  else {
610  INCL_DEBUG("getNuclearRadius: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
611  << "returning radius for C12");
612  return positionRMS[6][12];
613  }
614  } else if(A < 19) {
615  const G4double theRadiusParameter = getRadiusParameter(t, A, Z);
616  const G4double theDiffusenessParameter = getSurfaceDiffuseness(t, A, Z);
617  // The formula yields the nuclear RMS radius based on the parameters of
618  // the nuclear-density function
619  return 1.225*theDiffusenessParameter*
620  std::sqrt((2.+5.*theRadiusParameter)/(2.+3.*theRadiusParameter));
621  } else {
622  INCL_ERROR("getNuclearRadius: No radius for nucleus A = " << A << " Z = " << Z << '\n');
623  return 0.0;
624  }
625  }
#define INCL_ERROR(x)
double A(double temperature)
Float_t Z
G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z)
G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z)
double G4double
Definition: G4Types.hh:76
#define INCL_DEBUG(x)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getNucleonType()

ParticleType G4INCL::ParticleTable::getNucleonType ( const G4int  isosp)

Get the type of nucleon.

Definition at line 844 of file G4INCLParticleTable.cc.

844  {
845 // assert(isosp == -1 || isosp == 1);
846  if (isosp == -1) {
847  return Neutron;
848  }
849  else {
850  return Proton;
851  }
852  }
Here is the caller graph for this function:

◆ getPionType()

ParticleType G4INCL::ParticleTable::getPionType ( const G4int  isosp)

Get the type of pion.

Definition at line 831 of file G4INCLParticleTable.cc.

831  {
832 // assert(isosp == -2 || isosp == 0 || isosp == 2);
833  if (isosp == -2) {
834  return PiMinus;
835  }
836  else if (isosp == 0) {
837  return PiZero;
838  }
839  else {
840  return PiPlus;
841  }
842  }
Here is the caller graph for this function:

◆ getProtonSeparationEnergy()

G4double G4INCL::ParticleTable::getProtonSeparationEnergy ( )

Getter for protonSeparationEnergy.

Definition at line 732 of file G4INCLParticleTable.cc.

732 { return protonSeparationEnergy; }

◆ getRadiusParameter()

G4double G4INCL::ParticleTable::getRadiusParameter ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 631 of file G4INCLParticleTable.cc.

631  {
632 // assert(A>0);
633  if(A >= 28) {
634  // phenomenological radius fit
635  G4double r0 = (2.745e-4 * A + 1.063) * std::pow(A, 1.0/3.0);
636  if(t==Neutron)
637  r0 += neutronSkin;
638  return r0;
639  } else if(A < 6 && A >= 2) {
640  if(Z<clusterTableZSize && Z>=0) {
641  const G4double thisRMS = positionRMS[Z][A];
642  if(thisRMS>0.0)
643  return thisRMS;
644  else {
645  INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
646  << "returning radius for C12");
647  return positionRMS[6][12];
648  }
649  } else {
650  INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
651  << "returning radius for C12");
652  return positionRMS[6][12];
653  }
654  } else if(A < 28 && A >= 6) {
655  return mediumRadius[A-1];
656  // return 1.581*mediumDiffuseness[A-1]*(2.+5.*mediumRadius[A-1])/(2.+3.*mediumRadius[A-1]);
657  } else {
658  INCL_ERROR("getRadiusParameter: No radius for nucleus A = " << A << " Z = " << Z << '\n');
659  return 0.0;
660  }
661  }
#define INCL_ERROR(x)
double A(double temperature)
Float_t Z
double G4double
Definition: G4Types.hh:76
#define INCL_DEBUG(x)
const G4double r0
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getRealMass() [1/2]

G4double G4INCL::ParticleTable::getRealMass ( const G4INCL::ParticleType  t)

Get particle mass (in MeV/c^2)

Definition at line 478 of file G4INCLParticleTable.cc.

478  {
479  switch(t) {
480  case Proton:
481  return theRealProtonMass;
482  break;
483  case Neutron:
484  return theRealNeutronMass;
485  break;
486  case PiPlus:
487  case PiMinus:
488  return theRealChargedPiMass;
489  break;
490  case PiZero:
491  return theRealPiZeroMass;
492  break;
493  default:
494  INCL_ERROR("Particle::getRealMass : Unknown particle type." << '\n');
495  return 0.0;
496  break;
497  }
498  }
#define INCL_ERROR(x)
Here is the caller graph for this function:

◆ getRealMass() [2/2]

G4double G4INCL::ParticleTable::getRealMass ( const G4int  A,
const G4int  Z 
)

Get nuclear mass (in MeV/c^2)

Definition at line 500 of file G4INCLParticleTable.cc.

500  {
501 // assert(A>=0);
502  // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
503  if(Z<0)
504  return A*neutronMass - Z*getRealMass(PiMinus);
505  else if(Z>A)
506  return A*protonMass + (A-Z)*getRealMass(PiPlus);
507  else if(Z==0)
508  return A*getRealMass(Neutron);
509  else if(A==Z)
510  return A*getRealMass(Proton);
511  else if(A>1) {
512 #ifndef INCLXX_IN_GEANT4_MODE
513  return ::G4INCL::NuclearMassTable::getMass(A,Z);
514 #else
515  return theG4IonTable->GetNucleusMass(Z,A) / MeV;
516 #endif
517  } else
518  return 0.;
519  }
static const double MeV
Definition: G4SIunits.hh:211
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
double A(double temperature)
Float_t Z
Here is the call graph for this function:

◆ getRPCorrelationCoefficient()

G4double G4INCL::ParticleTable::getRPCorrelationCoefficient ( const ParticleType  t)

Get the value of the r-p correlation coefficient.

Parameters
tthe type of the particle (Proton or Neutron)
Returns
the value of the r-p correlation coefficient

Definition at line 814 of file G4INCLParticleTable.cc.

814  {
815 // assert(t==Proton || t==Neutron);
816  return rpCorrelationCoefficient[t];
817  }
Here is the caller graph for this function:

◆ getSeparationEnergyINCL()

G4double G4INCL::ParticleTable::getSeparationEnergyINCL ( const ParticleType  t,
const G4int  ,
const G4int   
)

Return INCL's default separation energy.

Definition at line 701 of file G4INCLParticleTable.cc.

701  {
702  if(t==Proton)
703  return theINCLProtonSeparationEnergy;
704  else if(t==Neutron)
705  return theINCLNeutronSeparationEnergy;
706  else {
707  INCL_ERROR("ParticleTable::getSeparationEnergyINCL : Unknown particle type." << '\n');
708  return 0.0;
709  }
710  }
#define INCL_ERROR(x)
Here is the caller graph for this function:

◆ getSeparationEnergyReal()

G4double G4INCL::ParticleTable::getSeparationEnergyReal ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Return the real separation energy.

Definition at line 712 of file G4INCLParticleTable.cc.

712  {
713  // Real separation energies for all nuclei
714  if(t==Proton)
715  return (*getTableParticleMass)(Proton) + (*getTableMass)(A-1,Z-1) - (*getTableMass)(A,Z);
716  else if(t==Neutron)
717  return (*getTableParticleMass)(Neutron) + (*getTableMass)(A-1,Z) - (*getTableMass)(A,Z);
718  else {
719  INCL_ERROR("ParticleTable::getSeparationEnergyReal : Unknown particle type." << '\n');
720  return 0.0;
721  }
722  }
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
#define INCL_ERROR(x)
double A(double temperature)
Float_t Z
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getSeparationEnergyRealForLight()

G4double G4INCL::ParticleTable::getSeparationEnergyRealForLight ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Return the real separation energy only for light nuclei.

Definition at line 724 of file G4INCLParticleTable.cc.

724  {
725  // Real separation energies for light nuclei, fixed values for heavy nuclei
727  return getSeparationEnergyReal(t, A, Z);
728  else
729  return getSeparationEnergyINCL(t, A, Z);
730  }
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
double A(double temperature)
Float_t Z
G4double getSeparationEnergyINCL(const ParticleType t, const G4int, const G4int)
Return INCL&#39;s default separation energy.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getShortName() [1/3]

std::string G4INCL::ParticleTable::getShortName ( const ParticleType  t)

Get the short INCL name of the particle.

Definition at line 436 of file G4INCLParticleTable.cc.

436  {
437  if(p == G4INCL::Proton) {
438  return std::string("p");
439  } else if(p == G4INCL::Neutron) {
440  return std::string("n");
441  } else if(p == G4INCL::DeltaPlusPlus) {
442  return std::string("d++");
443  } else if(p == G4INCL::DeltaPlus) {
444  return std::string("d+");
445  } else if(p == G4INCL::DeltaZero) {
446  return std::string("d0");
447  } else if(p == G4INCL::DeltaMinus) {
448  return std::string("d-");
449  } else if(p == G4INCL::PiPlus) {
450  return std::string("pi+");
451  } else if(p == G4INCL::PiZero) {
452  return std::string("pi0");
453  } else if(p == G4INCL::PiMinus) {
454  return std::string("pi-");
455  } else if(p == G4INCL::Composite) {
456  return std::string("comp");
457  }
458  return std::string("unknown");
459  }
Here is the caller graph for this function:

◆ getShortName() [2/3]

std::string G4INCL::ParticleTable::getShortName ( const ParticleSpecies s)

Get the short INCL name of the particle.

Definition at line 383 of file G4INCLParticleTable.cc.

383  {
384  if(s.theType==Composite)
385  return getShortName(s.theA,s.theZ);
386  else
387  return getShortName(s.theType);
388  }
static const double s
Definition: G4SIunits.hh:168
std::string getShortName(const ParticleType t)
Get the short INCL name of the particle.
Here is the call graph for this function:

◆ getShortName() [3/3]

std::string G4INCL::ParticleTable::getShortName ( const G4int  A,
const G4int  Z 
)

Get the short INCL name of the ion.

Definition at line 403 of file G4INCLParticleTable.cc.

403  {
404  std::stringstream stream;
405  stream << getElementName(Z);
406  if(A>0)
407  stream << A;
408  return stream.str();
409  }
double A(double temperature)
Float_t Z
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.
Here is the call graph for this function:

◆ getSurfaceDiffuseness()

G4double G4INCL::ParticleTable::getSurfaceDiffuseness ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 677 of file G4INCLParticleTable.cc.

677  {
678  if(A >= 28) {
679  G4double a = 1.63e-4 * A + 0.510;
680  if(t==Neutron)
681  a += neutronHalo;
682  return a;
683  } else if(A < 28 && A >= 19) {
684  return mediumDiffuseness[A-1];
685  } else if(A < 19 && A >= 6) {
686  return mediumDiffuseness[A-1];
687  } else if(A < 6 && A >= 2) {
688  INCL_ERROR("getSurfaceDiffuseness: was called for A = " << A << " Z = " << Z << '\n');
689  return 0.0;
690  } else {
691  INCL_ERROR("getSurfaceDiffuseness: No diffuseness for nucleus A = " << A << " Z = " << Z << '\n');
692  return 0.0;
693  }
694  }
#define INCL_ERROR(x)
double A(double temperature)
Float_t Z
double G4double
Definition: G4Types.hh:76
Here is the caller graph for this function:

◆ getTableQValue() [1/2]

G4double G4INCL::ParticleTable::getTableQValue ( const G4int  A1,
const G4int  Z1,
const G4int  A2,
const G4int  Z2 
)

Get Q-value (in MeV/c^2)

Uses the getTableMass function to compute the Q-value for the following reaction:

\[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \]

Definition at line 538 of file G4INCLParticleTable.cc.

538  {
539  return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A1+A2,Z1+Z2);
540  }
Double_t Z2
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
Double_t Z1
Here is the caller graph for this function:

◆ getTableQValue() [2/2]

G4double G4INCL::ParticleTable::getTableQValue ( const G4int  A1,
const G4int  Z1,
const G4int  A2,
const G4int  Z2,
const G4int  A3,
const G4int  Z3 
)

Get Q-value (in MeV/c^2)

Uses the getTableMass function to compute the Q-value for the following reaction:

\[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \]

Definition at line 542 of file G4INCLParticleTable.cc.

542  {
543  return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A3,Z3) - getTableMass(A1+A2-A3,Z1+Z2-Z3);
544  }
Double_t Z2
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
Double_t Z1

◆ getTableSpeciesMass()

G4double G4INCL::ParticleTable::getTableSpeciesMass ( const ParticleSpecies p)

Definition at line 546 of file G4INCLParticleTable.cc.

546  {
547  if(p.theType == Composite)
548  return (*getTableMass)(p.theA, p.theZ);
549  else
550  return (*getTableParticleMass)(p.theType);
551  }
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
Here is the caller graph for this function:

◆ initialize()

void G4INCL::ParticleTable::initialize ( Config const *const  theConfig = 0)

Initialize the particle table.

Initialize the Coulomb-distortion algorithm.

Definition at line 274 of file G4INCLParticleTable.cc.

274  {
275  protonMass = theINCLNucleonMass;
276  neutronMass = theINCLNucleonMass;
277  piPlusMass = theINCLPionMass;
278  piMinusMass = theINCLPionMass;
279  piZeroMass = theINCLPionMass;
280 
281  if(theConfig && theConfig->getUseRealMasses()) {
284  } else {
287  }
288 
289 #ifndef INCLXX_IN_GEANT4_MODE
290  std::string dataFilePath;
291  if(theConfig)
292  dataFilePath = theConfig->getINCLXXDataFilePath();
294 #endif
295 
296 #ifdef INCLXX_IN_GEANT4_MODE
297  G4ParticleTable *theG4ParticleTable = G4ParticleTable::GetParticleTable();
298  theG4IonTable = theG4ParticleTable->GetIonTable();
299  theRealProtonMass = theG4ParticleTable->FindParticle("proton")->GetPDGMass() / MeV;
300  theRealNeutronMass = theG4ParticleTable->FindParticle("neutron")->GetPDGMass() / MeV;
301  theRealChargedPiMass = theG4ParticleTable->FindParticle("pi+")->GetPDGMass() / MeV;
302  theRealPiZeroMass = theG4ParticleTable->FindParticle("pi0")->GetPDGMass() / MeV;
303 #endif
304 
305  minDeltaMass = theRealNeutronMass + theRealChargedPiMass + 0.5;
307  minDeltaMassRndm = std::atan((minDeltaMass-effectiveDeltaMass)*2./effectiveDeltaWidth);
308 
309  // Initialise the separation-energy function
310  if(!theConfig || theConfig->getSeparationEnergyType()==INCLSeparationEnergy)
312  else if(theConfig->getSeparationEnergyType()==RealSeparationEnergy)
314  else if(theConfig->getSeparationEnergyType()==RealForLightSeparationEnergy)
316  else {
317  INCL_FATAL("Unrecognized separation-energy type in ParticleTable initialization: " << theConfig->getSeparationEnergyType() << '\n');
318  return;
319  }
320 
321  // Initialise the Fermi-momentum function
322  if(!theConfig || theConfig->getFermiMomentumType()==ConstantFermiMomentum) {
324  if(theConfig) {
325  const G4double aFermiMomentum = theConfig->getFermiMomentum();
326  if(aFermiMomentum>0.)
327  constantFermiMomentum = aFermiMomentum;
328  else
329  constantFermiMomentum = PhysicalConstants::Pf;
330  } else {
331  constantFermiMomentum = PhysicalConstants::Pf;
332  }
333  } else if(theConfig->getFermiMomentumType()==ConstantLightFermiMomentum)
335  else if(theConfig->getFermiMomentumType()==MassDependentFermiMomentum)
337  else {
338  INCL_FATAL("Unrecognized Fermi-momentum type in ParticleTable initialization: " << theConfig->getFermiMomentumType() << '\n');
339  return;
340  }
341 
342  // Initialise the r-p correlation coefficients
343  std::fill(rpCorrelationCoefficient, rpCorrelationCoefficient + UnknownParticle, 1.);
344  if(theConfig) {
345  rpCorrelationCoefficient[Proton] = theConfig->getRPCorrelationCoefficient(Proton);
346  rpCorrelationCoefficient[Neutron] = theConfig->getRPCorrelationCoefficient(Neutron);
347  }
348 
349  // Initialise the neutron-skin parameters
350  if(theConfig) {
351  neutronSkin = theConfig->getNeutronSkin();
352  neutronHalo = theConfig->getNeutronHalo();
353  }
354 
355  }
#define INCL_FATAL(x)
static const double MeV
Definition: G4SIunits.hh:211
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
G4ThreadLocal G4double minDeltaMassRndm
G4ThreadLocal G4double minDeltaMass2
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
G4IonTable * GetIonTable() const
void initialize(Config const *const theConfig)
Initialize the clustering model based on the Config object.
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
const G4double effectiveDeltaWidth
static G4ParticleTable * GetParticleTable()
G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy only for light nuclei.
G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)
G4ThreadLocal G4double minDeltaMass
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
const G4double Pf
Fermi momentum [MeV/c].
const G4double effectiveDeltaMass
double G4double
Definition: G4Types.hh:76
G4double getSeparationEnergyINCL(const ParticleType t, const G4int, const G4int)
Return INCL&#39;s default separation energy.
G4double getFermiMomentumMassDependent(const G4int A, const G4int)
Return the value Fermi momentum from a fit.
G4double getFermiMomentumConstantLight(const G4int A, const G4int Z)
Return the constant value of the Fermi momentum - special for light.
G4ThreadLocal FermiMomentumFn getFermiMomentum
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parseElement()

G4int G4INCL::ParticleTable::parseElement ( std::string  pS)

Get the name of the element from the atomic number.

Definition at line 759 of file G4INCLParticleTable.cc.

759  {
760  // Normalize the element name
761  std::transform(pS.begin(), pS.end(), pS.begin(), ::tolower);
762  pS[0] = ::toupper(pS[0]);
763 
764  const std::string *iter = std::find(elementTable, elementTable+elementTableSize, pS);
765  if(iter != elementTable+elementTableSize)
766  return iter - elementTable;
767  else
769  }
G4int parseIUPACElement(std::string const &pS)
Parse a IUPAC element name.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ parseIUPACElement()

G4int G4INCL::ParticleTable::parseIUPACElement ( std::string const &  pS)

Parse a IUPAC element name.

Note: this function is UGLY. Look at it at your own peril.

Parameters
pSa normalised string (lowercase)
Returns
the charge number of the nuclide, or zero on fail

Definition at line 771 of file G4INCLParticleTable.cc.

771  {
772  // Normalise to lower case
773  std::string elementName(s);
774  std::transform(elementName.begin(), elementName.end(), elementName.begin(), ::tolower);
775  // Return 0 if the element name contains anything but IUPAC digits
776  if(elementName.find_first_not_of(elementIUPACDigits)!=std::string::npos)
777  return 0;
778  std::transform(elementName.begin(), elementName.end(), elementName.begin(), iupacToInt);
779  std::stringstream elementStream(elementName);
780  G4int Z;
781  elementStream >> Z;
782  return Z;
783  }
int G4int
Definition: G4Types.hh:78
static const double s
Definition: G4SIunits.hh:168
Float_t Z
Here is the caller graph for this function:

◆ setNeutronSeparationEnergy()

void G4INCL::ParticleTable::setNeutronSeparationEnergy ( const G4double  s)

Setter for protonSeparationEnergy.

Definition at line 738 of file G4INCLParticleTable.cc.

738 { neutronSeparationEnergy = s; }
static const double s
Definition: G4SIunits.hh:168
Here is the caller graph for this function:

◆ setProtonSeparationEnergy()

void G4INCL::ParticleTable::setProtonSeparationEnergy ( const G4double  s)

Setter for protonSeparationEnergy.

Definition at line 736 of file G4INCLParticleTable.cc.

736 { protonSeparationEnergy = s; }
static const double s
Definition: G4SIunits.hh:168
Here is the caller graph for this function:

Variable Documentation

◆ clusterTableASize

const G4int G4INCL::ParticleTable::clusterTableASize = maxClusterMass+1

Definition at line 65 of file G4INCLParticleTable.hh.

◆ clusterTableZSize

const G4int G4INCL::ParticleTable::clusterTableZSize = maxClusterCharge+1

Definition at line 64 of file G4INCLParticleTable.hh.

◆ effectiveDeltaMass

const G4double G4INCL::ParticleTable::effectiveDeltaMass = 1232.0

Definition at line 69 of file G4INCLParticleTable.hh.

◆ effectiveDeltaWidth

const G4double G4INCL::ParticleTable::effectiveDeltaWidth = 130.0

Definition at line 70 of file G4INCLParticleTable.hh.

◆ effectiveNucleonMass

const G4double G4INCL::ParticleTable::effectiveNucleonMass = 938.2796

Definition at line 67 of file G4INCLParticleTable.hh.

◆ effectiveNucleonMass2

const G4double G4INCL::ParticleTable::effectiveNucleonMass2 = 8.8036860777616e5

Definition at line 68 of file G4INCLParticleTable.hh.

◆ effectivePionMass

const G4double G4INCL::ParticleTable::effectivePionMass = 138.0

Definition at line 71 of file G4INCLParticleTable.hh.

◆ getFermiMomentum

G4ThreadLocal FermiMomentumFn G4INCL::ParticleTable::getFermiMomentum = NULL

Definition at line 829 of file G4INCLParticleTable.cc.

◆ getSeparationEnergy

G4ThreadLocal SeparationEnergyFn G4INCL::ParticleTable::getSeparationEnergy = NULL

Static pointer to the separation-energy function.

Definition at line 828 of file G4INCLParticleTable.cc.

◆ getTableMass

G4ThreadLocal NuclearMassFn G4INCL::ParticleTable::getTableMass = NULL

Static pointer to the mass function for nuclei.

Definition at line 826 of file G4INCLParticleTable.cc.

◆ getTableParticleMass

G4ThreadLocal ParticleMassFn G4INCL::ParticleTable::getTableParticleMass = NULL

Static pointer to the mass function for particles.

Definition at line 827 of file G4INCLParticleTable.cc.

◆ maxClusterCharge

const G4int G4INCL::ParticleTable::maxClusterCharge = 8

Definition at line 62 of file G4INCLParticleTable.hh.

◆ maxClusterMass

const G4int G4INCL::ParticleTable::maxClusterMass = 12

Definition at line 61 of file G4INCLParticleTable.hh.

◆ minDeltaMass

G4ThreadLocal G4double G4INCL::ParticleTable::minDeltaMass = 0.

Definition at line 823 of file G4INCLParticleTable.cc.

◆ minDeltaMass2

G4ThreadLocal G4double G4INCL::ParticleTable::minDeltaMass2 = 0.

Definition at line 824 of file G4INCLParticleTable.cc.

◆ minDeltaMassRndm

G4ThreadLocal G4double G4INCL::ParticleTable::minDeltaMassRndm = 0.

Definition at line 825 of file G4INCLParticleTable.cc.