BaneTask
Last Update: 26/2/27
BaneTask 是一个开源的量子化学任务控制系统,使用 C++17 编写,专注于简化和自动化量子化学计算工作流。如果你曾受困于手动准备大量输入文件、复杂计算流程需步步手操、结果散落难以管理,或者在切换不同量化程序时频繁重学输入格式,BaneTask 就是为了彻底解放你的双手而诞生的。
核心理念:用一个简洁统一的 .bt 文本文件描述计算流程,将依赖管理、结构提取、变量替换和结果归档全部交给程序。
项目地址:
安装与环境配置
主程序与全局路径配置
将下载的二进制文件目录加入环境变量 PATH:
1
2
export PATH=path/to/banetask/bin:$PATH
在 ~/.banetask 建立配置文件 banetask.conf。这里定义了 BaneTask 运行所需的各种脚本、模板和工作目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
# BaneTask配置文件
BANETASK_BASE_PATH=$HOME/scripts/bin
BANETASK_SCRIPTS_PATH=$HOME/.banetask/scripts
BANETASK_WFN_EXAMPLES_PATH=$HOME/.banetask/multiwfn_templates
BANETASK_OTHER_TEMPLATES_PATH=$HOME/.banetask/other_templates
BANETASK_BANEWFN_PATH=$HOME/.banetask/banewfn
BANETASK_ENVCONF_PATH=$HOME/.banetask/envs
BANETASK_EXTERNAL_SCRIPTS_PATH=$HOME/.banetask/external
BANETASK_TASK_PATH=$HOME/AutoCalc/tasks
BANETASK_LOG_PATH=$HOME/AutoCalc/tasks
BANETASK_TEMPLATE_PATH=$HOME/.banetask/bt_templates
IF_WAIT_FREQ=TRUE
量子化学程序环境配置
BaneTask 允许你为不同程序自定义运行环境。在 BANETASK_ENVCONF_PATH 下创建 .conf 文件(例如 g16.conf):
1
2
3
4
5
6
7
CONF_CORES=32
CONF_MEMORY=96000
SUFFIX=gjf
ENV_SETUP='source "$HOME/apprepo/gaussian/16-hy/scripts/env.sh"
export PGI_FASTMATH_CPU=sandybridge'
RUN_CMD_TEMPLATE='g16 "${ACTUAL_INPUT_FILE}" > "${ACTUAL_INPUT_FILE}"'
这里定义了程序的默认核数、内存、输入后缀,以及初始化环境变量(ENV_SETUP 支持跨行)和运行命令模板。
任务控制文件 bt
.bt 文件需与结构资源(如 .xyz)同名并放在同一目录。
全局与变量定义
文件头部采用 YAML 风格:
1
2
3
4
5
autorun: true
define:
func: B3LYP
basis: 6-31G(d)
solvent: water
开启 autorun: true 后,BaneTask 会在生成 pre_comd / comd 后,在任务结束阶段自动追加执行 BANETASK_SCRIPTS_PATH/run.sh --path ..(若 run.sh 存在),用于一键触发后续任务循环/队列提交。define 定义的变量可以在后续用 [变量名] 的形式全局调用。
任务块指令
每个任务块以 $ 加任务名开头,支持以下核心指令:
%source(结构资源):origin: 使用原始配对的输入文件。任务名: 智能提取指定前置任务的输出结构(目前支持 Gaussian 和 ORCA)。任务名 guess: 对于 Gaussian,不仅提取结构,还会自动添加%oldchk并挂载guess=read。xyz=文件路径: 指定特定结构文件。%program(程序类型):默认gaussian,支持orca、script、other(调用外部模板)。%control:可局部覆盖totcore/totmem,并支持:runifdef [变量名]:条件任务块。当该占位符未被替换(变量未定义)时,自动跳过整个任务块。verbosity p|t:Gaussian 路由行使用#p/#t(默认仅#)。
%keywords:计算关键词。Gaussian 自动补#,ORCA 自动补!,脚本模式下用于写入 shebang(如/bin/csh)。%extrakeywords:额外数据块(以end exkwd结尾)。可用于写入 Gaussian 坐标后的辅助输入(如.wfn文件名)、ORCA 的特殊控制块(如%tddft),或 script 的具体脚本内容。%mod:强大的结构修改器,支持spin、charge的直接赋值或加减运算(如spin add 1)。%archive:结果归档声明(可选)。用于生成任务名_archive.json并在后处理阶段自动调用banejs将关键产物沉淀到../Results/Archive。strucid XXX:写入结构 ID(便于后续索引/汇总)。properties {prop1,prop2,...}:声明需要归档的性质/文件(例如freq、tddft、log_file、fchk_file、soc等)。其中soc会触发 SOC 专用归档流程;Gaussian 任务会自动补齐log_file / fchk_file,频率/TD 任务会自动补齐freq / tddft。
后处理引擎
计算完成后,写在%process里的后处理指令会在QM计算后执行。
内置占位符:
[inputname]:当前输入文件名(任务名_原始文件名)。[taskname]:当前任务名。[originname]:原始文件名。[rootname]:结构根名(通常为分子目录名,不含任务前缀),用于保持目录/文件基名一致。
内置函数:
scripts:直接调用BANETASK_SCRIPTS_PATH下的脚本(如scripts shermo -e [inputname].log)。multiwfn:自动从模板目录拉取输入流并调用 Multiwfn 分析(如multiwfn [inputname].fchk esp)。banewfn:深度联动banewfn子程序自动化提取波函数。copy:通配符复制快捷命令(如copy fchk ../Archive等价于cp -r *.fchk ../Archive)。result / results:结果收集器。自动创建../Results/[inputname]/并将给定的文件/目录复制进去(如result *.fchk *.log)。benv:快捷加载环境配置(如benv g16)。
类似于%process,写在%preprocess里的指令会在 QM 计算命令执行前执行。
场景示例
场景:Gaussian 优化 + ORCA 高精度单点 + Shermo 热力学分析
在这个工作流中,程序先用 Gaussian 优化,然后自动将结构传递给 ORCA 进行单点能计算,最后调用shermo进行后处理:
1
2
3
4
5
6
7
8
9
10
11
12
autorun: true
$opt
%source origin
%keywords "opt freq B3LYP/6-31G(d) scrf em=gd3bj"
$sp
%program orca
%source opt
%keywords "wB97M-V def2-tzvp def2/J RIJCOSX verytightSCF defgrid3 SMD(water)"
%process
scripts shermo -e [inputname].log -f ../opt/opt_[originname].log
命令行工具
banetask 主程序
基本用法:
banetask task.bt:解析.bt并生成输入文件、.bwrk与脚本。banetask task.bt --comd-only:只重新生成/覆盖pre_comd / comd(以及归档相关 JSON),不生成新的.bwrk,也不会改写bt.status——适合你只想“刷新后处理/归档脚本”。
btask 辅助工具
除了主程序外,内置的 btask 提供模板管理、项目化批处理与一键更新能力:
btask -t:创建测试文件夹和示例文件。btask -r:删除当前目录及子目录下的所有bt.status(重置任务完成状态)。btask -l:列出系统所有可用模板。btask -c:按分类列出模板。btask -i:交互式模板选择器(上下键选择、空格勾选、v设变量)组合内置模板快速生成复杂.bt。btask -m opt freq:合并指定模板(可配合-o指定输出文件名)。btask -v task.bt mytemplate:为已有.bt自动生成define变量段(使用变量模板)。btask -d <dir>:指定模板目录(覆盖默认模板路径)。
项目模式(.projbt):
btask -b:项目批处理模式。在$BANETASK_TASK_PATH下创建项目目录结构,生成一个.projbt项目模板文件;各任务目录中的.bt通过符号链接指向该.projbt,修改一次即可同步所有任务。btask -u:项目更新模式(在包含.projbt的目录中运行)。选择任务块后可:- 清除完成标记并重新执行
banetask(可选择是否立即执行comd开算) - 在匹配的任务目录中批量执行自定义脚本
- 清除完成标记并重新执行
当你想对一个项目的所有分子“统一执行某条命令”或“统一收集结果文件”,可以直接:
btask xxx.projbt -n <taskname> --exec '<cmd>':在每个分子目录的<taskname>/下执行命令
例:btask 123.projbt -n opt --exec 'grep "SCF Done" *.log'btask xxx.projbt -n <taskname> --collect '<glob...>':收集匹配文件/目录到<projbt_dir>/results/,并自动追加_<moleculename>后缀
例:btask 123.projbt -n soc --collect 'soc*.png *.txt'--dry-run:只打印将要执行/收集的内容,不实际操作(建议首次先 dry-run 预演)。