Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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...
 
G4double getWidth (const ParticleType t)
 Get particle width (in s) 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
 
const G4double effectiveEtaMass = 547.862
 
const G4double effectiveOmegaMass = 782.65
 
const G4double effectiveEtaPrimeMass = 957.78
 
const G4double effectivePhotonMass = 0.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

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

Definition at line 221 of file G4INCLParticleTable.hh.

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

Definition at line 208 of file G4INCLParticleTable.hh.

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

Definition at line 209 of file G4INCLParticleTable.hh.

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

Definition at line 216 of file G4INCLParticleTable.hh.

Function Documentation

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

Definition at line 883 of file G4INCLParticleTable.cc.

883  {
884  return getNaturalIsotopicDistributions()->drawRandomIsotope(Z);
885  }

Here is the caller graph for this function:

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

Get charge number from particle type.

Definition at line 664 of file G4INCLParticleTable.cc.

664  {
665  switch(t) {
666  case DeltaPlusPlus:
667  return 2;
668  break;
669  case Proton:
670  case DeltaPlus:
671  case PiPlus:
672  return 1;
673  break;
674  case Neutron:
675  case DeltaZero:
676  case PiZero:
677  case Eta:
678  case Omega:
679  case EtaPrime:
680  case Photon:
681  return 0;
682  break;
683  case DeltaMinus:
684  case PiMinus:
685  return -1;
686  break;
687  default:
688  return 0;
689  break;
690  }
691  }
ParticleType G4INCL::ParticleTable::getDeltaType ( const G4int  isosp)

Get the type of delta.

Definition at line 948 of file G4INCLParticleTable.cc.

948  {
949 // assert(isosp == -3 || isosp == -1 || isosp == 1 || isosp == 3);
950  if (isosp == -3) {
951  return DeltaMinus;
952  }
953  else if (isosp == -1) {
954  return DeltaZero;
955  }
956  else if (isosp == 1) {
957  return DeltaPlus;
958  }
959  else {
960  return DeltaPlusPlus;
961  }
962  }
std::string G4INCL::ParticleTable::getElementName ( const G4int  Z)

Get the name of the element from the atomic number.

Definition at line 834 of file G4INCLParticleTable.cc.

834  {
835  if(Z<1) {
836  INCL_WARN("getElementName called with Z<1" << '\n');
837  return elementTable[0];
838  } else if(Z<elementTableSize)
839  return elementTable[Z];
840  else
841  return getIUPACElementName(Z);
842  }
#define INCL_WARN(x)
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:

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

Return the constant value of the Fermi momentum.

Definition at line 887 of file G4INCLParticleTable.cc.

887  {
888  return constantFermiMomentum;
889  }

Here is the caller graph for this function:

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 891 of file G4INCLParticleTable.cc.

891  {
892 // assert(Z>0 && A>0 && Z<=A);
894  const G4double rms = momentumRMS[Z][A];
895  return ((rms>0.) ? rms : momentumRMS[6][12]) * Math::sqrtFiveThirds;
896  } else
897  return getFermiMomentumConstant(A,Z);
898  }
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
double A(double temperature)
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:

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 900 of file G4INCLParticleTable.cc.

900  {
901 // assert(A>0);
902  static const G4double alphaParam = 259.416; // MeV/c
903  static const G4double betaParam = 152.824; // MeV/c
904  static const G4double gammaParam = 9.5157E-2;
905  return alphaParam - betaParam*std::exp(-gammaParam*((G4double)A));
906  }
double A(double temperature)
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

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

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

Definition at line 607 of file G4INCLParticleTable.cc.

607  {
608 // assert(A>=0);
609  // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
610  if(Z<0)
611  return A*neutronMass - Z*getINCLMass(PiMinus);
612  else if(Z>A)
613  return A*protonMass + (A-Z)*getINCLMass(PiPlus);
614  else if(A>1)
615  return Z*(protonMass - protonSeparationEnergy) + (A-Z)*(neutronMass - neutronSeparationEnergy);
616  else if(A==1 && Z==0)
617  return getINCLMass(Neutron);
618  else if(A==1 && Z==1)
619  return getINCLMass(Proton);
620  else
621  return 0.;
622  }
double A(double temperature)
G4double getINCLMass(const G4int A, const G4int Z)
Get INCL nuclear mass (in MeV/c^2)

