1

私は PDB ファイルを解析しており、(chain,[coordinate]) 形式の XYZ 座標と共にチェーン名のリストを持っています。私は多くの座標を持っていますが、3 つの異なるチェーンしかありません。同じチェーンのすべての座標を 1 つのリストにまとめて、チェーン = [座標]、[座標]、[座標] などを取得したいと考えています。biopython のドキュメントを見ましたが、必要な座標を取得する方法を正確に理解するのに苦労したため、手動で座標を抽出することにしました。これは私がこれまでに持っているコードです:

pdb_file = open('1adq.pdb')
import numpy as np

chainids = []
chainpos= []

for line in pdb_file:
    if line.startswith("ATOM"):
        # get x, y, z coordinates for Cas
        chainid =str((line[20:22].strip()))
        atomid = str((line[16:20].strip()))
        pdbresn= int(line[23:26].strip())
        x = float(line[30:38].strip())
        y = float(line[38:46].strip())
        z = float(line[46:54].strip())
        if line[12:16].strip() == "CA":
            chainpos.append((chainid,[x, y, z]))
            chainids.append(chainid)

allchainids = np.unique(chainids)
print(chainpos)

そしていくつかの出力:

[('A', [1.719, -25.217, 8.694]), ('A', [2.934, -21.997, 7.084]), ('A', [5.35, -19.779,     8.986])

私の理想的な出力は次のようになります。

A = ([1.719, -25.217, 8.694]), ([2.934, -21.997, 7.084]),(5.35, -19.779,8.986])...

ありがとう!

Here is a section of PDB file:
ATOM      1  N   PRO A 238       1.285 -26.367   7.882  0.00 25.30           N  
ATOM      2  CA  PRO A 238       1.719 -25.217   8.694  0.00 25.30           C  
ATOM      3  C   PRO A 238       2.599 -24.279   7.885  0.00 25.30           C  
ATOM      4  O   PRO A 238       3.573 -24.716   7.275  0.00 25.30           O  
ATOM      5  CB  PRO A 238       2.469 -25.791   9.881  0.00 25.30           C  

A は列 4 のチェーン名です。チェーン名がアプリオリに何であるかはわかりませんが、1 行ずつ解析しているので、前述の形式でチェーン名を座標に貼り付けています。ここで、すべての座標の前に「A」を付けて、それらを「A」という 1 つのリストに貼り付けたいと思います。常に「A」であるとは限らないため、「A」でハードコードすることはできません。「L」と「H」もありますが、理解のこぶを乗り越えれば取れると思います。

4

3 に答える 3

1

次のようなものが欲しいですか:

import numpy as np

chain_dict = {}

for line in open('input'):
    if line.startswith("ATOM"):
        line = line.split()
        # get x, y, z coordinates for Cas
        chainid = line[4]
        atomid = line[2]
        pdbresn= line[5]
        xyz = [line[6],line[7],line[8]]
        if chainid not in chain_dict:
            chain_dict[chainid]=[xyz]
        else:
            chain_dict[chainid].append(xyz)

サンプルデータの場合、次のようになります。

>>> chain_dict
{'A': [['1.285', '-26.367', '7.882'], ['1.719', '-25.217', '8.694'], ['2.599', '-24.279', '7.885'], ['3.573', '-24.716', '7.275'], ['2.469', '-25.791', '9.881']]

これは辞書なので、明らかに次のことができます。

>>> chain_dict['A']
[['1.285', '-26.367', '7.882'], ['1.719', '-25.217', '8.694'], ['2.599', '-24.279', '7.885'], ['3.573', '-24.716', '7.275'], ['2.469', '-25.791', '9.881']]

興味のあるチェーンの xyz 座標だけを取得します。

于 2013-07-20T01:21:32.277 に答える