通过python实现任务的srim自动化
pysrim的Python项目详细描述
所有问题和贡献都应在 gitlab。Github仅用作 反光镜可见度
pysrim:srim计算的自动化、分析和绘图
pysrim
是一个python包,旨在包装和扩展srim
模拟离子穿过物质的常用工具。那里
SRIM有很多痛点吗?这个包旨在解决
他们。这些包括与所有操作系统的兼容性、自动化和崩溃
恢复srim计算,解析所有输出文件,以及
出版质量图。
现在有一个Docker图像
的costrouc/pysrim
运行pysrim和srim!无需设置,也不需要
显示以便服务器就绪。如果你想试试的话
下面是简短的命令(显然需要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<表>
文档
链接到有关已读文档的文档
虽然trim是一个很好的代码,但是它有很多缺点
自动化。在输入文件中编写
构建功能
在所有操作系统上自动运行srim和trim
trim.in的gui将在未指定的时刻崩溃。
每个人都遇到过的一个崩溃就是
文本字段不能为空。Trim也有崩溃的倾向
因为它把所有的级联存储在内存中。也就是说,对于大型跑步
当全级联超过1000个离子时,它将耗尽
记忆。
pysrim
通过提供一个简单的
输入文件的api包装器(支持所有特性);
能够在所有操作系统上运行(使用
葡萄酒
对于Linux和OSX),并允许批量运行计算,请参见
笔记本
示例
下面是使用pysrim
运行修剪的hello world示例
计算。注意/tmp/srim
是srim可执行文件的路径
目录(srim.exe
应位于此目录中)。pysrim
将
添加所有必需的输入文件。如果这对你来说是成功的
SRIM窗口将弹出并开始计算。
fromsrimimportIon,Layer,Target,TRIM# Construct a 3MeV Nickel ionion=Ion('Ni',energy=3.0e6)# Construct a layer of nick 20um thick with a displacement energy of 30 eVlayer=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 Nickeltarget=Target([layer])# Initialize a TRIM calculation with given target and ion for 25 ions, quick calculationtrim=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 laptopresults=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计算完成后,运行复制输出文件
所有输出文件并将其移动到您喜欢的目录。
fromsrimimportTRIMTRIM.copy_output_files('/tmp/srim','/home/costrouc/scratch/srim')
后置处理srim输出为numpy数组
到目前为止,运行修剪计算最困难的部分是分析
输出文件。pysrim
带有
电离文件,
availment.txt,
novac.txt,
e2recoil.txt,
phonon.txt,
range.txt,
和
collison.txt。这个
collison.txt文件可能会变得很大,因此冲突
解析器使用
可处理任何文件大小的缓冲读取器。附加类
srim.output.results
将处理目录中的所有输出文件并提供
每个解析输出的字典文件。
pysrim
附带了一些
有用的绘图工具,例如绘制dpa与深度。然而,
pysrim的最强大的功能是所有的文本文件
暴露为numpy数组。下面的示例演示如何使用
一个简单的数学和数学。这使得用户能够无缝地使用trim
并进行分析。
fromsrim.outputimportPhonons,Ionizdefplot_damage_energy(folder,ax):phon=Phonons(folder)dx=max(phon.depth)/100.0energy_damage=(phon.ions+phon.recoils)*dxax.plot(phon.depth,energy_damage/phon.num_ions,label='{}'.format(folder))returnsum(energy_damage)defplot_ionization(folder,ax):ioniz=Ioniz(folder)dx=max(ioniz.depth)/100.0ax.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)forax,folderinzip(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)
目录。我 在一个 出版物
安装
通过PIP或Conda安装pysrim
很容易。
PYPI上提供
pip安装pysrim
conda上提供
conda安装-c costrouc pysrim
Docker提供
Docker Pull Costrouc/Pysrim
除非你使用的是docker镜像,否则你需要安装srim 在您的机器上使用Linux、OSX和 Windows .
码头工人
有一个docker容器已经有了pysrim
和srim
安装。一些有趣的把戏是用葡萄酒和
伪造x11会话。xvfb run-a
创建一个假x11会话
在Docker容器中,因此允许SRIM在服务器上运行
没有显示。这是我经常使用的运行srim的方法。
Linux和OSX
对于linux操作系统,首先需要安装wine。有关在OSX上安装Wine的信息,请参见这篇文章。对于linux,您通常可以通过apt get install wine
或yum install wine
安装wine。SRIM是与葡萄酒兼容。
安装Wine后,请运行安装程序脚本。
单击"提取",然后单击"完成"。
窗口
我的一个同事让它很容易在窗户上工作,但是我
我自己没有经验。只需在srim.org下载可执行文件。接下来,您将把srim文件解压到windows机器上的一个目录中。注意安装目录,因为需要从trim.run()
贡献
所有贡献,错误报告,错误修复,文档改进, 欢迎改进和想法!这些应该在 Gitlab存储库。吉图布群岛 仅用于可见性。
贡献者:
许可证
麻省理工学院