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
			考慮為 interface 殘基的面積差異。從複合體到單一鏈的 dASA 大於此 cutoff 的殘基將被保留。零將保留所有殘基。
			
		selName
			要返回的選擇名稱。
			
	返回
		* 創建並命名一個 interface 殘基的選擇,具體取決於您傳遞給 selName 的內容
		* 返回一個值的數組,其中每個值為:
			( modelName, residueNumber, dASA )
			
	注意
		如果您有兩條鏈不是來自同一 PDB,並且您想將它們複合在一起,請使用 create 命令,例如:
			create myComplex, pdb1WithChainA or pdb2withChainX
	然後將 myComplex 傳遞給此腳本,例如:
			interfaceResidues myComlpex, c. A, c. X
			
		此腳本計算整個複合體的面積。然後,它分離您通過參數 cA 和 cB 傳遞的兩條鏈。獲得這些後,它計算差異,並將任何超過 cutoff 的殘基稱為 interface 殘基。
			
	作者:
		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" )
	
	# 計算完成。現在,我們需要做的就是確定哪些殘基超過 cutoff 並保存它們。
	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. File->Run Script...,選擇 'InterfaceResidues.py' 文件。
  2. 加載模型,按鏈著色模型。
  3. 如果水不影響界面,則在模型中移除水。
  4. 在命令行中運行 get_chains $objSel 以獲取模型中的鏈。
  5. 在命令行中運行 interfaceResidue $objSel, chain $A, chain $B 以獲取界面中的殘基,殘基將保存在新生成的對象 '(interface)' 中,在運行命令之前重命名對象以獲取其他界面中的殘基。
  6. 分析極性接觸:Actions->find->polar contacts->between chains

參考#

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

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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。