计算化学公社
标题: 一键把所有gjf文件转成xyz文件、把所有Gaussian输出文件转成gjf文件的脚本 [打印本页]
作者Author: sobereva 时间: 2020-1-27 09:50
标题: 一键把所有gjf文件转成xyz文件、把所有Gaussian输出文件转成gjf文件的脚本
一键把所有gjf文件转成xyz文件、把所有Gaussian输出文件转成gjf文件的脚本
Script to convert all gjf files to xyz files and convert all Gaussian output files to gjf files in one click
文/Sobereva@北京科音 First release: 2020-Jan-28 Last update: 2023-Jun-12
本文提供笔者写的两个Linux下的Bash shell脚本,对实际研究有一定价值,都利用了Multiwfn程序进行格式转换,因此Multiwfn必须已恰当安装从而能通过Multiwfn命令直接启动。Multiwfn可以在http://sobereva.com/multiwfn免费下载(Linux下的安装方法见手册2.1.2节),一定要用最新版本。这俩脚本在Multiwfn的examples\scripts目录下也可以找到。
把本文的脚本稍微改写几行,就也可以利用Multiwfn在其它格式间进行转换,非常方便。Multiwfn支持的格式详见《详谈Multiwfn支持的输入文件类型、产生方法以及相互转换》(http://sobereva.com/379)。笔者十分建议仔细看看《详谈Multiwfn的命令行方式运行和批量运行的方法》(http://sobereva.com/612),里面对通过命令行和脚本批量运行Multiwfn做了特别透彻的说明,看过之后就可以游刃有余地改写本文的脚本。
1 一键把所有gjf文件转成xyz文件
脚本下载:http://sobereva.com/attach/530/gjf2xyz.sh
这是把当前目录下所有Gaussian输入文件(gjf)转成xyz文件的脚本,直接运行即可。gjf文件应当是以笛卡尔坐标记录。
输出信息例子
Converting AlCl3.gjf to AlCl3.xyz ... (2 of 151)
Converting Aniline.gjf to Aniline.xyz ... (3 of 151)
Converting Azetidine.gjf to Azetidine.xyz ... (4 of 151)
Converting B2H6.gjf to B2H6.xyz ... (5 of 151)
Converting Benzaldehyde.gjf to Benzaldehyde.xyz ... (6 of 151)
Converting Benzene.gjf to Benzene.xyz ... (7 of 151)
Converting Benzonitrile.gjf to Benzonitrile.xyz ... (8 of 151)
...
2 一键把所有Gaussian输出文件转成gjf文件
脚本下载:http://sobereva.com/attach/530/out2gjf.sh
这是把当前目录下所有Gaussian输出文件(out)转成gjf文件的脚本,直接运行即可。运行之前必须将Multiwfn的settings.ini文件里的iloadGaugeom设为1(否则Multiwfn在载入out文件时不会从中读取数据)。得到的gjf文件里是默认关键词,应当根据实际情况进行修改。电荷和自旋多重度和out文件里一致(用了赝势的情况除外,需要自行手动修改gjf)。坐标是输出文件里最后一次输出的(如果有输入朝向的坐标则新生成的gjf里也是输入朝向的,没有的话就是标准朝向的。不了解朝向问题的话参看《谈谈Gaussian中的对称性与nosymm关键词的使用》http://sobereva.com/297。如果把iloadGaugeom设为2,则总是载入标准朝向下的坐标)。
上面的脚本产生的Gaussian输入文件是笛卡尔坐标的,如果要输出为内坐标的输入文件,改用此脚本:http://sobereva.com/attach/530/out2gjf_zmat.sh。注意对某些体系,比如乙炔,原理上其结构就没法用内坐标描述(除非引入虚原子),对这样的体系无法成功产生Gaussian输入文件。
如果你的Gaussian输出文件是log后缀,把脚本里的out替换为log即可。也可以批量把诸如xyz、mol、mol2、pdb、gro、wfn、wfx、cub等各种Multiwfn支持的输入文件转成gjf,也是同样地把这个.sh脚本里的out替换成相应后缀即可(对于把fch、molden、mwfn等含有基函数信息的波函数文件转成gjf文件,应当在脚本的${inf//out/gjf}下面插入内容一行,内容是n,代表不把当前波函数作为初猜信息写入gjf)。
Multiwfn产生的gjf里关键词默认为B3LYP/6-31G*。可以按照《使用Gaussian时的几个实用脚本和命令》(http://sobereva.com/258)里第5节所述的方法批量把所有gjf文件里的关键词替换成实际要用的关键词。如果当前目录下有个template.gjf文件,并且其中坐标部分用[geometry]或[GEOMETRY]代替,则这个文件会自动被当做模板文件产生新的gjf,而含有[geometry]或[GEOMETRY]的这一行会被替换为当前体系的坐标。如果输入文件里某一行或几行里有[name]字样,则这六个字符会被替换为新产生的输入文件名(不含后缀)。如果你载入的是Gaussian输入或输出文件、ORCA输入文件或者含有波函数信息的文件,新产生的gjf文件里的净电荷和自旋多重度会用读入的,否则会沿用template.gjf里的。允许使用template.gjf的设计给产生特殊的输入文件的情况来了极大的灵活性。下面是个用template.gjf的例子,方法用B3LYP-D3(BJ),给Ag用SDD赝势基组,给C H O用6-311G*,任务是优化和振动分析,并产生wfn和chk文件,其文件名和你创建的gjf的文件名相同。
%chk=D:\[name].chk
#p b3lyp/genecp em=GD3BJ opt freq out=wfn
niconiconi
0 1
[geometry]
Ag
SDD
****
C H O
6-311G*
****
Ag
SDD
D:\[name].wfn
<---此处有空行
<---此处有空行
作者Author: zsu007 时间: 2020-1-27 11:48
谢谢社长的分享!
作者Author: sobereva 时间: 2020-1-28 05:26
更新了此文,加入了新的脚本
作者Author: hlmkh 时间: 2020-1-28 12:16
tanks Mr sobereva for share scripts
作者Author: snljty 时间: 2020-1-31 14:38
请问老师,有现成的工具可以方便将Gaussian优化的轨迹转化成多帧xyz的么?谢谢!(虽然手动写脚本也很方便...)
作者Author: sobereva 时间: 2020-2-1 02:11
(, 下载次数 Times of downloads: 137)
当年写的程序,是否兼容目前较新版本我不确定
作者Author: snljty 时间: 2020-2-1 08:28
本帖最后由 snljty 于 2021-7-24 16:48 编辑
谢谢老师!这个功能会加入Multiwfn么?好像有个小问题,优化正常结束后目前的Gaussian(旧版本没测试)会在后面再输出一次最后一次的坐标,这样这个坐标会被读两遍。稍微改了一下,附件里的程序可以同时读取Input orientation和Standard orientation,做了简单的错误处理和支持命令行参数或者交互式输入文件名,同时解决了最后一帧坐标会读两次的问题。顺便分享给大家。
就是一个小麻烦,使用的Gaussian输出文件换行符必须对应该系统。
更新了一下软件结果之前的30多次下载数没了。。。顺便自己两年前的代码好丑
(, 下载次数 Times of downloads: 56)
作者Author: 冰释之川 时间: 2020-2-2 10:04
本帖最后由 冰释之川 于 2020-2-2 10:23 编辑
这里分享一下 windows下如何利用multiwfn将Gaussian的输入文件(*.gjf)批量转换成ORCA输入文件(*.inp):
- @echo off
- setlocal enabledelayedexpansion
- for /r %%i in (*.gjf) do (
- echo;
- echo Entering Path: [%%i]
- Multiwfn %%i < inputstream.txt > nul
- move orca.inp %%~pi > nul
- rename %%~pi\orca.inp %%~ni.inp
- if !errorlevel!==0 (
- echo Conversion of %%~ni.gjf to %%~ni.inp finished at !date! !time!) else (
- echo Warning: Conversion of %%~ni.gjf to %%~ni.inp failed at !date! !time!)
- )
- echo;
- echo;
- pause
复制代码 使用方法:
(1)将multiwfn程序、本脚本(Gen_ORCA_input.bat及inputstream.txt)以及待转换的*.gjf文件放在同一目录下。
【之所以要把multiwfn放在工作目录下,是因为有些同学不会设置windows下的环境变量 囧Rz】
(2)修改inputstream.txt (默认是产生ORCA输入文件),该文件记录的是手动使用multiwfn进行文件格式转换时的键盘输入信息,如果你要将*.gjf转成其它输出格式,需要自行修改。
(3)双击Gen_ORCA_input.bat运行之,你将会看到该目录下产生了一系列同名*.inp输入文件。
P.s.
(1)由于很多童鞋都是利用ORCA程序计算高精度单点能,这里我一并附上批量提取ORCA输出文件(*.log)单点能的脚本(Extract_SPE_ORCA.sh)作为福利。
(2)考虑到有很多小白还不会批量提交计算,这里给出PBS脚本以及批量提交脚本作为参考:
【orca.pbs】
- #!/bin/bash
- #PBS -N ORCA
- #PBS -l nodes=node01:ppn=32
- #PBS -l walltime=1440:00:00
- #PBS -q gentai
- #PBS -o jobID.$PBS_JOBID
- cd $PBS_O_WORKDIR
- touch jobID.$PBS_JOBID
- FILENAME=NR-2B_r_opted.inp # input file name
- /home/yjy/softwares/orca-4.2.1/orca $FILENAME > ${FILENAME/%inp/log} # running ORCA-4.2.1
- wait
- orca_2mkl ${FILENAME/%.inp} -molden
- wait
- rm ${FILENAME/%inp/gbw}
复制代码
【folder_qsub_all.sh】使用时,应和Gen_ORCA_input.bat放在同一目录下。
- #!/bin/bash
- function travel_dir(){
- initial_path=$(pwd)
- file_counter=0
- folder_counter=0
- file_extension=pbs # Set target extension
- echo
- echo Travelling all subdirectories in the path below to find all "*."$file_extension files:
- echo $(pwd)
- for dir in $(ls -R | grep :| tr : " ")
- do
- cd $dir
- if ls *.$file_extension 1> /dev/null 2>&1;then
- serial=1
- let folder_counter++
- echo
- echo "*** No.$folder_counter folder *** >>> Entered" $dir
- echo " V V V V"
- for file in *.$file_extension
- do
- echo "[$serial] Running $file file..."
- let file_counter++
- let serial++
- process # Processing files here
- done
- fi
- cd $initial_path
- done
- echo
- echo "~~~~ Returned to the initial path... ~~~~"
- echo $initial_path
- echo
- echo "###### Total $file_counter *.$file_extension files have been processed ######"
- echo
- }
- function process(){
- qsub < $file # Submit PBS jobs
- echo " ==> $file has been submitted!"
- }
- echo
- echo "############ Running PBS batch script ############"
- travel_dir # Running travel_dir and process functions
复制代码
最后附上脚本包
(, 下载次数 Times of downloads: 119)
作者Author: IIIO_OIII 时间: 2020-2-10 04:10
想想自己一个一个地把Gaussian输出文件另存为gjf文件的场景,真是在浪费大好青春。
作者Author: archer 时间: 2020-2-24 11:11
openbabel可以支持很多种格式间的转化
作者Author: xiaomidaxue 时间: 2020-2-25 16:54
这个挺好,最新是2016年的
作者Author: sobereva 时间: 2020-4-10 18:30
补充了一句话
2020-Apr-10补充:对于2020-Apr-10及以后更新的Multiwfn,如果把iloadGaugeom设为2,则总是载入标准朝向下的坐标。
作者Author: ceyu 时间: 2020-5-8 14:34
老师,我有个疑问
我使用这个脚本转换gjf到xyz的时候,脚本运行非常慢,半分钟才能完成一个
转换出来的文件倒是没有问题
请问是我Multiwfn设置的不太对嘛?或者因为要调用Multiwfn所以的确比较慢
作者Author: sobereva 时间: 2020-5-9 10:01
我从未遇到此问题,正常情况下瞬间就能转换完
你先升到Multiwfn最新版本,在Multiwfn窗口里一步一步敲命令,看到底哪一步导致非常慢,亦或是其它什么原因导致的
作者Author: pet 时间: 2020-6-10 18:23
十分感谢sob老师的脚本,今天刚安装上Multiwfn, 在使用out2gjf.sh时只能输出前面几行关键词,没有输出坐标,已经将Multiwfn的setting中的iloadGaugeom改为1,请问sob老师出现这种情况的可能原因是什么呢? 在运行gjf2xyz.sh是可以正常输出的。
作者Author: sobereva 时间: 2020-6-11 23:55
你先手动运行,处理一个文件试试。即启动Multiwfn后,载入out文件,按照脚本里的内容敲命令,看能否产生gjf文件。如果不能,根据屏幕上的提示解决。
如果用的不是Multiwfn最新版本先下载最新版本再试
作者Author: Hanz 时间: 2020-9-9 23:12
老师,您好!感谢提供脚本!但是用Extract_SPE_ORCA.sh这个脚本的时候,我ORCA输出的是out文件,将脚本里的log都改成了out,但是单点能总是提取不出来,运行脚本之后总是Total 0 files have been processed,还望指教一下!万分感谢!
作者Author: 冰释之川 时间: 2020-9-10 09:46
http://bbs.keinsci.com/thread-16231-1-1.html 用这里的脚本
作者Author: Hanz 时间: 2020-9-10 15:37
感谢冰冰姐!已经用了,非常方便!
作者Author: qingqing 时间: 2021-4-27 13:09
遇到同样问题,使用3.8版本。当转化文件log,置于与Multiwfn程序同级目录下,可正常批量转化。而不在同一级目录时,无论手动执行还是脚本执行,转化得到的.gjf都没有坐标行。环境变量已经设置好。
作者Author: sobereva 时间: 2021-4-27 14:12
3.8正式版迄今没有发布过
放到当前目录就完了,本来帖子里明确说的就是转化当前目录的。要改成其它情况就自己改脚本
作者Author: sobereva 时间: 2021-5-11 11:27
今日对此文进行了更新,加入了新的脚本out2gjf_zmat.sh,可以直接批量转化出内坐标形式的Gaussian输入文件
作者Author: sobereva 时间: 2021-6-4 17:28
今日更新的Multiwfn加入了这个特性
对于2021-Jun-4之后更新的Multiwfn,如果当前目录下有个template.gjf文件,并且其中坐标部分用[geometry]代替,则这个文件会自动被当做模板文件产生新的gjf,而含有[geometry]的这一行会被替换为当前体系的坐标,这个设计给产生特殊的输入文件的情况(如需要从末尾读取额外信息)来了极大的灵活性。
作者Author: sobereva 时间: 2021-6-16 03:11
今日再次对Multiwfn进行了更新。在模板文件template.gjf里,如果输入文件里某一行或几行里有[name]字样,则这六个字符会被替换为新产生的输入文件名(不含后缀),这便于产生与输入文件同名的chk、wfn等文件。见本文最后部分的例子。
作者Author: 15029457177 时间: 2021-7-8 14:58
感觉之前真的是在浪费时间
作者Author: dududu 时间: 2021-9-3 14:13
您好,请问您的问题解决了吗,我也出现了完全一样的问题,gjf2xyz.sh可以正常输出,out2gjf.sh也是只输出前两行。单独运行Multiwfn把out文件转化成gjf文件也不行,但是在WIn环境下可以正常转换,想请教是哪个地方设置出了问题。
作者Author: pet 时间: 2021-9-3 16:02
问题解决了,但是抱歉时间太久了记不太清怎么做的了,你看一下settings里面iloadGaugeom及其它参数设置对没有呢?或者Multiwfn的安装有没有问题
作者Author: sobereva 时间: 2021-9-3 17:18
老版本必须把iloadGaugeom设成1才会从输出文件里读取结构信息
目前官网上最新版Multiwfn默认iloadGaugeom就是1
作者Author: dududu 时间: 2021-9-4 12:02
谢谢老师的回复。
在centos中修改后还是没能解决。最后安装Cmder在win下模拟实现了。
作者Author: dududu 时间: 2021-9-4 12:04
谢谢您的回复!估计是我安装出了问题,目前在win下模拟解决了,有时间再去研究看看centos中是怎么回事。
作者Author: sobereva 时间: 2021-9-4 13:42
要么是你的Multiwfn版本太老,要么是没找到settings.ini,仔细看此文Q18
Multiwfn FAQ
http://sobereva.com/452
跟系统绝对毫无关系
作者Author: pet 时间: 2021-9-13 11:58
你是不是忘记把settings.ini放进当前文件夹了呢? 我今天有一次忘放进去了,出来的结果就是只有前几行没有坐标。
作者Author: dududu 时间: 2021-9-14 09:07
有可能。重新安装最新版的Multiwfn后,直接解决问题!
作者Author: luzujia 时间: 2022-2-19 05:40
社长,我在使用multiwfn的格式转换功能的时候发现,在Linux上比在win下慢得多,可能是什么原因呢?
作者Author: sobereva 时间: 2022-2-19 09:35
如果是纯文本方式远程连接,启动时可能会卡一下,也许是这个原因。可以用noGUI版
作者Author: forpaper 时间: 2022-4-21 17:54
社长,请问使用out2gjf_zmat.sh脚本时template.gjf是否需要改格式,我用out2gjf.sh转化格式时能读取template.gjf中的关键词,但是用out2gjf_zmat.sh时读取不了template.gjf中的关键词
作者Author: sobereva 时间: 2022-4-22 02:22
之前的版本仅对于输出笛卡尔坐标的情况才支持套用template.gjf
我今天官网上新更新的Multiwfn对于输出内坐标的情况也支持套用template.gjf了。脚本本身不用改
作者Author: forpaper 时间: 2022-4-23 11:39
好的,谢谢社长
作者Author: libo371324 时间: 2022-8-29 18:32
请问,在windows上,log文件输出内坐标或者笛卡尔坐标的时候,导出的文件并没有分子信息,settings.ini文件我也改啦,就是不出现分子信息,这是什么原因
作者Author: sobereva 时间: 2022-8-30 10:47
后缀必须是.out
作者Author: qinjiu 时间: 2022-10-18 11:31
请教一下社长,out2gjf.sh脚本如果不添加 template.gjf 的时候,gjf文件里有out文件转换出来的多重度与电荷信息;但是如果使用 template.gjf 之后,多重度这一行就会被替换成 template.gjf 这一行;如果多个out文件的多重度不同,想用 template.gjf 改变其他设置的同时又保持out文件中的多重度信息,该如何设置呢?
作者Author: sobereva 时间: 2022-10-18 19:44
我刚刚更新了Multiwfn官网上的最新版本,现在净电荷和自旋多重度将不会用template.gjf里的了,将会和当前体系或者从gjf直接读来的相一致
作者Author: Smes 时间: 2022-12-13 23:28
看不懂C
想问下老师读取out文件中的坐标的逻辑,读哪一部分的坐标呢
还有我注意到out文件的收敛的坐标跟用GaussView产生gjf文件的坐标不一样,是standard orientation
怎样产生standard orientation呢
想研究下自己写个脚本批量产生gjf,不知道shell script可不可写呢
请老师指导指导
作者Author: snljty 时间: 2022-12-21 09:42
看你的需求。我写代码一般是默认读Input orientation,找不到再读Standard orientation,再找不到就读Z-matrix orientation,再找不到就报错。不建议折腾Shell,不够直观,不如花一上午学学Python。关于标准取向和输入取向的差别,看卢老师博文《谈谈Gaussian中的对称性与nosymm关键词的使用》。
作者Author: Jiayu 时间: 2024-10-12 19:05
太感谢了
作者Author: zep 时间: 2025-7-26 21:23
您好,我在使用一键把所有Gaussian输出文件转成gjf文件的脚本,虽然很方便的实现了转化,但是我原本的计算体系是是存在CA原子冻结的,转化的输入坐标文件不包含冻结原子信息,是脚本没法实现,还是我没研究透彻,请指教
作者Author: sobereva 时间: 2025-7-29 01:11
Multiwfn不会读取输出文件里的冻结设定。但可以自己写个Gaussian输入文件的模板文件template.gjf让Multiwfn产生输入文件时套用,此模板文件里包含opt=readopt并在[geometry]后面空一行写notatoms=CA
作者Author: zep 时间: 2025-7-29 08:59
好的谢谢社长,我试一试,这样子可以的话就方便多了
欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |