BaneTask 2.1.0:把量子化学批量任务、条件分支与结果查询放进同一套工作流
BaneTask 2.1.0:把量子化学批量任务、条件分支与结果查询放进同一套工作流
BaneTask 2.1.0 是一个面向量子化学批量计算的任务控制与结果整理工具。它使用 .bt / .projbt 描述文件统一组织任务、依赖、脚本、结果快照与数据库,把一批分子、一套模板、一组后处理步骤沉淀为可复用、可查询、可比较的工作流。
它的设计目标很直接:让日常算化项目里的“铺输入、串上下游、写脚本、拣结果、做横向比较”落在同一条链路上,而不是散在目录、手工命令和临时表格里。
BaneTask 2.1.0 提供什么
1. 用一份 .bt 描述完整任务链
BaneTask 内置支持四类任务块:
gaussianorcascriptother
同一个工作流里可以混合使用它们:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$opt
%source origin
%program gaussian
%control
totcore 16
totmem 64000
%keywords "opt freq B3LYP/6-31G(d)"
$sp
%source opt
%program orca
%control
totcore 32
totmem 96000
%keywords "wB97M-V def2-TZVP def2/J RIJCOSX TightSCF"
YAML 头部的 define:、matrix:、&INCLUDE 让模板复用和批量变体展开都能写得很干净。对于一组方法、溶剂、基组组合,matrix: 可以直接把它们展开成规范化任务名,并自动改写依赖、条件和猜测来源。
2. 条件分支是工作流的一部分
BaneTask 使用 %when 做条件控制:
1
2
3
4
5
6
7
8
$ts_refine
%source ts_guess
%control
guess true
%when
= 1
< -500
%keywords "opt=(ts,calcfc) B3LYP/6-31G(d)"
%when 支持:
defined [VAR]completed task_name- 基于结果快照的比较表达式
这意味着下游任务是否生成,可以直接由上游结果驱动。对过渡态筛选、激发态后续计算、批量分流这类场景来说,这套语义非常自然。
3. 命令生成与后处理链路是统一的
任务生成后,目录中会写出:
- 输入文件
pre_comdcomd- workflow 文件(
.bwrk)
%preprocess 与 %process 支持占位符替换,也支持一组常用快捷指令,例如:
scripts ...multiwfn ...copy ...banewfn ...analysis ...result .../results ...benv ...
这让“生成输入”和“把前后处理脚本一起落盘”成为同一个步骤。任务目录不只是一个输入文件夹,而是一个完整的执行单元。
4. 每个任务都会留下结果快照与规范化记录
BaneTask 会把结果链路写到任务目录和 Results/DB/ 子树中:
1
2
3
4
5
6
7
8
9
任务目录/
.bane.taskmeta.json
.bane.result.kv
Results/DB/
snapshots/<run_id>.kv
records/<run_id>.json
queue/<run_id>.ready
project.db
这几类文件各自承担不同角色:
.bane.result.kv:供%when与本地检查使用的轻量快照records/*.json:规范化记录源queue/*.ready:增量同步提示project.db:SQLite 派生查询库
每次任务完成后,项目里都会同时留下原始 log、轻量快照、规范化记录和数据库入口,方便后续继续消费。
5. 结果可以直接查询、导出和比较
BaneTask 提供两层数据库入口:
1
2
banetask db init|sync|rebuild|query|export
btask db init|sync|rebuild|query|export
最常用的视图是:
1
2
SELECT case_key, task_name, energy, nimag
FROM task_flat_latest;
项目级横向比较则由 btask compare 负责:
1
2
btask compare opt td --metric energy --path ./demo_project
btask compare td td_t1 --metric tddft.total_energy --path ./demo_project
这使得“批量任务做完以后如何看结果”有了一个统一入口。筛选、导表、比较、做矩阵统计,都可以直接在项目数据库上完成。
6. 同一套 DSL 可以面向 Linux / macOS / Windows
BaneTask 的脚本输出是跨平台设计的:
- Linux / macOS 默认输出 bash 风格脚本
- Windows 默认输出 cmd / bat 风格脚本
- 也支持切换到 Git Bash 风格
与之配套的 btc 可以由 .btc 模板快速生成 .bt,并在显式传入多个 .xyz 时直接建立 .projbt 项目布局。对于一批分子快速起项目,这个入口非常高效。
一个完整但简洁的例子
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
26
27
28
29
30
31
32
autorun: false
project: demo
define:
method: B3LYP
basis: 6-31G(d)
matrix:
solvent: gas, scrf=(smd,solvent=water)
$opt
%source origin
%program gaussian
%control
totcore 16
totmem 64000
%keywords "opt freq [method]/[basis] [solvent]"
%process
scripts fchk
%archive
strucid S-001
$sp
%source opt
%program orca
%control
totcore 32
totmem 96000
%keywords "wB97M-V def2-TZVP def2/J RIJCOSX TightSCF"
%when
= true
< -1.0
这份任务文件同时展示了:
- 头部变量与矩阵变体
- Gaussian 优化 + ORCA 单点
- 结构标识注入
- 条件生成
- 后处理脚本挂接
构建与运行环境
构建 BaneTask 需要:
- CMake >= 3.10
- C++17 编译器
- SQLite3 开发文件
bane::geometrytarget(来自安装好的bane_lib或同级../banelib)
运行工作流时,通常还会配合:
banejsMultiwfnbanewfnofakeg- 自己维护的程序环境配置与运行脚本
BaneTask 负责把工作流组织起来,把输入、脚本、快照和结果数据库放到同一套目录约定下;而具体的程序执行与外部工具链,则由你自己的环境来承载。
适合谁用
BaneTask 2.1.0 适合:
- 需要批量铺设 Gaussian / ORCA / 其他程序任务的人
- 需要把条件判断写进工作流,而不是放在外部脚本里的人
- 需要为一组分子维护统一模板、统一目录与统一结果口径的人
- 需要把计算结果沉淀为项目台账,便于后续查询、导出和比较的人
项目地址
- GitHub: https://github.com/bane-dysta/banetask
- Gitee: https://gitee.com/bane-dysta/banetask2