Post

BaneTask 2.1.0:把量子化学批量任务、条件分支与结果查询放进同一套工作流

BaneTask 2.1.0:把量子化学批量任务、条件分支与结果查询放进同一套工作流

BaneTask 2.1.0:把量子化学批量任务、条件分支与结果查询放进同一套工作流

BaneTask 2.1.0 是一个面向量子化学批量计算的任务控制与结果整理工具。它使用 .bt / .projbt 描述文件统一组织任务、依赖、脚本、结果快照与数据库,把一批分子、一套模板、一组后处理步骤沉淀为可复用、可查询、可比较的工作流。

它的设计目标很直接:让日常算化项目里的“铺输入、串上下游、写脚本、拣结果、做横向比较”落在同一条链路上,而不是散在目录、手工命令和临时表格里。

BaneTask 2.1.0 提供什么

1. 用一份 .bt 描述完整任务链

BaneTask 内置支持四类任务块:

  • gaussian
  • orca
  • script
  • other

同一个工作流里可以混合使用它们:

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_comd
  • comd
  • 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::geometry target(来自安装好的 bane_lib 或同级 ../banelib

运行工作流时,通常还会配合:

  • banejs
  • Multiwfn
  • banewfn
  • ofakeg
  • 自己维护的程序环境配置与运行脚本

BaneTask 负责把工作流组织起来,把输入、脚本、快照和结果数据库放到同一套目录约定下;而具体的程序执行与外部工具链,则由你自己的环境来承载。

适合谁用

BaneTask 2.1.0 适合:

  • 需要批量铺设 Gaussian / ORCA / 其他程序任务的人
  • 需要把条件判断写进工作流,而不是放在外部脚本里的人
  • 需要为一组分子维护统一模板、统一目录与统一结果口径的人
  • 需要把计算结果沉淀为项目台账,便于后续查询、导出和比较的人

项目地址

  • GitHub: https://github.com/bane-dysta/banetask
  • Gitee: https://gitee.com/bane-dysta/banetask2
This post is licensed under CC BY 4.0 by the author.
Total hits!