BaneTask

BaneTask

Last Update: 2026/07/19

BaneTask 是一个用 C++17 编写的量子化学任务组织与结果管理工具。它使用单个文件描述计算步骤,把结构来源、程序输入、任务依赖、资源请求、前后处理、执行调度和结果整理放进同一套流程。

Gaussian、ORCA 等量子化学程序仍负责实际计算;BaneTask 负责把一个 case 或一批 case 从输入生成一路组织到查询、绘图和结项归档。

1
2
3
4
5
6
结构文件 + .bt / .projbt
  -> banetask 展开任务并生成输入、命令和 .bwrk
  -> btrun 在本地或调度系统上执行 workflow
  -> btproc 提取规范结果并写入事实存储
  -> btdb / @derive / @plot 查询、计算、导表和出图
  -> btdb archive create 导出单文件 .btdb

下载与文档

发布包中的 bin/share/banelib/ 共同组成运行环境。移动或解压后应保留两者的相对目录关系,并把 bin/ 加入 PATH

1
2
3
export PATH=/path/to/banetask/bin:$PATH
banetask --version
btrun --version

BaneTask 能做什么

  • 用统一 DSL 描述任务块、结构来源、依赖关系、条件、资源和元数据。
  • 生成多种量子化学程序的输入文件,并在同一流程中串联不同程序。
  • 为任务生成 .bwrk workflow,在本地文件队列、Slurm、SGE、PBS 或 SSH/rsync 远程 profile 上执行。
  • 使用 define:matrix:、结构化 YAML 集合和 @foreach 批量展开参数、结构和任务变体。
  • 从计算输出提取带属性名、单位、序列轴和来源信息的规范结果。
  • 使用 @derive 完成相对能、热力学组合、表格整理和逐原子数据处理。
  • 使用 %plot / @plot 生成能垒、收敛、光谱、相关、热图、柱图、轨道能级和激发态能级等图。
  • 把 current records、历史解析 revision、内容寻址对象、分析配方和显式发布结果封装为可校验的 .btdb 单文件。

BaneTask 更适合有连续依赖、批量结构、条件分支或长期结果管理需求的项目。只提交一个现成输入文件时,也可以直接使用 btrun task,不必先写 .bt

快速开始

下面的例子先用 Gaussian 优化甲烷并计算频率,再在没有虚频时使用 ORCA 做单点计算。

目录结构:

1
2
3
methane/
  methane.xyz
  methane.bt

methane.xyz

5
methane
C      0.000000    0.000000    0.000000
H      0.629118    0.629118    0.629118
H     -0.629118   -0.629118    0.629118
H     -0.629118    0.629118   -0.629118
H      0.629118   -0.629118   -0.629118

准备程序环境

程序运行方式由 <type>.conf 描述。建议把配置放在 ~/.bane/task/envs/。下面是一个最小的 g16.conf

1
2
3
4
5
6
7
8
9
10
11
12
[main]
DESCRIPTION=Gaussian 16
SUFFIX=gjf
OUTPUT_SUFFIX=log
CONF_CORES=16
CONF_MEMORY=64000

[ENV_SETUP]
source "$HOME/apprepo/gaussian/16/env.sh"

[RUN_CMD_TEMPLATE]
g16 "${ACTUAL_INPUT_FILE}" > "${ACTUAL_OUTPUT_FILE}"

ORCA、GAMESS、AMESP、xTB 等程序使用同样的分节格式。[main] 保存标量配置;[ENV_SETUP][RUN_CMD_TEMPLATE] 和自定义区块直接保存多行脚本。

编写任务文件

methane.bt

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
autorun:false
project:methane-demo

define:
  method: B3LYP
  basis: 6-31G(d)

$opt
  %source origin
  %program gaussian
  %control
    totcore 16
    totmem 64000
  %keywords "opt freq [method]/[basis]"

$sp
  %source opt
  %program orca
  %control
    totcore 32
    totmem 96000
  %when
    completed opt
     = 0
  %keywords "wB97M-V def2-TZVP def2/J RIJCOSX TightSCF"

@derive summary
  let E = energy(sp)
  emit final_energy = E
@end

%source opt 同时声明了几何来源和上游依赖。%when 读取上游完成状态与结果快照;条件满足后,sp 才进入生成计划。

生成并运行

生成输入文件、pre_comdcomd.bwrk

1
banetask methane/methane.bt

在本地文件队列中运行:

1
btrun kick --backend local --path ./methane

btrun kick 也会在可用时先调用 banetask,因此日常使用可以直接从项目目录启动:

1
btrun kick --path ./methane

检查调度脚本而不提交:

1
btrun render --path ./methane --explain

查询与归档

同步并查询结果:

1
2
3
btdb case sync --path ./methane
btdb case query --path ./methane \
  --sql "SELECT task_name, energy, nimag FROM task_flat_latest"