Here is the caller graph for this function:

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

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

Definition at line 527 of file G4INCLParticleTable.cc.

527  {
528  if(pt == Proton) {
529  return protonMass;
530  } else if(pt == Neutron) {
531  return neutronMass;
532  } else if(pt == PiPlus) {
533  return piPlusMass;
534  } else if(pt == PiMinus) {
535  return piMinusMass;
536  } else if(pt == PiZero) {
537  return piZeroMass;
538  } else if(pt == Eta) {
539  return etaMass;
540  } else if(pt == Omega) {
541  return omegaMass;
542  } else if(pt == EtaPrime) {
543  return etaPrimeMass;
544  } else if(pt == Photon) {
545  return photonMass;
546  } else {
547  INCL_ERROR("getMass : Unknown particle type." << '\n');
548  return 0.0;
549  }
550  }
#define INCL_ERROR(x)
G4int G4INCL::ParticleTable::getIsospin ( const ParticleType  t)

Get the isospin of a particle.

Definition at line 399 of file G4INCLParticleTable.cc.

399  {
400  // Actually this is the 3rd component of isospin (I_z) multiplied by 2!
401  if(t == Proton) {
402  return 1;
403  } else if(t == Neutron) {
404  return -1;
405  } else if(t == PiPlus) {
406  return 2;
407  } else if(t == PiMinus) {
408  return -2;
409  } else if(t == PiZero) {
410  return 0;
411  } else if(t == DeltaPlusPlus) {
412  return 3;
413  } else if(t == DeltaPlus) {
414  return 1;
415  } else if(t == DeltaZero) {
416  return -1;
417  } else if(t == DeltaMinus) {
418  return -3;
419  } else if(t == Eta) {
420  return 0;
421  } else if(t == Omega) {
422  return 0;
423  } else if(t == EtaPrime) {
424  return 0;
425  } else if(t == Photon) {
426  return 0;
427  }
428 
429  INCL_ERROR("Requested isospin of an unknown particle!");
430  return -10; // Unknown
431  }
#define INCL_ERROR(x)
std::string G4INCL::ParticleTable::getIUPACElementName ( const G4int  Z)

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

Definition at line 844 of file G4INCLParticleTable.cc.

844  {
845  std::stringstream elementStream;
846  elementStream << Z;
847  std::string elementName = elementStream.str();
848  std::transform(elementName.begin(), elementName.end(), elementName.begin(), intToIUPAC);
849  elementName[0] = std::toupper(elementName.at(0));
850  return elementName;
851  }

Here is the caller graph for this function:

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

Definition at line 721 of file G4INCLParticleTable.cc.

721  {
723  }
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
double A(double temperature)
T max(const T t1, const T t2)
brief Return the largest of the two arguments

Here is the call graph for this function:

Here is the caller graph for this function:

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

Get mass number from particle type.

Definition at line 639 of file G4INCLParticleTable.cc.

639  {
640  switch(t) {
641  case Proton:
642  case Neutron:
643  case DeltaPlusPlus:
644  case DeltaPlus:
645  case DeltaZero:
646  case DeltaMinus:
647  return 1;
648  break;
649  case PiPlus:
650  case PiMinus:
651  case PiZero:
652  case Eta:
653  case Omega:
654  case EtaPrime:
655  case Photon:
656  return 0;
657  break;
658  default:
659  return 0;
660  break;
661  }
662  }
G4double G4INCL::ParticleTable::getMaximumNuclearRadius ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 757 of file G4INCLParticleTable.cc.

757  {
758  const G4double XFOISA = 8.0;
759  if(A >= 19) {
760  return getNuclearRadius(t,A,Z) + XFOISA * getSurfaceDiffuseness(t,A,Z);
761  } else if(A < 19 && A >= 6) {
762  return 5.5 + 0.3 * (G4double(A) - 6.0)/12.0;
763  } else if(A >= 2) {
764  return getNuclearRadius(t, A, Z) + 4.5;
765  } else {
766  INCL_ERROR("getMaximumNuclearRadius : No maximum radius for nucleus A = " << A << " Z = " << Z << '\n');
767  return 0.0;
768  }
769  }
#define INCL_ERROR(x)
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
double A(double temperature)
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:

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

