Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLParticleTable.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // INCL++ intra-nuclear cascade model
27 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28 // Davide Mancusi, CEA
29 // Alain Boudard, CEA
30 // Sylvie Leray, CEA
31 // Joseph Cugnon, University of Liege
32 //
33 #define INCLXX_IN_GEANT4_MODE 1
34 
35 #include "globals.hh"
36 
37 #ifndef G4INCLParticleTable_hh
38 #define G4INCLParticleTable_hh 1
39 
40 #include <string>
41 #include <vector>
42 // #include <cassert>
43 
44 #include "G4INCLParticleType.hh"
45 #include "G4INCLParticleSpecies.hh"
46 #include "G4INCLLogger.hh"
47 #include "G4INCLConfig.hh"
48 
49 #ifdef INCLXX_IN_GEANT4_MODE
50 #include "G4IonTable.hh"
51 #include "G4ParticleTable.hh"
52 #endif
53 #include "G4INCLGlobals.hh"
55 
56 namespace G4INCL {
57 
58  namespace ParticleTable {
59 
60  const G4int maxClusterMass = 12;
62 
65 
66  const G4double effectiveNucleonMass = 938.2796;
67  const G4double effectiveNucleonMass2 = 8.8036860777616e5;
68  const G4double effectiveDeltaMass = 1232.0;
69  const G4double effectivePionMass = 138.0;
71 
72  /// \brief Initialize the particle table
73  void initialize(Config const * const theConfig = 0);
74 
75  /// \brief Get the isospin of a particle
76  G4int getIsospin(const ParticleType t);
77 
78  /// \brief Get the native INCL name of the particle
79  std::string getName(const ParticleType t);
80 
81  /// \brief Get the short INCL name of the particle
82  std::string getShortName(const ParticleType t);
83 
84  /// \brief Get the native INCL name of the particle
85  std::string getName(const ParticleSpecies &s);
86 
87  /// \brief Get the short INCL name of the particle
88  std::string getShortName(const ParticleSpecies &s);
89 
90  /// \brief Get the native INCL name of the ion
91  std::string getName(const G4int A, const G4int Z);
92 
93  /// \brief Get the short INCL name of the ion
94  std::string getShortName(const G4int A, const G4int Z);
95 
96  /// \brief Get INCL nuclear mass (in MeV/c^2)
97  G4double getINCLMass(const G4int A, const G4int Z);
98 
99  /// \brief Get INCL particle mass (in MeV/c^2)
101 
102 #ifndef INCLXX_IN_GEANT4_MODE
103  /// \brief Do we have this particle mass?
104  G4double hasMassTable(const unsigned int A, const unsigned int Z);
105 
106  /** \brief Weizsaecker mass formula
107  *
108  * Return the nuclear mass, as calculated from Weizsaecker's mass formula.
109  * Adapted from the Geant4 source.
110  *
111  * \param A the mass number
112  * \param Z the charge number
113  * \return the nuclear mass [MeV/c^2]
114  */
115  G4double getWeizsaeckerMass(const G4int A, const G4int Z);
116 #endif
117 
118  ///\brief Get particle mass (in MeV/c^2)
120  ///\brief Get nuclear mass (in MeV/c^2)
121  G4double getRealMass(const G4int A, const G4int Z);
122 
123  /**\brief Get Q-value (in MeV/c^2)
124  *
125  * Uses the getTableMass function to compute the Q-value for the
126  * following reaction:
127  * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \f]
128  */
129  G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2);
130 
131  /**\brief Get Q-value (in MeV/c^2)
132  *
133  * Uses the getTableMass function to compute the Q-value for the
134  * following reaction:
135  * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \f]
136  */
137  G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2, const G4int A3, const G4int Z3);
138 
140 
141  /// \brief Get mass number from particle type
143 
144  /// \brief Get charge number from particle type
146 
147  G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
148  G4double getLargestNuclearRadius(const G4int A, const G4int Z);
149  G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z);
150  G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
151  G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z);
152 
153  /// \brief Return the RMS of the momentum distribution (light clusters)
154  G4double getMomentumRMS(const G4int A, const G4int Z);
155 
156  /// \brief Return INCL's default separation energy
157  G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/);
158 
159  /// \brief Return the real separation energy
160  G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z);
161 
162  /// \brief Return the real separation energy only for light nuclei
164 
165  /// \brief Getter for protonSeparationEnergy
167 
168  /// \brief Getter for neutronSeparationEnergy
170 
171  /// \brief Setter for protonSeparationEnergy
173 
174  /// \brief Setter for protonSeparationEnergy
176 
177  /// \brief Get the name of the element from the atomic number
178  std::string getElementName(const G4int Z);
179 
180  /// \brief Get the name of an unnamed element from the IUPAC convention
181  std::string getIUPACElementName(const G4int Z);
182 
183  /// \brief Get the name of the element from the atomic number
184  G4int parseElement(std::string pS);
185 
186  /** \brief Parse a IUPAC element name
187  *
188  * Note: this function is UGLY. Look at it at your own peril.
189  *
190  * \param pS a normalised string (lowercase)
191  * \return the charge number of the nuclide, or zero on fail
192  */
193  G4int parseIUPACElement(std::string const &pS);
194 
196 
198 
199  // Typedefs and pointers for transparent handling of mass functions
200  typedef G4double (*NuclearMassFn)(const G4int, const G4int);
202  /// \brief Static pointer to the mass function for nuclei
204  /// \brief Static pointer to the mass function for particles
206 
207  // Typedefs and pointers for transparent handling of separation energies
208  typedef G4double (*SeparationEnergyFn)(const ParticleType, const G4int, const G4int);
209  /// \brief Static pointer to the separation-energy function
211 
212  // Typedefs and pointers for transparent handling of Fermi momentum
213  typedef G4double (*FermiMomentumFn)(const G4int, const G4int);
215 
216  /** \brief Return the constant value of the Fermi momentum
217  *
218  * This function should always return PhysicalConstants::Pf.
219  */
220  G4double getFermiMomentumConstant(const G4int /*A*/, const G4int /*Z*/);
221 
222  /** \brief Return the constant value of the Fermi momentum - special for light
223  *
224  * This function should always return PhysicalConstants::Pf for heavy
225  * nuclei, and values from the momentumRMS table for light nuclei.
226  *
227  * \param A mass number
228  * \param Z charge number
229  */
231 
232  /** \brief Return the value Fermi momentum from a fit
233  *
234  * This function returns a fitted Fermi momentum, based on data from Moniz
235  * et al., Phys. Rev. Lett. 26 (1971) 445. The fitted functional form is
236  * \f[
237  * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\gamma)}
238  * \f]
239  * with \f$\alpha=259.416\f$ MeV/\f$c\f$, \f$\beta=152.824\f$ MeV/\f$c\f$
240  * and \f$\gamma=9.5157\cdot10^{-2}\f$.
241  *
242  * \param A mass number
243  */
244  G4double getFermiMomentumMassDependent(const G4int A, const G4int /*Z*/);
245 
246  /** \brief Get the value of the r-p correlation coefficient
247  *
248  * \param t the type of the particle (Proton or Neutron)
249  * \return the value of the r-p correlation coefficient
250  */
252 
253  /// \brief Get the value of the neutron skin thickness
255 
256  /// \brief Get the value of the additional neutron skin diffuseness
258 
259  }
260 }
261 
262 #endif
263 
G4double(* ParticleMassFn)(const ParticleType)
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
G4double getNeutronSeparationEnergy()
Getter for neutronSeparationEnergy.
G4double getProtonSeparationEnergy()
Getter for protonSeparationEnergy.
const XML_Char * s
const char * p
Definition: xmltok.h:285
G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2)
Get Q-value (in MeV/c^2)
G4int getChargeNumber(const ParticleType t)
Get charge number from particle type.
G4double(* NuclearMassFn)(const G4int, const G4int)
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
void setProtonSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
G4double(* FermiMomentumFn)(const G4int, const G4int)
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
G4int getMassNumber(const ParticleType t)
Get mass number from particle type.
const G4double effectivePionMass
Classes that stores isotopic abundances.
G4int parseElement(std::string pS)
Get the name of the element from the atomic number.
Class that stores isotopic abundances for a given element.
std::string getIUPACElementName(const G4int Z)
Get the name of an unnamed element from the IUPAC convention.
G4double getLargestNuclearRadius(const G4int A, const G4int Z)
G4double(* SeparationEnergyFn)(const ParticleType, const G4int, const G4int)
G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z)
G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z)
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.
G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
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)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
const G4double effectiveNucleonMass2
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4double getNeutronSkinAdditionalDiffuseness()
Get the value of the additional neutron skin diffuseness.
G4int drawRandomNaturalIsotope(const G4int Z)
G4double getTableSpeciesMass(const ParticleSpecies &p)
G4double getMomentumRMS(const G4int A, const G4int Z)
Return the RMS of the momentum distribution (light clusters)
IsotopicDistribution const & getNaturalIsotopicDistribution(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.
const G4double effectiveDeltaMass
double G4double
Definition: G4Types.hh:76
G4ThreadLocal G4double effectiveDeltaDecayThreshold
G4double getSeparationEnergyINCL(const ParticleType t, const G4int, const G4int)
Return INCL's default separation energy.
G4double getFermiMomentumMassDependent(const G4int A, const G4int)
Return the value Fermi momentum from a fit.
std::string getShortName(const ParticleType t)
Get the short INCL name of the particle.
void initialize(Config const *const theConfig=0)
Initialize the particle table.
const G4double effectiveNucleonMass
void setNeutronSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
G4double getNeutronSkinThickness()
Get the value of the neutron skin thickness.
G4double getFermiMomentumConstantLight(const G4int A, const G4int Z)
Return the constant value of the Fermi momentum - special for light.
std::string getName(const ParticleType t)
Get the native INCL name of the particle.
G4ThreadLocal FermiMomentumFn getFermiMomentum