|
|
本帖最后由 smutao 于 2026-7-2 19:40 编辑
用广义旋转门转动研究配位化合物多面体重排:gTA 方法与程序简介
文 / smutao
2026年7月
本文介绍笔者最近发表在 Journal of Computational Chemistry 的工作:
Generalized Turnstile Rotation: Formulation, Visualization, Workflow Implementation, and Application for Modeling Polytopal Rearrangements
论文信息:
Tao, Y.; Wang, X.; Zou, W.; Kraka, E. Journal of Computational Chemistry 2026, 47, e70432.
DOI:https://doi.org/10.1002/jcc.70432
预印本:ChemRxiv preprint
PyMOL 插件 gTA:https://github.com/smutao/gTA-plugin
命令行工具与工作流 gTA-workflow:https://github.com/smutao/gTA-workflow
1. 为什么需要一个新的结构坐标?
在计算化学中,寻找反应路径和过渡态通常要先选一个合适的反应坐标。对于普通的键断裂、键形成、构象变化,键长、键角、二面角等内坐标往往已经够用。然而在配位化合物的动态立体化学里,很多重排并不是某一个键长或某一个二面角的简单变化,而是一组配体围绕中心原子发生协同的大幅度运动。
这类运动在文献中常被归入多面体重排(polytopal rearrangement)。典型例子包括 Berry pseudorotation、turnstile rotation、Bailar twist、Ray-Dutt twist,以及一些高配位主族或过渡金属化合物中的快速位置交换过程。它们的共同特点是:如果只盯着某一个键角或二面角,往往看不出整个结构在“怎样动”;如果强行用多个传统内坐标组合,又会遇到坐标选择不唯一、自动化困难、约束扫描不稳定等问题。
笔者这项工作关注其中一类特别直观的集体运动:turnstile rotation。中文可以暂译为“旋转门转动”。现实中的旋转门有一个轴和若干条 arm;在分子中,我们也可以把中心原子看作 anchor,把若干个直接配位原子看作 arm atoms,然后描述这些 arm 围绕某条自动定义的轴发生转动。
图1. 现实中的三臂旋转门可以帮助理解 turnstile rotation:关键是先定义旋转轴,再描述若干条 arm 的协同转动。
2. 广义旋转门转动的基本思想
传统 turnstile rotation 最早是在五配位化合物重排机制中提出的概念。后来的研究表明,不同体系里可能出现二臂、三臂甚至更多 arm 参与的类似运动。因此,若想把这种运动真正做成通用程序,就不能只服务于某一种配位数或某一个理想几何构型,而需要一个更一般的数学定义。
在本文中,我们提出了 generalized N-arm turnstile rotation。给定一个中心原子 O 和按顺时针或逆时针顺序排列的一组 arm atoms A1, A2, ..., AN,程序会根据这些点的空间分布自动确定一条旋转轴。直观地说,算法会寻找一个最能代表这些 arm 周期性分布的参考圆,并由此确定穿过中心原子的旋转轴。
图2. 广义旋转门转动的旋转轴定义示意图。实际配位环境并不一定是理想对称结构,因此需要用一个可优化的参考几何来定义轴。
这个定义带来的好处是明显的:
- 它不依赖某一个具体化学体系,也不要求严格的理想多面体对称性;
- 它把一类集体运动压缩成一个直观的角度参数;
- 它可以用于可视化、手动结构编辑、批量结构生成和后续过渡态搜索;
- 它不需要修改主流量子化学程序的源码,因此比较容易和 ORCA、xTB 以及其他计算引擎衔接。
3. PyMOL 插件 gTA:先用眼睛看清楚这个运动
为了让用户能够直观看到 generalized turnstile rotation 到底是什么,笔者开发了一个 PyMOL 插件 gTA,全称是 generalized Turnstile Assistant。它适合做两件事:一是交互式检查某个结构中是否存在合理的 turnstile-like motion;二是手动生成一个旋转后的结构,作为后续计算或演示的起点。
图3. gTA PyMOL 插件界面。用户通过鼠标选择中心原子和 arm atoms,插件自动确定旋转轴并根据滑块角度更新结构。
3.1 安装 PyMOL 和依赖
gTA 插件需要 PyMOL 3.0 或更新版本,并依赖 scipy。开源版 PyMOL 可以从 conda-forge 安装,例如:
- conda create -n pymol-opensource
- conda activate pymol-opensource
- conda install -c conda-forge pymol-open-source
- conda install -c conda-forge scipy
- pymol
复制代码
3.2 安装插件
下载 gTA-plugin 后,打开 PyMOL,进入菜单 Plugin -> Plugin Manager,在 Install New Plugin 标签页中点击 Choose file...,选择插件目录中的 gTA-src/__init__.py。一路确认后,PyMOL 的 Plugin 菜单里会出现 generalized Turnstile Assistant。
3.3 基本使用流程
- 在 PyMOL 中载入需要分析的分子结构;
- 打开 Plugin -> generalized Turnstile Assistant;
- 点击插件窗口中的 Start;
- 在 PyMOL 显示窗口中点击中心原子;
- 点击一个 arm atom,然后在右侧 wizard 菜单里点 Arm Atom Selection Done;
- 按同样方式依次选择剩余 arm atoms,注意顺序应保持顺时针或逆时针一致;
- 选择至少两个 arm 后,点击插件窗口中的 Picking Finished;
- 拖动角度滑块,或在输入框中写入角度并点击 Set Angle;
- 如果想回到初始结构,可以点击 Revert Changes。
需要注意的是,鼠标选择的是直接连接中心原子的 arm atoms。对于每条 arm 后面连着的配体片段,插件会根据连通性自动判断哪些原子应当跟随转动。
4. gTA-cli:把旋转门转动放进脚本
PyMOL 插件适合交互式观察,但如果要做一串角度的扫描、批量生成结构、或者把这个坐标接入量子化学工作流,图形界面就不够方便了。因此另一个仓库 gTA-workflow 中提供了命令行工具 gTA-cli。
gTA-cli 读取一个 JSON 配置文件,识别一个或多个 turnstile,对指定角度施加广义旋转门转动,并把旋转后的结构写成 XYZ 文件。它支持两种输入模式:
- SDF 输入:可借助 RDKit 的连通性信息,旋转整个配体片段;
- XYZ 输入:由于 XYZ 不含键连信息,需要设置 first_coord_sphere_only = true,只旋转显式列出的第一配位层 arm atoms。
4.1 安装依赖
基本依赖为 Python 3、numpy 和 scipy。如果要使用 SDF 模式,还需要 rdkit。
- pip install numpy scipy
- # rdkit 推荐通过 conda-forge 等适合自己环境的包源安装
复制代码
4.2 运行方式
在 gTA-cli/ 目录下,可以显式传入 JSON 文件运行:
- python3 code/gTA-cli.py examples/g1/g1-babel-1.json
- python3 code/gTA-cli.py examples/g2/g2-co-2.json
复制代码
4.3 一个 XYZ 模式的 JSON 示例
下面这个输入定义了两个 turnstile groups。程序会对两个角度列表做笛卡尔积组合,并为每个组合写出一个 XYZ 文件。
- {
- "input_xyz": "g2-co.xyz",
- "index_start_from": 1,
- "first_coord_sphere_only": true,
- "transformations": [
- {
- "alias": "arm_x",
- "anchor_atom": 1,
- "arm_atoms": [3, 4],
- "angle": [10, 20, 30]
- },
- {
- "alias": "arm_y",
- "anchor_atom": 1,
- "arm_atoms": [2, 7],
- "angle": [10, 20, 30]
- }
- ]
- }
复制代码
常见输出包括主 XYZ 文件和 debug 目录中的辅助文件。debug 文件对于检查程序推导出的参考几何、旋转轴和选中片段很有帮助。
实际使用时建议优先明确 index_start_from。读者之间常见的编号习惯不同,1-based 和 0-based 混用很容易导致选错原子。
5. 从结构旋转到过渡态搜索:relaxed scan 工作流
仅仅生成旋转后的结构还不够。对于研究 fluxional rearrangement 的用户来说,更重要的是:如何利用这个坐标找到过渡态?本文给出的实用策略是 turnstile rotation-driven relaxed scan。
工作流的核心循环如下:
- 从优化后的初始结构出发;
- 定义中心原子、turnstile arm atoms,以及后续约束优化中需要固定的原子;
- 用 gTA-cli 让结构按一个小角度 Delta theta 旋转,常用步长为 5 度;
- 对旋转后的结构做受约束几何优化;
- 记录能量和优化后结构;
- 把当前优化结构作为下一步扫描的起点,重复上述过程。
图4. 基于 gTA 的 turnstile rotation relaxed scan 工作流。扫描得到的 aTS 可以继续走直接 TS refinement 路线,也可以作为 NEB 路线中的内部参考结构。
这个扫描得到的能量最高点可以作为 approximate transition state,简称 aTS。之后有两条常用路线:
- TS refinement route:直接把 aTS 作为初猜,进行过渡态优化,最后通过频率分析确认是否为一阶鞍点;
- NEB route:如果直接 TS 优化不收敛,或体系较大、反复算 Hessian 代价太高,可以用起始结构、产物结构和 aTS 构造 NEB 路径,再从 NEB 结果中提取过渡态候选结构。
需要强调的是,aTS 的能量不一定接近最终真实过渡态 rTS 的能量。原因是 relaxed scan 中为了强制体现目标集体运动,会固定第一配位层中的某些原子位置,因此 aTS 可能包含额外几何应变。实际判断 aTS 是否有用时,更关键的是它在结构上是否接近后续 rTS,而不是扫描曲线上的相对能量是否已经很精确。
5.1 ORCA 工作流示例
gTA-workflow 中提供了基于 ORCA 的迭代扫描脚本。核心入口为:
- cd gTA-orca-workflow/sf4/2_scripts/
- bash ./run-workflow.sh [options]
复制代码
常用参数包括:
- -m:扫描/优化迭代次数;
- -a:每一步旋转角度,单位为度;
- -c:中心原子编号;
- -r:arm atoms 编号,例如 "2,4,5" 或 "2-4,7";
- -q 和 -u:分子电荷和自旋多重度;
- -f:约束优化中固定的原子编号;
- -i:初始 XYZ 结构;
- -n:每一步几何优化的最大循环次数;
- -k:ORCA 执行命令,可用于传入容器包装命令。
- bash ./2_scripts/run-workflow.sh \
- -m 24 \
- -a "5" \
- -c 1 \
- -r "2,4,5" \
- -q 0 \
- -u 1 \
- -f "2-5" \
- -n 50 \
- -i 1_inputs/opted_sf4.xyz \
- -k "/path/to/orca"
复制代码
5.2 xTB 工作流示例
对于初筛或较大体系,也可以先用 xTB 做类似扫描。入口为:
- cd gTA-xtb-workflow/sf4/2_scripts/
- bash ./run-workflow.sh [options]
复制代码
xTB 版本常用参数与 ORCA 版本类似,其中 -x 用于指定 xtb 可执行文件,-g 用于传递 --gfn 参数。
- bash ./run-workflow.sh \
- -m 25 \
- -a '-5' \
- -c 1 \
- -r 2,3,5 \
- -q 0 \
- -u 0 \
- -f 2-5 \
- -i 1_inputs/sf4-stable.xyz \
- -x /path/to/xtb \
- -g 2
复制代码
脚本运行后会生成工作目录,保存能量表、逐步结构、合并后的 XYZ 轨迹以及每一步的原始日志。读者可以先用较便宜的方法找出大致路径和 aTS,再用更高精度方法做后续 TS 优化和频率确认。
6. 什么时候适合使用 gTA?
这个方法不是为了替代所有反应坐标,而是用于那些“看起来就是一组配位原子在协同转动”的问题。以下情况尤其值得尝试:
- 研究对象是配位化合物或主族高配位化合物的 fluxionality;
- 怀疑存在二臂、三臂或多臂 turnstile-like rearrangement;
- 传统二面角扫描无法自然描述整个重排;
- 直接 TS 搜索很难给出合理初猜;
- 希望在不修改量子化学程序源码的情况下构建专门的扫描坐标。
相反,如果反应路径本质上是简单键断裂、质子转移、单键旋转或小幅构象变化,用常规内坐标可能更直接,不必强行套用 turnstile 模型。
7. 常见问题 Q&A
1. gTA 和普通二面角扫描有什么本质区别?
二面角扫描描述的是四个原子定义的扭转,而 gTA 描述的是若干 arm atoms 围绕自动确定的旋转轴做协同运动。对于多面体重排,后者更接近整个第一配位层的实际集体运动。
2. arm atoms 的顺序重要吗?
重要。arm atoms 应按顺时针或逆时针顺序给出。顺序混乱会影响参考圆和旋转轴的定义,从而得到不符合预期的结构操作。
3. 为什么 constrained optimization 时不能只固定正在旋转的 arm atoms?
如果固定原子太少,后续优化可能把目标运动“消掉”,甚至导致整个分子发生近似刚体转动。实际工作中通常需要固定第一配位层中更多关键原子,以维持扫描坐标的含义。
4. 扫描得到的 aTS 能量很高,是否说明方法失败?
不一定。aTS 是受约束扫描中的近似结构,可能包含额外应变。它的主要价值是提供结构上合理的 TS 初猜,而不是直接给出最终势垒。
5. 直接 TS refinement 和 NEB route 应该优先用哪个?
如果体系不大、aTS 结构看起来合理,可以先尝试直接 TS refinement。若优化失败,或者体系较大导致 Hessian 代价很高,则建议转向 NEB route。
6. gTA-cli 是否只能处理一个 turnstile?
不是。JSON 中可以定义多个 transformation groups。只要不同 turnstile 对应的旋转片段没有不合理重叠,程序可以生成多个角度组合的结构。
7. XYZ 模式为什么限制更多?
XYZ 文件本身不包含键连信息,程序无法可靠判断某个 arm 后面连着哪些原子。因此 XYZ 模式下要求 first_coord_sphere_only = true,只旋转用户显式指定的 arm atoms。
8. 这个方法能不能接机器学习势?
原则上可以。gTA-cli 只负责生成结构和推进扫描坐标,后面的能量/力计算可以由量子化学程序、半经验方法或机器学习势提供。只要能做受约束优化并输出结构与能量,就可以考虑接入类似流程。
9. 我在运行的过程中还遇到其他问题怎么办?
如果遇到大模型也解决不了的问题,可以在GitHub issue发帖或者给我发邮件(论文第一作者邮箱)。因为平时很少上论坛,所以在论坛回复问题会有困难。
8. 小结
广义旋转门转动的意义在于,它把一类原本需要大量化学直觉和手工调坐标的多面体重排,写成了一个明确、可视化、可脚本化的结构操作。PyMOL 插件 gTA 负责让用户直观看到运动本身;gTA-cli 负责批量生成结构;ORCA/xTB 工作流则展示了如何把这个坐标真正用于 relaxed scan 和过渡态搜索。
对于从事配位化学、主族高配位化合物、动态立体化学或 fluxional mechanism 研究的用户,这套工具可以作为寻找复杂重排过渡态的一个实用入口。欢迎感兴趣的读者下载试用,也欢迎在 GitHub 或论坛中反馈使用中遇到的问题。
|
|