Return the RMS of the momentum distribution (light clusters)

Definition at line 790 of file G4INCLParticleTable.cc.

790  {
791 // assert(Z>=0 && A>=0 && Z<=A);
793  }
const G4double sqrtThreeFifths
double A(double temperature)
G4ThreadLocal FermiMomentumFn getFermiMomentum

Here is the caller graph for this function:

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

Get the native INCL name of the particle.

Definition at line 461 of file G4INCLParticleTable.cc.

461  {
462  if(p == G4INCL::Proton) {
463  return std::string("proton");
464  } else if(p == G4INCL::Neutron) {
465  return std::string("neutron");
466  } else if(p == G4INCL::DeltaPlusPlus) {
467  return std::string("delta++");
468  } else if(p == G4INCL::DeltaPlus) {
469  return std::string("delta+");
470  } else if(p == G4INCL::DeltaZero) {
471  return std::string("delta0");
472  } else if(p == G4INCL::DeltaMinus) {
473  return std::string("delta-");
474  } else if(p == G4INCL::PiPlus) {
475  return std::string("pi+");
476  } else if(p == G4INCL::PiZero) {
477  return std::string("pi0");
478  } else if(p == G4INCL::PiMinus) {
479  return std::string("pi-");
480  } else if(p == G4INCL::Composite) {
481  return std::string("composite");
482  } else if(p == G4INCL::Eta) {
483  return std::string("eta");
484  } else if(p == G4INCL::Omega) {
485  return std::string("omega");
486  } else if(p == G4INCL::EtaPrime) {
487  return std::string("etaprime");
488  } else if(p == G4INCL::Photon) {
489  return std::string("photon");
490  }
491  return std::string("unknown");
492  }
const char * p
Definition: xmltok.h:285

Here is the caller graph for this function:

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

Get the native INCL name of the particle.

Definition at line 440 of file G4INCLParticleTable.cc.

440  {
441  if(s.theType==Composite)
442  return getName(s.theA,s.theZ);
443  else
444  return getName(s.theType);
445  }
const XML_Char * s
Definition: expat.h:262
std::string getName(const ParticleType t)
Get the native INCL name of the particle.

Here is the call graph for this function:

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

Get the native INCL name of the ion.

Definition at line 447 of file G4INCLParticleTable.cc.

447  {
448  std::stringstream stream;
449  stream << getElementName(Z) << "-" << A;
450  return stream.str();
451  }
double A(double temperature)
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.

Here is the call graph for this function:

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

Definition at line 879 of file G4INCLParticleTable.cc.

879  {
880  return getNaturalIsotopicDistributions()->getIsotopicDistribution(Z);
881  }
G4double G4INCL::ParticleTable::getNeutronHalo ( )

Get the size of the neutron halo.

Definition at line 915 of file G4INCLParticleTable.cc.

915 { return neutronHalo; }
G4double G4INCL::ParticleTable::getNeutronSeparationEnergy ( )

Getter for neutronSeparationEnergy.

Definition at line 828 of file G4INCLParticleTable.cc.

828 { return neutronSeparationEnergy; }
G4double G4INCL::ParticleTable::getNeutronSkin ( )

Get the thickness of the neutron skin.

Definition at line 913 of file G4INCLParticleTable.cc.

913 { return neutronSkin; }
G4double G4INCL::ParticleTable::getNuclearRadius ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 693 of file G4INCLParticleTable.cc.

