跳转到主要内容

Srim 通过 Python 自动化任务

项目描述

srim heatmap

所有问题和贡献都应该在 Gitlab 上完成。Github 仅用作可见性的镜像

pysrim:SRIM 计算的自动化、分析和绘图

pysrim 是一个 Python 包,旨在封装并扩展 SRIM,这是一个流行的模拟离子穿过材料的工具。SRIM 存在很多痛点,这个包旨在解决这些问题。包括与所有操作系统的兼容性、SRIM 计算的自动化和崩溃恢复、解析所有输出文件,以及出版质量的绘图。

现在有一个用于运行 pysrim 和 SRIM 的 docker 镜像 costrouc/pysrim无需设置,无需显示,因此适用于服务器。如果您想尝试它,请运行以下简短命令(显然需要 docker)。所有输出文件都将存储在 /tmp/output 中(例如)。基准测试显示 docker 容器大约快 50-60%。我相信这是因为使用了 xvfb

docker run -v $PWD/examples/docker:/opt/pysrim/ \
           -v /tmp/output:/tmp/output \
           -it costrouc/pysrim sh -c "xvfb-run -a python3.6 /opt/pysrim/ni.py"
ls /tmp/output
最新版本 latest release
latest release
包状态 status
许可 license
构建状态 gitlab pipeline status
覆盖率 coverage
Conda conda downloads
文档 readthedocs documentation
出版物
DOI 存档 DOI

文档

链接到 readthedocs 上的文档

功能

自动化运行 SRIM 和 TRIM 在所有操作系统上

虽然TRIM是一个很好的代码,但在自动化方面有许多缺点。编写自己的TRIM.IN输入文件非常繁琐,而构建TRIM.IN的GUI在意外时刻会崩溃。每个人都遇到过的一个崩溃是浮点文本字段永远不能为空。TRIM还有一个趋势会崩溃,因为它将所有级联存储在内存中。这意味着对于包含超过1,000个离子的完整级联的大型运行,它将耗尽内存。pysrim通过提供对输入文件的简单API包装器(支持所有功能),在所有操作系统上运行的能力(使用wine在Linux和OSX上),以及允许批量运行计算(见这个笔记本示例)来解决这个问题。

以下是一个使用pysrim运行TRIM计算的好例子。注意,/tmp/srim是SRIM可执行文件目录的路径(SRIM.exe应位于此目录)。pysrim将添加所有必要的输入文件。如果您运行成功,则将弹出SRIM窗口并开始计算。

from srim import Ion, Layer, Target, TRIM

# Construct a 3MeV Nickel ion
ion = Ion('Ni', energy=3.0e6)

# Construct a layer of nick 20um thick with a displacement energy of 30 eV
layer = Layer({
        'Ni': {
            'stoich': 1.0,
            'E_d': 30.0,
            'lattice': 0.0,
            'surface': 3.0
        }}, density=8.9, width=20000.0)

# Construct a target of a single layer of Nickel
target = Target([layer])

# Initialize a TRIM calculation with given target and ion for 25 ions, quick calculation
trim = TRIM(target, ion, number_ions=25, calculation=1)

# Specify the directory of SRIM.exe
# For windows users the path will include C://...
srim_executable_directory = '/tmp/srim'

# takes about 10 seconds on my laptop
results = trim.run(srim_executable_directory)
# If all went successfull you should have seen a TRIM window popup and run 25 ions!
# results is `srim.output.Results` and contains all output files parsed

有关所有可用选项,请参阅文档

将SRIM输出文件复制到目录

在完成SRIM计算后,运行copy_output_files将所有输出文件移动到您喜欢的目录。

from srim import TRIM

TRIM.copy_output_files('/tmp/srim', '/home/costrouc/scratch/srim')

将SRIM输出作为numpy数组后处理

