Python で PDB フォーマットのファイルを処理

PDB

BioPython で PDB 形式のファイルを取り扱うとき、Bio.PDB、Bio.PDB.PDBParser などのモジュールを利用する。PDBParser で読み込んだファイルは、次のような構成を持つオブジェクトが作成される。最初に structure があり、次に model があり、 chainresidueatom と続きます。

PDB.Parser
  |
  |---structure
  |    |
  |    |--Model
  |         |
  |         |--Chain
  |              |
  |              |--Residue
  |                   |
  |                   |--Atom
  |---structure
  :     :
  :     :

Cα 原子の座標情報を取り出す方法

PDB ファイル(1ALK.pdb)から Cα 原子の座標を取り出す例。

import Bio.PDB
import Bio.PDB.PDBParser

pdb_parser = Bio.PDB.PDBParser() 
structure = pdb_parser.get_structure('X', '1ALK.pdb')

for model in structure.get_list():
    for chain in model.get_list():
        for residue in chain.get_list():
            for atom in residue.get_list():
                if atom.get_name() == 'CA':
                    print(atom.get_coord())
# [-14.66600037  67.0719986    4.79699993]
# [-18.43300056  67.02999878   5.33300018]
# [-18.92399979  63.8390007    3.31299996]
# [-16.12899971  62.05500031   5.21999979]
# [-17.59799957  62.99300003   8.60400009]

アミノ酸配列を取り出す方法

PDB ファイル(1ALK.pdb)から、アミノ酸は配列を取り出す方法。

import Bio.PDB
import Bio.PDB.PDBParser

pdb_parser = Bio.PDB.PDBParser()
structure = pdb_parser.get_structure('X', '1ALK.pdb')
for model in structure.get_list():
    for chain in model.get_list():
        print(chain.get_id())
        for residue in chain.get_list():
            print(residue.get_resname(), end = ' '),
# A
# LYS LYS VAL LYS VAL SER HIS ARG SER HIS SER THR GLU PRO GLY LEU VAL LEU THR LEU GLY LEU GLY
# LEU GLY GLU ASN VAL MET GLU ARG LYS LYS PRO ALA LEU VAL SER ILE PRO GLU ASP VAL VAL GLN ALA
# SER LYS SER GLY GLN VAL TYR SER PHE GLY CYS  ZN  ZN GLU HOH HOH HOH HOH HOH
# B
# LYS LYS VAL LYS VAL SER HIS ARG SER HIS SER THR GLU PRO GLY LEU VAL LEU THR LEU GLY LEU GLY
# LEU GLY GLU ASN VAL MET GLU ARG LYS LYS PRO ALA LEU VAL HOH HOH

PDB 形式から FASTA 形式に変換

PDB ファイル(1ALK.pdb)を FASTA ファイルに変換して出力する例。

from Bio.PDB import *

amino_code = {
    'ALA':'A', 'ARG':'R', 'ASN':'N', 'ASP':'D',
    'CYS':'C', 'GLN':'Q', 'GLU':'E', 'GLY':'G',
    'ILE':'I', 'LEU':'L', 'LYS':'K', 'MET':'M',
    'PHE':'F', 'PRO':'P', 'SER':'S', 'THR':'T',
    'TRP':'W', 'TYR':'Y', 'VAL':'V', 'HIS':'H',
    'ASX':'B', 'GLX':'Z', 'UNK':'K'
}

p = PDBParser()
structure = p.get_structure('X', '1ALK.pdb')

for model in structure:
    for chain in model:
        chain_id = chain.get_id()
        chain_seq = ''
        for residue in chain:
            aaa = residue.get_resname()
            a = ''
            if (aaa in amino_code):
                a = amino_code[aaa]
            chain_seq += a
        print('>' + chain_id)
        print(chain_seq)

Atom クラス

Atom クラスのオブジェクトに対して、次のようなメソッドが利用できる。

atom.get_name()原子名(CA、N、O など)
atom.get_id()原子名
atom.get_coord()原子の座標
atom.get_bfactor()Bファクター
atom.get_occupancy()占有率
atom.get_altloc()
atom.get_sigatm()
atom.get_siguij()
atom.get_anisou()
atom.get_fullname()原子名(スペース(空白文字)が含まれる)