radioactivedecay - это пакет Python для расчетов радиоактивного распада. Он поддерживает цепочки распада радионуклидов, метастабильные состояния и разветвления. По умолчанию он использует данные распада из публикации ICRP 107, которая содержит 1252 радионуклида из 97 элементов и данные атомной массы из центра атомной массы.
Код решает аналитически аналитически уравнения дифференциальных уравнений распада с использованием линейных процедур линейной алгебры Numpy и Scipy. Существует также режим высокой численной точности, использующий подпрограммы симпи. Это дает более точные результаты для цепочек распада, содержащих радионуклиды с различиями в порядках между полураспадами.
Это бесплатное в использовании программное обеспечение с открытым исходным кодом. Он был создан для инженеров, техников и исследователей, которые работают с радиоактивностью, и для образования.
radioactivedecay требует Python 3.8+. Установите radioactivedecay из индекса пакета Python с помощью pip :
$ pip install radioactivedecayили из Conda-Forge:
$ conda install -c conda-forge radioactivedecayЛюбая команда попытается установить зависимости (matplotlib, networkx, numpy, pandas, 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} Inventory 2,0 млн. М. Мо-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' ...), Mass ( '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 в течение 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()Эти диаграммы нарисованы с использованием 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). Смотрите теорию Docpage для получения более подробной информации.
Он использует процедуры Numpy и Scipy для стандартных расчетов распада (операции с плавающей запятой с двумя рецептами) и симпи для произвольных численных расчетов точности.
По умолчанию radioactivedecay использует данные распада из публикации ICRP 107 (2008) и атомных данных массовых данных из центра атомной массы (оценки AMDC - AME2020 и Nubase2020).
Repo Datazets содержит записные книжки Jupyter для создания наборов данных распада, которые могут использоваться radioactivedecay , например, ICRP 107.
Repo сравнения содержит некоторые проверки radioactivedecay против Pyne и рентгенологического набора инструментов.
Из базового каталога запуска:
$ python -m unittest discover radioactivedecay - это программное обеспечение с открытым исходным кодом, выпущенное по лицензии MIT. См. Файл лицензии для получения подробной информации.
Данные по умолчанию по умолчанию, используемые radioactivedecay (ICRP-107), являются Copyright 2008 A. Endo и KF Eckerman и распределены по отдельной лицензии. Атомные массовые данные по умолчанию взяты из AMDC (лицензия).
Если вы найдете этот пакет полезным для вашего исследования, рассмотрите возможность ссылаться на статью о radioactivedecay , опубликованном в журнале программного обеспечения с открытым исходным кодом:
Alex Malins & Thom Lemoine, RadioActiveDecay: пакет Python для расчетов радиоактивного распада . Журнал программного обеспечения с открытым исходным кодом, 7 (71), 3318 (2022). Doi: 10.21105/joss.03318.
Участники могут исправить ошибки, добавлять новые функции или выполнять запросы функций. Пожалуйста, откройте проблему, вытягивайте запрос или новую ветку обсуждения в репозитории GitHub.
Пожалуйста, прочитайте рекомендации взноса.