使用multiwfn一键批量产生各类光谱图(含演示视频) | 宜武汇-ag真人国际厅网站

使用multiwfn一键批量产生各类光谱图

0 前言

如果读者还没看过《使用multiwfn绘制红外、拉曼、uv-vis、ecd、vcd和roa光谱图》()请先看此文。波函数分析程序multiwfn具有非常强大的光谱绘制功能,本文目的是介绍一个小技巧,使用批处理文件,仅通过一条命令就令multiwfn把当前目录下所有输入文件转化为光谱图。这里说的输入文件是指multiwfn绘制光谱图的功能支持的输入文件,比如gaussian、orca等程序的电子激发计算、振动分析任务的输出文件等,详见上面提到的文章。

在程序包的examples\spectra\indigo目录下有四个.out文件,都是gaussian使用不同级别做电子激发计算的输出文件,我们以这四个文件为例,说明怎么一下子就把它们都转化成uv-vis光谱图像文件。

1 在windows下运行

这里首先假设读者用的是windows版。将四个.out文件都拷到multiwfn目录下,然后把examples\spectra目录下的uv-vis.txt和batchspec.bat也拷到multiwfn目录下。然后把multiwfn目录下的settings.ini里的isilent设为1并保存文件。直接双击batchspec.bat,马上当前目录下就出现了四个与输入文件同名的png文件,是uv-vis谱的图像文件,可见极其方便!

原理是什么?首先看batchspec.bat,这是一个windows下的批处理文件,点击右键选编辑,就可以看到以下内容
for /f %%i in (‘dir *.out /b’) do (
multiwfn %%i < uv-vis.txt > nul
rename dislin.png %%~ni.png
)

其中dir *.out显示当前目录下所有.out文件,利用for循环将每个文件名依次赋值给%%i,并对每个文件调用当前目录下的multiwfn程序按照uv-vis.txt文件里记录的指令进行处理。由于输出在屏幕上的信息不是我们需要的,所以将这些信息重定向到nul,它相当于是个垃圾桶,定向到里面的信息都会消失不见。multiwfn每次处理完一个文件后,会在当前目录下产生dislin.png文件,为了让文件名与输入文件相同,因此用rename重命名一下,%%~ni的写法代表把%%i变量记录的文件名的后缀去除。

再来看记录了在multiwfn里输入的指令的uv-vis.txt文件,内容如下,每一行对应在multiwfn里敲入的一次指令,//后面是注释。如果还有不理解的,启动multiwfn载入任意一个out文件,照着里面的命令敲一遍就肯定懂了
11  //光谱绘制功能
3  //绘制uv-vis
0  //显示一次光谱,否则之后无法修改纵坐标
3  //修改横坐标设定
150,850,100  //初值,终值,步长
4  //修改左侧坐标轴(对应摩尔吸收系数)
0,45000,5000  //初值,终值,步长
y  //对右侧纵坐标做相应的缩放/平移
5  //修改右侧坐标轴(对应振子强度)
0,1.0,0.1  //初值,终值,步长
n  //不对左侧坐标轴做相应的缩放/平移
1  //产生图像文件

由于在选择选项0的时候光谱会在屏幕上弹出来,因此要把settings.ini里的isilent设为1使程序处于安静模式,这样就不会蹦出图像,免得到时候还得手动关闭了。

可见批量调用multiwfn绘制光谱的机理非常简单易懂,想改什么,只要改相应内容就行了。一般需要改的就是坐标轴范围,可以先跑一下,发现范围不合理的话,改一下uv-vis.txt里的坐标轴设置然后重新跑即可。

在examples\spectra目录下还有个ir.txt。如果你把此文件拷到multiwfn目录,把batchspec.bat里的uv-vis.txt改为ir.txt,那么双击batchspec.bat时就会把当前目录下所有.out文件转化为红外光谱的图像文件。ir.txt的内容就不再解释了,因为只要照着ir.txt里的指令在multiwfn里敲一遍,对照屏幕上的提示,马上就能理解其中的内容。

想用multiwfn批量绘制其它类型的光谱,如roa、raman、vcd、ecd、光电子谱,只要自己创建个记录了绘制命令的.txt文件,按照上述过程使用它来批处理即可。

2 在linux下运行

如果你用的是linux版multiwfn,也想这样通过批处理绘图的话,先按照multiwfn手册2.1.2节的步骤以正规方式安装multiwfn,把examples\spectra中的batchspec.sh、uv-vis.txt以及要绘图的文件都拷到当前目录下,然后在终端里输入./batchspec.sh运行之即可。如果提示没有可执行权限,先运行一下chmod x ./batchspec.sh。

batchspec.sh是个bash shell的脚本,内容为:

#!/bin/bash
for inf in *.out
do
multiwfn ${inf} < uv-vis.txt > /dev/null
mv -f dislin.png ${inf//out/png}
done

可见和batchspec.bat的内容大同小异,只不过命令改为了linux下的情况。${inf//out/png}代表把$inf变量记录的文件名的out后缀替换为png。

为了用起来更方便,读者还可以把batchspec.sh和uv-vis.txt放到比如/sob目录下,把./batchspec.sh里的uv-vis.txt改为/sob/uv-vis.txt,然后在~/.bashrc文件里增加一行
alias uv=’/sob/batchspec.sh’
alias guv=’gedit /sob/uv-vis.txt’
重新进入终端后,只要某个目录里有比如gaussian的电子激发任务的输出文件,就在这个目录下运行uv命令即可将它们全都瞬间转化为uv-vis光谱文件。如果发现坐标范围不合适,输入guv命令就可以启动gedit编辑uv-vis.txt的内容。

3 总结

原文链接:http://sobereva.com/479

网络摘文,本文作者:15h,如若转载,请注明出处:https://www.15cov.cn/2023/08/27/使用multiwfn一键批量产生各类光谱图(含演示视频)/

发表评论

邮箱地址不会被公开。 必填项已用*标注

网站地图