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