Srim 通过 Python 自动化任务
项目描述
所有问题和贡献都应该在 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
最新版本 | |
包状态 | |
许可 | |
构建状态 | |
覆盖率 | |
Conda | |
文档 | |
出版物 | |
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.txt、VACANCY.txt、NOVAC.txt、E2RECOIL.txt、PHONON.txt、RANGE.txt和COLLISON.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)
请参阅[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
存在一个预装了xvfb-run -a
可以在Docker容器内创建一个模拟的X11会话,因此可以在没有显示器的服务器上运行SRIM。这是我始终使用的方法来运行SRIM。
Linux和OSX
对于Linux和OSX,您首先需要安装wine。有关在OSX上安装wine的信息,请参阅这篇帖子。对于Linux,您通常可以通过apt get install wine
或yum 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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ada088f73f7e1a3bf085206e81e0f83ed89c1d0b23a789ecd0ba0a250724aee8 |
|
MD5 | 2b39fdf820c07e7218fb612615c8be1d |
|
BLAKE2b-256 | f721cb270b51742dac2efe3b3975fad62c315a01e635b180c40ebd5f356162ae |
pysrim-0.5.10-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4119594b7c786be439144a681c57ef1af5f54eb951b8e543caff2d6b9665e427 |
|
MD5 | 139340fac86cbd4f7fd1412df56b3885 |
|
BLAKE2b-256 | 8bb9a4340afcf1d204f53cc3beb7260fbcd71edfc547410d98d327535d3c80f7 |