Skip to main content

A Python package for radioactive decay calculations that supports 1252 radionuclides, including full decay chains and branching.

Project description

radioactivedecay

PyPI Python Version Latest Documentation Test Coverage

radioactivedecay is a Python package for radioactive decay calculations. It supports full decay chains, including branching decays and metastable states. By default it uses the ICRP Publication 107 radioactive decay data, which covers 1252 radionuclides.

Installation

radioactivedecay requires Python 3.6+, NumPy and SciPy.

The easiest way to install radioactivedecay is via the Python Package Index using pip:

$ pip install radioactivedecay

Usage

Example 1

radioactivedecay is based around inventories of radionuclides. These are created as follows:

>>> import radioactivedecay as rd
>>> tritium_t0 = rd.Inventory({'H-3': 10.0})
>>> tritium_t0.contents
{'H-3': 10.0}

Here we initialized an inventory of 10 Bq of H-3 (tritium) by supplying a Python dictionary to Inventory(). Radionuclides can be specified in three equivalent ways:

  • e.g. 'Rn-222', 'Rn222' or '222Rn',
  • or 'Ir-192n', 'Ir192n' or '192nIr' (for the second metastable state of Ir-192).

To perform a radioactive decay of an inventory:

>>> tritium_t1 = tritium_t0.decay(12.32, 'y')
>>> tritium_t1.contents
{'H-3': 5.0}

The 10 Bq of H-3 was decayed for one half-life (12.32 years), yielding 5 Bq of H-3. Note the second argument to the decay() method is the decay time unit. Various units are supported, including 's', 'm', 'h', 'd' and 'y'.

Note also that radioactivedecay does not require specifying activity units. Units out are the same as units in, so this calculation could have been 10 Ci of H-3 to 5 Ci, or 10 dpm to 5 dpm, 10 kBq to 5 kBq, etc.

Example 2

Inventories can contain more than one radionuclide. In this example we start with an inventory that initially contains Tc-99m and I-123. Decaying this inventory demonstrates the ingrowth of radioactive progeny via decay chains. For a decay period of 20 hours:

>>> mix = rd.Inventory({'Tc-99m': 2.3, 'I-123': 5.8})
>>> mix.decay(20.0, 'h').contents
{'I-123': 2.040459244534774,
 'Tc-99': 6.729944738772211e-09,
 'Tc-99m': 0.22950748010063513,
 'Te-123': 9.485166535243877e-18,
 'Te-123m': 7.721174031572363e-07}

Tc-99 is the progeny of Tc-99m, and Te-123 and Te-123m are progeny of I-123.

Example 3

radioactivedecay includes a Radionuclide class. It can be used to fetch the half-lives of radionuclides:

>>> rd.Radionuclide('Rn-222').half_life('d')
3.8235
>>> rd.Radionuclide('C-14').half_life('y')
5700.0

The half-lives of Rn-222 and C-14 are 3.8235 days and 5700 years, respectively.

How it works

By default radioactivedecay uses decay data from ICRP Publication 107 (2008).

It calculates an analytical solution to the decay chain differential equations using matrix and vector multiplications. It implements the method described in this paper: M Amaku, PR Pascholati & VR Vanin, Comp. Phys. Comm. 181, 21-23 (2010).

It calls NumPy and SciPy for the matrix operations.

The notebooks folder in the GitHub repository contains some Jupyter Notebooks for creating the ICRP 107 decay dataset for radioactivedecay, and cross-checks against PyNE and Radiological Toolbox.

Limitations

At present radioactivedecay has the following limitations:

  • It does not model neutronics, so cannot calculate radioactivity produced from neutron-nuclear reactions inducing radioactivity or fission.
  • It cannot model external sources of radioactivity input to or removal from an inventory over time.
  • radioactivedecay uses double precision floating point numbers for calculations. Numerical precision issues can arise for decay chains where the half-life of the parent is many orders of magnitude smaller than the half-life of one of the progeny. Similarly there can be precision issues when two radionuclides in a chain have very similar (or identical) half-lives. Note that this latter case does not appear to apply to radionuclides within ICRP 107 dataset, however. If you need greater numerical precision for your decay calculations, you could investigate using the batemaneq package which supports arbitrary precision calculations.
  • Care is needed when decaying backwards in time, i.e. supplying a negative argument to decay(), as this can also result in numerical instabilities and nonsensical results.

There are also some limitations associated with the ICRP 107 decay dataset:

  • ICRP 107 does not contain data on branching fractions for radionuclides produced from spontaneous fission decays. Thus decay() calls do not calculate the spontaneous fission progeny.
  • Decay data is quoted in ICRP 107 with up to 5 significant figures of precision. The results of decay calculations will therefore not be more precise than this level of precision.
  • Uncertainties are not quoted for the radioactive decay data in ICRP 107. Uncertainties will vary substantially between radionuclides, e.g. depending on how well each radionuclide has been researched in the past. In many cases these uncertainties more significant for the results of decay calculations than the previous point about the quoted precision of the ICRP 107 decay data.
  • There are a few instances where minor decay pathways were not included in ICRP 107. Examples include the decays At-219-> Rn-219 (β ~3%), Es-250 -> Bk-246 (α ~1.5%), and U-228 -> Pa-228 (ε ~2.5%). For more details see the following references on the creation of the ICRP 107 dataset: JAERI 1347 & JAEA-Data/Code 2007-021.

Acknowledgements

Special thanks to

for their help and support to this project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

radioactivedecay-0.0.7.tar.gz (101.0 kB view details)

Uploaded Source

Built Distribution

radioactivedecay-0.0.7-py3-none-any.whl (98.6 kB view details)

Uploaded Python 3

File details

Details for the file radioactivedecay-0.0.7.tar.gz.

File metadata

  • Download URL: radioactivedecay-0.0.7.tar.gz
  • Upload date:
  • Size: 101.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.2

File hashes

Hashes for radioactivedecay-0.0.7.tar.gz
Algorithm Hash digest
SHA256 21ff310aeee3acdb5e7695e3ec52d3e2e1600ed7588f9db531837dfe7d5e3b70
MD5 72a38eccdf1b526e04a6ca3ddc612345
BLAKE2b-256 50025430fc7d016931cadc55a49bc30485c0d52244ce399640a97e92db5803d2

See more details on using hashes here.

File details

Details for the file radioactivedecay-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: radioactivedecay-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 98.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.2

File hashes

Hashes for radioactivedecay-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 2b1ee1916667348c79da4836b33df9a775a672126dea396e6a92e7010b1f8af5
MD5 b72b5e18d6c3c79642bed196d6951574
BLAKE2b-256 07ab6238a1cf34f800af7d205816421f2f53bf38b119801322a5356646186ac2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page