Tasker:Gaussian计算任务自动化工具集
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使用,以达到全自动生成、提交计算任务的目的。
此外,env.sh中提供了tasker命令,可以用来运行各种任务处理功能:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 基本任务处理
tasker -r,--run [task_dir] # 运行task_dir的父目录下的所有任务
# 不提供参数时使用默认路径($AUTOTASKER_CALC_PATH)
# 任务生成
tasker -g,--gen [input] [template] # 从模板生成任务
# input: 可选,使用第一个log文件
# template: 可选,templates目录中的模板名
tasker -b,--batch [dir] # 批量生成多个任务
# 使用某个task文件,为目录下每个几何文件生成独立任务
# dir: 可选,默认为当前目录
# 命令处理
tasker -c,--comd [commands] # 解析命令字符串,生成comd文件
# Example: tasker -c "scripts=(fchk) copy=(*.fchk>../FCclasses)"
tasker -ac,--all-comd # 仅运行命令解析,不进行输入文件生成
# 其他功能
tasker -t,--test # 在当前目录下生成测试例case文件夹
tasker -s,--smiles # 构建SMILES结构
tasker -re,--redo [task_name] # 移除任务名的引号以重新运行
# task_name: 可选,仅处理指定任务
tasker -h,--help # 显示帮助信息
示例用法: 运行指定目录下的任务:
1
tasker -r ~/projects/calculation
批量生成多个任务:
1
2
3
4
5
# 在当前目录下处理所有com/xyz文件
tasker -g
# 处理指定目录
tasker -g ~/structures/
使用模板生成任务:
1
2
3
4
5
# 使用默认模板
tasker -g input.log
# 指定模板
tasker -g input.log opt_freq
处理命令:
1
2
3
4
5
# 生成fchk文件并复制到指定目录
tasker -c "scripts=(fchk) copy=(*.fchk>../analysis)"
# 运行Multiwfn分析
tasker -c "multiwfn=(esp>*.fchk|nbo>*.fchk)"
⚙️任务文件语法
任务名($
)
任务文件由任务块许多任务块构成,每个任务块都由$
起始,这也是脚本识别任务块的依据。脚本生成gjf文件时,会将任务名作为前缀附加到原始com/gjf/xyz文件名前作为新的gjf文件名。以下是任务块结构示例:
1
2
3
4
5
$task_name # 任务名
%source # 结构来源
! commands # 命令指令
# gaussian_keywords # 计算关键词
add = density.wfn # 读取额外输入(将追加到输入文件末尾,该字段前空一行、末尾空两行。)
示例:
1
2
3
4
$PES
%opt
# opt=modr b3lyp/6-31g*
add = 25 24 31 32 S 18 10.
该任务块将在opt任务成功结束后取最终结构进行柔性扫描。
结构来源 (%
)
支持以下几种方式提供几何结构:
1
2
3
4
5
6
%origin # 使用初始com/gjf中的结构
%smiles=CCO # 使用SMILES生成
%smiles=50-00-0 # 使用CAS号生成
%task_name # 使用其他任务的计算结果
%restart # 重新提交该任务(注意!这会覆盖当前任务。)
%file=path/to/file # 使用指定文件作为结构来源,支持gjf,com,log,xyz文件。
%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,sobMECP)
该命令词会请求打印一条可以执行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.5 (2025-2-28)
- 修复了tasker -c命令导入库失败的bug(哇靠出这种弱智bug真丢人)
- 完善了一些实用脚本
v1.0.4 (2025-2-15)
- 修复了不认识负电荷的bug
- 添加了一些了tasker命令的功能
v1.0.3 (忘了啥时候)
- 支持以指定目录文件为结构资源
- 支持Gaussian的log文件为结构资源
v1.0.2 (忘了啥时候)
- scripts命令集更新,可以调用sobMECP、optDFTw、MRCC等程序了。
- 添加了Orbital Viewer的配置文件,以便于快速可视化。
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/