PyMOL中set_dihedral命令异常,如何调整phi/psi/omega二面角?
问题本质
PyMOL的set_dihedral本身没故障——它的默认逻辑就是围绕你指定的四个原子构成的二面角,旋转第四个原子之后的所有关联原子片段。你看到的后续链移动,是因为没固定目标残基之前的部分;如果同源三聚体的其他链也跟着动,要么是选原子时不小心包含了其他链,要么是链间相互作用被连带影响了。
正确调整二面角的操作步骤
1. 精准选对定义二面角的四个原子
phi/psi/omega角的原子选择必须严格对应:
- Phi角:前一个残基的C → 当前残基的N → CA → C
- Psi角:当前残基的N → CA → C → 后一个残基的N
- Omega角:当前残基的CA → C → 后一个残基的N → CA
举个例子,要把链A上残基10的psi角设为180度,命令应该是:
set_dihedral (chain A and resi 10 and name N), (chain A and resi 10 and name CA), (chain A and resi 10 and name C), (chain A and resi 11 and name N), 180
2. 固定不需要移动的片段
如果只想调整单个二面角,不想让后续链跟着转,必须先锁死前面的原子:
- 快速固定法:用
set_fixed临时锁定目标残基之前的部分set_fixed on, chain A and resi 1-9 # 锁定残基1到9 set_dihedral [你的二面角原子选择], [目标角度] set_fixed off, chain A and resi 1-9 # 调整完解锁 - 独立片段法:适合多链复杂结构,把要调整的部分拆出来单独操作
# 拆分片段 create fixed_segment, chain A and resi 1-9 create adjust_segment, chain A and resi 10-30 # 假设链A到30号残基 # 调整二面角 set_dihedral (adjust_segment and resi 10 and name N), (adjust_segment and resi 10 and name CA), (adjust_segment and resi 10 and name C), (adjust_segment and resi 11 and name N), 180 # 合并回去 delete chain A create chain A, fixed_segment + adjust_segment delete fixed_segment, adjust_segment
3. 同源三聚体的特殊处理
如果其他链也跟着动,先排查两个点:
- 确认原子选择只针对单条链,命令里一定要加
chain X(X是你要调整的链ID),别不小心选中了三聚体的其他链 - 如果是链间相互作用(比如氢键、疏水键)导致的牵连,可以临时关闭相互作用保留:
set preserve_interactions, off # 执行调整命令 set preserve_interactions, on
4. 验证调整结果
调整完用get_dihedral确认角度是否达标:
get_dihedral (chain A and resi 10 and name N), (chain A and resi 10 and name CA), (chain A and resi 10 and name C), (chain A and resi 11 and name N)
内容的提问来源于stack exchange,提问作者Dmitry Petrov
相关产品推荐
相关产品推荐

