G4HyperNucleiProperties.cc

Go to the documentation of this file.
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 

Generated on Mon May 27 17:48:33 2013 for Geant4 by  doxygen 1.4.7