预处理#
将代码保存为 'InterfaceResidues.py',然后将其放入您的 pymol 工作目录中。
点击我获取代码
from pymol import cmd, stored
def interfaceResidues(cmpx, cA='c. A', cB='c. B', cutoff=1.0, selName="interface"):
"""
interfaceResidues -- 查找复合体中两个链之间的 'interface' 残基。
参数
cmpx
包含 cA 和 cB 的复合体
cA
我们在其中搜索与 cB 接口的残基的第一个链
cB
我们在其中搜索与 cA 接口的残基的第二个链
cutoff
被认为是接口残基的面积差异。 从复合体到单链的 dASA 大于此截止值的残基将被保留。 零将保留所有残基。
selName
返回的选择名称。
返回
* 创建并命名一个接口残基的选择,取决于您传递给 selName 的内容
* 返回一个值的数组,其中每个值为:
( modelName, residueNumber, dASA )
注意
如果您有两个不来自同一 PDB 的链,想要将它们复合在一起,请使用 create 命令,如:
create myComplex, pdb1WithChainA or pdb2withChainX
然后将 myComplex 传递给此脚本,如:
interfaceResidues myComlpex, c. A, c. X
此脚本计算复合体的整体面积。 然后,它分离您通过参数 cA 和 cB 传入的两个链。 一旦有了这个,它计算差异,任何高于截止值的残基被称为接口残基。
作者:
Jason Vertrees, 2009.
"""
# 保存用户的设置,在设置 dot_solvent 之前
oldDS = cmd.get("dot_solvent")
cmd.set("dot_solvent", 1)
# 为临时对象/选择设置一些字符串名称
tempC, selName1 = "tempComplex", selName+"1"
chA, chB = "chA", "chB"
# 在新对象上操作并关闭原始对象
cmd.create(tempC, cmpx)
cmd.disable(cmpx)
# 移除杂物和无关链
cmd.remove(tempC + " and not (polymer and (%s or %s))" % (cA, cB))
# 获取完整复合体的面积
cmd.get_area(tempC, load_b=1)
# 将加载的 b 复制到 q 字段。
cmd.alter(tempC, 'q=b')
# 提取两个链并计算新的面积
# 注意:q 字段被复制到新对象 chA 和 chB
cmd.extract(chA, tempC + " and (" + cA + ")")
cmd.extract(chB, tempC + " and (" + cB + ")")
cmd.get_area(chA, load_b=1)
cmd.get_area(chB, load_b=1)
# 用差异更新仅链对象
cmd.alter( "%s or %s" % (chA,chB), "b=b-q" )
# 计算完成。 现在,我们需要做的就是确定哪些残基超过截止值并保存它们。
stored.r, rVal, seen = [], [], []
cmd.iterate('%s or %s' % (chA, chB), 'stored.r.append((model,resi,b))')
cmd.enable(cmpx)
cmd.select(selName1, 'none')
for (model,resi,diff) in stored.r:
key=resi+"-"+model
if abs(diff)>=float(cutoff):
if key in seen: continue
else: seen.append(key)
rVal.append( (model,resi,diff) )
# 在这里扩展选择;我选择迭代 stored.r 而不是创建一个大的选择,因为如果残基太多,PyMOL 可能会在非常大的选择上崩溃。 这几乎可以保证不会杀死 PyMOL;但是,它可能需要更长的时间来运行。
cmd.select( selName1, selName1 + " or (%s and i. %s)" % (model,resi))
# 这是如何将选择转移到另一个对象。
cmd.select(selName, cmpx + " in " + selName1)
# 清理
cmd.delete(selName1)
cmd.delete(chA)
cmd.delete(chB)
cmd.delete(tempC)
# 显示选择
cmd.enable(selName)
# 重置用户设置
cmd.set("dot_solvent", oldDS)
return rVal
cmd.extend("interfaceResidues", interfaceResidues)
详细步骤#
文件->运行脚本...
,选择 'InterfaceResidues.py' 文件。- 加载模型,按链为模型上色。
- 如果水分子不影响接口,则在模型中移除水分子。
- 在命令行中运行
get_chains $objSel
获取模型中的链。 - 在命令行中运行
interfaceResidue $objSel, chain $A, chain $B
获取接口中的残基,残基将保存在新生成的对象 '(interface)' 中,在运行命令之前重命名对象以获取其他接口中的残基。 - 分析极性接触:
操作->查找->极性接触->在链之间
参考#
此文由 Mix Space 同步更新至 xLog
原始链接为 https://xxu.do/posts/academic/Analysis-of-protein-protein-interaction-interface-in-pymol