xTB轨迹逐帧优化与构型筛选
从真实乙醇轨迹提取三帧优化,再比较OH旋转起点的构型筛选结果。
阅读本篇目录
下载xTB操作、筛选和IFF完整输入与真实结果,保存为example.zip:
python3 -m zipfile -e example.zip .
cd xtb-operations-examples
bash results.sh
bash plot.sh
以上只读取参考数据并画图,不启动新计算。本组使用xTB6.7.1官方预编译x86_64程序,直接加载xtb/6.7.1模块,无需自己编译;实际运行每个进程使用1个CPU线程。完整输入在inputs/,原生文本结果在reference-results/,六份CSV在data/。独立提交模板为job.slurm,请在Slurm分配的资源中执行计算命令。
1. 先区分两件事#
--mdopt对已有轨迹抽帧做优化,不会重新运行那段MD;--screen从给定的多个起点优化、筛选构型。二者输入文件名不同,分别是xtb.trj和xtbscreen.xyz。
本例先使用实际乙醇MD轨迹的首、中、末三帧,9原子、GFN2-xTB。完整三帧在inputs/ethanol-trajectory-opt/xtb.trj。它们只是短轨迹样本,不是平衡构象分布。
2. 对已有轨迹逐帧优化#
settings.inp完整内容如下:
$md
skip=1
temp=300
time=.005
step=.5
dump=1.0
hmass=0
shake=0
nvt=true
sccacc=.2
$end
关键是$md中的skip=1,表示每帧都取。若不设置,默认跳帧间隔可能远大于这个小轨迹,最终没有真正优化任何帧。
已分配资源后,可以直接运行资料包的单例入口:
module load xtb/6.7.1
python3 run.py ethanol-trajectory-opt
等价的核心命令是在包含输入的工作目录内:
xtb input.xyz --gfn 2 --mdopt --input settings.inp --parallel 1
得到xtb_ensemble.xyz,本例确实写出3个优化结构。每个结构第二行记录实际能量,单位Eh;整个文件是多帧XYZ。
head -12 reference-results/ethanol-trajectory-opt/xtb_ensemble.xyz
cat data/trajectory-optimization.csv
本例3帧优化能量约−11.39186731到−11.39186242Eh,不能据此认定搜索到了所有乙醇构象。
3. 用不同的起点做筛选#
只把短MD的三帧送进--screen时,本例没有得到新的独立构型,原始输出也保留在reference-results/ethanol-screen/。这不等于没有计算:可能只是所有起点落回参考构型所在的局部区域。
再沿C—O键把OH方向旋转0°、120°、240°,使用3个明确不同的起点,完整坐标在inputs/ethanol-screen-rotamers/xtbscreen.xyz。
python3 run.py ethanol-screen-rotamers
它运行:
xtb input.xyz --gfn 2 --screen --ewin 5 --input settings.inp --parallel 1
--ewin 5的构型能量窗口单位是kcal/mol。完整文件xtbscreen.log虽然扩展名为.log,其内容仍是多帧XYZ;用ASE读取时要明确格式:
from ase.io import read
structures = read('xtbscreen.log', index=':', format='xyz')

4. 实际得到了什么#
筛选保留原参考结构和2个更低的候选结构,后两者相对参考约−1.5504kcal/mol,C—C—O—H二面角分别在约60°和300°附近。参考构型在约180°附近。
cat data/screen-conformers.csv
python3 read.py work
read.py汇总自己工作目录的原生能量与梯度范数,写出work-summary.csv。参考CSV和图片展示的是本次真实运行结果。候选数会随起点、窗口和筛选规则变化;这不是完整构象热力学或严格的全局最低点证明。当前程序的--siman入口实际不能运行,不要用它替代这里的已运行流程。