Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
38#ifndef G4INCLParticleTable_hh
39#define G4INCLParticleTable_hh 1
40
41#include <string>
42#include <vector>
43// #include <cassert>
44
45#include "G4INCLParticleType.hh"
47#include "G4INCLLogger.hh"
48#include "G4INCLConfig.hh"
49#include "G4INCLHFB.hh"
50
51#ifdef INCLXX_IN_GEANT4_MODE
52#include "G4IonTable.hh"
53#include "G4ParticleTable.hh"
54#endif
55#include "G4INCLGlobals.hh"
57
58namespace G4INCL {
59
60 namespace ParticleTable {
61
64
68
70 const G4double effectiveNucleonMass2 = 8.8036860777616e5;
74 const G4double effectiveLambdaMass = 1115.683;
75 const G4double effectiveSigmaMass = 1197.45; // max value
76 const G4double effectiveKaonMass = 497.614; // max value
77 const G4double effectiveAntiKaonMass = 497.614; // max value
78 const G4double effectiveEtaMass = 547.862;
85
86 /// \brief Initialize the particle table
87 void initialize(Config const * const theConfig = 0);
88
89 /// \brief Get the isospin of a particle
91
92 /// \brief Get the native INCL name of the particle
93 std::string getName(const ParticleType t);
94
95 /// \brief Get the short INCL name of the particle
96 std::string getShortName(const ParticleType t);
97
98 /// \brief Get the native INCL name of the particle
99 std::string getName(const ParticleSpecies &s);
100
101 /// \brief Get the short INCL name of the particle
102 std::string getShortName(const ParticleSpecies &s);
103
104 /// \brief Get the native INCL name of the ion
105 std::string getName(const G4int A, const G4int Z);
106
107 /// \brief Get the short INCL name of the ion
108 std::string getShortName(const G4int A, const G4int Z);
109
110 /// \brief Get INCL nuclear mass (in MeV/c^2)
111 G4double getINCLMass(const G4int A, const G4int Z, const G4int S);
112
113 /// \brief Get INCL particle mass (in MeV/c^2)
115
116#ifndef INCLXX_IN_GEANT4_MODE
117 /// \brief Do we have this particle mass?
118 G4double hasMassTable(const unsigned int A, const unsigned int Z);
119
120 /** \brief Weizsaecker mass formula
121 *
122 * Return the nuclear mass, as calculated from Weizsaecker's mass formula.
123 * Adapted from the Geant4 source.
124 *
125 * \param A the mass number
126 * \param Z the charge number
127 * \return the nuclear mass [MeV/c^2]
128 */
129 G4double getWeizsaeckerMass(const G4int A, const G4int Z);
130#endif
131
132 ///\brief Get particle mass (in MeV/c^2)
134 ///\brief Get nuclear mass (in MeV/c^2)
135 G4double getRealMass(const G4int A, const G4int Z, const G4int S = 0);
136
137 /**\brief Get Q-value (in MeV/c^2)
138 *
139 * Uses the getTableMass function to compute the Q-value for the
140 * following reaction:
141 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \f]
142 */
143 G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2);
144
145 /**\brief Get Q-value (in MeV/c^2)
146 *
147 * Uses the getTableMass function to compute the Q-value for the
148 * following reaction:
149 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \f]
150 */
151 G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2, const G4int A3, const G4int Z3, const G4int S3);
152
154
155 /// \brief Get mass number from particle type
157
158 /// \brief Get charge number from particle type
160
161 /// \brief Get strangeness number from particle type
163
164 G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
166 G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z);
167 G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
168 G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z);
169
170 /// \brief Return the RMS of the momentum distribution (light clusters)
171 G4double getMomentumRMS(const G4int A, const G4int Z);
172
173 /// \brief Return INCL's default separation energy
174 G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/);
175
176 /// \brief Return the real separation energy
177 G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z);
178
179 /// \brief Return the real separation energy only for light nuclei
181
182 /// \brief Getter for protonSeparationEnergy
184
185 /// \brief Getter for neutronSeparationEnergy
187
188 /// \brief Setter for protonSeparationEnergy
190
191 /// \brief Setter for protonSeparationEnergy
193
194 /// \brief Get the name of the element from the atomic number
195 std::string getElementName(const G4int Z);
196
197 /// \brief Get the name of an unnamed element from the IUPAC convention
198 std::string getIUPACElementName(const G4int Z);
199
200 /// \brief Get the name of the element from the atomic number
201 G4int parseElement(std::string pS);
202
203 /** \brief Parse a IUPAC element name
204 *
205 * Note: this function is UGLY. Look at it at your own peril.
206 *
207 * \param pS a normalised string (lowercase)
208 * \return the charge number of the nuclide, or zero on fail
209 */
210 G4int parseIUPACElement(std::string const &pS);
211
213
215
216 // Typedefs and pointers for transparent handling of mass functions
217 //typedef G4double (*NuclearMassFn)(const G4int, const G4int);
218 typedef G4double (*NuclearMassFn)(const G4int, const G4int, const G4int);
220 /// \brief Static pointer to the mass function for nuclei
222 /// \brief Static pointer to the mass function for particles
224
225 // Typedefs and pointers for transparent handling of separation energies
226 typedef G4double (*SeparationEnergyFn)(const ParticleType, const G4int, const G4int);
227 /// \brief Static pointer to the separation-energy function
229
230 // Typedefs and pointers for transparent handling of Fermi momentum
231 typedef G4double (*FermiMomentumFn)(const G4int, const G4int);
233
234 /// \brief Return the constant value of the Fermi momentum
235 G4double getFermiMomentumConstant(const G4int /*A*/, const G4int /*Z*/);
236
237 /** \brief Return the constant value of the Fermi momentum - special for light
238 *
239 * This function should always return PhysicalConstants::Pf for heavy
240 * nuclei, and values from the momentumRMS table for light nuclei.
241 *
242 * \param A mass number
243 * \param Z charge number
244 */
246
247 /** \brief Return the value Fermi momentum from a fit
248 *
249 * This function returns a fitted Fermi momentum, based on data from Moniz
250 * et al., Phys. Rev. Lett. 26 (1971) 445. The fitted functional form is
251 * \f[
252 * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\gamma)}
253 * \f]
254 * with \f$\alpha=259.416\f$ MeV/\f$c\f$, \f$\beta=152.824\f$ MeV/\f$c\f$
255 * and \f$\gamma=9.5157\cdot10^{-2}\f$.
256 *
257 * \param A mass number
258 */
260
261 /** \brief Get the value of the r-p correlation coefficient
262 *
263 * \param t the type of the particle (Proton or Neutron)
264 * \return the value of the r-p correlation coefficient
265 */
267
268 /// \brief Get the thickness of the neutron skin
270
271 /// \brief Get the size of the neutron halo
273
274 /// \brief Get the type of pion
275 ParticleType getPionType(const G4int isosp);
276
277 /// \brief Get the type of nucleon
278 ParticleType getNucleonType(const G4int isosp);
279
280 /// \brief Get the type of delta
281 ParticleType getDeltaType(const G4int isosp);
282
283 /// \brief Get the type of sigma
284 ParticleType getSigmaType(const G4int isosp);
285
286 /// \brief Get the type of kaon
287 ParticleType getKaonType(const G4int isosp);
288
289 /// \brief Get the type of antikaon
291
292 /// \brief Get particle width (in s)
294 }
295}
296
297#endif
298
double S(double temp)
Classes that stores isotopic abundances.
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
Class that stores isotopic abundances for a given element.
G4int getMassNumber(const ParticleType t)
Get mass number from particle type.
G4ThreadLocal FermiMomentumFn getFermiMomentum
const G4double effectiveDeltaWidth
G4int parseElement(std::string pS)
Get the name of the element from the atomic number.
G4ThreadLocal G4double minDeltaMass2
const G4double effectiveKaonMass
G4double(* FermiMomentumFn)(const G4int, const G4int)
G4ThreadLocal NuclearMassFn getTableMass
Static pointer to the mass function for nuclei.
G4ThreadLocal SeparationEnergyFn getSeparationEnergy
Static pointer to the separation-energy function.
G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2)
Get Q-value (in MeV/c^2)
G4ThreadLocal ParticleMassFn getTableParticleMass
Static pointer to the mass function for particles.
void initialize(Config const *const theConfig=0)
Initialize the particle table.
const G4double effectiveDeltaMass
G4double getFermiMomentumMassDependent(const G4int A, const G4int)
Return the value Fermi momentum from a fit.
G4double getTableSpeciesMass(const ParticleSpecies &p)
G4int drawRandomNaturalIsotope(const G4int Z)
G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy.
G4double getNeutronSeparationEnergy()
Getter for neutronSeparationEnergy.
G4ThreadLocal G4double minDeltaMass
G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z)
G4double getLargestNuclearRadius(const G4int A, const G4int Z)
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
G4double getNeutronHalo()
Get the size of the neutron halo.
const G4double effectiveLambdaMass
const G4double effectiveEtaMass
G4double getRealMass(const G4INCL::ParticleType t)
Get particle mass (in MeV/c^2)
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4double(* ParticleMassFn)(const ParticleType)
G4int getStrangenessNumber(const ParticleType t)
Get strangeness number from particle type.
G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
G4double getRPCorrelationCoefficient(const ParticleType t)
Get the value of the r-p correlation coefficient.
G4int parseIUPACElement(std::string const &pS)
Parse a IUPAC element name.
G4double getSeparationEnergyINCL(const ParticleType t, const G4int, const G4int)
Return INCL's default separation energy.
void setNeutronSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
G4double getFermiMomentumConstant(const G4int, const G4int)
Return the constant value of the Fermi momentum.
std::string getName(const ParticleType t)
Get the native INCL name of the particle.
G4ThreadLocal G4double minDeltaMassRndm
G4double(* SeparationEnergyFn)(const ParticleType, const G4int, const G4int)
const G4double effectiveNucleonMass2
G4double getNeutronSkin()
Get the thickness of the neutron skin.
const G4double effectiveOmegaMass
const G4double effectiveEtaPrimeMass
std::string getIUPACElementName(const G4int Z)
Get the name of an unnamed element from the IUPAC convention.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
const G4double effectiveNucleonMass
G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z)
const G4double effectivePionMass
G4double getFermiMomentumConstantLight(const G4int A, const G4int Z)
Return the constant value of the Fermi momentum - special for light.
void setProtonSeparationEnergy(const G4double s)
Setter for protonSeparationEnergy.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
ParticleType getDeltaType(const G4int isosp)
Get the type of delta.
G4double(* NuclearMassFn)(const G4int, const G4int, const G4int)
G4int getChargeNumber(const ParticleType t)
Get charge number from particle type.
G4double getProtonSeparationEnergy()
Getter for protonSeparationEnergy.
IsotopicDistribution const & getNaturalIsotopicDistribution(const G4int Z)
G4double getMomentumRMS(const G4int A, const G4int Z)
Return the RMS of the momentum distribution (light clusters)
const G4double effectivePhotonMass
ParticleType getAntiKaonType(const G4int isosp)
Get the type of antikaon.
const G4double effectiveSigmaMass
G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z)
Return the real separation energy only for light nuclei.
const G4double effectiveAntiKaonMass
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
G4double getWidth(const ParticleType t)
Get particle width (in s)
std::string getShortName(const ParticleType t)
Get the short INCL name of the particle.
std::string getElementName(const G4int Z)
Get the name of the element from the atomic number.
#define G4ThreadLocal
Definition: tls.hh:77