💊

BiopythonによるPDBファイル解析

2022/09/03に公開

はじめに

本記事では、Bioinformaticsに用いられるPythonライブラリであるBiopythonを用いて、PDBファイルを解析する基本的な方法について記す。

対象とするPDBファイル

PDB ID=2A0Lを対象として解析を試みる。ちなみに、このPDBを選択した理由は特にない。

BiopythonによるPDBファイル解析

Structure

PDBファイルはgzip圧縮されているため、以下のように

import gzip
from Bio.PDB import PDBParser
    parser = PDBParser()
    with gzip.open(fp, mode="rt") as gzf:
        structure = parser.get_structure("X", gzf)

Model

以下のようにしてモデルを取得する。

>>> models = structure.get_list()
>>> print(models)
[<Model id=0>]

Bio.PDB.Modelによれば、X-ray crystallographyによって計測された構造の場合、Modelは1つ、NMR structuresの場合、通常複数のModelを有する。

Chain

Modelから以下のようにしてChainを取り出す。2A0Lの場合、6つのChainを有する。

>>> chains = models[0].get_list()
>>> print(chains)
[<Chain id=A>, <Chain id=B>, <Chain id=C>, <Chain id=D>, <Chain id=E>, <Chain id=F>]

Residue

Chainに含まれるResidue(残基)を取り出す。

>>> residues = chains[0].get_list()
>>> for r in residues:
>>>     print(r.get_resname(),r.get_id())
HIS (' ', 24, ' ')
PRO (' ', 25, ' ')
LEU (' ', 26, ' ')
...

Residue.get_id()で得られる residue idは以下の3項のtupleである(参考)

  • hetero-field
    • water moleculeの場合'W'
    • その他のhetero residuesの場合、'H_'に続けて残基名
    • 通常のアミノ酸や核酸(amino acids, nucleic acids)の場合は空
  • sequence identifier
    • chain上の当該残基位置を示す整数
  • insertion code

Atom

>>> for r in residues:
>>>     atoms = r.get_list()
>>>     print(r.get_resname())
>>>     for a in atoms:
>>>         print("name:%s,coord:%s,bfactor:%s,occupancy:%s,altloc:%s,sigatm:%s,siguij:%s,anisou:%s"%(a.get_name(), a.get_coord(), a.get_bfactor(), a.get_occupancy(), a.get_altloc(), a.get_sigatm(), a.get_siguij(), a.get_anisou()))
PRO
name:N,coord:[ 28.936  32.477 -10.591],bfactor:236.59,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CA,coord:[29.963 32.837 -9.604],bfactor:236.59,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:C,coord:[29.633 34.143 -8.863],bfactor:236.59,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:O,coord:[29.95  34.288 -7.68 ],bfactor:236.59,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CB,coord:[ 31.23   32.97  -10.452],bfactor:211.82,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CG,coord:[ 30.999  32.015 -11.574],bfactor:211.82,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CD,coord:[ 29.538  32.188 -11.909],bfactor:211.82,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
LEU
name:N,coord:[28.994 35.085 -9.556],bfactor:236.72,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CA,coord:[28.65  36.384 -8.96 ],bfactor:236.72,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:C,coord:[27.87  36.311 -7.65 ],bfactor:236.72,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:O,coord:[27.994 37.199 -6.806],bfactor:236.72,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CB,coord:[27.859 37.234 -9.96 ],bfactor:231.49,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CG,coord:[ 28.575  37.521 -11.283],bfactor:231.49,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CD1,coord:[ 27.655  38.298 -12.215],bfactor:231.49,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None
name:CD2,coord:[ 29.849  38.3   -11.008],bfactor:231.49,occupancy:1.0,altloc: ,sigatm:None,siguij:None,anisou:None

解析したPDBの実際の構造

pymolというソフトウェアを使って構造を可視化してみる。各Chainを色分けしており、6つのChainで構成されていることがわかる。また、各アミノ酸残基のC_\alpha(Atom.get_name()で得られるところのCA)を赤で示している。
2A0L

まとめ

  • Biopythonを用いて、PDBファイルを解析する基本的的な方法について記した。
  • BiopythonはStructe, Model, Chain, Residue, Atomという粒度でデータ構造およびAPIを提供する
  • APIの詳細についてはAIPドキュメントチュートリアル参照のこと。

Discussion