693  {
694 // assert(A>=0);
695  if(A >= 19 || (A < 6 && A >= 2)) {
696  // For large (Woods-Saxon or Modified Harmonic Oscillator) or small
697  // (Gaussian) nuclei, the radius parameter is just the nuclear radius
698  return getRadiusParameter(t,A,Z);
699  } else if(A < clusterTableASize && Z>=0 && Z < clusterTableZSize && A >= 6) {
700  const G4double thisRMS = positionRMS[Z][A];
701  if(thisRMS>0.0)
702  return thisRMS;
703  else {
704  INCL_DEBUG("getNuclearRadius: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
705  << "returning radius for C12");
706  return positionRMS[6][12];
707  }
708  } else if(A < 19) {
709  const G4double theRadiusParameter = getRadiusParameter(t, A, Z);
710  const G4double theDiffusenessParameter = getSurfaceDiffuseness(t, A, Z);
711  // The formula yields the nuclear RMS radius based on the parameters of
712  // the nuclear-density function
713  return 1.225*theDiffusenessParameter*
714  std::sqrt((2.+5.*theRadiusParameter)/(2.+3.*theRadiusParameter));
715  } else {
716  INCL_ERROR("getNuclearRadius: No radius for nucleus A = " << A << " Z = " << Z << '\n');
717  return 0.0;
718  }
719  }
#define INCL_ERROR(x)
double A(double temperature)
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:

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

Get the type of nucleon.

Definition at line 938 of file G4INCLParticleTable.cc.

938  {
939 // assert(isosp == -1 || isosp == 1);
940  if (isosp == -1) {
941  return Neutron;
942  }
943  else {
944  return Proton;
945  }
946  }

Here is the caller graph for this function:

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

Get the type of pion.

Definition at line 925 of file G4INCLParticleTable.cc.

925  {
926 // assert(isosp == -2 || isosp == 0 || isosp == 2);
927  if (isosp == -2) {
928  return PiMinus;
929  }
930  else if (isosp == 0) {
931  return PiZero;
932  }
933  else {
934  return PiPlus;
935  }
936  }

Here is the caller graph for this function:

G4double G4INCL::ParticleTable::getProtonSeparationEnergy ( )

Getter for protonSeparationEnergy.

Definition at line 826 of file G4INCLParticleTable.cc.

826 { return protonSeparationEnergy; }
G4double G4INCL::ParticleTable::getRadiusParameter ( const ParticleType  t,
const G4int  A,
const G4int  Z 
)

Definition at line 725 of file G4INCLParticleTable.cc.

725  {
726 // assert(A>0);
727  if(A >= 28) {
728  // phenomenological radius fit
729  G4double r0 = (2.745e-4 * A + 1.063) * std::pow(A, 1.0/3.0);
730  if(t==Neutron)
731  r0 += neutronSkin;
732  return r0;
733  } else if(A < 6 && A >= 2) {
734  if(Z<clusterTableZSize && Z>=0) {
735  const G4double thisRMS = positionRMS[Z][A];
736  if(thisRMS>0.0)
737  return thisRMS;
738  else {
739  INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
740  << "returning radius for C12");
741  return positionRMS[6][12];
742  }
743  } else {
744  INCL_DEBUG("getRadiusParameter: Radius for nucleus A = " << A << " Z = " << Z << " is not available" << '\n'
745  << "returning radius for C12");
746  return positionRMS[6][12];
747  }
748  } else if(A < 28 && A >= 6) {
749  return mediumRadius[A-1];
750  // return 1.581*mediumDiffuseness[A-1]*(2.+5.*mediumRadius[A-1])/(2.+3.*mediumRadius[A-1]);
751  } else {
752  INCL_ERROR("getRadiusParameter: No radius for nucleus A = " << A << " Z = " << Z << '\n');
753  return 0.0;
754  }
755  }
#define INCL_ERROR(x)
double A(double temperature)
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:

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

Get particle mass (in MeV/c^2)

Definition at line 552 of file G4INCLParticleTable.cc.

552  {
553  switch(t) {
554  case Proton:
555  return theRealProtonMass;
556  break;
557  case Neutron:
558  return theRealNeutronMass;
559  break;
560  case PiPlus:
561  case PiMinus:
562  return theRealChargedPiMass;
563  break;
564  case PiZero:
565  return theRealPiZeroMass;
566  break;
567  case Eta:
568  return theRealEtaMass;
569  break;
570  case Omega:
571  return theRealOmegaMass;
572  break;
573  case EtaPrime:
574  return theRealEtaPrimeMass;
575  break;
576  case Photon:
577  return theRealPhotonMass;
578  break;
579  default:
580  INCL_ERROR("Particle::getRealMass : Unknown particle type." << '\n');
581  return 0.0;
582  break;
583  }
584  }
#define INCL_ERROR(x)

