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 ]

Diff markup

Differences between /processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh (Version 11.3.0) and /processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh (Version 9.6.p3)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // INCL++ intra-nuclear cascade model              26 // INCL++ intra-nuclear cascade model
 27 // Alain Boudard, CEA-Saclay, France           <<  27 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
 28 // Joseph Cugnon, University of Liege, Belgium <<  28 // Davide Mancusi, CEA
 29 // Jean-Christophe David, CEA-Saclay, France   <<  29 // Alain Boudard, CEA
 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H <<  30 // Sylvie Leray, CEA
 31 // Sylvie Leray, CEA-Saclay, France            <<  31 // Joseph Cugnon, University of Liege
 32 // Davide Mancusi, CEA-Saclay, France          << 
 33 //                                                 32 //
 34 #define INCLXX_IN_GEANT4_MODE 1                    33 #define INCLXX_IN_GEANT4_MODE 1
 35                                                    34 
 36 #include "globals.hh"                              35 #include "globals.hh"
 37                                                    36 
 38 #ifndef G4INCLParticleTable_hh                     37 #ifndef G4INCLParticleTable_hh
 39 #define G4INCLParticleTable_hh 1                   38 #define G4INCLParticleTable_hh 1
 40                                                    39 
 41 #include <string>                                  40 #include <string>
 42 #include <vector>                                  41 #include <vector>
 43 // #include <cassert>                              42 // #include <cassert>
 44                                                    43 
 45 #include "G4INCLParticleType.hh"                   44 #include "G4INCLParticleType.hh"
 46 #include "G4INCLParticleSpecies.hh"                45 #include "G4INCLParticleSpecies.hh"
 47 #include "G4INCLLogger.hh"                         46 #include "G4INCLLogger.hh"
 48 #include "G4INCLConfig.hh"                         47 #include "G4INCLConfig.hh"
 49 #include "G4INCLHFB.hh"                        << 
 50                                                    48 
 51 #ifdef INCLXX_IN_GEANT4_MODE                       49 #ifdef INCLXX_IN_GEANT4_MODE
 52 #include "G4IonTable.hh"                           50 #include "G4IonTable.hh"
 53 #include "G4ParticleTable.hh"                      51 #include "G4ParticleTable.hh"
 54 #endif                                             52 #endif
 55 #include "G4INCLGlobals.hh"                        53 #include "G4INCLGlobals.hh"
 56 #include "G4INCLNaturalIsotopicDistributions.h     54 #include "G4INCLNaturalIsotopicDistributions.hh"
 57                                                    55 
 58 namespace G4INCL {                                 56 namespace G4INCL {
 59                                                <<  57   class ParticleTable {
 60   namespace ParticleTable {                    <<  58   public:
 61                                                << 
 62     const G4int maxClusterMass = 12;           << 
 63     const G4int maxClusterCharge = 8;          << 
 64                                                << 
 65     const G4int clusterTableZSize = maxCluster << 
 66     const G4int clusterTableASize = maxCluster << 
 67     const G4int clusterTableSSize = 4;         << 
 68                                                << 
 69     const G4double effectiveNucleonMass = 938. << 
 70     const G4double effectiveNucleonMass2 = 8.8 << 
 71     const G4double effectiveDeltaMass = 1232.0 << 
 72     const G4double effectiveDeltaWidth = 130.0 << 
 73     const G4double effectivePionMass = 138.0;  << 
 74     const G4double effectiveLambdaMass = 1115. << 
 75     const G4double effectiveSigmaMass = 1197.4 << 
 76     const G4double effectiveXiMass = 1321.71;  << 
 77     const G4double effectiveKaonMass = 497.614 << 
 78     const G4double effectiveAntiKaonMass = 497 << 
 79     const G4double effectiveEtaMass = 547.862; << 
 80     const G4double effectiveOmegaMass = 782.65 << 
 81     const G4double effectiveEtaPrimeMass = 957 << 
 82     const G4double effectivePhotonMass = 0.0;  << 
 83     extern G4ThreadLocal G4double minDeltaMass << 
 84     extern G4ThreadLocal G4double minDeltaMass << 
 85     extern G4ThreadLocal G4double minDeltaMass << 
 86                                                << 
 87     /// \brief Initialize the particle table       59     /// \brief Initialize the particle table
 88     void initialize(Config const * const theCo <<  60     static void initialize(Config const * const theConfig = 0);
 89                                                << 
 90     /// \brief Get the isospin of a particle   << 
 91     G4int getIsospin(const ParticleType t);    << 
 92                                                    61 
 93     /// \brief Get the native INCL name of the <<  62     /// Get the isospin of a particle
 94     std::string getName(const ParticleType t); <<  63     static G4int getIsospin(const ParticleType t);
 95                                                    64 
 96     /// \brief Get the short INCL name of the  <<  65     /// Get the native INCL name of the particle
 97     std::string getShortName(const ParticleTyp <<  66     static std::string getName(const ParticleType t);
 98                                                    67 
 99     /// \brief Get the native INCL name of the <<  68     /// Get the short INCL name of the particle
100     std::string getName(const ParticleSpecies  <<  69     static std::string getShortName(const ParticleType t);
101                                                    70 
102     /// \brief Get the short INCL name of the  <<  71     /// Get the native INCL name of the particle
103     std::string getShortName(const ParticleSpe <<  72     static std::string getName(const ParticleSpecies s);
104                                                    73 
105     /// \brief Get the native INCL name of the <<  74     /// Get the short INCL name of the particle
106     std::string getName(const G4int A, const G <<  75     static std::string getShortName(const ParticleSpecies s);
107                                                    76 
108     /// \brief Get the native INCL name of the <<  77     /// Get the native INCL name of the ion
109     std::string getName(const G4int A, const G <<  78     static std::string getName(const G4int A, const G4int Z);
110                                                    79 
111     /// \brief Get the short INCL name of the  <<  80     /// Get the short INCL name of the ion
112     std::string getShortName(const G4int A, co <<  81     static std::string getShortName(const G4int A, const G4int Z);
113                                                    82 
114     /// \brief Get INCL nuclear mass (in MeV/c <<  83     ///\brief Get INCL nuclear mass (in MeV/c^2)
115     G4double getINCLMass(const G4int A, const  <<  84     static G4double getINCLMass(const G4int A, const G4int Z);
116                                                    85 
117     /// \brief Get INCL particle mass (in MeV/ <<  86     ///\brief Get INCL particle mass (in MeV/c^2)
118     G4double getINCLMass(const ParticleType t) <<  87     static G4double getINCLMass(const ParticleType t);
119                                                    88 
120 #ifndef INCLXX_IN_GEANT4_MODE                      89 #ifndef INCLXX_IN_GEANT4_MODE
121     /// \brief Do we have this particle mass?  <<  90     ///\brief Do we have this particle mass?
122     G4double hasMassTable(const unsigned int A <<  91     static G4double hasMassTable(const unsigned int A, const unsigned int Z) {
                                                   >>  92       return ( Z > 0 && A > 0
                                                   >>  93           && Z < massTableMask.size() && A < massTableMask.at(Z).size()
                                                   >>  94           && massTableMask.at(Z).at(A));
                                                   >>  95     }
123                                                    96 
124     /** \brief Weizsaecker mass formula            97     /** \brief Weizsaecker mass formula
125      *                                             98      *
126      * Return the nuclear mass, as calculated      99      * Return the nuclear mass, as calculated from Weizsaecker's mass formula.
127      * Adapted from the Geant4 source.            100      * Adapted from the Geant4 source.
128      *                                            101      *
129      * \param A the mass number                   102      * \param A the mass number
130      * \param Z the charge number                 103      * \param Z the charge number
131      * \return the nuclear mass [MeV/c^2]         104      * \return the nuclear mass [MeV/c^2]
132      */                                           105      */
133     G4double getWeizsaeckerMass(const G4int A, << 106     static G4double getWeizsaeckerMass(const G4int A, const G4int Z) {
                                                   >> 107       const G4int Npairing = (A-Z)%2;                  // pairing
                                                   >> 108       const G4int Zpairing = Z%2;
                                                   >> 109       const G4double fA = (G4double) A;
                                                   >> 110       const G4double fZ = (G4double) Z;
                                                   >> 111       G4double binding =
                                                   >> 112         - 15.67*fA                          // nuclear volume
                                                   >> 113         + 17.23*Math::pow23(fA)                // surface energy
                                                   >> 114         + 93.15*((fA/2.-fZ)*(fA/2.-fZ))/fA       // asymmetry
                                                   >> 115         + 0.6984523*fZ*fZ*Math::powMinus13(fA);      // coulomb
                                                   >> 116       if( Npairing == Zpairing ) binding += (Npairing+Zpairing-1) * 12.0 / std::sqrt(fA);  // pairing
                                                   >> 117 
                                                   >> 118       return fZ*getRealMass(Proton)+((G4double)(A-Z))*getRealMass(Neutron)+binding;
                                                   >> 119     }
134 #endif                                            120 #endif
135                                                   121 
136     ///\brief Get particle mass (in MeV/c^2)      122     ///\brief Get particle mass (in MeV/c^2)
137     G4double getRealMass(const G4INCL::Particl << 123     static G4double getRealMass(const G4INCL::ParticleType t);
138     ///\brief Get nuclear mass (in MeV/c^2)       124     ///\brief Get nuclear mass (in MeV/c^2)
139     G4double getRealMass(const G4int A, const  << 125     static G4double getRealMass(const G4int A, const G4int Z);
140                                                   126 
141     /**\brief Get Q-value (in MeV/c^2)            127     /**\brief Get Q-value (in MeV/c^2)
142      *                                            128      *
143      * Uses the getTableMass function to compu    129      * Uses the getTableMass function to compute the Q-value for the
144      * following reaction:                        130      * following reaction:
145      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2    131      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \f]
146      */                                           132      */
147     G4double getTableQValue(const G4int A1, co << 133     static G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2) {
                                                   >> 134       return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A1+A2,Z1+Z2);
                                                   >> 135     }
148                                                   136 
149     /**\brief Get Q-value (in MeV/c^2)            137     /**\brief Get Q-value (in MeV/c^2)
150      *                                            138      *
151      * Uses the getTableMass function to compu    139      * Uses the getTableMass function to compute the Q-value for the
152      * following reaction:                        140      * following reaction:
153      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3    141      * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \f]
154      */                                           142      */
155     G4double getTableQValue(const G4int A1, co << 143     static G4double getTableQValue(const G4int A1, const G4int Z1, const G4int A2, const G4int Z2, const G4int A3, const G4int Z3) {
                                                   >> 144       return getTableMass(A1,Z1) + getTableMass(A2,Z2) - getTableMass(A3,Z3) - getTableMass(A1+A2-A3,Z1+Z2-Z3);
                                                   >> 145     }
156                                                   146 
157     G4double getTableSpeciesMass(const Particl << 147     // Typedefs and pointers for transparent handling of mass functions
                                                   >> 148     typedef G4double (*NuclearMassFn)(const G4int, const G4int);
                                                   >> 149     typedef G4double (*ParticleMassFn)(const ParticleType);
                                                   >> 150     static NuclearMassFn getTableMass;
                                                   >> 151     static ParticleMassFn getTableParticleMass;
                                                   >> 152 
                                                   >> 153     static G4double getTableSpeciesMass(const ParticleSpecies &p) {
                                                   >> 154       if(p.theType == Composite)
                                                   >> 155         return (*getTableMass)(p.theA, p.theZ);
                                                   >> 156       else
                                                   >> 157         return (*getTableParticleMass)(p.theType);
                                                   >> 158     }
                                                   >> 159 
                                                   >> 160     // Typedefs and pointers for transparent handling of separation energies
                                                   >> 161     typedef G4double (*SeparationEnergyFn)(const ParticleType, const G4int, const G4int);
                                                   >> 162     static SeparationEnergyFn getSeparationEnergy;
158                                                   163 
159     /// \brief Get mass number from particle t    164     /// \brief Get mass number from particle type
160     G4int getMassNumber(const ParticleType t); << 165     static G4int getMassNumber(const ParticleType t) {
                                                   >> 166       switch(t) {
                                                   >> 167         case Proton:
                                                   >> 168         case Neutron:
                                                   >> 169         case DeltaPlusPlus:
                                                   >> 170         case DeltaPlus:
                                                   >> 171         case DeltaZero:
                                                   >> 172         case DeltaMinus:
                                                   >> 173           return 1;
                                                   >> 174           break;
                                                   >> 175         case PiPlus:
                                                   >> 176         case PiMinus:
                                                   >> 177         case PiZero:
                                                   >> 178           return 0;
                                                   >> 179           break;
                                                   >> 180         default:
                                                   >> 181           return 0;
                                                   >> 182           break;
                                                   >> 183       }
                                                   >> 184     }
161                                                   185 
162     /// \brief Get charge number from particle    186     /// \brief Get charge number from particle type
163     G4int getChargeNumber(const ParticleType t << 187     static G4int getChargeNumber(const ParticleType t) {
164                                                << 188       switch(t) {
165     /// \brief Get strangeness number from par << 189         case DeltaPlusPlus:
166     G4int getStrangenessNumber(const ParticleT << 190           return 2;
167                                                << 191           break;
168     G4double getNuclearRadius(const ParticleTy << 192         case Proton:
169     G4double getLargestNuclearRadius(const G4i << 193         case DeltaPlus:
170     G4double getRadiusParameter(const Particle << 194         case PiPlus:
171     G4double getMaximumNuclearRadius(const Par << 195           return 1;
172     G4double getSurfaceDiffuseness(const Parti << 196           break;
                                                   >> 197         case Neutron:
                                                   >> 198         case DeltaZero:
                                                   >> 199         case PiZero:
                                                   >> 200           return 0;
                                                   >> 201           break;
                                                   >> 202         case DeltaMinus:
                                                   >> 203         case PiMinus:
                                                   >> 204           return -1;
                                                   >> 205           break;
                                                   >> 206         default:
                                                   >> 207           return 0;
                                                   >> 208           break;
                                                   >> 209       }
                                                   >> 210     }
                                                   >> 211 
                                                   >> 212     static G4double getNuclearRadius(const G4int A, const G4int Z);
                                                   >> 213     static G4double getRadiusParameter(const G4int A, const G4int Z);
                                                   >> 214     static G4double getMaximumNuclearRadius(const G4int A, const G4int Z);
                                                   >> 215     static G4double getSurfaceDiffuseness(const G4int A, const G4int Z);
173                                                   216 
174     /// \brief Return the RMS of the momentum     217     /// \brief Return the RMS of the momentum distribution (light clusters)
175     G4double getMomentumRMS(const G4int A, con << 218     static G4double getMomentumRMS(const G4int A, const G4int Z) {
                                                   >> 219 // assert(Z>=0 && A>=0 && Z<=A);
                                                   >> 220       if(Z<clusterTableZSize && A<clusterTableASize)
                                                   >> 221         return momentumRMS[Z][A];
                                                   >> 222       else
                                                   >> 223         return Math::sqrtThreeFifths * PhysicalConstants::Pf;
                                                   >> 224     }
176                                                   225 
177     /// \brief Return INCL's default separatio    226     /// \brief Return INCL's default separation energy
178     G4double getSeparationEnergyINCL(const Par << 227     static G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/) {
                                                   >> 228       if(t==Proton)
                                                   >> 229         return theINCLProtonSeparationEnergy;
                                                   >> 230       else if(t==Neutron)
                                                   >> 231         return theINCLNeutronSeparationEnergy;
                                                   >> 232       else {
                                                   >> 233         ERROR("ParticleTable::getSeparationEnergyINCL : Unknown particle type." << std::endl);
                                                   >> 234         return 0.0;
                                                   >> 235       }
                                                   >> 236     }
179                                                   237 
180     /// \brief Return the real separation ener    238     /// \brief Return the real separation energy
181     G4double getSeparationEnergyReal(const Par << 239     static G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z) {
                                                   >> 240       // Real separation energies for all nuclei
                                                   >> 241       if(t==Proton)
                                                   >> 242         return (*getTableParticleMass)(Proton) + (*getTableMass)(A-1,Z-1) - (*getTableMass)(A,Z);
                                                   >> 243       else if(t==Neutron)
                                                   >> 244         return (*getTableParticleMass)(Neutron) + (*getTableMass)(A-1,Z) - (*getTableMass)(A,Z);
                                                   >> 245       else {
                                                   >> 246         ERROR("ParticleTable::getSeparationEnergyReal : Unknown particle type." << std::endl);
                                                   >> 247         return 0.0;
                                                   >> 248       }
                                                   >> 249     }
182                                                   250 
183     /// \brief Return the real separation ener    251     /// \brief Return the real separation energy only for light nuclei
184     G4double getSeparationEnergyRealForLight(c << 252     static G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z) {
                                                   >> 253       // Real separation energies for light nuclei, fixed values for heavy nuclei
                                                   >> 254       if(Z<clusterTableZSize && A<clusterTableASize)
                                                   >> 255         return getSeparationEnergyReal(t, A, Z);
                                                   >> 256       else
                                                   >> 257         return getSeparationEnergyINCL(t, A, Z);
                                                   >> 258     }
185                                                   259 
186     /// \brief Getter for protonSeparationEner    260     /// \brief Getter for protonSeparationEnergy
187     G4double getProtonSeparationEnergy();      << 261     static G4double getProtonSeparationEnergy() { return protonSeparationEnergy; }
188                                                   262 
189     /// \brief Getter for neutronSeparationEne    263     /// \brief Getter for neutronSeparationEnergy
190     G4double getNeutronSeparationEnergy();     << 264     static G4double getNeutronSeparationEnergy() { return neutronSeparationEnergy; }
191                                                   265 
192     /// \brief Setter for protonSeparationEner    266     /// \brief Setter for protonSeparationEnergy
193     void setProtonSeparationEnergy(const G4dou << 267     static void setProtonSeparationEnergy(const G4double s) { protonSeparationEnergy = s; }
194                                                   268 
195     /// \brief Setter for protonSeparationEner    269     /// \brief Setter for protonSeparationEnergy
196     void setNeutronSeparationEnergy(const G4do << 270     static void setNeutronSeparationEnergy(const G4double s) { neutronSeparationEnergy  = s; }
197                                                   271 
198     /// \brief Get the name of the element fro    272     /// \brief Get the name of the element from the atomic number
199     std::string getElementName(const G4int Z); << 273     static std::string getElementName(const G4int Z);
200                                                << 
201     /// \brief Get the name of an unnamed elem    274     /// \brief Get the name of an unnamed element from the IUPAC convention
202     std::string getIUPACElementName(const G4in << 275     static std::string getIUPACElementName(const G4int Z);
203                                                << 
204     /// \brief Get the name of the element fro << 
205     G4int parseElement(std::string pS);        << 
206                                                   276 
207     /** \brief Parse a IUPAC element name         277     /** \brief Parse a IUPAC element name
208      *                                            278      *
209      * Note: this function is UGLY. Look at it    279      * Note: this function is UGLY. Look at it at your own peril.
210      *                                            280      *
211      * \param pS a normalised string (lowercas    281      * \param pS a normalised string (lowercase)
212      * \return the charge number of the nuclid    282      * \return the charge number of the nuclide, or zero on fail
213      */                                           283      */
214     G4int parseIUPACElement(std::string const  << 284     static G4int parseIUPACElement(std::string const &pS);
215                                                << 
216     IsotopicDistribution const &getNaturalIsot << 
217                                                << 
218     G4int drawRandomNaturalIsotope(const G4int << 
219                                                << 
220     // Typedefs and pointers for transparent h << 
221     //typedef G4double (*NuclearMassFn)(const  << 
222     typedef G4double (*NuclearMassFn)(const G4 << 
223     typedef G4double (*ParticleMassFn)(const P << 
224     /// \brief Static pointer to the mass func << 
225     extern G4ThreadLocal NuclearMassFn getTabl << 
226     /// \brief Static pointer to the mass func << 
227     extern G4ThreadLocal ParticleMassFn getTab << 
228                                                   285 
229     // Typedefs and pointers for transparent h << 286     const static G4int elementTableSize = 113; // up to Cn
230     typedef G4double (*SeparationEnergyFn)(con << 
231     /// \brief Static pointer to the separatio << 
232     extern G4ThreadLocal SeparationEnergyFn ge << 
233                                                   287 
234     // Typedefs and pointers for transparent h << 288     const static G4double effectiveNucleonMass;
235     typedef G4double (*FermiMomentumFn)(const  << 289     const static G4double effectiveNucleonMass2;
236     extern G4ThreadLocal FermiMomentumFn getFe << 290     const static G4double effectiveDeltaMass;
                                                   >> 291     const static G4double effectivePionMass;
                                                   >> 292     const static G4double effectiveDeltaDecayThreshold;
                                                   >> 293 
                                                   >> 294     static const G4int maxClusterMass = 12;
                                                   >> 295     static const G4int maxClusterCharge = 8;
                                                   >> 296 
                                                   >> 297     const static G4int clusterTableZSize = ParticleTable::maxClusterCharge+1;
                                                   >> 298     const static G4int clusterTableASize = ParticleTable::maxClusterMass+1;
                                                   >> 299     const static G4double clusterPosFact[maxClusterMass+1];
                                                   >> 300     const static G4double clusterPosFact2[maxClusterMass+1];
                                                   >> 301     const static G4int clusterZMin[maxClusterMass+1]; // Lower limit of Z for cluster of mass A
                                                   >> 302     const static G4int clusterZMax[maxClusterMass+1]; // Upper limit of Z for cluster of mass A
                                                   >> 303     const static G4double clusterPhaseSpaceCut[maxClusterMass+1];
237                                                   304 
238     /// \brief Return the constant value of th << 305 #ifdef INCLXX_IN_GEANT4_MODE
239     G4double getFermiMomentumConstant(const G4 << 306     static G4IonTable *theG4IonTable;
                                                   >> 307 #else
                                                   >> 308     static std::vector< std::vector <G4bool> > massTableMask;
                                                   >> 309     static std::vector< std::vector <G4double> > massTable;
                                                   >> 310 #endif
240                                                   311 
241     /** \brief Return the constant value of th << 312     // Enumerator for cluster-decay channels
242      *                                         << 313     enum ClusterDecayType {
243      * This function should always return Phys << 314       StableCluster,
244      * nuclei, and values from the momentumRMS << 315       NeutronDecay,
245      *                                         << 316       ProtonDecay,
246      * \param A mass number                    << 317       AlphaDecay,
247      * \param Z charge number                  << 318       TwoProtonDecay,
248      */                                        << 319       TwoNeutronDecay,
249     G4double getFermiMomentumConstantLight(con << 320       ProtonUnbound,
                                                   >> 321       NeutronUnbound
                                                   >> 322     };
                                                   >> 323     const static ClusterDecayType clusterDecayMode[clusterTableZSize][clusterTableASize];
250                                                   324 
251     /** \brief Return the value Fermi momentum << 325     /** \brief Coulomb conversion factor, in MeV*fm.
252      *                                         << 
253      * This function returns a fitted Fermi mo << 
254      * et al., Phys. Rev. Lett. 26 (1971) 445. << 
255      * \f[                                     << 
256      * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\ga << 
257      * \f]                                     << 
258      * with \f$\alpha=259.416\f$ MeV/\f$c\f$,  << 
259      * and \f$\gamma=9.5157\cdot10^{-2}\f$.    << 
260      *                                            326      *
261      * \param A mass number                    << 327      * \f[ e^2/(4 pi epsilon_0) \f]
262      */                                           328      */
263     G4double getFermiMomentumMassDependent(con << 329     static const G4double eSquared;
264                                                   330 
265     /** \brief Get the value of the r-p correl << 331     static IsotopicDistribution const &getNaturalIsotopicDistribution(const G4int Z) {
266      *                                         << 332       return getNaturalIsotopicDistributions()->getIsotopicDistribution(Z);
267      * \param t the type of the particle (Prot << 333     }
268      * \return the value of the r-p correlatio << 334 
269      */                                        << 335     static G4int drawRandomNaturalIsotope(const G4int Z) {
270     G4double getRPCorrelationCoefficient(const << 336       return getNaturalIsotopicDistributions()->drawRandomIsotope(Z);
                                                   >> 337     }
                                                   >> 338 
                                                   >> 339   protected:
                                                   >> 340     ParticleTable() {};
                                                   >> 341     ~ParticleTable() {};
                                                   >> 342 
                                                   >> 343   private:
                                                   >> 344     static const G4double theINCLNucleonMass;
                                                   >> 345     static const G4double theINCLPionMass;
                                                   >> 346     static const G4double theINCLNeutronSeparationEnergy;
                                                   >> 347     static const G4double theINCLProtonSeparationEnergy;
                                                   >> 348     static G4double protonMass;
                                                   >> 349     static G4double neutronMass;
                                                   >> 350     static G4double neutronSeparationEnergy;
                                                   >> 351     static G4double protonSeparationEnergy;
                                                   >> 352     static G4double piPlusMass, piMinusMass, piZeroMass;
                                                   >> 353     static G4double theRealProtonMass;
                                                   >> 354     static G4double theRealNeutronMass;
                                                   >> 355     static G4double theRealChargedPiMass;
                                                   >> 356     static G4double theRealPiZeroMass;
                                                   >> 357 
                                                   >> 358     const static G4int mediumNucleiTableSize = 30;
                                                   >> 359     const static G4double mediumDiffuseness[mediumNucleiTableSize];
                                                   >> 360     const static G4double mediumRadius[mediumNucleiTableSize];
                                                   >> 361     const static G4double positionRMS[clusterTableZSize][clusterTableASize];
                                                   >> 362     const static G4double momentumRMS[clusterTableZSize][clusterTableASize];
271                                                   363 
272     /// \brief Get the thickness of the neutro << 364     const static std::string elementTable[elementTableSize];
273     G4double getNeutronSkin();                 << 
274                                                << 
275     /// \brief Get the size of the neutron hal << 
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 is << 
283                                                << 
284     /// \brief Get the type of delta           << 
285     ParticleType getDeltaType(const G4int isos << 
286                                                << 
287     /// \brief Get the type of sigma           << 
288     ParticleType getSigmaType(const G4int isos << 
289                                                   365     
290     /// \brief Get the type of kaon            << 366 #ifndef INCLXX_IN_GEANT4_MODE
291     ParticleType getKaonType(const G4int isosp << 367     /// \brief Read nuclear masses from a data file
292                                                << 368     static void readRealMasses(std::string const &path);
293     /// \brief Get the type of antikaon        << 369 #endif
294     ParticleType getAntiKaonType(const G4int i << 
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 G4in << 
301                                                   370 
302     /// \brief Get the type of antidelta       << 371     const static std::string elementIUPACDigits;
303     ParticleType getAntiXiType(const G4int iso << 
304                                                   372 
305     /// \brief Get the type of antisigma       << 373     /// \brief Transform a IUPAC char to an char representing an integer digit
306     ParticleType getAntiSigmaType(const G4int  << 374     static char iupacToInt(char c) {
                                                   >> 375       return (char)(((G4int)'0')+elementIUPACDigits.find(c));
                                                   >> 376     }
                                                   >> 377 
                                                   >> 378     /// \brief Transform an integer digit (represented by a char) to a IUPAC char
                                                   >> 379     static char intToIUPAC(char n) { return elementIUPACDigits.at(n); }
                                                   >> 380 
                                                   >> 381     /// \brief Array of natural isotopic distributions
                                                   >> 382     static const NaturalIsotopicDistributions *theNaturalIsotopicDistributions;
                                                   >> 383 
                                                   >> 384     /// \brief Get the singleton instance of the natural isotopic distributions
                                                   >> 385     static const NaturalIsotopicDistributions *getNaturalIsotopicDistributions() {
                                                   >> 386       if(!theNaturalIsotopicDistributions)
                                                   >> 387         theNaturalIsotopicDistributions = new NaturalIsotopicDistributions;
                                                   >> 388       return theNaturalIsotopicDistributions;
                                                   >> 389     }
307                                                   390 
308     /// \brief Get particle width (in s)       << 391   };
309     G4double getWidth(const ParticleType t);   << 
310   }                                            << 
311 }                                                 392 }
312                                                   393 
313 #endif                                            394 #endif
314                                                << 
315                                                   395