Jayden

Jayden

在pymol中分析蛋白质-蛋白质相互作用界面

预处理#

将代码保存为 '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)

详细步骤#

  1. 文件->运行脚本...,选择 'InterfaceResidues.py' 文件。
  2. 加载模型,按链为模型上色。
  3. 如果水分子不影响接口,则在模型中移除水分子。
  4. 在命令行中运行 get_chains $objSel 获取模型中的链。
  5. 在命令行中运行 interfaceResidue $objSel, chain $A, chain $B 获取接口中的残基,残基将保存在新生成的对象 '(interface)' 中,在运行命令之前重命名对象以获取其他接口中的残基。
  6. 分析极性接触:操作->查找->极性接触->在链之间

参考#

  1. InterfaceResidues - PyMOLWiki
  2. 获取链 - PyMOLWiki
  3. Pymol - 分析蛋白 - 蛋白相互作用界面_哔哩哔哩

此文由 Mix Space 同步更新至 xLog
原始链接为 https://xxu.do/posts/academic/Analysis-of-protein-protein-interaction-interface-in-pymol


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。