Here is the caller graph for this function:

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

Get nuclear mass (in MeV/c^2)

Definition at line 586 of file G4INCLParticleTable.cc.

586  {
587 // assert(A>=0);
588  // For nuclei with Z<0 or Z>A, assume that the exotic charge state is due to pions
589  if(Z<0)
590  return A*neutronMass - Z*getRealMass(PiMinus);
591  else if(Z>A)
592  return A*protonMass + (A-Z)*getRealMass(PiPlus);
593  else if(Z==0)
594  return A*getRealMass(Neutron);
595  else if(A==Z)
596  return A*getRealMass(Proton);
597  else if(A>1) {
598 #ifndef INCLXX_IN_GEANT4_MODE
599  return ::G4INCL::NuclearMassTable::getMass(A,Z);
600 #else
601  return theG4IonTable->GetNucleusMass(Z,A) / MeV;
602 #endif
603  } else
604  return 0.;
605  }
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
double A(double temperature)
static constexpr double MeV
Definition: G4SIunits.hh:214

Here is the call graph for this function:

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 908 of file G4INCLParticleTable.cc.

908  {
909 // assert(t==Proton || t==Neutron);
910  return rpCorrelationCoefficient[t];
911  }

Here is the caller graph for this function:

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

Return INCL's default separation energy.

Definition at line 795 of file G4INCLParticleTable.cc.

795  {
796  if(t==Proton)
797  return theINCLProtonSeparationEnergy;
798  else if(t==Neutron)
799  return theINCLNeutronSeparationEnergy;
800  else {
801  INCL_ERROR("ParticleTable::getSeparationEnergyINCL : Unknown particle type." << '\n');
802  return 0.0;
803  }
804  }
#define INCL_ERROR(x)

Here is the caller graph for this function:

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

Return the real separation energy.

Definition at line 806 of file G4INCLParticleTable.cc.

806  {
807  // Real separation energies for all nuclei
808  if(t==Proton)
809  return (*getTableParticleMass)(Proton) + (*getTableMass)(A-1,Z-1) - (*getTableMass)(A,Z);
810  else if(t==Neutron)
811  return (*getTableParticleMass)(Neutron) + (*getTableMass)(A-1,Z) - (*getTableMass)(A,Z);
812  else {
813  INCL_ERROR("ParticleTable::getSeparationEnergyReal : Unknown particle type." << '\n');
814  return 0.0;
815  }
816  }
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
#define INCL_ERROR(x)
double A(double temperature)
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:

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 818 of file G4INCLParticleTable.cc.

818  {
819  // Real separation energies for light nuclei, fixed values for heavy nuclei
821  return getSeparationEnergyReal(t, A, Z);
822  else
823  return getSeparationEnergyINCL(t, A, Z);
824  }
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
double A(double temperature)
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:

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

Get the short INCL name of the particle.

Definition at line 494 of file G4INCLParticleTable.cc.

494  {
495  if(p == G4INCL::Proton) {
496  return std::string("p");
497  } else if(p == G4INCL::Neutron) {
498  return std::string("n");
499  } else if(p == G4INCL::DeltaPlusPlus) {
500  return std::string("d++");
501  } else if(p == G4INCL::DeltaPlus) {
502  return std::string("d+");
503  } else if(p == G4INCL::DeltaZero) {
504  return std::string("d0");
505  } else if(p == G4INCL::DeltaMinus) {
506  return std::string("d-");
507  } else if(p == G4INCL::PiPlus) {
508  return std::string("pi+");
509  } else if(p == G4INCL::PiZero) {
510  return std::string("pi0");
511  } else if(p == G4INCL::PiMinus) {
512  return std::string("pi-");
513  } else if(p == G4INCL::Composite) {
514  return std::string("comp");
515  } else if(p == G4INCL::Eta) {
516  return std::string("eta");
517  } else if(p == G4INCL::Omega) {
518  return std::string("omega");
519  } else if(p == G4INCL::EtaPrime) {
520  return std::string("etap");
521  } else if(p == G4INCL::Photon) {
522  return std::string("photon");
523  }
524  return std::string("unknown");
525  }
const char * p
Definition: xmltok.h:285

