Tasker:Gaussian计算任务自动化工具集
💡简介
Tasker是一套Python脚本工具集,用于自动化生成Gaussian计算任务。特性:
- 处理复杂的任务依赖,按照要求生成输入文件
- 任务模块化,通过建立模板库轻松设置复杂的计算任务
- 结合crontab,按照task文件自动进行计算
- 结合作业调度系统,实现通过调用Multiwfn或运行自定义脚本等方式进行自动后处理
Tasker套件有配套可视化工具Orbital viewer,支持在Windows平台下对轨道进行一键可视化。
🔧运行环境
- 系统:Linux(谁家量化计算在Windows上做啊)
- 网络需求:在以CAS号形式输入结构时,需要连接网络调用PubChem的API接口
- 环境依赖:
- 开发环境python 3.8,理论上兼容python3
- 若以smiles字符串形式输入结构,需要rdkit库
- 若以CAS号形式输入结构,需要rdkit和requests库
- 环境变量:
1
export AUTOTASKER_CALC_PATH="/path/to/calc_folder"
🚀快速开始
要设置一项计算,您可以在AUTOTASKER_CALC_PATH
建立一个文件夹,该文件夹就是存放您计算任务相关所有文件的路径。您需要选择一种方式给出分子结构,tasker目前支持:
- com/gjf/xyz文件:Gaussian标准输入格式,可以没有关键词等信息,但要有正确的几何坐标、电荷和自旋多重度。推荐使用com文件,因为gjf是配套
slurms.sh
脚本识别的后缀,会被自动提交。 - smiles字符串/CAS号:在task文件中以”%smiles=”的形式给出,此时com文件内可以不提供几何坐标。
name.task
文件是管理计算任务的文件,文件名应与您的com文件相同。您可以参照下一节的说明手动设置该文件,也可以引用模板库中的文件。例如,在tasker目录下的templates文件夹中寻找fluor.txt,并使用该计算模板:
1
@txt=fluor
设置完毕后,运行task_module.py,程序会识别AUTOTASKER_CALC_PATH的子目录下文件名相同的一对(task,com/gjf)文件,按照task文件中的设定来生成gjf文件。推荐结合作业调度系统和crontab使用,以达到全自动生成、提交计算任务的目的。
⚙️任务文件语法
任务名($
)
任务文件由任务块许多任务块构成,每个任务块都由$
起始,这也是脚本识别任务块的依据。脚本生成gjf文件时,会将任务名作为前缀附加到原始com/gjf/xyz文件名前作为新的gjf文件名。以下是任务块结构示例:
1
2
3
4
5
$task_name # 任务名
%source # 结构来源
! commands # 命令指令
# gaussian_keywords # 计算关键词
add = density.wfn # 读取额外输入
结构来源 (%
)
支持以下几种方式提供几何结构:
1
2
3
4
5
%origin # 使用初始com/gjf中的结构
%smiles=CCO # 使用SMILES生成
%smiles=50-00-0 # 使用CAS号生成
%task_name # 使用其他任务的计算结果
%restart # 重新提交该任务(注意!这会覆盖当前任务。)
%task_name是最频繁使用的结构来源,这会请求tasker从任务名为task_name的任务正常结束的输出文件中提取最后一帧的结构。例如:
1
2
3
4
5
6
7
$opt
%origin
# opt freq b3lyp/6-31g*
$td
%opt
# td(nstate=10) wb97xd/def2tzvp
在第二个任务块中,%opt请求从第一个任务正常结束的log文件中提取几何坐标,并作为该任务的起始坐标使用。
- 请注意,在使用xyz作为origin结构来源时,xyz文件的第二行应当如Gaussian输入文件般写入自旋多重度和电荷值。
命令词 (!
)
命令词由commands_words.py解析,并将bash命令写入名为comd的文件内。slurms.sh提交任务时会识别该comd文件,将其中内容复制到slurm脚本中,以实现自动化后处理。目前支持以下命令类型:
scripts命令
1
scripts=(fchk,esp)
该命令词会请求打印一条可以执行tasks/scripts目录下同名bash脚本的bash命令。支持多个脚本按顺序执行。
multiwfn命令
1
multiwfn=(output.fchk>hole,output.log>uvvis)
该命令词会请求一条以tasks/wfntxts下的txt模板运行multiwfn进行后处理的bash命令,该会同时source目录下multiwfn的环境变量文件env.sh。
- 支持通配符。
- multiwfn的输出将被重定向到
mw_{template}_out.txt
。
copy和move命令
1
2
copy=(*.log>../logs/,*.fchk>../analysis/)
move=(*.log>../logs/,*.fchk>../analysis/)
该命令词会请求一条将对应文件复制或移动到指定目录的bash命令。
- 支持通配符
- 自动创建目标目录
ORCA输入文件
虽然Tasker主要用于Gaussian计算,但也可以基于Gaussian结构优化结果,结合模板来产生ORCA输入文件。要请求产生ORCA输入文件,您应当在$下方加上-orca-
标识,例如:
1
2
3
4
$task_name
-orca-
%source
# job=soc func=B3LYP basis=def2-SVP
由于orca输入文件非常复杂,为了保持任务块尺寸一致性和简洁性,这里采用了自定义模板的方式管理orca输入。输入模板应该放在tasks/ORCA目录下,格式像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
! [func] [basis] tightSCF RIJCOSX
%pal
nprocs [nproc]
end
%maxcore [mem]
%tddft
nroots 5
dosoc true
printlevel 3
end
* xyzfile [charge] [spin] [xyz_file]
-default-
func=wb97x-d3
basis=def2-svp
nproc=32
mem=3000
其中,[]占位符的值默认由末尾-default-字段控制,但也可以由#
行进行指定。例如,如果模板文件中有[func]占位符,根据-default-字段中func=wb97x-d3,在产生输入文件时该占位符的值会被设置为wb97x-d3,您也可以在任务块中使用func=B3LYP来覆盖默认设置。
- 请注意,目前暂时不支持以ORCA输出结构进行后续计算,slurms在当前版本也不能提交orca任务
外部程序
External_Programs目录下挂载了sobereva老师的optDFTw和sobMECP(sobMECI是sobMECP的魔改版),可以通过scripts命令进行调用。如果您使用这两个程序计算并用于发表,还需要按照sobereva老师的要求进行引用。
👇下载地址
1
git clone git@github.com:bane-dysta/TaskModule.git
🔰开发计划
- 支持生成ORCA输入文件
- 支持以指定目录文件为结构资源
- 支持Gaussian的log文件为结构资源
- 支持xyz格式文件为结构资源
- 支持判断震荡情况
- 与mail模块结合实时监控任务状况
📋 更新日志
v1.0.1 (2024-12-14)
- 支持ORCA输入文件产生
- 修复已知bug
- 也许Claude顺手修复了一些未知bug
v1.0.0 (2024-11-20)
- 初始版本发布
🙏致谢
Author: Bane Dysta
Email: banerxmd@gmail.com
Website: https://bane-dysta.github.io/