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