Here is the caller graph for this function:

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

Get the short INCL name of the particle.

Definition at line 433 of file G4INCLParticleTable.cc.

433  {
434  if(s.theType==Composite)
435  return getShortName(s.theA,s.theZ);
436  else
437  return getShortName(s.theType);
438  }
const XML_Char * s
Definition: expat.h:262
std::string getShortName(const ParticleType t)
Get the short INCL name of the particle.

Here is the call graph for this function:

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

Get the short INCL name of the ion.

Definition at line 453 of file G4INCLParticleTable.cc.

453  {
454  std::stringstream stream;
455  stream << getElementName(Z);
456  if(A>0)
457  stream << A;
458  return stream.str();
459  }
double A(double temperature)
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.

Here is the call graph for this function:

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

Definition at line 771 of file G4INCLParticleTable.cc.

771  {
772  if(A >= 28) {
773  G4double a = 1.63e-4 * A + 0.510;
774  if(t==Neutron)
775  a += neutronHalo;
776  return a;
777  } else if(A < 28 && A >= 19) {
778  return mediumDiffuseness[A-1];
779  } else if(A < 19 && A >= 6) {
780  return mediumDiffuseness[A-1];
781  } else if(A < 6 && A >= 2) {
782  INCL_ERROR("getSurfaceDiffuseness: was called for A = " << A << " Z = " << Z << '\n');
783  return 0.0;
784  } else {
785  INCL_ERROR("getSurfaceDiffuseness: No diffuseness for nucleus A = " << A << " Z = " << Z << '\n');
786  return 0.0;
787  }
788  }
#define INCL_ERROR(x)
double A(double temperature)
double G4double
Definition: G4Types.hh:76

Here is the caller graph for this function:

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 624 of file G4INCLParticleTable.cc.

624  {
625  return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A1+A2,Z1+Z2);
626  }
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.

Here is the caller graph for this function:

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 628 of file G4INCLParticleTable.cc.

628  {
629  return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A3,Z3) - getTableMass(A1+A2-A3,Z1+Z2-Z3);
630  }
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4double G4INCL::ParticleTable::getTableSpeciesMass ( const ParticleSpecies &  p)

Definition at line 632 of file G4INCLParticleTable.cc.

632  {
633  if(p.theType == Composite)
634  return (*getTableMass)(p.theA, p.theZ);
635  else
636  return (*getTableParticleMass)(p.theType);
637  }
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
const char * p
Definition: xmltok.h:285
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4double G4INCL::ParticleTable::getWidth ( const ParticleType  t)

Get particle width (in s)

Definition at line 964 of file G4INCLParticleTable.cc.

964  {
965 // assert(pt == PiPlus || pt == PiMinus || pt == PiZero || pt == Eta || pt == Omega || pt == EtaPrime);
966  if(pt == PiPlus) {
967  return piPlusWidth;
968  } else if(pt == PiMinus) {
969  return piMinusWidth;
970  } else if(pt == PiZero) {
971  return piZeroWidth;
972  } else if(pt == Eta) {
973  return etaWidth;
974  } else if(pt == Omega) {
975  return omegaWidth;
976  } else if(pt == EtaPrime) {
977  return etaPrimeWidth;
978  } else {
979  INCL_ERROR("getWidth : Unknown particle type." << '\n');
980  return 0.0;
981  }
982  }
#define INCL_ERROR(x)

Here is the caller graph for this function:

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

Initialize the particle table.

Definition at line 300 of file G4INCLParticleTable.cc.

