プリプロセス#
コードを 'InterfaceResidues.py' として保存し、それを pymol の作業ディレクトリに配置します。
コードを取得するにはクリックしてください
from pymol import cmd, stored
def interfaceResidues(cmpx, cA='c. A', cB='c. B', cutoff=1.0, selName="interface"):
"""
interfaceResidues -- 複合体内の2つの鎖間の「インターフェース」残基を見つけます。
PARAMS
cmpx
cAとcBを含む複合体
cA
cBとのインターフェース残基を検索する最初の鎖
cB
cAとのインターフェース残基を検索する2番目の鎖
cutoff
インターフェース残基と見なされる残基の面積の差分。
複合体から単一の鎖へのdASAがこのカットオフよりも大きい残基は保持されます。
ゼロはすべての残基を保持します。
selName
返される選択の名前。
RETURNS
* インターフェース残基の選択が作成され、selNameに渡した内容に応じて名前が付けられます。
* 各値が含まれる値の配列が返されます:
( モデル名、残基番号、dASA )
NOTES
同じPDBからではない2つの鎖を複合させたい場合は、次のようにcreateコマンドを使用します:
create myComplex, pdb1WithChainA or pdb2withChainX
次に、次のようにこのスクリプトにmyComplexを渡します:
interfaceResidues myComlpex, c. A, c. X
このスクリプトは複合体全体の面積を計算します。
次に、引数cAとcBを通過する2つの鎖を分離します。
これを行った後、差分を計算し、カットオフを超える残基はインターフェース残基と呼ばれます。
AUTHOR:
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')
# 2つの鎖を抽出し、新しい面積を計算する
# 注意: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を反復処理する代わりに、
# 1つの大きな選択を作成することを選択しました。
# 非常に多くの残基がある場合、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 です。