Moltemplate轨迹与DATA转换实操
用真实珠链轨迹演示DATA、RAW、XYZ转换,说明速度保留、完整帧恢复与实际终端操作。
阅读本篇目录
LAMMPS的 dump 记录随时间变化的坐标等信息,data 保存结构、类型、拓扑及可选速度,RAW/XYZ主要用于坐标交换。Moltemplate提供了这些文件之间的转换工具。本篇用一条真实运行过的12珠子链,给出可以直接照着做的步骤。
1. 下载、查看与重新计算#
下载模型、真实轨迹、转换结果与绘图脚本,保存为 example.zip,在自己的工作目录中解压:
python3 -m zipfile -e example.zip .
cd moltemplate-conversion-tools
先看本例已计算的数据和图片:
bash show-reference.sh
head -n 4 chain-energy.csv
head -n 4 conversion-checks.csv
重新计算时,在新的解压目录中提交:
sbatch job.slurm
模板向CPU分区申请56核整节点,短示例实际单进程执行;分区维护时等待资源恢复。在已分配的计算资源中,也可以用 bash run.sh 依次完成建模、500步NVE、转换、原生读回和画图。脚本拒绝覆盖已有 work/。本例使用现有Moltemplate2.22.5/Python3.11,以及Intel oneAPI2024.2、Intel MPI/MKL构建的LAMMPS30Sep2026 CPU版。绘图Python由 sisl/0.16.4 提供,用户不用安装或修改公共环境。
2. 本例计算了什么#
这是自建谐键教学模型:12个珠子、11条键,质量均为1,units lj,无非键相互作用。初始键长1.4、平衡键长1.3,势能形式为 K(r-r0)^2,K=100,因此初始整条链势能为11。这里的珠子不代表特定化学原子,长度、能量和时间均为约化单位,不能直接标成Å、eV或ps。
力场输入 inputs/chainff.lt:
ChainFF {
write_once("In Init") {
units lj
atom_style full
pair_style zero 4.0
bond_style harmonic
}
write_once("Data Masses") {
@atom:bead 1.0
}
write_once("In Settings") {
pair_coeff * *
bond_coeff @bond:link 100.0 1.3
}
}
MD输入 inputs/md.in:
include system.in.init
read_data system.data
include system.in.settings
neighbor 1.0 bin
neigh_modify delay 0 every 1 check yes
velocity all set 0 0 0
timestep 0.0001
fix integrate all nve
thermo 10
thermo_style custom step atoms pe ke etotal ebond
thermo_modify norm no format float %.16g
dump traj all custom 50 trajectory.dump id mol type x y z ix iy iz vx vy vz fx fy fz
dump_modify traj sort id format float %.16g
run 500
write_data final-native.data nocoeff
500步、步长0.0001,总时长0.05约化时间。每50步写一帧,共11帧;每10步记录热力学数据,共51行。最大整链总能量变化约3.585e-07。这段短轨迹用于文件转换演示,不用于聚合物扩散或热力学性质结论。

3. 从dump得到DATA、RAW和XYZ#
下面先使用下载包中的真实原生结果。source ./env.sh 加载工具,cd 后当前目录是自己的私有参考副本:
source ./env.sh
cd reference-results/native/chain
dump2data.py system.data -last -atomstyle full < trajectory.dump > customer-last.data
dump2data.py -raw -last < trajectory.dump > customer-last.raw
dump2data.py -xyz -last < trajectory.dump > customer-last.xyz
head -n 5 customer-last.xyz
system.data 提供原子类型、质量和键等结构信息,-last 选最后一帧,本例为第500步。不要用 tail 随意截取dump:每帧都有时间步、原子数、盒子和列名。RAW只有坐标,不含键;XYZ便于可视化,也不能独自恢复完整力场。
4. 选第450步,并保留速度#
dump2data.py 是否输出Velocities,还与作为模板的DATA是否含速度段有关。初始 system.data 没有该段,本例 write_data 得到的 final-native.data 则含速度。用后者并选择450步:
source ./env.sh
cd reference-results/native/chain
dump2data.py final-native.data -t 450 -atomstyle full < trajectory.dump > customer-step450-with-vel.data
sed -n '/Velocities/,+4p' customer-step450-with-vel.data
本例逐项检查了12个珠子的速度,并用LAMMPS实际读回验证第450步动能。换成自己的dump时,需包含对应速度列,并核对原子ID和实际 atom_style。这仍不是完整续算:恒温器、fix内部变量等状态并不由DATA完整保存;正式续算请参考LAMMPS的restart工作流。
5. RAW回写、居中与提取片段#
source ./env.sh
cd reference-results/native/chain
raw2data.py -atomstyle full system.data < last.raw > customer-from-raw.data
recenter_coords.py 0 0 0 < last.raw > customer-centered.raw
raw2data.py -atomstyle full system.data < customer-centered.raw > customer-centered.data
extract_lammps_data.py Atoms < final-native.data > customer-atoms.txt
extract_lammps_data.py Bonds < final-native.data > customer-bonds.txt
raw2data.py 用新坐标更新原有DATA,不能从无拓扑的坐标凭空生成化学键。recenter_coords.py 0 0 0 将本例坐标的几何中心移到原点,不能把它当作通用质量加权质心工具。本例质量均为1,两种中心恰好一致。Atoms/Bonds片段用于核对,不是可以直接 read_data 的完整DATA。
6. 文件末尾缺了几行时怎么办#
本例另做了一份第500步缺3行的受控损坏文件。安装的2.22.5版 dump2data.py 会报原子行数不符,并不会自动回退上一帧。配套的 keep-complete-frames.py 是本教程附带的小工具,用于保留逐字节一致的完整前缀;它不是Moltemplate原生命令,也不会补造丢失坐标。
source ./env.sh
cd reference-results/native/chain
python ../../../keep-complete-frames.py trajectory-truncated.dump customer-complete-prefix.dump
dump2data.py system.data -last -atomstyle full < customer-complete-prefix.dump > customer-last-complete.data
本例保留0到450步的10帧,最后完整结构是450步,不能仍标作500步。原始损坏文件保留。实际文件若在中间帧损坏、列格式不符或原子ID重复,脚本会拒绝处理,需先查清数据来源。
7. 得到哪些结果#
chain-energy.csv 是实际MD能量;conversion-checks.csv 列出每条转换路径的源时间步、类型数、速度段和能量。配套图展示实际坐标/力差、清理前后的类型数和完整帧数:

本例转换后全部坐标与相应源帧一致,最大坐标差约4.5×10⁻¹⁶,谐键力读回差约3.2×10⁻¹²。换体系后尤其要核对atom_style、ID对应、盒子、类型质量、拓扑、image flags和速度;不要仅凭“命令没有报错”判断转换完整。