2016-11-22 24 views
0

私は.pdbファイルを見て、タンパク質複合体の鎖AとBの異なる残基からのアルファ炭素原子の間の距離を計算し、次に距離を辞書に保存しますチェーン識別子および残基番号。pdbファイルの辞書のキー

たとえば、最初のアルファ炭素(「CA」)が鎖Aの残基100にあり、それが結合するものが鎖BIの残基123にある場合、辞書はd = {( 、100):[B、123、distance_between_atoms]}

from Bio.PDB.PDBParser import PDBParser 
parser=PDBParser() 
struct = parser.get_structure("1trk", "1trk.pdb") 

def getAlphaCarbons(chain): 
    vec = [] 
    for residue in chain: 
     for atom in residue: 
      if atom.get_name() == "CA": 
       vec = vec + [atom.get_vector()] 
    return vec 

def dist(a,b): 
    return (a-b).norm() 


chainA = struct[0]['A'] 
chainB = struct[0]['B'] 

vecA = getAlphaCarbons(chainA) 
vecB = getAlphaCarbons(chainB) 

t={} 
model=struct[0] 

for model in struct: 
    for chain in model: 
     for residue in chain: 
      for a in vecA: 
       for b in vecB: 
       if dist(a,b)<=8: 
        t={(chain,residue):[(a, b, dist(a, b))]} 

    break 
print t 

それは年齢のためのプログラムを実行されていますし、私は実行を中止しなければならなかった(私は??どこかで無限ループを行っている)

Iこれをやろうとしていた:

t = {i:[((a, b, dist(a,b)) for a in vecA) for b in vecB if dist(a, b) <= 8] for i in chainA} 
print t 

しかし、それは次の形式の残基に関する情報を印刷しています:

<Residue PHE het= resseq=591 icode= >: []  

それは距離に関係する何かを印刷していません。

ありがとう、私はすべてが明確であることを願っています。

+0

タグの説明を読み、使用することを決定してください。 * pdb *はあなたが考えるものとはまったく異なる意味を持ち、必要に応じて代わりにどのタグを使用するかを人々に正確に伝えます。ここのタグには特定の意味と用途がありますので、慎重に選択してください。ありがとう。 –

+0

ありがとう、私は次回より注意を払うよ。 – Alexandra

答えて

0

距離の計算中にCライブラリを使用することを強く推奨します。私はmdtrajをこの種のものに使用し、BioPythonのすべてのforループよりもはるかに速く動作します。

は、α-炭素のすべてのペアを取得するには:

import mdtraj as md 
def get_CA_pairs(self,pdbfile): 
    traj = md.load_pdb(pdbfile) 
    topology = traj.topology 
    CA_index = ([atom.index for atom in topology.atoms if (atom.name == 'CA')]) 
    pairs=list(itertools.combinations(CA_index,2)) 
return pairs 

その後、距離の迅速な計算のために:

def get_distances(self,pdbfile,pairs): 
    #returns list of resid1, resid2,distances between CA-CA 
    traj = md.load_pdb(pdbfile) 
    pairs=self.get_CA_pairs(pdbfile) 
    dist=md.compute_distances(traj,pairs) 
#make dictionary you desire. 
    dict=dict(zip(CA, pairs)) 
    return dict 

これは、すべてのアルファ炭素を含んでいます。各チェーンからCAを選択するには、チェーン識別子もmdtrajになければなりません。