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

如何在PyMol中遍历分子并为多链分子添加链标识符?

解决PyMol中Gromacs .gro多链分子无链标识符的问题

处理Gromacs输出的.gro文件时,PyMol无法生成卡通结构——因为.gro文件里没有PyMol识别所需的链标识符。需要给场景里的每条链批量添加链ID,才能正常显示卡通模式。

已知的手动/半手动操作:

  • 可以通过Mouse > Selection Mode > Molecule手动选择单个分子
  • 用select bymolecule id 1能选中第一条链,但无法在未知原子ID的前提下批量选中所有链

现有非通用脚本(局限性说明)

下面的脚本仅适用于每条链有唯一残基名称的场景(比如RNA分子中的RX5),依赖独特残基标识,不是通用解决方案:

model = cmd.get_model("resn *5 & name O3'")
chainid = ord('A')
for a in model.atom: 
    cmd.select(f"bymolecule id {a.id}")
    cmd.alter("sele", f"chain='{chr(chainid)}'")
    chainid += 1

通用批量添加链ID的PyMol脚本

无需依赖残基特征,直接基于PyMol内部的分子分组来遍历所有独立分子,自动分配链ID:

# 初始化链ID起始字符(从'A'开始)
current_chain = ord('A')
# 存储已处理的分子ID,避免重复操作
processed_mols = set()

# 遍历所有原子,收集所有独立分子的ID
cmd.iterate_state(0, "all", "processed_mols.add(mol)")

# 逐个给分子分配链ID
for mol_id in processed_mols:
    # 选中当前分子
    cmd.select("target_mol", f"mol {mol_id}")
    # 给选中分子的所有原子设置链ID
    cmd.alter("target_mol", f"chain='{chr(current_chain)}'")
    # 切换到下一个链ID字母
    current_chain += 1
    # 删除临时选择对象
    cmd.delete("target_mol")

# 刷新结构,让链ID生效
cmd.rebuild()

使用步骤

  1. 将上述脚本粘贴到PyMol命令行或脚本窗口执行
  2. 执行后所有独立分子会依次获得A、B、C...的链标识符
  3. 此时执行show cartoon即可正常显示卡通结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:12:44