运行TRIM计算最难的部分是分析输出文件。pysrim附带了对IONIZ.txtVACANCY.txtNOVAC.txtE2RECOIL.txtPHONON.txtRANGE.txtCOLLISON.txt的解析器。COLLISON.txt文件可能相当大,因此Collision解析器使用缓冲读取器,可以处理任何大小的文件。另外,一个名为srim.output.Results的类将处理目录中的所有输出文件,并提供每个解析输出文件的字典。pysrim附带一些有用的绘图工具,例如绘制DPA与深度的关系图。然而,pysrim最强大的功能是所有文本文件都作为numpy数组公开。下面的示例显示了如何使用简单的数学和numpy绘制DPA。这使用户能够无缝地使用TRIM并进行分析。

from srim.output import Phonons, Ioniz

def plot_damage_energy(folder, ax):
    phon = Phonons(folder)
    dx = max(phon.depth) / 100.0
    energy_damage = (phon.ions + phon.recoils) * dx
    ax.plot(phon.depth, energy_damage / phon.num_ions, label='{}'.format(folder))
    return sum(energy_damage)

def plot_ionization(folder, ax):
    ioniz = Ioniz(folder)
    dx = max(ioniz.depth) / 100.0
    ax.plot(ioniz.depth, ioniz.ions, label='Ionization from Ions')
    ax.plot(ioniz.depth, ioniz.recoils, label='Ionization from Recoils')

folders设置为SRIM输出目录的列表。见分析中的详细示例。注意,对于每个SRIM输出文件都有一个Python类,并提供对每个列的简单访问。这需要一些复杂的正则表达式才能正确运行。

folders = ['test_files/2', 'test_files/4']
image_directory = 'examples/images'

fig, axes = plt.subplots(1, len(folders), sharey=True, sharex=True)

for ax, folder in zip(np.ravel(axes), folders):
    plot_damage_energy(folder, ax)
    plot_ionization(folder, ax)
    ax.legend()
    ax.set_ylabel('eV')
    ax.set_xlabel('Depth [Angstroms]')
fig.suptitle('Ionization Energy vs Depth', fontsize=15)
fig.set_size_inches((20, 6))
fig.savefig(os.path.join(image_directory, 'ionizationvsdepth.png'), transparent=True)

srim heatmap

请参阅[jupyter笔记本](<https://gitlab.com/costrouc/pysrim/blob/master/examples/notebooks/Analysis.ipynb)以全面演示功能。

在该目录中还可以找到使用pysrim创建一些出版图形的示例。我在出版物中使用了它。

安装

通过pip或conda安装pysrim很简单。

可在PyPi上找到

  • pip install pysrim

可在Conda上找到

  • conda install -c costrouc pysrim

可在Docker上找到

  • docker pull costrouc/pysrim

除非您正在使用Docker镜像,否则您将需要使用以下说明在您的机器上安装SRIM:Linux、OSX和Windows。

Docker

存在一个预装了和SRIM的Docker容器。在使用wine和模拟X11会话方面需要一些技巧。使用xvfb-run -a可以在Docker容器内创建一个模拟的X11会话,因此可以在没有显示器的服务器上运行SRIM。这是我始终使用的方法来运行SRIM。

镜像:costrouc/pysrim

Linux和OSX

对于Linux和OSX,您首先需要安装wine。有关在OSX上安装wine的信息,请参阅这篇帖子。对于Linux,您通常可以通过apt get install wineyum install wine来安装wine。SRIM与wine兼容。

安装wine后,运行安装脚本 install.sh

点击提取然后完成。

Windows

我的一个同事已经在Windows上轻松地实现了它,但我自己没有经验。只需从srim.org下载可执行文件。接下来,将SRIM文件提取到Windows机器上的一个目录中。请注意安装目录,因为它在trim.run()中将被需要。

贡献

欢迎所有贡献,包括错误报告、错误修复、文档改进、增强和想法!这些应该在Gitlab仓库中提交。GitHub仅用于提高可见性。

贡献者

许可

MIT

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪一个,请了解更多关于安装软件包的信息。

源分发

pysrim-0.5.10.tar.gz (38.5 kB 查看哈希

上传时间:

构建分发

pysrim-0.5.10-py3-none-any.whl (42.8 kB 查看哈希

上传时间: Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面