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 -- 複合体内の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)

詳細な手順#

  1. ファイル->スクリプトを実行... を選択し、'InterfaceResidues.py' ファイルを選択します。
  2. モデルをロードし、鎖ごとにモデルの色を付けます。
  3. インターフェースに水が影響しない場合は、モデルから水を削除します。
  4. コマンドラインで get_chains $objSel を実行して、モデル内の鎖を取得します。
  5. コマンドラインで interfaceResidue $objSel, chain $A, chain $B を実行して、インターフェースの残基を取得します。残基は新しく生成されたオブジェクト '(interface)' に保存され、他のインターフェースの残基を取得する前にオブジェクトの名前を変更します。
  6. 極性接触を解析します:アクション->検索->極性接触->鎖間

参考文献#

  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


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。