プリプロセス#
コードを '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