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 106 108 /// \brief Get the native INCL name of the << 109 std::string getName(const G4int A, const G << 110 << 111 /// \brief Get the short INCL name of the 107 /// \brief Get the short INCL name of the ion 112 std::string getShortName(const G4int A, co 108 std::string getShortName(const G4int A, const G4int Z); 113 109 114 /// \brief Get INCL nuclear mass (in MeV/c 110 /// \brief Get INCL nuclear mass (in MeV/c^2) 115 G4double getINCLMass(const G4int A, const 111 G4double getINCLMass(const G4int A, const G4int Z, const G4int S); 116 112 117 /// \brief Get INCL particle mass (in MeV/ 113 /// \brief Get INCL particle mass (in MeV/c^2) 118 G4double getINCLMass(const ParticleType t) 114 G4double getINCLMass(const ParticleType t); 119 115 120 #ifndef INCLXX_IN_GEANT4_MODE 116 #ifndef INCLXX_IN_GEANT4_MODE 121 /// \brief Do we have this particle mass? 117 /// \brief Do we have this particle mass? 122 G4double hasMassTable(const unsigned int A 118 G4double hasMassTable(const unsigned int A, const unsigned int Z); 123 119 124 /** \brief Weizsaecker mass formula 120 /** \brief Weizsaecker mass formula 125 * 121 * 126 * Return the nuclear mass, as calculated 122 * Return the nuclear mass, as calculated from Weizsaecker's mass formula. 127 * Adapted from the Geant4 source. 123 * Adapted from the Geant4 source. 128 * 124 * 129 * \param A the mass number 125 * \param A the mass number 130 * \param Z the charge number 126 * \param Z the charge number 131 * \return the nuclear mass [MeV/c^2] 127 * \return the nuclear mass [MeV/c^2] 132 */ 128 */ 133 G4double getWeizsaeckerMass(const G4int A, 129 G4double getWeizsaeckerMass(const G4int A, const G4int Z); 134 #endif 130 #endif 135 131 136 ///\brief Get particle mass (in MeV/c^2) 132 ///\brief Get particle mass (in MeV/c^2) 137 G4double getRealMass(const G4INCL::Particl 133 G4double getRealMass(const G4INCL::ParticleType t); 138 ///\brief Get nuclear mass (in MeV/c^2) 134 ///\brief Get nuclear mass (in MeV/c^2) 139 G4double getRealMass(const G4int A, const 135 G4double getRealMass(const G4int A, const G4int Z, const G4int S = 0); 140 136 141 /**\brief Get Q-value (in MeV/c^2) 137 /**\brief Get Q-value (in MeV/c^2) 142 * 138 * 143 * Uses the getTableMass function to compu 139 * Uses the getTableMass function to compute the Q-value for the 144 * following reaction: 140 * following reaction: 145 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2 141 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_1+A_2,Z_1+Z_2) \f] 146 */ 142 */ 147 G4double getTableQValue(const G4int A1, co 143 G4double getTableQValue(const G4int A1, const G4int Z1, const G4int S1, const G4int A2, const G4int Z2, const G4int S2); 148 144 149 /**\brief Get Q-value (in MeV/c^2) 145 /**\brief Get Q-value (in MeV/c^2) 150 * 146 * 151 * Uses the getTableMass function to compu 147 * Uses the getTableMass function to compute the Q-value for the 152 * following reaction: 148 * following reaction: 153 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3 149 * \f[ (A_1,Z_1) + (A_2, Z_2) --> (A_3,Z_3) + (A1+A2-A3,Z1+Z2-Z3) \f] 154 */ 150 */ 155 G4double getTableQValue(const G4int A1, co 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); 156 152 157 G4double getTableSpeciesMass(const Particl 153 G4double getTableSpeciesMass(const ParticleSpecies &p); 158 154 159 /// \brief Get mass number from particle t 155 /// \brief Get mass number from particle type 160 G4int getMassNumber(const ParticleType t); 156 G4int getMassNumber(const ParticleType t); 161 157 162 /// \brief Get charge number from particle 158 /// \brief Get charge number from particle type 163 G4int getChargeNumber(const ParticleType t 159 G4int getChargeNumber(const ParticleType t); 164 160 165 /// \brief Get strangeness number from par 161 /// \brief Get strangeness number from particle type 166 G4int getStrangenessNumber(const ParticleT 162 G4int getStrangenessNumber(const ParticleType t); 167 163 168 G4double getNuclearRadius(const ParticleTy 164 G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z); 169 G4double getLargestNuclearRadius(const G4i 165 G4double getLargestNuclearRadius(const G4int A, const G4int Z); 170 G4double getRadiusParameter(const Particle 166 G4double getRadiusParameter(const ParticleType t, const G4int A, const G4int Z); 171 G4double getMaximumNuclearRadius(const Par 167 G4double getMaximumNuclearRadius(const ParticleType t, const G4int A, const G4int Z); 172 G4double getSurfaceDiffuseness(const Parti 168 G4double getSurfaceDiffuseness(const ParticleType t, const G4int A, const G4int Z); 173 169 174 /// \brief Return the RMS of the momentum 170 /// \brief Return the RMS of the momentum distribution (light clusters) 175 G4double getMomentumRMS(const G4int A, con 171 G4double getMomentumRMS(const G4int A, const G4int Z); 176 172 177 /// \brief Return INCL's default separatio 173 /// \brief Return INCL's default separation energy 178 G4double getSeparationEnergyINCL(const Par 174 G4double getSeparationEnergyINCL(const ParticleType t, const G4int /*A*/, const G4int /*Z*/); 179 175 180 /// \brief Return the real separation ener 176 /// \brief Return the real separation energy 181 G4double getSeparationEnergyReal(const Par 177 G4double getSeparationEnergyReal(const ParticleType t, const G4int A, const G4int Z); 182 178 183 /// \brief Return the real separation ener 179 /// \brief Return the real separation energy only for light nuclei 184 G4double getSeparationEnergyRealForLight(c 180 G4double getSeparationEnergyRealForLight(const ParticleType t, const G4int A, const G4int Z); 185 181 186 /// \brief Getter for protonSeparationEner 182 /// \brief Getter for protonSeparationEnergy 187 G4double getProtonSeparationEnergy(); 183 G4double getProtonSeparationEnergy(); 188 184 189 /// \brief Getter for neutronSeparationEne 185 /// \brief Getter for neutronSeparationEnergy 190 G4double getNeutronSeparationEnergy(); 186 G4double getNeutronSeparationEnergy(); 191 187 192 /// \brief Setter for protonSeparationEner 188 /// \brief Setter for protonSeparationEnergy 193 void setProtonSeparationEnergy(const G4dou 189 void setProtonSeparationEnergy(const G4double s); 194 190 195 /// \brief Setter for protonSeparationEner 191 /// \brief Setter for protonSeparationEnergy 196 void setNeutronSeparationEnergy(const G4do 192 void setNeutronSeparationEnergy(const G4double s); 197 193 198 /// \brief Get the name of the element fro 194 /// \brief Get the name of the element from the atomic number 199 std::string getElementName(const G4int Z); 195 std::string getElementName(const G4int Z); 200 196 201 /// \brief Get the name of an unnamed elem 197 /// \brief Get the name of an unnamed element from the IUPAC convention 202 std::string getIUPACElementName(const G4in 198 std::string getIUPACElementName(const G4int Z); 203 199 204 /// \brief Get the name of the element fro 200 /// \brief Get the name of the element from the atomic number 205 G4int parseElement(std::string pS); 201 G4int parseElement(std::string pS); 206 202 207 /** \brief Parse a IUPAC element name 203 /** \brief Parse a IUPAC element name 208 * 204 * 209 * Note: this function is UGLY. Look at it 205 * Note: this function is UGLY. Look at it at your own peril. 210 * 206 * 211 * \param pS a normalised string (lowercas 207 * \param pS a normalised string (lowercase) 212 * \return the charge number of the nuclid 208 * \return the charge number of the nuclide, or zero on fail 213 */ 209 */ 214 G4int parseIUPACElement(std::string const 210 G4int parseIUPACElement(std::string const &pS); 215 211 216 IsotopicDistribution const &getNaturalIsot 212 IsotopicDistribution const &getNaturalIsotopicDistribution(const G4int Z); 217 213 218 G4int drawRandomNaturalIsotope(const G4int 214 G4int drawRandomNaturalIsotope(const G4int Z); 219 215 220 // Typedefs and pointers for transparent h 216 // Typedefs and pointers for transparent handling of mass functions 221 //typedef G4double (*NuclearMassFn)(const 217 //typedef G4double (*NuclearMassFn)(const G4int, const G4int); 222 typedef G4double (*NuclearMassFn)(const G4 218 typedef G4double (*NuclearMassFn)(const G4int, const G4int, const G4int); 223 typedef G4double (*ParticleMassFn)(const P 219 typedef G4double (*ParticleMassFn)(const ParticleType); 224 /// \brief Static pointer to the mass func 220 /// \brief Static pointer to the mass function for nuclei 225 extern G4ThreadLocal NuclearMassFn getTabl 221 extern G4ThreadLocal NuclearMassFn getTableMass; 226 /// \brief Static pointer to the mass func 222 /// \brief Static pointer to the mass function for particles 227 extern G4ThreadLocal ParticleMassFn getTab 223 extern G4ThreadLocal ParticleMassFn getTableParticleMass; 228 224 229 // Typedefs and pointers for transparent h 225 // Typedefs and pointers for transparent handling of separation energies 230 typedef G4double (*SeparationEnergyFn)(con 226 typedef G4double (*SeparationEnergyFn)(const ParticleType, const G4int, const G4int); 231 /// \brief Static pointer to the separatio 227 /// \brief Static pointer to the separation-energy function 232 extern G4ThreadLocal SeparationEnergyFn ge 228 extern G4ThreadLocal SeparationEnergyFn getSeparationEnergy; 233 229 234 // Typedefs and pointers for transparent h 230 // Typedefs and pointers for transparent handling of Fermi momentum 235 typedef G4double (*FermiMomentumFn)(const 231 typedef G4double (*FermiMomentumFn)(const G4int, const G4int); 236 extern G4ThreadLocal FermiMomentumFn getFe 232 extern G4ThreadLocal FermiMomentumFn getFermiMomentum; 237 233 238 /// \brief Return the constant value of th 234 /// \brief Return the constant value of the Fermi momentum 239 G4double getFermiMomentumConstant(const G4 235 G4double getFermiMomentumConstant(const G4int /*A*/, const G4int /*Z*/); 240 236 241 /** \brief Return the constant value of th 237 /** \brief Return the constant value of the Fermi momentum - special for light 242 * 238 * 243 * This function should always return Phys 239 * This function should always return PhysicalConstants::Pf for heavy 244 * nuclei, and values from the momentumRMS 240 * nuclei, and values from the momentumRMS table for light nuclei. 245 * 241 * 246 * \param A mass number 242 * \param A mass number 247 * \param Z charge number 243 * \param Z charge number 248 */ 244 */ 249 G4double getFermiMomentumConstantLight(con 245 G4double getFermiMomentumConstantLight(const G4int A, const G4int Z); 250 246 251 /** \brief Return the value Fermi momentum 247 /** \brief Return the value Fermi momentum from a fit 252 * 248 * 253 * This function returns a fitted Fermi mo 249 * This function returns a fitted Fermi momentum, based on data from Moniz 254 * et al., Phys. Rev. Lett. 26 (1971) 445. 250 * et al., Phys. Rev. Lett. 26 (1971) 445. The fitted functional form is 255 * \f[ 251 * \f[ 256 * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\ga 252 * p_F(A)=\alpha-\beta\cdot e^{(-A\cdot\gamma)} 257 * \f] 253 * \f] 258 * with \f$\alpha=259.416\f$ MeV/\f$c\f$, 254 * 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$. 255 * and \f$\gamma=9.5157\cdot10^{-2}\f$. 260 * 256 * 261 * \param A mass number 257 * \param A mass number 262 */ 258 */ 263 G4double getFermiMomentumMassDependent(con 259 G4double getFermiMomentumMassDependent(const G4int A, const G4int /*Z*/); 264 260 265 /** \brief Get the value of the r-p correl 261 /** \brief Get the value of the r-p correlation coefficient 266 * 262 * 267 * \param t the type of the particle (Prot 263 * \param t the type of the particle (Proton or Neutron) 268 * \return the value of the r-p correlatio 264 * \return the value of the r-p correlation coefficient 269 */ 265 */ 270 G4double getRPCorrelationCoefficient(const 266 G4double getRPCorrelationCoefficient(const ParticleType t); 271 267 272 /// \brief Get the thickness of the neutro 268 /// \brief Get the thickness of the neutron skin 273 G4double getNeutronSkin(); 269 G4double getNeutronSkin(); 274 270 275 /// \brief Get the size of the neutron hal 271 /// \brief Get the size of the neutron halo 276 G4double getNeutronHalo(); 272 G4double getNeutronHalo(); 277 273 278 /// \brief Get the type of pion 274 /// \brief Get the type of pion 279 ParticleType getPionType(const G4int isosp 275 ParticleType getPionType(const G4int isosp); 280 276 281 /// \brief Get the type of nucleon 277 /// \brief Get the type of nucleon 282 ParticleType getNucleonType(const G4int is 278 ParticleType getNucleonType(const G4int isosp); 283 279 284 /// \brief Get the type of delta 280 /// \brief Get the type of delta 285 ParticleType getDeltaType(const G4int isos 281 ParticleType getDeltaType(const G4int isosp); 286 282 287 /// \brief Get the type of sigma 283 /// \brief Get the type of sigma 288 ParticleType getSigmaType(const G4int isos 284 ParticleType getSigmaType(const G4int isosp); 289 << 285 290 /// \brief Get the type of kaon 286 /// \brief Get the type of kaon 291 ParticleType getKaonType(const G4int isosp 287 ParticleType getKaonType(const G4int isosp); 292 288 293 /// \brief Get the type of antikaon 289 /// \brief Get the type of antikaon 294 ParticleType getAntiKaonType(const G4int i 290 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 291 308 /// \brief Get particle width (in s) 292 /// \brief Get particle width (in s) 309 G4double getWidth(const ParticleType t); 293 G4double getWidth(const ParticleType t); 310 } 294 } 311 } 295 } 312 296 313 #endif 297 #endif 314 298 315 299