5

.pdb ファイルのクイック パーサーを作成しようとしています (タンパク質構造が表示されます)。私が調べているタンパク質の例は、KRAS (がんによく見られる) で、こちらにあります: http://www.rcsb.org/pdb/files/3GFT.pdb

下にスクロールすると、次のような行が表示されます。 ATOM 1 N MET A 1 63.645 97.355 31.526 1.00 33.80 N

最初の要素「atom」は、これがタンパク質の実際の原子に関連していることを意味します。1 は一般的な数、N は原子の種類、"MET" は残基の名前、"A" は鎖の種類、1 (2 番目の "1") は原子の数、次の 3 つの数字は、空間内の xyz 位置です。

出力が必要なのは次のようなものです (下の「1」は、一般的な数ではなく原子数に対応します): MET A 1 63.645 97.355 31.526

さらに複雑なことに、原子数 (この場合は 2 番目の「1」) が負になることがあります。そのような場合、これらの要素は実際のタンパク質ではなく、位置を見つけるために必要な生化学に関連しているため、正のエントリに到達するまでその行をスキップして続行します. さらに悪いことに、次のような行が表示されることがあります。

ATOM 139 CA AILE A 21 63.260 111.496 12.203 0.50 12.87 C
ATOM 140 CA BILE A 21 63.275 111.495 12.201 0.50 12.17 C

どちらも残基 21 を参照していますが、生化学は正確な位置を取得するほど正確ではないため、2 つの選択肢があります。理想的には、「1」、「2」などを指定しますが、最初のオプションだけを使用しても問題ありません。最後に、元の例のアトムのタイプ (「N」) については、「CA」を含む行のみを取得したいと考えています。

私はPythonの初心者で、私のトレーニングは生物統計学にあるので、これを行う最善の方法は何だろうと思っていましたか? この行を for ループで 1 行ずつ解析しますか? Pythonでより高速に実行する方法はありますか? 一部のアトムの二重エントリを処理するにはどうすればよいですか?

質問するのは少し難しいと思いますが、いくつかのガイダンスは非常に役立ちます! R を使用してすべての統計ビットをプログラムしましたが、今はファイルを正しい形式で取得する必要があります。

ありがとう!

4

4 に答える 4

7

PDBファイルを解析するためのライブラリがすでに存在しているようです。チェックアウト:

http://www.csb.pitt.edu/prody/index.html

チュートリアルを簡単に見てみると、これはあなたが話していることではないようですか?

http://www.csb.pitt.edu/prody/tutorial.html#atomic-data

于 2012-04-25T23:28:10.503 に答える
6

それは長い説明です。私はすべてが正しく得られたかどうか確信が持てません:-)フィールド(ATOMで始まる行の)が修正されている場合は、分割といくつかの比較を使用できます。ハッシュを使用して、エントリが既に表示されているかどうかを確認し、必要に応じて重複を排除しました。これがあなたの始まりになることを願っています、

visited = {}
for line in open('3GFT.pdb'):
    list = line.split()
    id = list[0]
    if id == 'ATOM':
        type = list[2]
        if type == 'CA':
            residue = list[3]
            type_of_chain = list[4]
            atom_count = int(list[5])
            position = list[6:8]
            if atom_count >= 0:
                if type_of_chain not in visited:
                    visited[type_of_chain] = 1
                    print residue,type_of_chain,atom_count,' '.join(position)

出力します、

MET A 1 62.935 97.579
GLY B 0 39.524 105.916
GLY C 0 67.295 110.376
MET D 1 59.311 124.106
GLY E 0 44.038 96.819
GLY F 0 44.187 123.590
于 2012-04-25T23:34:39.347 に答える
4

多くのアトムを含む大きなファイルの場合、フィールド間に空白がないため、コマンドpdbを使用できません。split代わりに、Protein Data Bank フォーマット定義を使用してpdbファイルを解析できます。

with open('min.pdb') as pdbfile:
    for line in pdbfile:
        if line[:4] == 'ATOM' or line[:6] == "HETATM":
            print line
            # Split the line
            splitted_line = [line[:6], line[6:11], line[12:16], line[17:20], line[21], line[22:26], line[30:38], line[38:46], line[46:54]]
            print splitted_line
            # To format again the pdb file with the fields extracted
            print "%-6s%5s %4s %3s %s%4s    %8s%8s%8s\n"%tuple(splitted_line)

以下は出力例です。

# Original line:
HETATM10000  O   HOH B3257       2.509  40.006  -4.097  1.00  0.00           O

# Fields extracted:
['HETATM', '10000', ' O  ', 'HOH', 'B', '3257', '   2.509', '  40.006', '  -4.097']

# Reformatted line:
HETATM10000  O   HOH B3257       2.509  40.006  -4.097
于 2016-08-11T10:49:46.287 に答える