Isotopes

Isotope

class apav.core.isotopic.Isotope(ion, number, mass, abundance)[source]

A single isotope

This class defines a single isotopic species, defined by composition, charge, mass, and absolute abundance. These values must be provided manually, see IsotopeSeries for calculating isotope distributions (which uses this class in its calculations). This class may be used for defining custom/modified isotopes for IsotopeSeries.

>>> carbon_12 = Isotope(Ion("C", 1), 12, 6, 98.93)
Parameters
  • ion (Ion) – Ion composition

  • number (int) – atomic number

  • mass (float) – atomic mass

  • abundance (float) – absolute isotopic abundance

property abundance: float

Get the absolute abundance of the isotope

Return type

float

property charge: int

Get the cumulative charge of the isotope

Return type

int

property ion: apav.core.isotopic.Ion

Get the Ion (Composition and charge)

Return type

Ion

property mass: float

Get the atomic mass of the isotope

Return type

float

property number: int

Get the atomic number of the isotope

Return type

int

IsotopeSeries

class apav.core.isotopic.IsotopeSeries(*args, isotopes=None, threshold=0.01)[source]

Compute isotopic distributions

This class computes isotopic distributions of arbitrary elemental or molecular compositions. The only physical requirement is that the charge is not 0.

This computation can be constructed by providing either the Ion instance directly, or by providing a string of the composition and an integer of the charge. i.e.:

>>> ion1 = IsotopeSeries(Ion("GdCuO2", 3))
>>> ion2 = IsotopeSeries("GdCuO2", 3)
>>> ion1 == ion2

These are equivalent. Complex compositions can sometimes produce very large number of isotopologues with very small abundances that are quite below the detectability of most atom probe experiments. As a result the computation is thresholded to only display isotopologues above this threshold. As a result, the sum of the absolute abundances from

>>> IsotopeSeries.isotopes

is not guaranteed to be unity. If this is important, the threshold can be set to 0 to get all isotopologues, or consider working with relative abundances instead.

This computation works for both elemental ions as well as molecular ions, i.e.

>>> IsotopeSeries("CuO2", 2)
>>> IsotopeSeries("Cu", 3)

Are both valid signatures.

The calculation used is derived from the following work:

Margrave, J. L., & Polansky, R. B. (1962). Relative abundance calculations for isotopic molecular species. Journal of Chemical Education, 39(7), 335–337. https://doi.org/10.1021/ed039p335

Parameters
  • *args

    Either Ion type, or composition (str) and charge (int)

  • isotopes (Optional[List[Isotope]]) – “None” to calculate, otherwise must be provided explicitly

property abundances: numpy.ndarray

Get an array of the abundances of each isotope

Return type

ndarray

property charge: int

Get the cumulative charge of the ion

Return type

int

property ion: apav.core.isotopic.Ion

Get the Ion (Composition and charge)

Return type

Ion

property isotopes: List[apav.core.isotopic.Isotope]

Get an array of all isotopes

Return type

List[Isotope]

property masses: numpy.ndarray

Get an array of the mass/charge ratios of each isotope

Return type

ndarray

property threshold: numbers.Real

Get the threshold used for computing the isotopes

Return type

Real