Skip to main content

用于放射性衰变建模的 Python 包,支持 1252 种放射性核素、衰变链、分支和亚稳态。

项目描述

放射性衰变标志

派皮 康达 蟒蛇版本 最新文档 测试 测试覆盖率 代码风格:黑色 DOI 下载

radioactivedecay是一个用于放射性衰变计算的 Python 包。它支持放射性核素、亚稳态和分支衰变的衰变链。默认情况下,它使用来自 ICRP 出版物 107 的衰变数据,其中包含 97 种元素的 1252 种放射性核素,以及来自原子质量数据中心的原子质量数据。

该代码使用 NumPy 和 SciPy 线性代数例程解析地求解放射性衰变微分方程。还有一种采用 SymPy 例程的高精度数值计算模式。这为含有放射性核素的衰变链提供了更准确的结果,半衰期之间存在数量级差异。

这是免费使用的开源软件。它是为从事放射性工作的工程师、技术人员和研究人员以及教育用途而创建的。

安装

radioactivedecay需要 Python 3.6+。使用 以下命令radioactivedecayPython 包索引安装pip

$ pip install radioactivedecay

或来自conda-forge

$ conda install -c conda-forge radioactivedecay

如果环境中不存在依赖项(Matplotlib、NetworkX、NumPy、SciPy、Setuptools 和 SymPy),任何一个命令都将尝试安装它们。

用法

衰减计算

创建一个Inventory放射性核素并将其衰变如下:

>>> import radioactivedecay as rd
>>> Mo99_t0 = rd.Inventory({'Mo-99': 2.0}, 'Bq')
>>> Mo99_t1 = Mo99_t0.decay(20.0, 'h')
>>> Mo99_t1.activities('Bq')
{'Mo-99': 1.6207863893776937, 'Ru-99': 0.0,
 'Tc-99': 9.05304236308454e-09, 'Tc-99m': 1.3719829376710406}

2.0 Bq的InventoryMo-99 衰变 20 小时,产生放射性后代 Tc-99m 和 Tc-99,以及稳定的核素 Ru-99。

我们提供'h'作为参数来decay()指定衰减时间段以小时为单位。支持的时间单位包括'μs', 'ms', 's', 'm', 'h',等。注意如果没有提供单位,秒 ( ) 是'd'默认'y'值。's'decay()

用于cumulative_decays()计算在衰变时间段内衰变的每个放射性核素的原子总数:

>>> Mo99_t0.cumulative_decays(20.0, 'h')
{'Mo-99': 129870.3165339939, 'Tc-99m': 71074.31925850797,
'Tc-99': 0.0002724635511147602}

放射性核素可以用四种等效方式指定radioactivedecay:核素串的三种变体或通过 规范标识。例如,以下是指定222 Rn 和 192n Ir 的等效方法:

  • 'Rn-222', 'Rn222', '222Rn', 862220000,
  • 'Ir-192n', 'Ir192n', '192nIr', 771920002.

可以通过向构造函数提供活性 ( 'Bq', 'Ci', 'dpm'...)、质量 ( 'g', 'kg'...)、摩尔 ( 'mol', 'kmol'...) 单位或原子核数 ( 'num') 来创建库存Inventory()。使用activities()masses()moles()numbers()activity_fractions()和方法获取不同格式的清单内容mass_fractions()mole_fractions()

>>> H3_t0 = rd.Inventory({'H-3': 3.0}, 'g')
>>> H3_t1 = H3_t0.decay(12.32, 'y')
>>> H3_t1.masses('g')
{'H-3': 1.5, 'He-3': 1.4999900734297729}
>>> H3_t1.mass_fractions()
{'H-3': 0.5000016544338455, 'He-3': 0.4999983455661545}

>>> C14_t0 = rd.Inventory({'C-14': 3.2E24}, 'num')
>>> C14_t1 = C14_t0.decay(3000, 'y')
>>> C14_t1.moles('mol')
{'C-14': 3.6894551567795797, 'N-14': 1.6242698581767292}
>>> C14_t1.mole_fractions()
{'C-14': 0.6943255713073281, 'N-14': 0.3056744286926719}

绘制衰减图

使用该plot()方法绘制库存随时间衰减的图表:

>>> Mo99_t0.plot(20, 'd', yunits='Bq')
Mo-99 衰减图

该图显示了 Mo-99 在 20 天内的衰变,导致 Tc-99m 向内生长和微量的 Tc-99。Ru-99 的活性严格为零,因为它是衰变链末端的稳定核素。图表是使用 Matplotlib 绘制的。

获取衰减数据

该类Nuclide可用于获取单个放射性核素的衰变信息,例如 Rn-222:

