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 // G4NucleiPropertiesTheoreticalTable 26 // G4NucleiPropertiesTheoreticalTable 27 // 27 // 28 // Author: Tatsumi Koi, SLAC 28 // Author: Tatsumi Koi, SLAC 29 // ------------------------------------------- 29 // -------------------------------------------------------------------- 30 30 31 #include "G4NucleiPropertiesTheoreticalTable.h 31 #include "G4NucleiPropertiesTheoreticalTable.hh" 32 #include "G4PhysicalConstants.hh" 32 #include "G4PhysicalConstants.hh" 33 #include "G4SystemOfUnits.hh" 33 #include "G4SystemOfUnits.hh" 34 34 35 // Determine the table index for a Nuclide wit 35 // Determine the table index for a Nuclide with Z protons and A nucleons 36 // 36 // 37 G4int G4NucleiPropertiesTheoreticalTable::GetI << 37 G4int G4NucleiPropertiesTheoreticalTable::GetIndex(G4int Z, G4int A) 38 { 38 { 39 if (A > 339) { << 40 G4Exception("G4NucleiPropertiesTheoretical << 41 "Nucleon number larger than 33 << 42 } << 43 else if (A < 16) { << 44 G4Exception("G4NucleiPropertiesTheoretical << 45 " Nucleon number smaller than << 46 } << 47 else if (Z > 136) { << 48 G4Exception("G4NucleiPropertiesTheoretical << 49 "Proton number larger than 136 << 50 } << 51 else if (Z < 8) { << 52 G4Exception("G4NucleiPropertiesTheoretical << 53 "Proton number smaller than 8" << 54 } << 55 else if (Z > A) { << 56 G4Exception("G4NucleiPropertiesTheoretical << 57 "Nucleon number smaller than Z << 58 } << 59 39 60 for (G4int i = shortTable[Z - 8]; i < shortT << 40 if(A>339) { 61 if (indexArray[1][i] == A) return i; << 41 G4Exception("G4NucleiPropertiesTheoreticalTable::GetIndex", >> 42 "PART202", >> 43 EventMustBeAborted,"Nucleon number larger than 339"); >> 44 } else if(A<16) { >> 45 G4Exception("G4NucleiPropertiesTheoreticalTable::GetIndex", >> 46 "PART202", >> 47 EventMustBeAborted," Nucleon number smaller than 16"); >> 48 } else if(Z>136) { >> 49 G4Exception("G4NucleiPropertiesTheoreticalTable::GetIndex", >> 50 "PART202", >> 51 EventMustBeAborted, "Proton number larger than 136"); >> 52 } else if(Z<8) { >> 53 G4Exception("G4NucleiPropertiesTheoreticalTable::GetIndex", >> 54 "PART202", >> 55 EventMustBeAborted, "Proton number smaller than 8"); >> 56 } else if(Z>A) { >> 57 G4Exception("G4NucleiPropertiesTheoreticalTable::GetIndex", >> 58 "PART202", >> 59 EventMustBeAborted, "Nucleon number smaller than Z"); >> 60 } >> 61 >> 62 for (G4int i = shortTable[Z-8]; i < shortTable[Z-8+1]; ++i ) >> 63 { >> 64 if (indexArray[1][i] == A ) return i; 62 } 65 } 63 << 66 64 return -1; 67 return -1; 65 } 68 } 66 69 67 G4double G4NucleiPropertiesTheoreticalTable::G << 70 G4double G4NucleiPropertiesTheoreticalTable::GetMassExcess(G4int Z, G4int A) 68 { 71 { 69 G4int i = GetIndex(Z, A); << 72 G4int i=GetIndex(Z, A); 70 if (i >= 0) { << 73 if (i >= 0) 71 return AtomicMassExcess[i] * MeV; << 74 { >> 75 return AtomicMassExcess[i]*MeV; >> 76 } >> 77 else >> 78 { >> 79 return 0.0; 72 } 80 } 73 << 74 return 0.0; << 75 } 81 } 76 82 77 G4double G4NucleiPropertiesTheoreticalTable::G 83 G4double G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(G4int Z, G4int A) 78 { 84 { 79 G4int i = GetIndex(Z, A); << 85 G4int i=GetIndex(Z, A); 80 if (i >= 0) { << 86 if (i >= 0) 81 const G4double Mh = 7.289034 * MeV; // hy << 87 { 82 const G4double Mn = 8.071431 * MeV; // ne << 88 const G4double Mh = 7.289034*MeV; // hydrogen atom mass excess 83 return G4double(Z) * Mh + G4double(A - Z) << 89 const G4double Mn = 8.071431*MeV; // neutron mass excess >> 90 return G4double(Z)*Mh + G4double(A-Z)*Mn - AtomicMassExcess[i]*MeV; >> 91 } >> 92 else >> 93 { >> 94 return 0.0; 84 } 95 } 85 << 86 return 0.0; << 87 } 96 } 88 97 89 G4double G4NucleiPropertiesTheoreticalTable::G << 98 G4double G4NucleiPropertiesTheoreticalTable::GetAtomicMass(G4int Z, G4int A) 90 { 99 { 91 G4int i = GetIndex(Z, A); << 100 G4int i=GetIndex(Z, A); 92 if (i >= 0) { << 101 if (i >= 0) 93 return AtomicMassExcess[i] * MeV + A * amu << 102 { >> 103 return AtomicMassExcess[i]*MeV + A*amu_c2; >> 104 } >> 105 else >> 106 { >> 107 return 0.0; 94 } 108 } 95 << 96 return 0.0; << 97 } 109 } 98 110 99 G4double G4NucleiPropertiesTheoreticalTable::G << 111 G4double G4NucleiPropertiesTheoreticalTable::GetNuclearMass(G4int Z, G4int A) 100 { 112 { 101 G4int i = GetIndex(Z, A); << 113 G4int i=GetIndex(Z, A); 102 if (i >= 0) { << 114 if (i >= 0) 103 return GetAtomicMass(Z, A) - G4double(Z) * << 115 { >> 116 return GetAtomicMass(Z,A) >> 117 - G4double(Z)*electron_mass_c2 + ElectronicBindingEnergy(Z); >> 118 } >> 119 else >> 120 { >> 121 return 0.0; 104 } 122 } 105 << 106 return 0.0; << 107 } 123 } 108 124 109 G4double G4NucleiPropertiesTheoreticalTable::E 125 G4double G4NucleiPropertiesTheoreticalTable::ElectronicBindingEnergy(G4int Z) 110 { 126 { 111 const G4double ael = 1.433e-5 * MeV; // ele << 127 const G4double ael = 1.433e-5*MeV; // electronic-binding constant 112 return ael * std::pow(G4double(Z), 2.39); << 128 return ael*std::pow(G4double(Z),2.39); 113 } 129 } 114 130 115 G4bool G4NucleiPropertiesTheoreticalTable::IsI 131 G4bool G4NucleiPropertiesTheoreticalTable::IsInTable(G4int Z, G4int A) 116 { 132 { 117 return (Z <= A && A >= 16 && A <= 339 && Z < << 133 return (Z <= A && A >= 16 && A <= 339 && Z <= 136 >> 134 && Z >= 8 && GetIndex(Z, A) >= 0); 118 } 135 } 119 136