Nuclear Properties#
pynucastro gets basic nuclear data from the Nubase evaluation (currently the Nubase2020 data). This provides the mass excesses, \(\Delta m\), and spins. From this, we compute the binding energy, \(B\), and mass of the nucleus, \(m\) as:
where \(m_u\) is the atomic mass unit and \(m_n\) is the neutron mass, both taken from the CODATA physical constants database. \(m_H\) is the mass of \({}^{1}\mathrm{H}\), which is computed from the mass excess of \({}^{1}\mathrm{H}\).
Binding energies are also computed and tablulated in the AME mass evaluation (see AME2020 mass table]. But note that the Nubase evaluation seems to more closely follow the “rounded” version of the table AME2020 rounded mass table. The rounding procedure is discussed in Table I on the AME 2020 paper II (also see the Nubase2020 paper, Table I).
[1]:
from pynucastro import Nucleus
Nucleus
#
The Nucleus
class manages all of the properties of a nucleus. We create a Nucleus
simply by giving the name of the isotope
[2]:
he4 = Nucleus("he4")
From this we can access the member data:
Z
,N
,A
: the atomic number, neutron number, and atomic massmass
: the mass of the nucleus in MeVdm
: the mass excess of the nucleus in MeVnucbind
: the nuclear binding energy of the nucleus in MeV / nucleonA_nuc
: the mass number of the nucleus (mass
/ atomic mass unit)tau
: the halflife of the nucleus (in seconds)
[3]:
he4.Z, he4.A
[3]:
(2, 4)
[4]:
he4.nucbind
[4]:
7.073915614499924
We can also get the partition functions of the nucleus, if it exists. The data we use mostly provides these for the heavy nuclei.
[5]:
ni56 = Nucleus("ni56")
ni56.partition_function.eval(4.e9)
[5]:
1.002103
[6]:
ni56.tau
[6]:
524880.0
Nucleus
math#
We can also create a Nucleus
via addition and subtraction operations.
[7]:
c12 = Nucleus("c12")
p = Nucleus("p")
n13 = c12 + p
n13
[7]:
N13
[8]:
n13.mass
[8]:
12114.76881146
[9]:
c12 - p
[9]:
B11
Exploring properties#
Let’s look at some nuclei and look at their mass excess, mass, and binding energies
[10]:
p = Nucleus("p")
n = Nucleus("n")
c12 = Nucleus("c12")
ne22 = Nucleus("ne22")
ti43 = Nucleus("ti43")
fe56 = Nucleus("fe56")
[11]:
for nuc in [p, n, c12, ne22, ti43, fe56]:
print(f"{str(nuc):6} {nuc.dm:15.8} {nuc.mass:15.8f} {nuc.nucbind:15.8f}")
p 7.2889711 938.78307348 0.00000000
n 8.0713181 939.56542052 0.00000000
C12 0.0 11177.92922904 7.68014458
Ne22 -8.024716 20484.84553724 8.08046563
Ti43 -29.316 40024.93040406 8.35281497
Fe56 -60.60716 52103.06257552 8.79035626
We see that the binding energy for protons and neutrons are zero, as expected.
For \({}^{12}\mathrm{C}\) the binding energy compares well with the tablulated version from the rounded AME 2020 of 7680.145
.
For \({}^{22}\mathrm{Ne}\) the binding energy compares well with the tablulated version from the rounded AME 2020 of 8080.466
.
For \({}^{43}\mathrm{Ti}\) the binding energy compares well with the tablulated version from the rounded AME 2020 of 8352.81
.
For \({}^{56}\mathrm{Fe}\) the binding energy compares well with the tablulated version from the rounded AME 2020 of 8790.356
.
[12]:
from pynucastro.constants import constants
We also see that the mass of \({}^{12}\mathrm{C}\) agrees with the atomic mass unit from the CODATA compilation:
[13]:
c12.mass / 12 - constants.m_u_MeV
[13]:
1.1368683772161603e-13