>>> nuc = rd.Nuclide('Rn-222')
>>> nuc.half_life('s')
330350.4
>>> nuc.half_life('readable')
'3.8235 d'
>>> nuc.progeny()
['Po-218']
>>> nuc.branching_fractions()
[1.0]
>>> nuc.decay_modes()
['α']
>>> nuc.Z  # proton number
86
>>> nuc.A  # nucleon number
222
>>> nuc.atomic_mass  # atomic mass in g/mol
222.01757601699998

有类似的获取衰减数据的清单方法:

>>> Mo99_t1.half_lives('readable')
{'Mo-99': '65.94 h', 'Ru-99': 'stable', 'Tc-99': '0.2111 My', 'Tc-99m': '6.015 h'}
>>> Mo99_t1.progeny()
{'Mo-99': ['Tc-99m', 'Tc-99'], 'Ru-99': [], 'Tc-99': ['Ru-99'], 'Tc-99m': ['Tc-99', 'Ru-99']}
>>> Mo99_t1.branching_fractions()
{'Mo-99': [0.8773, 0.1227], 'Ru-99': [], 'Tc-99': [1.0], 'Tc-99m': [0.99996, 3.7e-05]}
>>> Mo99_t1.decay_modes()
{'Mo-99': ['β-', 'β-'], 'Ru-99': [], 'Tc-99': ['β-'], 'Tc-99m': ['IT', 'β-']}

衰减链图

该类Nuclide包括一个plot()绘制衰减链图的方法:

>>> nuc = rd.Nuclide('Mo-99')
>>> nuc.plot()
Mo-99 衰变链

这些图表是使用 NetworkX 和 Matplotlib 绘制的。

高数值精度衰减计算

radioactivedecay包括一个InventoryHP用于高精度数值计算的类。此类可以为包含长寿命和短寿命放射性核素的链提供更可靠的衰变计算结果:

>>> U238_t0 = rd.InventoryHP({'U-238': 1.0})
>>> U238_t1 = U238_t0.decay(10.0, 'd')
>>> U238_t1.activities()
{'At-218': 1.4511675857141352e-25,
 'Bi-210': 1.8093327888942224e-26,
 'Bi-214': 7.09819414496093e-22,
 'Hg-206': 1.9873081129046843e-33,
 'Pa-234': 0.00038581180879502017,
 'Pa-234m': 0.24992285949158477,
 'Pb-206': 0.0,
 'Pb-210': 1.0508864357335218e-25,
 'Pb-214': 7.163682655782086e-22,
 'Po-210': 1.171277829871092e-28,
 'Po-214': 7.096704966148592e-22,
 'Po-218': 7.255923469955255e-22,
 'Ra-226': 2.6127168262000313e-21,
 'Rn-218': 1.4511671865210924e-28,
 'Rn-222': 7.266530698712501e-22,
 'Th-230': 8.690585458641225e-16,
 'Th-234': 0.2499481473619856,
 'Tl-206': 2.579902288672889e-32,
 'Tl-210': 1.4897029111914831e-25,
 'U-234': 1.0119788393651999e-08,
 'U-238': 0.9999999999957525}

放射性衰变的工作原理

radioactivedecay使用线性代数运算计算放射性衰变微分方程的解析解。它实现了本文中描述的方法: M Amaku, PR Pascholati & VR Vanin, Comp。物理。通讯。181, 21-23 (2010)。有关更多详细信息,请参阅 理论文档页面

它使用 NumPy 和 SciPy 例程进行标准衰减计算(双精度浮点运算),使用 SymPy 进行任意数值精度计算。

默认情况下,使用来自ICRP Publication 107 (2008)radioactivedecay的衰变数据 和来自原子质量数据中心的原子质量数据 (AMDC - AME2020 和 Nubase2020 评估)。

datasets reporadioactivedecay包含Jupyter Notebooks,用于创建可供 ICRP 107使用的衰减数据集。

比较 repo 包含radioactivedecayPyNERadiological Toolbox的一些检查。

测试

从基本目录运行:

$ python -m unittest discover

执照

radioactivedecay是在 MIT 许可下发布的开源软件。有关详细信息,请参阅许可证 文件。

(ICRP-107)使用的默认衰减数据radioactivedecay版权所有 2008 A. Endo 和 KF Eckerman,并根据单独的 许可分发。默认原子质量数据来自 AMDC(许可证)。

引文

如果您发现此软件包对您的研究有用,请考虑引用radioactivedecay发表在《 开源软件杂志》上的论文:

Alex Malins 和 Thom Lemoine,radiativedecay:用于放射性衰变计算的 Python 包。开源软件杂志,7 (71), 3318 (2022)。DOI: 10.21105/joss.03318

贡献

欢迎贡献者修复错误、添加新功能或提出功能请求。请在GitHub 存储库中打开一个问题、拉取请求或新的讨论线程 。

请阅读 贡献指南