结项时导出并校验单文件归档:

1
2
3
4
5
btdb case archive create \
  --path ./methane \
  --out methane.btdb

btdb archive verify methane.btdb

任务描述能力

程序后端

%program 决定输入生成方式和相关字段的解释规则。

类型主要输入字段生成内容
gaussian%keywords%extrainput*.gjf
orca%keywords%extrainput*.inp
gamess%keywords%extrainput*.inp
amesp%keywords%extrainput*.aip
mopac%keywords%extrainput*.mop
bdf%keywords%extrainput*.inp
fcclasses结构化 %source%keywords%extrainput作业计划、独立目录与启动器
mrcc%keywords%extrainput*.inp
maple%keywords%extrainput*.inp
xtb%args%extrainput*.xyz 与可选 .xcontrol
script%runner%body*.sh*.bat
other%template%param由模板定义的任意输入

未写 %program 时默认使用 gaussian。各程序可查询的结果属性取决于相应的 BaneLib 输入与结果后端;部分后端以输入生成和 workflow 为主。

依赖与条件

%source 可以引用原始结构、上游任务、显式结构文件或重启工件:

1
2
3
4
%source origin
%source opt
%source xyz=reactant.xyz
%source restart

需要多个上游资源时,可以使用逗号依赖或结构化 %source%when 支持:

  • defined [NAME]:检查变量是否存在;
  • completed <task>:检查任务是否完成;
  • completed allothers:等待同一流程的其他有效任务;
  • ``:读取能量、虚频、收敛状态等结果快照。

条件读取的是任务结果,不需要在 shell 中自行扫描日志或轮询目录。

批量展开与模块复用

define: 保存可复用变量,matrix: 对参数做组合展开:

1
2
3
4
5
6
define:
  basis: def2-TZVP

matrix:
  method: B3LYP, CAM-B3LYP, wB97XD
  solvent: water, dmso

展开后的任务保留模板任务名和 matrix.* 元数据,方便数据库筛选与横向比较。更大的流程可以使用:

  • &INCLUDE:并入任务文件、局部片段或 .btlib 命名片段;
  • @foreach / @foreach?:按 YAML 集合或结构帧生成任务;
  • btool expand:查看 include、foreach 和 matrix 展开后的规范任务文件;
  • btool fmt / btool migrate:格式化或迁移到规范 DSL v2。

前后处理命令

%preprocess%process 会生成任务目录中的 pre_comdcomd。内建命令包括:

  • run:运行脚本目录中的命令;
  • mwfn / multiwfnbanewfn:执行波函数分析配方;
  • publish:复制人工结果到 Results/--pin 可把结果纳入结项归档;
  • cpmvmkdirsnapshotmass:处理任务文件和目录;
  • resultdbcollectatomvec:补充任务结果与逐原子数据;
  • benvfork:加载环境或采集结构。

不匹配内建 DSL 的行会作为原样 shell 命令写入。项目也可以通过 manifest 扩展自定义 Process DSL 命令。

执行与调度

每个输入文件对应一个 .bwrk workflow,其中包含资源请求、环境初始化、前处理、主命令、返回码处理和后处理。btrun 负责选择执行目标并消费这些 workflow。

支持的执行方式:

  • 本地文件队列;
  • Slurm;
  • SGE;
  • PBS;
  • 使用 SSH/rsync 的远程 execution profile。

常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 生成并提交目录中的 workflow
btrun kick --path ./project

# 提交已有 .bwrk
btrun submit --path ./project

# 只渲染调度脚本
btrun render --path ./project --explain

# 不写 .bt,直接提交已有程序输入
btrun task -t orca mol1.inp mol2.inp

# 查看本地队列
btrun queue status
btrun queue list

execution profile、queue catalog 和 routing policy 用 YAML 描述。自动选择会综合 backend、profile、队列、核心数、内存、GPU 和优先级;--explain 可显示候选目标及拒绝原因。

结果、派生计算与绘图

结果存储

任务结果分成事实源、可重建缓存、运行状态和人工结果视图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.bane/
  store/
    records/                 # current records
    revisions/               # 历史解析 revision
    objects/sha256/          # 内容寻址工件
  cache/
    snapshots/               # 条件判断使用的集中快照
    project.db               # 可删除重建的 SQLite 查询缓存
  run/
    db-queue/                # 待同步标记

Results/
  Recipes/                   # 实际使用的分析、Derive 与 Plot 配方
  Derived/                   # 派生标量和表格
  Plots/                     # 图、数据、渲染脚本和 manifest
  Method/                    # 方法学 Markdown / JSON
  FCclasses/                 # 速率与量子产率汇总
  published.json             # publish --pin 的显式选择清单

.bane/store/ 保存长期事实;.bane/cache/project.db 是查询索引,可以由 btdb sync / rebuild 重新生成。Results/ 面向下载、检查和交流,不承担数据库事实源职责。