300  {
301  protonMass = theINCLNucleonMass;
302  neutronMass = theINCLNucleonMass;
303  piPlusMass = theINCLPionMass;
304  piMinusMass = theINCLPionMass;
305  piZeroMass = theINCLPionMass;
306  etaMass = theINCLEtaMass;
307  omegaMass = theINCLOmegaMass;
308  etaPrimeMass = theINCLEtaPrimeMass;
309  photonMass = theINCLPhotonMass;
310 
311  if(theConfig && theConfig->getUseRealMasses()) {
314  } else {
317  }
318 
319 #ifndef INCLXX_IN_GEANT4_MODE
320  std::string dataFilePath;
321  if(theConfig)
322  dataFilePath = theConfig->getINCLXXDataFilePath();
324 #endif
325 
326 #ifdef INCLXX_IN_GEANT4_MODE
327  G4ParticleTable *theG4ParticleTable = G4ParticleTable::GetParticleTable();
328  theG4IonTable = theG4ParticleTable->GetIonTable();
329  theRealProtonMass = theG4ParticleTable->FindParticle("proton")->GetPDGMass() / MeV;
330  theRealNeutronMass = theG4ParticleTable->FindParticle("neutron")->GetPDGMass() / MeV;
331  theRealChargedPiMass = theG4ParticleTable->FindParticle("pi+")->GetPDGMass() / MeV;
332  theRealPiZeroMass = theG4ParticleTable->FindParticle("pi0")->GetPDGMass() / MeV;
333  theRealEtaMass = theG4ParticleTable->FindParticle("eta")->GetPDGMass() / MeV;
334  theRealOmegaMass = theG4ParticleTable->FindParticle("omega")->GetPDGMass() / MeV;
335  theRealEtaPrimeMass = theG4ParticleTable->FindParticle("eta_prime")->GetPDGMass() / MeV;
336  theRealPhotonMass = theG4ParticleTable->FindParticle("gamma")->GetPDGMass() / MeV;
337 #endif
338 
339  minDeltaMass = theRealNeutronMass + theRealChargedPiMass + 0.5;
341  minDeltaMassRndm = std::atan((minDeltaMass-effectiveDeltaMass)*2./effectiveDeltaWidth);
342 
343  piPlusWidth = theChargedPiWidth;
344  piMinusWidth = theChargedPiWidth;
345  piZeroWidth = thePiZeroWidth;
346  etaWidth = theEtaWidth;
347  omegaWidth = theOmegaWidth;
348  etaPrimeWidth = theEtaPrimeWidth;
349 
350 
351  // Initialise the separation-energy function
352  if(!theConfig || theConfig->getSeparationEnergyType()==INCLSeparationEnergy)
354  else if(theConfig->getSeparationEnergyType()==RealSeparationEnergy)
356  else if(theConfig->getSeparationEnergyType()==RealForLightSeparationEnergy)
358  else {
359  INCL_FATAL("Unrecognized separation-energy type in ParticleTable initialization: " << theConfig->getSeparationEnergyType() << '\n');
360  return;
361  }
362 
363  // Initialise the Fermi-momentum function
364  if(!theConfig || theConfig->getFermiMomentumType()==ConstantFermiMomentum) {
366  if(theConfig) {
367  const G4double aFermiMomentum = theConfig->getFermiMomentum();
368  if(aFermiMomentum>0.)
369  constantFermiMomentum = aFermiMomentum;
370  else
371  constantFermiMomentum = PhysicalConstants::Pf;
372  } else {
373  constantFermiMomentum = PhysicalConstants::Pf;
374  }
375  } else if(theConfig->getFermiMomentumType()==ConstantLightFermiMomentum)
377  else if(theConfig->getFermiMomentumType()==MassDependentFermiMomentum)
379  else {
380  INCL_FATAL("Unrecognized Fermi-momentum type in ParticleTable initialization: " << theConfig->getFermiMomentumType() << '\n');
381  return;
382  }
383 
384  // Initialise the r-p correlation coefficients
385  std::fill(rpCorrelationCoefficient, rpCorrelationCoefficient + UnknownParticle, 1.);
386  if(theConfig) {
387  rpCorrelationCoefficient[Proton] = theConfig->getRPCorrelationCoefficient(Proton);
388  rpCorrelationCoefficient[Neutron] = theConfig->getRPCorrelationCoefficient(Neutron);
389  }
390 
391  // Initialise the neutron-skin parameters
392  if(theConfig) {
393  neutronSkin = theConfig->getNeutronSkin();
394  neutronHalo = theConfig->getNeutronHalo();
395  }
396 
397  }
#define INCL_FATAL(x)
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.
G4double GetPDGMass() const
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].
static constexpr double MeV
Definition: G4SIunits.hh:214
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:

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

