前處理#
將代碼保存為 '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)
詳細步驟#
File->Run Script...
,選擇 'InterfaceResidues.py' 文件。- 加載模型,按鏈上色。
- 如果水分子不影響界面,則移除模型中的水分子。
- 在命令行中運行
get_chains $objSel
以獲取模型中的鏈。 - 在命令行中運行
interfaceResidue $objSel, chain $A, chain $B
以獲取界面中的殘基,殘基將保存在新生成的對象 '(interface)' 中,運行命令之前重命名對象以獲取其他界面中的殘基。 - 分析極性接觸:
Actions->find->polar contacts->between chains
參考#
此文由 Mix Space 同步更新至 xLog
原始鏈接為 https://xxu.do/posts/academic/Analysis-of-protein-protein-interaction-interface-in-pymol