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