Get the name of the element from the atomic number.

Definition at line 853 of file G4INCLParticleTable.cc.

853  {
854  // Normalize the element name
855  std::transform(pS.begin(), pS.end(), pS.begin(), ::tolower);
856  pS[0] = ::toupper(pS[0]);
857 
858  const std::string *iter = std::find(elementTable, elementTable+elementTableSize, pS);
859  if(iter != elementTable+elementTableSize)
860  return iter - elementTable;
861  else
863  }
G4int parseIUPACElement(std::string const &pS)
Parse a IUPAC element name.

Here is the call graph for this function:

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 865 of file G4INCLParticleTable.cc.

865  {
866  // Normalise to lower case
867  std::string elementName(s);
868  std::transform(elementName.begin(), elementName.end(), elementName.begin(), ::tolower);
869  // Return 0 if the element name contains anything but IUPAC digits
870  if(elementName.find_first_not_of(elementIUPACDigits)!=std::string::npos)
871  return 0;
872  std::transform(elementName.begin(), elementName.end(), elementName.begin(), iupacToInt);
873  std::stringstream elementStream(elementName);
874  G4int Z;
875  elementStream >> Z;
876  return Z;
877  }
int G4int
Definition: G4Types.hh:78
const XML_Char * s
Definition: expat.h:262

Here is the caller graph for this function:

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

Setter for protonSeparationEnergy.

Definition at line 832 of file G4INCLParticleTable.cc.

832 { neutronSeparationEnergy = s; }
const XML_Char * s
Definition: expat.h:262

Here is the caller graph for this function:

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

Setter for protonSeparationEnergy.

Definition at line 830 of file G4INCLParticleTable.cc.

830 { protonSeparationEnergy = s; }
const XML_Char * s
Definition: expat.h:262

Here is the caller graph for this function:

Variable Documentation

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

Definition at line 65 of file G4INCLParticleTable.hh.

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

Definition at line 64 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveDeltaMass = 1232.0

Definition at line 69 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveDeltaWidth = 130.0

Definition at line 70 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveEtaMass = 547.862

Definition at line 72 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveEtaPrimeMass = 957.78

Definition at line 74 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveNucleonMass = 938.2796

Definition at line 67 of file G4INCLParticleTable.hh.

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

Definition at line 68 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectiveOmegaMass = 782.65

Definition at line 73 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectivePhotonMass = 0.0

Definition at line 75 of file G4INCLParticleTable.hh.

const G4double G4INCL::ParticleTable::effectivePionMass = 138.0

Definition at line 71 of file G4INCLParticleTable.hh.

G4ThreadLocal FermiMomentumFn G4INCL::ParticleTable::getFermiMomentum = NULL

Definition at line 923 of file G4INCLParticleTable.cc.

G4ThreadLocal SeparationEnergyFn G4INCL::ParticleTable::getSeparationEnergy = NULL

Static pointer to the separation-energy function.

Definition at line 922 of file G4INCLParticleTable.cc.

G4ThreadLocal NuclearMassFn G4INCL::ParticleTable::getTableMass = NULL

Static pointer to the mass function for nuclei.

Definition at line 920 of file G4INCLParticleTable.cc.

G4ThreadLocal ParticleMassFn G4INCL::ParticleTable::getTableParticleMass = NULL

Static pointer to the mass function for particles.

Definition at line 921 of file G4INCLParticleTable.cc.

const G4int G4INCL::ParticleTable::maxClusterCharge = 8

Definition at line 62 of file G4INCLParticleTable.hh.

const G4int G4INCL::ParticleTable::maxClusterMass = 12

Definition at line 61 of file G4INCLParticleTable.hh.

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

Definition at line 917 of file G4INCLParticleTable.cc.

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

Definition at line 918 of file G4INCLParticleTable.cc.

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

Definition at line 919 of file G4INCLParticleTable.cc.