You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成带中心空腔的Dummy Atoms立方体网格并导出坐标

Python实现带中心空腔的3D网格Dummy原子填充与导出

核心逻辑说明

  • 先通过距离阈值界定分子占据的中心空腔:网格点与分子所有原子的距离若小于阈值,视为空腔区域,不填充Dummy原子
  • 用X作为Dummy原子的通用标识(可自定义为D或其他符号)
  • 最终导出为XYZ格式文本文件,适配多数分子可视化/模拟工具

完整代码示例

import numpy as np

# ---------------------- 配置参数 ----------------------
# 替换为你的实际分子原子坐标列表(可从PDB/mol2文件读取)
molecule_atoms = [
    (0.0, 0.0, 0.0),
    (1.0, 0.0, 0.0),
    (0.0, 1.0, 0.0),
    (0.0, 0.0, 1.0)
]
# 网格参数
grid_spacing = 1.0  # 网格点间距
grid_min = (-5.0, -5.0, -5.0)  # 网格立方体最小边界
grid_max = (5.0, 5.0, 5.0)  # 网格立方体最大边界
# 空腔阈值:网格点与分子原子的最小距离,小于此值的点不填充Dummy
cavity_threshold = 2.0

# ---------------------- 生成3D网格 ----------------------
x_coords = np.arange(grid_min[0], grid_max[0], grid_spacing)
y_coords = np.arange(grid_min[1], grid_max[1], grid_spacing)
z_coords = np.arange(grid_min[2], grid_max[2], grid_spacing)
# 转换为扁平化的网格点坐标数组
grid_points = np.array(np.meshgrid(x_coords, y_coords, z_coords)).T.reshape(-1, 3)

# ---------------------- 筛选可填充Dummy的网格点 ----------------------
# 向量化计算,提升大规模网格的处理速度
diff = grid_points[:, np.newaxis, :] - np.array(molecule_atoms)[np.newaxis, :, :]
min_distances = np.min(np.linalg.norm(diff, axis=2), axis=1)
valid_points = grid_points[min_distances > cavity_threshold]

# 组装Dummy原子数据:(元素符号, x, y, z)
dummy_atoms = [("X", p[0], p[1], p[2]) for p in valid_points]

# ---------------------- 导出坐标到文本文件 ----------------------
output_path = "dummy_grid_atoms.xyz"
with open(output_path, "w") as f:
    # XYZ格式规范:第一行原子数,第二行注释,后续每行原子信息
    f.write(f"{len(dummy_atoms)}\n")
    f.write("3D grid with central cavity (Dummy atoms marked as X)\n")
    for atom in dummy_atoms:
        f.write(f"{atom[0]:<2} {atom[1]:.4f} {atom[2]:.4f} {atom[3]:.4f}\n")

print(f"已生成{len(dummy_atoms)}个Dummy原子,文件保存至{output_path}")

关键细节解析

  • 空腔判断:通过np.linalg.norm计算欧氏距离,确保Dummy原子不会与目标分子重叠;若需要更精准的空间判断,可结合分子原子的范德华半径(比如将阈值设为原子范德华半径+缓冲值)
  • 性能优化:用numpy向量化操作替代循环,处理数千甚至上万网格点时,速度会比循环快一个数量级
  • 格式兼容性:XYZ格式是VMD、PyMOL等工具的通用输入格式,直接打开即可可视化网格结构

扩展建议

  • 若分子坐标来自外部文件,可使用MDAnalysis或OpenBabel库自动读取,无需手动输入原子坐标
  • 调整grid_spacing可控制网格密度,cavity_threshold可适配不同尺寸的目标分子
  • 若需要生成非立方体网格,可修改np.arange为自定义坐标序列

内容的提问来源于stack exchange,提问作者compcal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:53