Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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"
 46 #include "G4INCLParticleSpecies.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"
 56 #include "G4INCLNaturalIsotopicDistributions.hh"
 57 
 58 namespace G4INCL {
 59 
 60   namespace ParticleTable {
 61 
 62     const G4int maxClusterMass = 12;
 63     const G4int maxClusterCharge = 8;
 64 
 65     const G4int clusterTableZSize = maxClusterCharge+1;
 66     const G4int clusterTableASize = maxClusterMass+1;
 67     const G4int clusterTableSSize = 4;
 68 
 69     const G4double effectiveNucleonMass = 938.2796;
 70     const G4double effectiveNucleonMass2 = 8.8036860777616e5;
 71     const G4double effectiveDeltaMass = 1232.0;
 72     const G4double effectiveDeltaWidth = 130.0;
 73     const G4double effectivePionMass = 138.0;
 74     const G4double effectiveLambdaMass = 1115.683;
 75     const G4double effectiveSigmaMass = 1197.45; // max value
 76     const G4double effectiveXiMass = 1321.71; // max value
 77     const G4double effectiveKaonMass = 497.614; // max value
 78     const G4double effectiveAntiKaonMass = 497.614; // max value
 79     const G4double effectiveEtaMass = 547.862;
 80     const G4double effectiveOmegaMass = 782.65;
 81     const G4double effectiveEtaPrimeMass = 957.78;
 82     const G4double effectivePhotonMass = 0.0;
 83     extern G4ThreadLocal G4double minDeltaMass;
 84     extern G4ThreadLocal G4double minDeltaMass2;
 85     extern G4ThreadLocal G4double minDeltaMassRndm;
 86 
 87     /// \brief Initialize the particle table
 88     void initialize(Config const * const theConfig = 0);
 89 
 90     /// \brief Get the isospin of a particle
 91     G4int getIsospin(const ParticleType t);
 92 
 93     /// \brief Get the native INCL name of the particle
 94     std::string getName(const ParticleType t);
 95 
 96     /// \brief Get the short INCL name of the particle
 97     std::string getShortName(const ParticleType t);
 98 
 99     /// \brief Get the native INCL name of the particle
100     std::string getName(const ParticleSpecies &s);
101 
102     /// \brief Get the short INCL name of the particle
103     std::string getShortName(const ParticleSpecies &s);
104 
105     /// \brief Get the native INCL name of the ion
106     std::string getName(const G4int A, const G4int Z);
107 
108     /// \brief Get the native INCL name of the ion
109     std::string getName(const G4int A, const G4int Z, const G4int S);
110 
111     /// \brief Get the short INCL name of the ion
112     std::string getShortName(const G4int A, const G4int Z);
113 
114     /// \brief Get INCL nuclear mass (in MeV/c^2)
115     G4double getINCLMass(const G4int A, const G4int Z, const G4int S);
116 
117     /// \brief Get INCL particle mass (in MeV/c^2)
118     G4double getINCLMass(const ParticleType t);
119 
120 #ifndef INCLXX_IN_GEANT4_MODE
121     /// \brief Do we have this particle mass?
122     G4double hasMassTable(const unsigned int A, const unsigned int Z);
123 
124     /** \brief Weizsaecker mass formula
125      *
126      * Return the nuclear mass, as calculated from Weizsaecker's mass formula.
127      * Adapted from the Geant4 source.
128      *
129      * \param A the mass number
130      * \param Z the charge number
131      * \return the nuclear mass [MeV/c^2]
132      */
133     G4double getWeizsaeckerMass(const G4int A, const G4int Z);
134 #endif
135 
136     ///\brief Get particle mass (in MeV/c^2)
137     G4double getRealMass(const G4INCL::ParticleType t);
138     ///\brief Get nuclear mass (in MeV/c^2)
139     G4double getRealMass(const G4int A, const G4int Z, const G4int S = 0);
140 
141     /**\brief Get Q-value (in MeV/c^2)
142      *
143      * Uses the getTableMass function to compute the Q-value for the
144      * following reaction:
145      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \f]
146      */
147     G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2);
148 
149     /**\brief Get Q-value (in MeV/c^2)
150      *
151      * Uses the getTableMass function to compute the Q-value for the
152      * following reaction:
153      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \f]
154      */
155     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);
156 
157     G4double getTableSpeciesMass(const ParticleSpecies &p);
158 
159     /// \brief Get mass number from particle type
160     G4int getMassNumber(const ParticleType t);
161 
162     /// \brief Get charge number from particle type
163     G4int getChargeNumber(const ParticleType t);
164     
165     /// \brief Get strangeness number from particle type
166     G4int getStrangenessNumber(const ParticleType t);
167 
168     G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
169     G4double getLargestNuclearRadius(const G4int A, const G4int Z);
170     G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z);
171     G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z);
172     G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z);
173 
174     /// \brief Return the RMS of the momentum distribution (light clusters)
175     G4double getMomentumRMS(const G4int A, const G4int Z);
176 
177     /// \brief Return INCL's default separation energy
178     G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/);
179 
180     /// \brief Return the real separation energy
181     G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z);
182 
183     /// \brief Return the real separation energy only for light nuclei
184     G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z);
185 
186     /// \brief Getter for protonSeparationEnergy
187     G4double getProtonSeparationEnergy();
188 
189     /// \brief Getter for neutronSeparationEnergy
190     G4double getNeutronSeparationEnergy();
191 
192     /// \brief Setter for protonSeparationEnergy
193     void setProtonSeparationEnergy(const G4double s);
194 
195     /// \brief Setter for protonSeparationEnergy
196     void setNeutronSeparationEnergy(const G4double s);
197 
198     /// \brief Get the name of the element from the atomic number
199     std::string getElementName(const G4int Z);
200 
201     /// \brief Get the name of an unnamed element from the IUPAC convention
202     std::string getIUPACElementName(const G4int Z);
203 
204     /// \brief Get the name of the element from the atomic number
205     G4int parseElement(std::string pS);
206 
207     /** \brief Parse a IUPAC element name
208      *
209      * Note: this function is UGLY. Look at it at your own peril.
210      *
211      * \param pS a normalised string (lowercase)
212      * \return the charge number of the nuclide, or zero on fail
213      */
214     G4int parseIUPACElement(std::string const &pS);
215 
216     IsotopicDistribution const &getNaturalIsotopicDistribution(const G4int Z);
217 
218     G4int drawRandomNaturalIsotope(const G4int Z);
219 
220     // Typedefs and pointers for transparent handling of mass functions
221     //typedef G4double (*NuclearMassFn)(const G4int, const G4int);
222     typedef G4double (*NuclearMassFn)(const G4int, const G4int, const G4int);
223     typedef G4double (*ParticleMassFn)(const ParticleType);
224     /// \brief Static pointer to the mass function for nuclei
225     extern G4ThreadLocal NuclearMassFn getTableMass;
226     /// \brief Static pointer to the mass function for particles
227     extern G4ThreadLocal ParticleMassFn getTableParticleMass;
228 
229     // Typedefs and pointers for transparent handling of separation energies
230     typedef G4double (*SeparationEnergyFn)(const ParticleType, const G4int, const G4int);
231     /// \brief Static pointer to the separation-energy function
232     extern G4ThreadLocal SeparationEnergyFn getSeparationEnergy;
233 
234     // Typedefs and pointers for transparent handling of Fermi momentum
235     typedef G4double (*FermiMomentumFn)(const G4int, const G4int);
236     extern G4ThreadLocal FermiMomentumFn getFermiMomentum;
237 
238     /// \brief Return the constant value of the Fermi momentum
239     G4double getFermiMomentumConstant(const G4int /*A*/, const G4int /*Z*/);
240 
241     /** \brief Return the constant value of the Fermi momentum - special for light
242      *
243      * This function should always return PhysicalConstants::Pf for heavy
244      * nuclei, and values from the momentumRMS table for light nuclei.
245      *
246      * \param A mass number
247      * \param Z charge number
248      */
249     G4double getFermiMomentumConstantLight(const G4int A, const G4int Z);
250 
251     /** \brief Return the value Fermi momentum from a fit
252      *
253      * This function returns a fitted Fermi momentum, based on data from Moniz
254      * et al., Phys. Rev. Lett. 26 (1971) 445. The fitted functional form is
255      * \f[
256      * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\gamma)}
257      * \f]
258      * with \f$\alpha=259.416\f$ MeV/\f$c\f$, \f$\beta=152.824\f$ MeV/\f$c\f$
259      * and \f$\gamma=9.5157\cdot10^{-2}\f$.
260      *
261      * \param A mass number
262      */
263     G4double getFermiMomentumMassDependent(const G4int A, const G4int /*Z*/);
264 
265     /** \brief Get the value of the r-p correlation coefficient
266      *
267      * \param t the type of the particle (Proton or Neutron)
268      * \return the value of the r-p correlation coefficient
269      */
270     G4double getRPCorrelationCoefficient(const ParticleType t);
271 
272     /// \brief Get the thickness of the neutron skin
273     G4double getNeutronSkin();
274 
275     /// \brief Get the size of the neutron halo
276     G4double getNeutronHalo();
277 
278     /// \brief Get the type of pion
279     ParticleType getPionType(const G4int isosp);
280 
281     /// \brief Get the type of nucleon
282     ParticleType getNucleonType(const G4int isosp);
283 
284     /// \brief Get the type of delta
285     ParticleType getDeltaType(const G4int isosp);
286 
287     /// \brief Get the type of sigma
288     ParticleType getSigmaType(const G4int isosp);
289     
290     /// \brief Get the type of kaon
291     ParticleType getKaonType(const G4int isosp);
292 
293     /// \brief Get the type of antikaon
294     ParticleType getAntiKaonType(const G4int isosp);
295        
296     /// \brief Get the type of xi
297     ParticleType getXiType(const G4int isosp);
298     
299     /// \brief Get the type of antinucleon
300     ParticleType getAntiNucleonType(const G4int isosp);
301 
302     /// \brief Get the type of antidelta
303     ParticleType getAntiXiType(const G4int isosp);
304 
305     /// \brief Get the type of antisigma
306     ParticleType getAntiSigmaType(const G4int isosp); 
307 
308     /// \brief Get particle width (in s)
309     G4double getWidth(const ParticleType t);
310   }
311 }
312 
313 #endif
314 
315