00001 // 00002 // ******************************************************************** 00003 // * License and Disclaimer * 00004 // * * 00005 // * The Geant4 software is copyright of the Copyright Holders of * 00006 // * the Geant4 Collaboration. It is provided under the terms and * 00007 // * conditions of the Geant4 Software License, included in the file * 00008 // * LICENSE and available at http://cern.ch/geant4/license . These * 00009 // * include a list of copyright holders. * 00010 // * * 00011 // * Neither the authors of this software system, nor their employing * 00012 // * institutes,nor the agencies providing financial support for this * 00013 // * work make any representation or warranty, express or implied, * 00014 // * regarding this software system or assume any liability for its * 00015 // * use. Please see the license in the file LICENSE and URL above * 00016 // * for the full disclaimer and the limitation of liability. * 00017 // * * 00018 // * This code implementation is the result of the scientific and * 00019 // * technical work of the GEANT4 collaboration. * 00020 // * By using, copying, modifying or distributing the software (or * 00021 // * any work based on the software) you agree to acknowledge its * 00022 // * use in resulting scientific publications, and indicate your * 00023 // * acceptance of all terms of the Geant4 Software license. * 00024 // ******************************************************************** 00025 // 00026 // $Id$ 00027 // 00028 // ------------------------------------------------------------ 00029 // GEANT 4 class header file 00030 // 00031 // ------------------------------------------------------------ 00032 // Hyper Nuclei properties based on CHIPS model (Mikhail KOSOV) 00033 // Migrate into particles category by H.Kurashige (Sep. 2007) 00034 // 00035 #include "G4PhysicalConstants.hh" 00036 #include "G4SystemOfUnits.hh" 00037 #include "G4HyperNucleiProperties.hh" 00038 #include "G4NucleiProperties.hh" 00039 #include "G4ParticleTable.hh" 00040 00041 00042 G4double G4HyperNucleiProperties::GetNuclearMass(G4int A, G4int Z, G4int L) 00043 { 00044 if (L==0) return G4NucleiProperties::GetNuclearMass(A, Z); 00045 00046 G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); 00047 if (A < 2 || Z < 0 || Z > A-L || L>A ) { 00048 #ifdef G4VERBOSE 00049 if (pTable->GetVerboseLevel()>0) { 00050 G4cout << "G4HyperNucleiProperties::GetNuclearMass: " 00051 << " Wrong values for A = " << A 00052 << " Z = " << Z 00053 << " L = " << L 00054 << G4endl; 00055 } 00056 #endif 00057 return 0.0; 00058 } else if( A==2 ) { 00059 #ifdef G4VERBOSE 00060 if (pTable->GetVerboseLevel()>0) { 00061 G4cout << "G4HyperNucleiProperties::GetNuclearMass: " 00062 << " No boud state for A = " << A 00063 << " Z = " << Z 00064 << " L = " << L 00065 << G4endl; 00066 } 00067 #endif 00068 return 0.0; 00069 } 00070 00071 00072 G4ParticleDefinition* lambda = pTable->FindParticle("lambda"); 00073 if (lambda ==0) { 00074 #ifdef G4VERBOSE 00075 if (pTable->GetVerboseLevel()>0) { 00076 G4cout << "G4HyperNucleiProperties::GetNuclearMass: " 00077 << " Lambda is not defined " << G4endl; 00078 } 00079 #endif 00080 return 0.0; 00081 } 00082 const G4double mL= lambda->GetPDGMass(); // mLambda 00083 00084 static const G4double b7=25.*MeV; 00085 static const G4double b8=10.5; // Slope 00086 static const G4double a2=0.13*MeV; // BindingEnergy for d+Lambda(MeV) 00087 static const G4double a3=2.2*MeV; // BindingEnergy for (t/He3)+Lamb(MeV) 00088 static const G4double eps =0.0001*MeV; // security value (MeV) 00089 00090 G4double mass = G4NucleiProperties::GetNuclearMass(A-L, Z); 00091 // A non-"strange" nucleus 00092 G4double bs=0.; 00093 if (A-L ==2) bs=a2; // for nnL,npL,ppL 00094 else if(A-L ==3) bs=a3; // for 3nL,2npL,n2pL,3pL 00095 else if(A-L >3) bs=b7*std::exp(-b8/(A-L+1.)); 00096 mass += L*(mL-bs) + eps; 00097 00098 return mass; 00099 } 00100 00101 00102 G4double G4HyperNucleiProperties::GetAtomicMass(G4int A, G4int Z, G4int L) 00103 { 00104 if (A < 1 || Z < 0 || Z > A-L || L > A || L <0 ) { 00105 #ifdef G4VERBOSE 00106 if (G4ParticleTable::GetParticleTable()->GetVerboseLevel()>0) { 00107 G4cout << "G4HyperNucleiProperties::GetAtomicMass: " 00108 << " Wrong values for A = " << A 00109 << " Z = " << Z 00110 << " L = " << L << G4endl; 00111 } 00112 #endif 00113 return 0.0; 00114 00115 } else { 00116 G4double nuclearMass = GetNuclearMass(A, Z, L); 00117 return nuclearMass + Z*electron_mass_c2 00118 - 1.433e-5*MeV*std::pow(G4double(Z),2.39); 00119 } 00120 } 00121