Derive 与 Plot

@derive 可以从任务结果计算标量、生成表格、筛选与排序记录、连接逐原子属性,并输出 CSV、TSV、JSONL、KV、XYZ 或 extxyz。内建函数覆盖规范能量选择、单位换算、CBS 外推、热力学组合、谐振零点能和 RRHO 等常见任务。

1
2
3
4
5
6
7
@derive activation
  let G_r = single_point(sp_R) + gibbs_corr(freq_R)
  let G_ts = single_point(sp_TS) + gibbs_corr(freq_TS)
  require nimag(freq_R) == 0
  require nimag(freq_TS) == 1
  emit delta_g = convert(G_ts - G_r, "kcal/mol")
@end

%plot / @plot 使用同一套规范属性与单位系统。图的实际数据、规范声明、渲染脚本、fingerprint 和 manifest 会一并保存,因此结果可以追溯、检查和重画。

单独处理分析脚本时,可以直接运行:

1
2
banetask analysis.btder
banetask figure.btplt --rerender-plots

单文件归档

.btdb 是不可变的导出、迁移和长期保存容器。默认封存:

  • current records 与历史 revisions;
  • records/revisions 实际引用的 SHA-256 对象;
  • Results/Recipes/
  • Results/published.json 显式选择的普通结果;
  • 可用的顶层 .bt / .projbt 上下文。

SQLite、snapshot、queue 和 scheduler 状态不进入归档。恢复时由事实源重建数据库:

1
btdb archive restore project.btdb --out ./restored_project

归档使用 ZIP64 store 容器,并通过 manifest、CRC、字节数、SHA-256、对象引用和路径规则检查完整性。SHA-256 用于检测损坏或改动,不提供作者身份认证。

命令行工具

工具职责常用入口
banetask解析 .bt / .projbt,生成输入与 workflow,执行 Derive / Plotbanetask case.bt
btrun提交、渲染和执行 .bwrk,管理本地或远程调度btrun kick --path ./project
btdb同步、查询、报告、比较、校验和 .btdb 归档btdb project sync --path ./project
btool模板、project 维护、改名、格式化、展开、解释和静态检查btool lint --strict ./cases
btc.btc 模板初始化单 case 或多 case projectbtc template.btc *.xyz
btproc结果提取、方法学说明、结构采集和逐原子处理等运行期任务btproc result ...
var读取和写入 YAML / .bt 变量var read define:method --file case.bt

查看完整帮助:

1
2
3
4
5
6
banetask --help
btrun --help
btrun help conf
btdb --help
btool --help
btc --help

配置目录

推荐的用户级目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
~/.bane/task/
  banetask.conf
  envs/                  # <type>.conf
  bt_templates/          # .bt 与变量模板
  btlib/                 # 可复用片段库
  other_templates/       # %program other 输入模板
  scripts/               # Process DSL 脚本
  multiwfn_templates/
  banewfn/
  external/
  btrun/
    profiles/
    queues/
    routes/

~/.bane/taskq/
  pending/
  running/
  done/
  failed/
  cancelled/
  logs/

banetask.conf 使用 KEY=value。环境变量覆盖配置文件,同类查找路径支持路径列表:POSIX 使用 :,Windows 使用 ;

常用配置项:

  • BANETASK_ENVCONF_PATH:程序环境配置目录;
  • BANETASK_TEMPLATE_PATH:任务与变量模板目录;
  • BANETASK_BTLIB_PATH:共享 .btlib 与片段目录;
  • BANETASK_OTHER_TEMPLATES_PATHother 输入模板目录;
  • BANETASK_SCRIPTS_PATH:Process DSL 脚本目录;
  • BANETASK_WFN_EXAMPLES_PATHBANETASK_BANEWFN_PATH:波函数分析模板目录;
  • BANETASK_GNUPLOT:gnuplot 可执行文件;
  • BTRUN_PROFILE_DIR:execution profile 目录;
  • BTRUN_QUEUE_DIR:本地文件队列目录。

完整查找顺序、环境变量和 profile 格式见项目手册。

从源码构建

BaneTask 依赖 BaneLib。BANETASK_BANELIB_ROOT 可以指向 BaneLib 的源码树、构建树或安装树。

1
2
3
4
5
6
cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DBANETASK_BANELIB_ROOT=/path/to/banelib

cmake --build build -j
cmake --install build --prefix /your/prefix

主要依赖:

  • CMake 3.10 或更新版本;
  • C++17 编译器;
  • BaneLib 的 bane::corebane::chembane::inputbane::qcbane::structure targets;
  • Threads、JsonCpp 和 SQLite。

安装完成后,确认 <prefix>/bin/<prefix>/share/banelib/ 同时存在。

项目与资源

软件附件

共 15 个文件,位于 /assets/files/banetask/

Total hits!