4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CIFファイルの中身をpandas/polarsで閲覧・編集する

Last updated at Posted at 2024-12-10

わかりずらいよね、mmCIFファイル

みなさん、こんにちは!

AlphaFoldのノーベル賞受賞で、構造バイオインフォマティクスがすごく注目されてきていますよね。

そんな注目されている構造バイオインフォを陰で支えているのが タンパク質の構造情報を収録しているファイル形式です!
近年のProtein Data Bank(PDB)、AlphaFoldDatabase(AFDB)、それからAlphaFold3の予測構造を収録しているファイル形式は mmCIF と呼ばれるファイル形式になります。

使ったことのある人はわかると思うのですが、このmmCIFファイル形式……

どこに何が書かれているのかわかりずらい!!!

特に今までPDB形式に慣れていた人やこれから構造バイオインフォを始めた人にとってはなんのこっちゃわからんでしょう。

例えば座標情報だけでも、

# PDB形式
ATOM      1  N   THR A   1      67.510  52.432   1.100  1.00 53.47           N
ATOM      2  CA  THR A   1      66.663  52.938   2.184  1.00 53.80           C
ATOM      3  C   THR A   1      66.660  51.955   3.361  1.00 53.28           C
ATOM      4  O   THR A   1      65.713  51.931   4.167  1.00 53.34           O
ATOM      5  CB  THR A   1      65.183  53.192   1.684  1.00 54.32           C
ATOM      6  OG1 THR A   1      64.737  51.920   1.096  1.00 54.92           O
ATOM      7  CG2 THR A   1      65.042  54.354   0.698  1.00 54.82           C
ATOM      8  N   PRO A   2      67.726  51.174   3.426  1.00 52.46           N
ATOM      9  CA  PRO A   2      67.891  50.164   4.478  1.00 51.28           C
ATOM     10  C   PRO A   2      67.711  50.807   5.853  1.00 49.46           C
ATOM     11  O   PRO A   2      67.423  52.004   5.962  1.00 49.75           O
ATOM     12  CB  PRO A   2      69.315  49.642   4.270  1.00 51.74           C
ATOM     13  CG  PRO A   2      69.536  49.823   2.782  1.00 52.12           C
ATOM     14  CD  PRO A   2      68.872  51.170   2.486  1.00 52.56           C

PDB形式の場合調べなくても、なんとなくどの列に何が書いてあるのか推測できます。
一方でmmCIFの場合↓

# mmCIF形式
ATOM   1    N  N   . THR A 1 1   ? 67.510  52.432 1.100  1.00 53.47 ? 1   THR A N   1
ATOM   2    C  CA  . THR A 1 1   ? 66.663  52.938 2.184  1.00 53.80 ? 1   THR A CA  1
ATOM   3    C  C   . THR A 1 1   ? 66.660  51.955 3.361  1.00 53.28 ? 1   THR A C   1
ATOM   4    O  O   . THR A 1 1   ? 65.713  51.931 4.167  1.00 53.34 ? 1   THR A O   1
ATOM   5    C  CB  . THR A 1 1   ? 65.183  53.192 1.684  1.00 54.32 ? 1   THR A CB  1
ATOM   6    O  OG1 . THR A 1 1   ? 64.737  51.920 1.096  1.00 54.92 ? 1   THR A OG1 1
ATOM   7    C  CG2 . THR A 1 1   ? 65.042  54.354 0.698  1.00 54.82 ? 1   THR A CG2 1
ATOM   8    N  N   . PRO A 1 2   ? 67.726  51.174 3.426  1.00 52.46 ? 2   PRO A N   1
ATOM   9    C  CA  . PRO A 1 2   ? 67.891  50.164 4.478  1.00 51.28 ? 2   PRO A CA  1
ATOM   10   C  C   . PRO A 1 2   ? 67.711  50.807 5.853  1.00 49.46 ? 2   PRO A C   1
ATOM   11   O  O   . PRO A 1 2   ? 67.423  52.004 5.962  1.00 49.75 ? 2   PRO A O   1
ATOM   12   C  CB  . PRO A 1 2   ? 69.315  49.642 4.270  1.00 51.74 ? 2   PRO A CB  1
ATOM   13   C  CG  . PRO A 1 2   ? 69.536  49.823 2.782  1.00 52.12 ? 2   PRO A CG  1
ATOM   14   C  CD  . PRO A 1 2   ? 68.872  51.170 2.486  1.00 52.56 ? 2   PRO A CD  1

なんか列多くない!?しかもおんなじような列が複数ある???となった人は少なくないはず。このようにPDBとmmCIFでは座標情報の行だけでも結構異なる点が多いです。

そしてもう一つ問題なのが、

どうやってファイルから情報を抜き出せばいいの??

ってことがあると思います。
熟練のプログラム巧者であれば、grepコマンドとかを使って抜き出したりできるかもしれませんが、私のようなプログラムを始めたての人にとっては中々厳しいですし、そのまま抜き取ったとしても、そこから解析したりグラフを書いたりするは結構面倒です。

というわけで今回は、Pythonのデータ分析でよく用いられる pandaspolars と cifのパーサーライブラリであるGEMMIを使って、cifの中身をテーブル形式にしてわかりやすく閲覧・編集していく方法について書いていこうと思います!!

使うもの・バージョン

  • python 3.12
  • pandas 2.2.3
  • polars 1.16.0
  • gemmi 0.7.0(もしくは0.6.7 下記参照)

他のバージョンでも動くと思います。
インストール方法は各ライブラリのドキュメントを確認してください(全部pipでインストールできると思います)。

どうやら、GEMMIのPython APIのドキュメントがversion 0.6.7のもののままになっているようです。本記事においては0.7.0でも動くことを確認済みですが、APIと照らし合わせて動かしたい方は0.6.7をインストールすることを推奨します。

GEMMIとは

公式docのintroductionをClaude先生を翻訳してもらいました

GEMMI - library for structural biology
GEMMIは、主にマクロ分子結晶学(MX)で使用するために開発されたライブラリとプログラム群です。以下のデータを扱うことができます:

  • マクロ分子モデル(PDB、PDBx/mmCIF、mmJSONファイルの内容)
  • 精密化の拘束条件(CIFファイル)
  • 反射データ(MTZおよびmmCIFフォーマット)
  • 3次元グリッド上のデータ(電子密度マップ、マスク、MRC/CCP4フォーマット)
  • 結晶学的対称性

このライブラリの一部は、構造バイオインフォマティクス(対称性を考慮したタンパク質モデルの解析)、化学結晶学、およびCIFファイルを使用する他の分子構造科学で有用です(最速のオープンソースCIFパーサーを提供しています)

GEMMIはオープンソース(MPL)で移植性が高く、Linux、Windows、MacOSで動作し、WebAssemblyにコンパイルすればWebブラウザ内でも動作します。C++14で書かれており、Python(3.8以上)バインディングと、部分的なCとFortran 2003インターフェースを備えています。

時折、このプロジェクトはPDBデータの可視化にも取り組んでいます。

GEMMIは、Global Phasing Ltd.とCCP4の共同プロジェクトです。Gemmi Passにちなんで名付けられました。この名前はGEneral MacroMolecular I/o(一般的なマクロ分子入出力)としても展開できます。

ソースコードリポジトリ:https://github.com/project-gemmi/gemmi

とのこと。
このgemmiは、mmCIFファイルを構文ベースで作成・編集できるだけでなく、BioPythonのBio.PDBのように座標情報からSMCRAデータ構造を構築して構造解析もできるCIFファイルに特化した構造バイオインフォマティクス向けのライブラリになります(CIFファイル以外も扱えます)。

今回は構文ベースの方を取り扱います。GEMMIで構造解析する方法もどこかで記事を書こうと思います(やる気があれば)。

ちなみに、GEMMIはC++で書かれていますが、PythonのAPIも提供されています。今回はPythonでの使用をメインに書いていきます。

GEMMIのPython APIを使ってmmCIFを読み込む

Documentクラス

早速CIFファイルを読み込んでみましょう。

構文ベースでCIFを読み込むにはgemmi.cifread関数を使います。

from gemmi import cif
cif.read('1alk.cif')
<gemmi.cif.Document with 1 blocks (1ALK)>

読み込むと、gemmi.cif.Documentクラスのインスタンスが生成されます。ちなみに、cif.gz でも読み込むことができます。

cif.read('1alk.cif.gz')
>> <gemmi.cif.Document with 1 blocks (1ALK)> # readの場合.cif.gzもOK
# read_fileという関数もある
cif.read_file('1alk.cif')
>> <gemmi.cif.Document with 1 blocks (1ALK)>
cif.read_file('1alk.cif.gz') # read_fileは.cifのみ
>> ValueError: 1alk.cif.gz:1:0(0): expected block header (data_) 

read_fileという関数もありますが、特にこだわりなければreadを使っておけば問題ないでしょう。他にもread_mmjson read_stringなどもあります。

化合物版のCIFファイルであるChemCompファイルもreadで読み込むことができます。

cif.read('ATP.cif')
>> <gemmi.cif.Document with 1 blocks (ATP)>

Block

読み込んでインスタンス化されたgemmi.cif.Documentには一つ以上のcif.gemmi.Blockオブジェクトが含まれています(通常含まれるのはーつ)。このブロックはcifファイルの先頭に書かれているdata_****の区画が一つのBlockになります。

つまり、

  • Document → CIFファイル全体
    • Block → 全体の内 data_****の部分
      Blockが複数あるのは、ChemCompがまとまってるcomponents.cif.gz や自分でcifファイルを結合したファイルを読んだときに起こり得ます。
start = time.time()
doc = cif.read('components.cif.gz') # 800万行あるcomponents.cif
# <gemmi.cif.Document with 44466 blocks (000, 001, 002...)>

print(f'{time.time() - start:.2f} s')
>> 3.26 s

DocumentからBlockを取り出す

Documentにも色々メソッドはありますが、情報が含まれているのはBlockの方になります。
DocumentからBlockを取り出す方法は複数ありますが、Blockが一つしかない場合はBlock.sole_blockメソッドがおすすめです。

from gemmi import cif

doc = cif.read('1alk.cif.gz')

# 1つしか無いことがわかっている場合
doc.sole_block() # solo_blockメソッド
doc[0] # __getitem__(index:int)

# ブロック名がわかっている場合(cifファイルの先頭の行に書かれている data_****の****の部分)
doc.find_block('1ALK') # find_blockメソッド
doc['1ALK'] # __getitem__(name:str)
<gemmi.cif.Block 1ALK>

また、Documentはイテレーターとしても機能します。

doc = cif.read('components.cif.gz')
for block in doc:
    print(block)
<gemmi.cif.Block 000>
<gemmi.cif.Block 001>
<gemmi.cif.Block 002>
...

GEMMIでcifファイルの情報を取得する

mmCIFファイルのデータ記法

Blockから情報を抜き出す前に、mmCIFファイルにおけるデータの記法について簡単に知っておきましょう。
mmCIF内の情報は _category.item の形式(例:_entry.id )で書かれており、記述方法はkey-valueloopの二通り存在します。

  • key-value

    • 一つのカテゴリに対して一つの値しかない場合(1対1)

    • 例 (_entry など)

      _entry.id   1ALK 
      # 
      _audit_conform.dict_name       mmcif_pdbx.dic 
      _audit_conform.dict_version    5.393 
      _audit_conform.dict_location   http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic 
      
  • loop

    • 一つのカテゴリに複数の値がある場合(1対多)

    • 例(_atom_site など)

      loop_
      _atom_site.group_PDB 
      _atom_site.id 
      _atom_site.type_symbol 
      _atom_site.label_atom_id 
      _atom_site.label_alt_id 
      _atom_site.label_comp_id 
      _atom_site.label_asym_id 
      _atom_site.label_entity_id 
      _atom_site.label_seq_id 
      _atom_site.pdbx_PDB_ins_code 
      _atom_site.Cartn_x 
      _atom_site.Cartn_y 
      _atom_site.Cartn_z 
      _atom_site.occupancy 
      _atom_site.B_iso_or_equiv 
      _atom_site.pdbx_formal_charge 
      _atom_site.auth_seq_id 
      _atom_site.auth_comp_id 
      _atom_site.auth_asym_id 
      _atom_site.auth_atom_id 
      _atom_site.pdbx_PDB_model_num 
      ATOM   1    N  N   . THR A 1 1   ? 67.510  52.432 1.100  1.00 53.47 ? 1   THR A N   1 
      ATOM   2    C  CA  . THR A 1 1   ? 66.663  52.938 2.184  1.00 53.80 ? 1   THR A CA  1 
      ATOM   3    C  C   . THR A 1 1   ? 66.660  51.955 3.361  1.00 53.28 ? 1   THR A C   1 
      ATOM   4    O  O   . THR A 1 1   ? 65.713  51.931 4.167  1.00 53.34 ? 1   THR A O   1 
      ATOM   5    C  CB  . THR A 1 1   ? 65.183  53.192 1.684  1.00 54.32 ? 1   THR A CB  1 
      ATOM   6    O  OG1 . THR A 1 1   ? 64.737  51.920 1.096  1.00 54.92 ? 1   THR A OG1 1 
      ATOM   7    C  CG2 . THR A 1 1   ? 65.042  54.354 0.698  1.00 54.82 ? 1   THR A CG2 1 
      

イメージとしてはkey-valueが辞書、loopがcsvなどのテーブルデータって感じですね。

Blockから情報を取り出して Dataframeに格納する

さてお待たせしました、本題の情報の抜き出しになります。

情報の抜き出しにはgemmi.Blockget_***もしくはfind_***メソッドを使うことができます。これらには色々とメソッドがありますが、今回はget_mmcif_categoryをメインにを扱っていきます。get_mmcif_categoryはcifファイルの_categoryからitemを辞書形式で取得することができます

{
    'item_a':['value_1', 'value_2', 'value_3' ...'value_n'], #_category.item_aの中身
    'item_b':['value_1', 'value_2', 'value_3' ...'value_n'], #_category.item_bの中身
    ...
}

このままだとよくわからないと思うので、試しに1alkを例にして、座標情報が書かれている_atom_site カテゴリを取得してみましょう。

from gemmi import cif
doc = cif.read('1alk.cif.gz')
block = doc.sole_block()
names = block.get_mmcif_category_names() # block内にある _category を全部取得する
if '_atom_site.' in names:
    atoms = block.get_mmcif_category('_atom_site.')
    print(atoms) # 辞書
    print(list(atoms.keys())) #辞書のkeys = itemの一覧
{'group_PDB': ['ATOM', 'ATOM', 'ATOM', 'ATOM', 'ATOM'...
['group_PDB', 'id', 'type_symbol', 'label_atom_id', 'label_alt_id', ...

このままではみずらい...
そこで、Pandas/PolarsのDataFrameにしてみましょう!!

atoms = block.get_mmcif_category('_atom_site')
df = pd.DataFrame(atoms)
# polarsの場合
# df = pl.DataFrame(atoms, strict=False)
df

pandas.png

polarsの場合

polars.png

うおおおおおおおお!!!みやすーーーーい!!!!

この通り、テーブル形式になるととてもみやすくなります。もちろん他のカテゴリも同様にテーブルにできます。
試しに、ChemCompファイルから_chem_comp (key-value記法)の情報を抜き出してみましょう!

doc = cif.read('ATP.cif')
block = doc.sole_block()
df = pd.DataFrame(block.get_mmcif_category('_chem_comp.')).T.reset_index() #わかりやすくするために転置
df.columns = ['_chem_comp', 'value']
df

cc.png

みやすいですねー
全部のカテゴリをdataframeにしてprintしてみましょう。

from gemmi import cif
import polars as pl # polarsのがprintは見やすいので

doc = cif.read('1alk.cif.gz')
block = doc.sole_block()

for ctg_name in block.get_mmcif_category_names():
    print(f'*****{ctg_name}*****')
    print(pl.DataFrame(block.get_mmcif_category(ctg_name), strict=False))
結果(長い)
    *****_entry.*****
    shape: (1, 1)
    ┌──────┐
    │ id   │
    │ ---  │
    │ str  │
    ╞══════╡
    │ 1ALK │
    └──────┘
    *****_audit_conform.*****
    shape: (1, 3)
    ┌────────────────┬──────────────┬─────────────────────────────────┐
    │ dict_name      ┆ dict_version ┆ dict_location                   │
    │ ---            ┆ ---          ┆ ---                             │
    │ str            ┆ str          ┆ str                             │
    ╞════════════════╪══════════════╪═════════════════════════════════╡
    │ mmcif_pdbx.dic ┆ 5.393        ┆ http://mmcif.pdb.org/dictionar… │
    └────────────────┴──────────────┴─────────────────────────────────┘
    *****_database_2.*****
    shape: (2, 4)
    ┌─────────────┬───────────────┬─────────────────────────┬─────────────────────┐
    │ database_id ┆ database_code ┆ pdbx_database_accession ┆ pdbx_DOI            │
    │ ---         ┆ ---           ┆ ---                     ┆ ---                 │
    │ str         ┆ str           ┆ str                     ┆ str                 │
    ╞═════════════╪═══════════════╪═════════════════════════╪═════════════════════╡
    │ PDB         ┆ 1ALK          ┆ pdb_00001alk            ┆ 10.2210/pdb1alk/pdb │
    │ WWPDB       ┆ D_1000170967  ┆ null                    ┆ null                │
    └─────────────┴───────────────┴─────────────────────────┴─────────────────────┘
    *****_pdbx_audit_revision_history.*****
    shape: (4, 5)
    ┌─────────┬───────────────────┬────────────────┬────────────────┬───────────────┐
    │ ordinal ┆ data_content_type ┆ major_revision ┆ minor_revision ┆ revision_date │
    │ ---     ┆ ---               ┆ ---            ┆ ---            ┆ ---           │
    │ str     ┆ str               ┆ str            ┆ str            ┆ str           │
    ╞═════════╪═══════════════════╪════════════════╪════════════════╪═══════════════╡
    │ 1       ┆ Structure model   ┆ 1              ┆ 0              ┆ 1994-01-31    │
    │ 2       ┆ Structure model   ┆ 1              ┆ 1              ┆ 2008-03-24    │
    │ 3       ┆ Structure model   ┆ 1              ┆ 2              ┆ 2011-07-13    │
    │ 4       ┆ Structure model   ┆ 1              ┆ 3              ┆ 2024-06-05    │
    └─────────┴───────────────────┴────────────────┴────────────────┴───────────────┘
    *****_pdbx_audit_revision_details.*****
    shape: (1, 7)
    ┌─────────┬────────────────────┬────────────────────┬────────────┬─────────┬─────────────┬─────────┐
    │ ordinal ┆ revision_ordinal   ┆ data_content_type  ┆ provider   ┆ type    ┆ description ┆ details │
    │ ---     ┆ ---                ┆ ---                ┆ ---        ┆ ---     ┆ ---         ┆ ---     │
    │ str     ┆ str                ┆ str                ┆ str        ┆ str     ┆ null        ┆ null    │
    ╞═════════╪════════════════════╪════════════════════╪════════════╪═════════╪═════════════╪═════════╡
    │ 1       ┆ 1                  ┆ Structure model    ┆ repository ┆ Initial ┆ null        ┆ null    │
    │         ┆                    ┆                    ┆            ┆ release ┆             ┆         │
    └─────────┴────────────────────┴────────────────────┴────────────┴─────────┴─────────────┴─────────┘
    *****_pdbx_audit_revision_group.*****
    shape: (6, 4)
    ┌─────────┬──────────────────┬───────────────────┬───────────────────────────┐
    │ ordinal ┆ revision_ordinal ┆ data_content_type ┆ group                     │
    │ ---     ┆ ---              ┆ ---               ┆ ---                       │
    │ str     ┆ str              ┆ str               ┆ str                       │
    ╞═════════╪══════════════════╪═══════════════════╪═══════════════════════════╡
    │ 1       ┆ 2                ┆ Structure model   ┆ Version format compliance │
    │ 2       ┆ 3                ┆ Structure model   ┆ Version format compliance │
    │ 3       ┆ 4                ┆ Structure model   ┆ Data collection           │
    │ 4       ┆ 4                ┆ Structure model   ┆ Database references       │
    │ 5       ┆ 4                ┆ Structure model   ┆ Derived calculations      │
    │ 6       ┆ 4                ┆ Structure model   ┆ Other                     │
    └─────────┴──────────────────┴───────────────────┴───────────────────────────┘
    *****_pdbx_audit_revision_category.*****
    shape: (8, 4)
    ┌─────────┬──────────────────┬───────────────────┬────────────────────────┐
    │ ordinal ┆ revision_ordinal ┆ data_content_type ┆ category               │
    │ ---     ┆ ---              ┆ ---               ┆ ---                    │
    │ str     ┆ str              ┆ str               ┆ str                    │
    ╞═════════╪══════════════════╪═══════════════════╪════════════════════════╡
    │ 1       ┆ 4                ┆ Structure model   ┆ chem_comp_atom         │
    │ 2       ┆ 4                ┆ Structure model   ┆ chem_comp_bond         │
    │ 3       ┆ 4                ┆ Structure model   ┆ database_2             │
    │ 4       ┆ 4                ┆ Structure model   ┆ pdbx_database_status   │
    │ 5       ┆ 4                ┆ Structure model   ┆ pdbx_struct_conn_angle │
    │ 6       ┆ 4                ┆ Structure model   ┆ struct_conn            │
    │ 7       ┆ 4                ┆ Structure model   ┆ struct_ref_seq_dif     │
    │ 8       ┆ 4                ┆ Structure model   ┆ struct_site            │
    └─────────┴──────────────────┴───────────────────┴────────────────────────┘
    *****_pdbx_audit_revision_item.*****
    shape: (38, 4)
    ┌─────────┬──────────────────┬───────────────────┬─────────────────────────────────┐
    │ ordinal ┆ revision_ordinal ┆ data_content_type ┆ item                            │
    │ ---     ┆ ---              ┆ ---               ┆ ---                             │
    │ str     ┆ str              ┆ str               ┆ str                             │
    ╞═════════╪══════════════════╪═══════════════════╪═════════════════════════════════╡
    │ 1       ┆ 4                ┆ Structure model   ┆ _database_2.pdbx_DOI            │
    │ 2       ┆ 4                ┆ Structure model   ┆ _database_2.pdbx_database_acce… │
    │ 3       ┆ 4                ┆ Structure model   ┆ _pdbx_database_status.process_… │
    │ 4       ┆ 4                ┆ Structure model   ┆ _pdbx_struct_conn_angle.ptnr1_… │
    │ 5       ┆ 4                ┆ Structure model   ┆ _pdbx_struct_conn_angle.ptnr1_… │
    │ …       ┆ …                ┆ …                 ┆ …                               │
    │ 34      ┆ 4                ┆ Structure model   ┆ _struct_conn.ptnr2_label_seq_i… │
    │ 35      ┆ 4                ┆ Structure model   ┆ _struct_ref_seq_dif.details     │
    │ 36      ┆ 4                ┆ Structure model   ┆ _struct_site.pdbx_auth_asym_id  │
    │ 37      ┆ 4                ┆ Structure model   ┆ _struct_site.pdbx_auth_comp_id  │
    │ 38      ┆ 4                ┆ Structure model   ┆ _struct_site.pdbx_auth_seq_id   │
    └─────────┴──────────────────┴───────────────────┴─────────────────────────────────┘
    *****_pdbx_database_status.*****
    shape: (1, 12)
    ┌───────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ status_co ┆ entry_id ┆ recvd_ini ┆ deposit_s ┆ … ┆ status_co ┆ status_co ┆ status_co ┆ methods_d │
    │ de        ┆ ---      ┆ tial_depo ┆ ite       ┆   ┆ de_sf     ┆ de_cs     ┆ de_nmr_da ┆ evelopmen │
    │ ---       ┆ str      ┆ sition_da ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ta        ┆ t_categor │
    │ str       ┆          ┆ te        ┆ null      ┆   ┆ null      ┆ null      ┆ ---       ┆ y         │
    │           ┆          ┆ ---       ┆           ┆   ┆           ┆           ┆ null      ┆ ---       │
    │           ┆          ┆ str       ┆           ┆   ┆           ┆           ┆           ┆ null      │
    ╞═══════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ REL       ┆ 1ALK     ┆ 1993-03-0 ┆ null      ┆ … ┆ null      ┆ null      ┆ null      ┆ null      │
    │           ┆          ┆ 3         ┆           ┆   ┆           ┆           ┆           ┆           │
    └───────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_audit_author.*****
    shape: (2, 2)
    ┌─────────────┬──────────────┐
    │ name        ┆ pdbx_ordinal │
    │ ---         ┆ ---          │
    │ str         ┆ str          │
    ╞═════════════╪══════════════╡
    │ Kim, E.E.   ┆ 1            │
    │ Wyckoff, W. ┆ 2            │
    └─────────────┴──────────────┘
    *****_citation.*****
    shape: (4, 14)
    ┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ id      ┆ title      ┆ journal_a ┆ journal_v ┆ … ┆ journal_i ┆ book_publ ┆ pdbx_data ┆ pdbx_data │
    │ ---     ┆ ---        ┆ bbrev     ┆ olume     ┆   ┆ d_CSD     ┆ isher     ┆ base_id_P ┆ base_id_D │
    │ str     ┆ str        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ubMed     ┆ OI        │
    │         ┆            ┆ str       ┆ str       ┆   ┆ str       ┆ null      ┆ ---       ┆ ---       │
    │         ┆            ┆           ┆           ┆   ┆           ┆           ┆ str       ┆ str       │
    ╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ primary ┆ Reaction   ┆ J.Mol.Bio ┆ 218       ┆ … ┆ 0070      ┆ null      ┆ 2010919   ┆ 10.1016/0 │
    │         ┆ mechanism  ┆ l.        ┆           ┆   ┆           ┆           ┆           ┆ 022-2836( │
    │         ┆ of         ┆           ┆           ┆   ┆           ┆           ┆           ┆ 91)90724- │
    │         ┆ alkaline…  ┆           ┆           ┆   ┆           ┆           ┆           ┆ K         │
    │ 1       ┆ Bacillus   ┆ J.Biol.Ch ┆ 266       ┆ … ┆ 0071      ┆ null      ┆ null      ┆ null      │
    │         ┆ Subtilis   ┆ em.       ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ Alkaline   ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ Pho…       ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    │ 2       ┆ Structure  ┆ Clin.Chim ┆ 186       ┆ … ┆ 0769      ┆ null      ┆ null      ┆ null      │
    │         ┆ of         ┆ .Acta     ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ Alkaline   ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ Phosphat…  ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    │ 3       ┆ Refined    ┆ J.Mol.Bio ┆ 186       ┆ … ┆ 0070      ┆ null      ┆ null      ┆ null      │
    │         ┆ Structure  ┆ l.        ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ of         ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    │         ┆ Alkaline … ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    └─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_citation_author.*****
    shape: (15, 4)
    ┌─────────────┬──────────────────────┬─────────┬──────────────────┐
    │ citation_id ┆ name                 ┆ ordinal ┆ identifier_ORCID │
    │ ---         ┆ ---                  ┆ ---     ┆ ---              │
    │ str         ┆ str                  ┆ str     ┆ null             │
    ╞═════════════╪══════════════════════╪═════════╪══════════════════╡
    │ primary     ┆ Kim, E.E.            ┆ 1       ┆ null             │
    │ primary     ┆ Wyckoff, H.W.        ┆ 2       ┆ null             │
    │ 1           ┆ Hulett, F.M.         ┆ 3       ┆ null             │
    │ 1           ┆ Kim, E.E.            ┆ 4       ┆ null             │
    │ 1           ┆ Bookstein, C.        ┆ 5       ┆ null             │
    │ …           ┆ …                    ┆ …       ┆ …                │
    │ 3           ┆ Sowadski, J.M.       ┆ 11      ┆ null             │
    │ 3           ┆ Handschumacher, M.D. ┆ 12      ┆ null             │
    │ 3           ┆ Murthy, H.M.K.       ┆ 13      ┆ null             │
    │ 3           ┆ Foster, B.A.         ┆ 14      ┆ null             │
    │ 3           ┆ Wyckoff, H.W.        ┆ 15      ┆ null             │
    └─────────────┴──────────────────────┴─────────┴──────────────────┘
    *****_entity.*****
    shape: (5, 10)
    ┌─────┬─────────────┬────────────┬─────────────┬───┬─────────┬─────────────┬─────────────┬─────────┐
    │ id  ┆ type        ┆ src_method ┆ pdbx_descri ┆ … ┆ pdbx_ec ┆ pdbx_mutati ┆ pdbx_fragme ┆ details │
    │ --- ┆ ---         ┆ ---        ┆ ption       ┆   ┆ ---     ┆ on          ┆ nt          ┆ ---     │
    │ str ┆ str         ┆ str        ┆ ---         ┆   ┆ str     ┆ ---         ┆ ---         ┆ null    │
    │     ┆             ┆            ┆ str         ┆   ┆         ┆ null        ┆ null        ┆         │
    ╞═════╪═════════════╪════════════╪═════════════╪═══╪═════════╪═════════════╪═════════════╪═════════╡
    │ 1   ┆ polymer     ┆ man        ┆ ALKALINE    ┆ … ┆ 3.1.3.1 ┆ null        ┆ null        ┆ null    │
    │     ┆             ┆            ┆ PHOSPHATASE ┆   ┆         ┆             ┆             ┆         │
    │ 2   ┆ non-polymer ┆ syn        ┆ ZINC ION    ┆ … ┆ null    ┆ null        ┆ null        ┆ null    │
    │ 3   ┆ non-polymer ┆ syn        ┆ MAGNESIUM   ┆ … ┆ null    ┆ null        ┆ null        ┆ null    │
    │     ┆             ┆            ┆ ION         ┆   ┆         ┆             ┆             ┆         │
    │ 4   ┆ non-polymer ┆ syn        ┆ PHOSPHATE   ┆ … ┆ null    ┆ null        ┆ null        ┆ null    │
    │     ┆             ┆            ┆ ION         ┆   ┆         ┆             ┆             ┆         │
    │ 5   ┆ water       ┆ nat        ┆ water       ┆ … ┆ null    ┆ null        ┆ null        ┆ null    │
    └─────┴─────────────┴────────────┴─────────────┴───┴─────────┴─────────────┴─────────────┴─────────┘
    *****_entity_poly.*****
    shape: (1, 8)
    ┌───────────┬────────────┬────────────┬────────────┬───────────┬───────────┬───────────┬───────────┐
    │ entity_id ┆ type       ┆ nstd_linka ┆ nstd_monom ┆ pdbx_seq_ ┆ pdbx_seq_ ┆ pdbx_stra ┆ pdbx_targ │
    │ ---       ┆ ---        ┆ ge         ┆ er         ┆ one_lette ┆ one_lette ┆ nd_id     ┆ et_identi │
    │ str       ┆ str        ┆ ---        ┆ ---        ┆ r_code    ┆ r_code_ca ┆ ---       ┆ fier      │
    │           ┆            ┆ str        ┆ str        ┆ ---       ┆ n         ┆ str       ┆ ---       │
    │           ┆            ┆            ┆            ┆ str       ┆ ---       ┆           ┆ null      │
    │           ┆            ┆            ┆            ┆           ┆ str       ┆           ┆           │
    ╞═══════════╪════════════╪════════════╪════════════╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ 1         ┆ polypeptid ┆ no         ┆ no         ┆ TPEMPVLEN ┆ TPEMPVLEN ┆ A,B       ┆ null      │
    │           ┆ e(L)       ┆            ┆            ┆ RAAQGNITA ┆ RAAQGNITA ┆           ┆           │
    │           ┆            ┆            ┆            ┆ PGGARRLTG ┆ PGGARRLTG ┆           ┆           │
    │           ┆            ┆            ┆            ┆ DQT…      ┆ DQT…      ┆           ┆           │
    └───────────┴────────────┴────────────┴────────────┴───────────┴───────────┴───────────┴───────────┘
    *****_pdbx_entity_nonpoly.*****
    shape: (4, 3)
    ┌───────────┬───────────────┬─────────┐
    │ entity_id ┆ name          ┆ comp_id │
    │ ---       ┆ ---           ┆ ---     │
    │ str       ┆ str           ┆ str     │
    ╞═══════════╪═══════════════╪═════════╡
    │ 2         ┆ ZINC ION      ┆ ZN      │
    │ 3         ┆ MAGNESIUM ION ┆ MG      │
    │ 4         ┆ PHOSPHATE ION ┆ PO4     │
    │ 5         ┆ water         ┆ HOH     │
    └───────────┴───────────────┴─────────┘
    *****_entity_poly_seq.*****
    shape: (449, 4)
    ┌───────────┬─────┬────────┬────────┐
    │ entity_id ┆ num ┆ mon_id ┆ hetero │
    │ ---       ┆ --- ┆ ---    ┆ ---    │
    │ str       ┆ str ┆ str    ┆ str    │
    ╞═══════════╪═════╪════════╪════════╡
    │ 1         ┆ 1   ┆ THR    ┆ n      │
    │ 1         ┆ 2   ┆ PRO    ┆ n      │
    │ 1         ┆ 3   ┆ GLU    ┆ n      │
    │ 1         ┆ 4   ┆ MET    ┆ n      │
    │ 1         ┆ 5   ┆ PRO    ┆ n      │
    │ …         ┆ …   ┆ …      ┆ …      │
    │ 1         ┆ 445 ┆ ALA    ┆ n      │
    │ 1         ┆ 446 ┆ LEU    ┆ n      │
    │ 1         ┆ 447 ┆ GLY    ┆ n      │
    │ 1         ┆ 448 ┆ LEU    ┆ n      │
    │ 1         ┆ 449 ┆ LYS    ┆ n      │
    └───────────┴─────┴────────┴────────┘
    *****_entity_src_gen.*****
    shape: (1, 48)
    ┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐
    │ entity_id ┆ pdbx_src_ ┆ pdbx_alt_ ┆ pdbx_seq_ ┆ … ┆ expressio ┆ plasmid_n ┆ plasmid_d ┆ pdbx_des │
    │ ---       ┆ id        ┆ source_fl ┆ type      ┆   ┆ n_system_ ┆ ame       ┆ etails    ┆ cription │
    │ str       ┆ ---       ┆ ag        ┆ ---       ┆   ┆ id        ┆ ---       ┆ ---       ┆ ---      │
    │           ┆ str       ┆ ---       ┆ null      ┆   ┆ ---       ┆ null      ┆ null      ┆ null     │
    │           ┆           ┆ str       ┆           ┆   ┆ null      ┆           ┆           ┆          │
    ╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡
    │ 1         ┆ 1         ┆ sample    ┆ null      ┆ … ┆ null      ┆ null      ┆ null      ┆ null     │
    └───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘
    *****_chem_comp.*****
    shape: (24, 7)
    ┌─────┬───────────────┬───────────────┬───────────────┬──────────────┬──────────────┬──────────────┐
    │ id  ┆ type          ┆ mon_nstd_flag ┆ name          ┆ pdbx_synonym ┆ formula      ┆ formula_weig │
    │ --- ┆ ---           ┆ ---           ┆ ---           ┆ s            ┆ ---          ┆ ht           │
    │ str ┆ str           ┆ str           ┆ str           ┆ ---          ┆ str          ┆ ---          │
    │     ┆               ┆               ┆               ┆ null         ┆              ┆ str          │
    ╞═════╪═══════════════╪═══════════════╪═══════════════╪══════════════╪══════════════╪══════════════╡
    │ ALA ┆ L-peptide     ┆ y             ┆ ALANINE       ┆ null         ┆ C3 H7 N O2   ┆ 89.093       │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ ARG ┆ L-peptide     ┆ y             ┆ ARGININE      ┆ null         ┆ C6 H15 N4 O2 ┆ 175.209      │
    │     ┆ linking       ┆               ┆               ┆              ┆ 1            ┆              │
    │ ASN ┆ L-peptide     ┆ y             ┆ ASPARAGINE    ┆ null         ┆ C4 H8 N2 O3  ┆ 132.118      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ ASP ┆ L-peptide     ┆ y             ┆ ASPARTIC ACID ┆ null         ┆ C4 H7 N O4   ┆ 133.103      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ CYS ┆ L-peptide     ┆ y             ┆ CYSTEINE      ┆ null         ┆ C3 H7 N O2 S ┆ 121.158      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ …   ┆ …             ┆ …             ┆ …             ┆ …            ┆ …            ┆ …            │
    │ THR ┆ L-peptide     ┆ y             ┆ THREONINE     ┆ null         ┆ C4 H9 N O3   ┆ 119.119      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ TRP ┆ L-peptide     ┆ y             ┆ TRYPTOPHAN    ┆ null         ┆ C11 H12 N2   ┆ 204.225      │
    │     ┆ linking       ┆               ┆               ┆              ┆ O2           ┆              │
    │ TYR ┆ L-peptide     ┆ y             ┆ TYROSINE      ┆ null         ┆ C9 H11 N O3  ┆ 181.189      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ VAL ┆ L-peptide     ┆ y             ┆ VALINE        ┆ null         ┆ C5 H11 N O2  ┆ 117.146      │
    │     ┆ linking       ┆               ┆               ┆              ┆              ┆              │
    │ ZN  ┆ non-polymer   ┆ false         ┆ ZINC ION      ┆ null         ┆ Zn 2         ┆ 65.409       │
    └─────┴───────────────┴───────────────┴───────────────┴──────────────┴──────────────┴──────────────┘
    *****_pdbx_poly_seq_scheme.*****
    shape: (898, 12)
    ┌─────────┬───────────┬────────┬────────┬───┬─────────────┬───────────────┬──────────────┬────────┐
    │ asym_id ┆ entity_id ┆ seq_id ┆ mon_id ┆ … ┆ auth_mon_id ┆ pdb_strand_id ┆ pdb_ins_code ┆ hetero │
    │ ---     ┆ ---       ┆ ---    ┆ ---    ┆   ┆ ---         ┆ ---           ┆ ---          ┆ ---    │
    │ str     ┆ str       ┆ str    ┆ str    ┆   ┆ str         ┆ str           ┆ bool         ┆ str    │
    ╞═════════╪═══════════╪════════╪════════╪═══╪═════════════╪═══════════════╪══════════════╪════════╡
    │ A       ┆ 1         ┆ 1      ┆ THR    ┆ … ┆ THR         ┆ A             ┆ false        ┆ n      │
    │ A       ┆ 1         ┆ 2      ┆ PRO    ┆ … ┆ PRO         ┆ A             ┆ false        ┆ n      │
    │ A       ┆ 1         ┆ 3      ┆ GLU    ┆ … ┆ GLU         ┆ A             ┆ false        ┆ n      │
    │ A       ┆ 1         ┆ 4      ┆ MET    ┆ … ┆ MET         ┆ A             ┆ false        ┆ n      │
    │ A       ┆ 1         ┆ 5      ┆ PRO    ┆ … ┆ PRO         ┆ A             ┆ false        ┆ n      │
    │ …       ┆ …         ┆ …      ┆ …      ┆ … ┆ …           ┆ …             ┆ …            ┆ …      │
    │ B       ┆ 1         ┆ 445    ┆ ALA    ┆ … ┆ ALA         ┆ B             ┆ false        ┆ n      │
    │ B       ┆ 1         ┆ 446    ┆ LEU    ┆ … ┆ LEU         ┆ B             ┆ false        ┆ n      │
    │ B       ┆ 1         ┆ 447    ┆ GLY    ┆ … ┆ GLY         ┆ B             ┆ false        ┆ n      │
    │ B       ┆ 1         ┆ 448    ┆ LEU    ┆ … ┆ LEU         ┆ B             ┆ false        ┆ n      │
    │ B       ┆ 1         ┆ 449    ┆ LYS    ┆ … ┆ LYS         ┆ B             ┆ false        ┆ n      │
    └─────────┴───────────┴────────┴────────┴───┴─────────────┴───────────────┴──────────────┴────────┘
    *****_pdbx_nonpoly_scheme.*****
    shape: (14, 10)
    ┌─────────┬───────────┬────────┬────────────┬───┬────────────┬────────────┬────────────┬───────────┐
    │ asym_id ┆ entity_id ┆ mon_id ┆ ndb_seq_nu ┆ … ┆ pdb_mon_id ┆ auth_mon_i ┆ pdb_strand ┆ pdb_ins_c │
    │ ---     ┆ ---       ┆ ---    ┆ m          ┆   ┆ ---        ┆ d          ┆ _id        ┆ ode       │
    │ str     ┆ str       ┆ str    ┆ ---        ┆   ┆ str        ┆ ---        ┆ ---        ┆ ---       │
    │         ┆           ┆        ┆ str        ┆   ┆            ┆ str        ┆ str        ┆ bool      │
    ╞═════════╪═══════════╪════════╪════════════╪═══╪════════════╪════════════╪════════════╪═══════════╡
    │ C       ┆ 2         ┆ ZN     ┆ 1          ┆ … ┆ ZN         ┆ ZN         ┆ A          ┆ false     │
    │ D       ┆ 2         ┆ ZN     ┆ 1          ┆ … ┆ ZN         ┆ ZN         ┆ A          ┆ false     │
    │ E       ┆ 3         ┆ MG     ┆ 1          ┆ … ┆ MG         ┆ MG         ┆ A          ┆ false     │
    │ F       ┆ 4         ┆ PO4    ┆ 1          ┆ … ┆ PO4        ┆ PO4        ┆ A          ┆ false     │
    │ G       ┆ 2         ┆ ZN     ┆ 1          ┆ … ┆ ZN         ┆ ZN         ┆ B          ┆ false     │
    │ …       ┆ …         ┆ …      ┆ …          ┆ … ┆ …          ┆ …          ┆ …          ┆ …         │
    │ K       ┆ 5         ┆ HOH    ┆ 2          ┆ … ┆ HOH        ┆ HOH        ┆ A          ┆ false     │
    │ K       ┆ 5         ┆ HOH    ┆ 3          ┆ … ┆ HOH        ┆ HOH        ┆ A          ┆ false     │
    │ L       ┆ 5         ┆ HOH    ┆ 1          ┆ … ┆ HOH        ┆ HOH        ┆ B          ┆ false     │
    │ L       ┆ 5         ┆ HOH    ┆ 2          ┆ … ┆ HOH        ┆ HOH        ┆ B          ┆ false     │
    │ L       ┆ 5         ┆ HOH    ┆ 3          ┆ … ┆ HOH        ┆ HOH        ┆ B          ┆ false     │
    └─────────┴───────────┴────────┴────────────┴───┴────────────┴────────────┴────────────┴───────────┘
    *****_software.*****
    shape: (4, 5)
    ┌────────┬────────────────┬─────────┬─────────────┬──────────────┐
    │ name   ┆ classification ┆ version ┆ citation_id ┆ pdbx_ordinal │
    │ ---    ┆ ---            ┆ ---     ┆ ---         ┆ ---          │
    │ str    ┆ str            ┆ bool    ┆ null        ┆ str          │
    ╞════════╪════════════════╪═════════╪═════════════╪══════════════╡
    │ X-PLOR ┆ model building ┆ false   ┆ null        ┆ 1            │
    │ PROFFT ┆ refinement     ┆ false   ┆ null        ┆ 2            │
    │ X-PLOR ┆ refinement     ┆ false   ┆ null        ┆ 3            │
    │ X-PLOR ┆ phasing        ┆ false   ┆ null        ┆ 4            │
    └────────┴────────────────┴─────────┴─────────────┴──────────────┘
    *****_cell.*****
    shape: (1, 9)
    ┌──────────┬──────────┬──────────┬──────────┬───┬────────────┬─────────────┬───────┬───────────────┐
    │ entry_id ┆ length_a ┆ length_b ┆ length_c ┆ … ┆ angle_beta ┆ angle_gamma ┆ Z_PDB ┆ pdbx_unique_a │
    │ ---      ┆ ---      ┆ ---      ┆ ---      ┆   ┆ ---        ┆ ---         ┆ ---   ┆ xis           │
    │ str      ┆ str      ┆ str      ┆ str      ┆   ┆ str        ┆ str         ┆ str   ┆ ---           │
    │          ┆          ┆          ┆          ┆   ┆            ┆             ┆       ┆ null          │
    ╞══════════╪══════════╪══════════╪══════════╪═══╪════════════╪═════════════╪═══════╪═══════════════╡
    │ 1ALK     ┆ 195.300  ┆ 167.400  ┆ 76.700   ┆ … ┆ 90.00      ┆ 90.00       ┆ 16    ┆ null          │
    └──────────┴──────────┴──────────┴──────────┴───┴────────────┴─────────────┴───────┴───────────────┘
    *****_symmetry.*****
    shape: (1, 5)
    ┌──────────┬──────────────────────┬─────────────────────────────┬──────────────┬───────────────────┐
    │ entry_id ┆ space_group_name_H-M ┆ pdbx_full_space_group_name_ ┆ cell_setting ┆ Int_Tables_number │
    │ ---      ┆ ---                  ┆ H-M                         ┆ ---          ┆ ---               │
    │ str      ┆ str                  ┆ ---                         ┆ null         ┆ str               │
    │          ┆                      ┆ null                        ┆              ┆                   │
    ╞══════════╪══════════════════════╪═════════════════════════════╪══════════════╪═══════════════════╡
    │ 1ALK     ┆ I 2 2 2              ┆ null                        ┆ null         ┆ 23                │
    └──────────┴──────────────────────┴─────────────────────────────┴──────────────┴───────────────────┘
    *****_exptl.*****
    shape: (1, 3)
    ┌──────────┬───────────────────┬─────────────────┐
    │ entry_id ┆ method            ┆ crystals_number │
    │ ---      ┆ ---               ┆ ---             │
    │ str      ┆ str               ┆ null            │
    ╞══════════╪═══════════════════╪═════════════════╡
    │ 1ALK     ┆ X-RAY DIFFRACTION ┆ null            │
    └──────────┴───────────────────┴─────────────────┘
    *****_exptl_crystal.*****
    shape: (1, 5)
    ┌─────┬──────────────┬──────────────────┬─────────────────────┬─────────────┐
    │ id  ┆ density_meas ┆ density_Matthews ┆ density_percent_sol ┆ description │
    │ --- ┆ ---          ┆ ---              ┆ ---                 ┆ ---         │
    │ str ┆ null         ┆ str              ┆ str                 ┆ null        │
    ╞═════╪══════════════╪══════════════════╪═════════════════════╪═════════════╡
    │ 1   ┆ null         ┆ 3.33             ┆ 63.02               ┆ null        │
    └─────┴──────────────┴──────────────────┴─────────────────────┴─────────────┘
    *****_diffrn.*****
    shape: (1, 4)
    ┌─────┬──────────────┬──────────────────────┬────────────┐
    │ id  ┆ ambient_temp ┆ ambient_temp_details ┆ crystal_id │
    │ --- ┆ ---          ┆ ---                  ┆ ---        │
    │ str ┆ null         ┆ null                 ┆ str        │
    ╞═════╪══════════════╪══════════════════════╪════════════╡
    │ 1   ┆ null         ┆ null                 ┆ 1          │
    └─────┴──────────────┴──────────────────────┴────────────┘
    *****_diffrn_radiation.*****
    shape: (1, 6)
    ┌───────────┬───────────────┬──────────────────┬───────────────┬─────────────────┬─────────────────┐
    │ diffrn_id ┆ wavelength_id ┆ pdbx_monochromat ┆ monochromator ┆ pdbx_diffrn_pro ┆ pdbx_scattering │
    │ ---       ┆ ---           ┆ ic_or_laue_m_l   ┆ ---           ┆ tocol           ┆ _type           │
    │ str       ┆ str           ┆ ---              ┆ null          ┆ ---             ┆ ---             │
    │           ┆               ┆ null             ┆               ┆ null            ┆ str             │
    ╞═══════════╪═══════════════╪══════════════════╪═══════════════╪═════════════════╪═════════════════╡
    │ 1         ┆ 1             ┆ null             ┆ null          ┆ null            ┆ x-ray           │
    └───────────┴───────────────┴──────────────────┴───────────────┴─────────────────┴─────────────────┘
    *****_diffrn_radiation_wavelength.*****
    shape: (1, 3)
    ┌─────┬────────────┬─────┐
    │ id  ┆ wavelength ┆ wt  │
    │ --- ┆ ---        ┆ --- │
    │ str ┆ bool       ┆ str │
    ╞═════╪════════════╪═════╡
    │ 1   ┆ false      ┆ 1.0 │
    └─────┴────────────┴─────┘
    *****_refine.*****
    shape: (1, 58)
    ┌──────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ entry_id ┆ ls_number ┆ ls_number ┆ pdbx_ls_s ┆ … ┆ overall_S ┆ pdbx_over ┆ pdbx_over ┆ pdbx_over │
    │ ---      ┆ _reflns_o ┆ _reflns_a ┆ igma_I    ┆   ┆ U_R_Cruic ┆ all_SU_R_ ┆ all_SU_R_ ┆ all_SU_R_ │
    │ str      ┆ bs        ┆ ll        ┆ ---       ┆   ┆ kshank_DP ┆ free_Crui ┆ Blow_DPI  ┆ free_Blow │
    │          ┆ ---       ┆ ---       ┆ null      ┆   ┆ I         ┆ cks…      ┆ ---       ┆ _DP…      │
    │          ┆ null      ┆ null      ┆           ┆   ┆ ---       ┆ ---       ┆ null      ┆ ---       │
    │          ┆           ┆           ┆           ┆   ┆ null      ┆ null      ┆           ┆ null      │
    ╞══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ 1ALK     ┆ null      ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ null      ┆ null      │
    └──────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_refine_hist.*****
    shape: (1, 9)
    ┌───────────┬──────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ pdbx_refi ┆ cycle_id ┆ pdbx_numb ┆ pdbx_numb ┆ … ┆ number_at ┆ number_at ┆ d_res_hig ┆ d_res_low │
    │ ne_id     ┆ ---      ┆ er_atoms_ ┆ er_atoms_ ┆   ┆ oms_solve ┆ oms_total ┆ h         ┆ ---       │
    │ ---       ┆ str      ┆ protein   ┆ nucleic_a ┆   ┆ nt        ┆ ---       ┆ ---       ┆ bool      │
    │ str       ┆          ┆ ---       ┆ cid       ┆   ┆ ---       ┆ str       ┆ str       ┆           │
    │           ┆          ┆ str       ┆ ---       ┆   ┆ str       ┆           ┆           ┆           │
    │           ┆          ┆           ┆ str       ┆   ┆           ┆           ┆           ┆           │
    ╞═══════════╪══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ X-RAY DIF ┆ LAST     ┆ 6608      ┆ 0         ┆ … ┆ 6         ┆ 6630      ┆ 2.0       ┆ false     │
    │ FRACTION  ┆          ┆           ┆           ┆   ┆           ┆           ┆           ┆           │
    └───────────┴──────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_database_PDB_matrix.*****
    shape: (1, 13)
    ┌──────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ entry_id ┆ origx[1][ ┆ origx[1][ ┆ origx[1][ ┆ … ┆ origx[3][ ┆ origx_vec ┆ origx_vec ┆ origx_vec │
    │ ---      ┆ 1]        ┆ 2]        ┆ 3]        ┆   ┆ 3]        ┆ tor[1]    ┆ tor[2]    ┆ tor[3]    │
    │ str      ┆ ---       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │
    │          ┆ str       ┆ str       ┆ str       ┆   ┆ str       ┆ str       ┆ str       ┆ str       │
    ╞══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ 1ALK     ┆ 1.000000  ┆ 0.000000  ┆ 0.000000  ┆ … ┆ 1.000000  ┆ 0.00000   ┆ 0.00000   ┆ 0.00000   │
    └──────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_struct.*****
    shape: (1, 5)
    ┌──────────┬────────────────────────┬────────────────────┬────────────────┬────────────────────────┐
    │ entry_id ┆ title                  ┆ pdbx_model_details ┆ pdbx_CASP_flag ┆ pdbx_model_type_detail │
    │ ---      ┆ ---                    ┆ ---                ┆ ---            ┆ s                      │
    │ str      ┆ str                    ┆ null               ┆ null           ┆ ---                    │
    │          ┆                        ┆                    ┆                ┆ null                   │
    ╞══════════╪════════════════════════╪════════════════════╪════════════════╪════════════════════════╡
    │ 1ALK     ┆ REACTION MECHANISM OF  ┆ null               ┆ null           ┆ null                   │
    │          ┆ ALKALINE…              ┆                    ┆                ┆                        │
    └──────────┴────────────────────────┴────────────────────┴────────────────┴────────────────────────┘
    *****_struct_keywords.*****
    shape: (1, 3)
    ┌──────────┬──────────────────────┬──────────────────────┐
    │ entry_id ┆ pdbx_keywords        ┆ text                 │
    │ ---      ┆ ---                  ┆ ---                  │
    │ str      ┆ str                  ┆ str                  │
    ╞══════════╪══════════════════════╪══════════════════════╡
    │ 1ALK     ┆ ALKALINE PHOSPHATASE ┆ ALKALINE PHOSPHATASE │
    └──────────┴──────────────────────┴──────────────────────┘
    *****_struct_asym.*****
    shape: (12, 5)
    ┌─────┬─────────────────────────────┬───────────────┬───────────┬─────────┐
    │ id  ┆ pdbx_blank_PDB_chainid_flag ┆ pdbx_modified ┆ entity_id ┆ details │
    │ --- ┆ ---                         ┆ ---           ┆ ---       ┆ ---     │
    │ str ┆ str                         ┆ str           ┆ str       ┆ null    │
    ╞═════╪═════════════════════════════╪═══════════════╪═══════════╪═════════╡
    │ A   ┆ N                           ┆ N             ┆ 1         ┆ null    │
    │ B   ┆ N                           ┆ N             ┆ 1         ┆ null    │
    │ C   ┆ N                           ┆ N             ┆ 2         ┆ null    │
    │ D   ┆ N                           ┆ N             ┆ 2         ┆ null    │
    │ E   ┆ N                           ┆ N             ┆ 3         ┆ null    │
    │ …   ┆ …                           ┆ …             ┆ …         ┆ …       │
    │ H   ┆ N                           ┆ N             ┆ 2         ┆ null    │
    │ I   ┆ N                           ┆ N             ┆ 3         ┆ null    │
    │ J   ┆ N                           ┆ N             ┆ 4         ┆ null    │
    │ K   ┆ N                           ┆ N             ┆ 5         ┆ null    │
    │ L   ┆ N                           ┆ N             ┆ 5         ┆ null    │
    └─────┴─────────────────────────────┴───────────────┴───────────┴─────────┘
    *****_struct_ref.*****
    shape: (1, 8)
    ┌─────┬─────────┬───────────┬───────────┬──────────────┬──────────────┬──────────────┬─────────────┐
    │ id  ┆ db_name ┆ db_code   ┆ entity_id ┆ pdbx_db_acce ┆ pdbx_align_b ┆ pdbx_seq_one ┆ pdbx_db_iso │
    │ --- ┆ ---     ┆ ---       ┆ ---       ┆ ssion        ┆ egin         ┆ _letter_code ┆ form        │
    │ str ┆ str     ┆ str       ┆ str       ┆ ---          ┆ ---          ┆ ---          ┆ ---         │
    │     ┆         ┆           ┆           ┆ str          ┆ str          ┆ str          ┆ null        │
    ╞═════╪═════════╪═══════════╪═══════════╪══════════════╪══════════════╪══════════════╪═════════════╡
    │ 1   ┆ UNP     ┆ PPB_ECOLI ┆ 1         ┆ P00634       ┆ 1            ┆ MKQSTIALALLP ┆ null        │
    │     ┆         ┆           ┆           ┆              ┆              ┆ LLFTPVTKARTP ┆             │
    │     ┆         ┆           ┆           ┆              ┆              ┆ EMPVLE…      ┆             │
    └─────┴─────────┴───────────┴───────────┴──────────────┴──────────────┴──────────────┴─────────────┘
    *****_struct_ref_seq.*****
    shape: (2, 15)
    ┌──────────┬────────┬────────────┬────────────┬───┬────────────┬───────────┬───────────┬───────────┐
    │ align_id ┆ ref_id ┆ pdbx_PDB_i ┆ pdbx_stran ┆ … ┆ db_align_e ┆ pdbx_db_a ┆ pdbx_auth ┆ pdbx_auth │
    │ ---      ┆ ---    ┆ d_code     ┆ d_id       ┆   ┆ nd         ┆ lign_end_ ┆ _seq_alig ┆ _seq_alig │
    │ str      ┆ str    ┆ ---        ┆ ---        ┆   ┆ ---        ┆ ins_code  ┆ n_beg     ┆ n_end     │
    │          ┆        ┆ str        ┆ str        ┆   ┆ str        ┆ ---       ┆ ---       ┆ ---       │
    │          ┆        ┆            ┆            ┆   ┆            ┆ null      ┆ str       ┆ str       │
    ╞══════════╪════════╪════════════╪════════════╪═══╪════════════╪═══════════╪═══════════╪═══════════╡
    │ 1        ┆ 1      ┆ 1ALK       ┆ A          ┆ … ┆ 471        ┆ null      ┆ 1         ┆ 449       │
    │ 2        ┆ 1      ┆ 1ALK       ┆ B          ┆ … ┆ 471        ┆ null      ┆ 1         ┆ 449       │
    └──────────┴────────┴────────────┴────────────┴───┴────────────┴───────────┴───────────┴───────────┘
    *****_struct_ref_seq_dif.*****
    shape: (10, 13)
    ┌──────────┬────────────┬────────┬────────────┬───┬────────────┬──────────┬────────────┬───────────┐
    │ align_id ┆ pdbx_pdb_i ┆ mon_id ┆ pdbx_pdb_s ┆ … ┆ pdbx_seq_d ┆ details  ┆ pdbx_auth_ ┆ pdbx_ordi │
    │ ---      ┆ d_code     ┆ ---    ┆ trand_id   ┆   ┆ b_seq_num  ┆ ---      ┆ seq_num    ┆ nal       │
    │ str      ┆ ---        ┆ str    ┆ ---        ┆   ┆ ---        ┆ str      ┆ ---        ┆ ---       │
    │          ┆ str        ┆        ┆ str        ┆   ┆ str        ┆          ┆ str        ┆ str       │
    ╞══════════╪════════════╪════════╪════════════╪═══╪════════════╪══════════╪════════════╪═══════════╡
    │ 1        ┆ 1ALK       ┆ ASN    ┆ A          ┆ … ┆ 37         ┆ conflict ┆ 15         ┆ 1         │
    │ 1        ┆ 1ALK       ┆ ASN    ┆ A          ┆ … ┆ 57         ┆ conflict ┆ 35         ┆ 2         │
    │ 1        ┆ 1ALK       ┆ GLN    ┆ A          ┆ … ┆ 198        ┆ conflict ┆ 176        ┆ 3         │
    │ 1        ┆ 1ALK       ┆ GLU    ┆ A          ┆ … ┆ 250        ┆ conflict ┆ 228        ┆ 4         │
    │ 1        ┆ 1ALK       ┆ GLU    ┆ A          ┆ … ┆ 252        ┆ conflict ┆ 230        ┆ 5         │
    │ 2        ┆ 1ALK       ┆ ASN    ┆ B          ┆ … ┆ 37         ┆ conflict ┆ 15         ┆ 6         │
    │ 2        ┆ 1ALK       ┆ ASN    ┆ B          ┆ … ┆ 57         ┆ conflict ┆ 35         ┆ 7         │
    │ 2        ┆ 1ALK       ┆ GLN    ┆ B          ┆ … ┆ 198        ┆ conflict ┆ 176        ┆ 8         │
    │ 2        ┆ 1ALK       ┆ GLU    ┆ B          ┆ … ┆ 250        ┆ conflict ┆ 228        ┆ 9         │
    │ 2        ┆ 1ALK       ┆ GLU    ┆ B          ┆ … ┆ 252        ┆ conflict ┆ 230        ┆ 10        │
    └──────────┴────────────┴────────┴────────────┴───┴────────────┴──────────┴────────────┴───────────┘
    *****_pdbx_struct_assembly.*****
    shape: (1, 5)
    ┌─────┬─────────────────────────────────┬────────────────┬────────────────────┬──────────────────┐
    │ id  ┆ details                         ┆ method_details ┆ oligomeric_details ┆ oligomeric_count │
    │ --- ┆ ---                             ┆ ---            ┆ ---                ┆ ---              │
    │ str ┆ str                             ┆ str            ┆ str                ┆ str              │
    ╞═════╪═════════════════════════════════╪════════════════╪════════════════════╪══════════════════╡
    │ 1   ┆ author_and_software_defined_as… ┆ PISA           ┆ dimeric            ┆ 2                │
    └─────┴─────────────────────────────────┴────────────────┴────────────────────┴──────────────────┘
    *****_pdbx_struct_assembly_prop.*****
    shape: (3, 4)
    ┌─────────┬────────────┬───────┬─────────┐
    │ biol_id ┆ type       ┆ value ┆ details │
    │ ---     ┆ ---        ┆ ---   ┆ ---     │
    │ str     ┆ str        ┆ str   ┆ null    │
    ╞═════════╪════════════╪═══════╪═════════╡
    │ 1       ┆ ABSA (A^2) ┆ 8720  ┆ null    │
    │ 1       ┆ MORE       ┆ -205  ┆ null    │
    │ 1       ┆ SSA (A^2)  ┆ 27920 ┆ null    │
    └─────────┴────────────┴───────┴─────────┘
    *****_pdbx_struct_assembly_gen.*****
    shape: (1, 3)
    ┌─────────────┬─────────────────┬─────────────────────────┐
    │ assembly_id ┆ oper_expression ┆ asym_id_list            │
    │ ---         ┆ ---             ┆ ---                     │
    │ str         ┆ str             ┆ str                     │
    ╞═════════════╪═════════════════╪═════════════════════════╡
    │ 1           ┆ 1               ┆ A,B,C,D,E,F,G,H,I,J,K,L │
    └─────────────┴─────────────────┴─────────────────────────┘
    *****_pdbx_struct_oper_list.*****
    shape: (1, 16)
    ┌─────┬─────────────┬───────┬─────────────┬───┬─────────────┬────────────┬────────────┬────────────┐
    │ id  ┆ type        ┆ name  ┆ symmetry_op ┆ … ┆ matrix[3][1 ┆ matrix[3][ ┆ matrix[3][ ┆ vector[3]  │
    │ --- ┆ ---         ┆ ---   ┆ eration     ┆   ┆ ]           ┆ 2]         ┆ 3]         ┆ ---        │
    │ str ┆ str         ┆ str   ┆ ---         ┆   ┆ ---         ┆ ---        ┆ ---        ┆ str        │
    │     ┆             ┆       ┆ str         ┆   ┆ str         ┆ str        ┆ str        ┆            │
    ╞═════╪═════════════╪═══════╪═════════════╪═══╪═════════════╪════════════╪════════════╪════════════╡
    │ 1   ┆ identity    ┆ 1_555 ┆ x,y,z       ┆ … ┆ 0.000000000 ┆ 0.00000000 ┆ 1.00000000 ┆ 0.00000000 │
    │     ┆ operation   ┆       ┆             ┆   ┆ 0           ┆ 00         ┆ 00         ┆ 00         │
    └─────┴─────────────┴───────┴─────────────┴───┴─────────────┴────────────┴────────────┴────────────┘
    *****_struct_biol.*****
    shape: (1, 3)
    ┌─────┬─────────────────────────────────┬─────────────────────┐
    │ id  ┆ details                         ┆ pdbx_parent_biol_id │
    │ --- ┆ ---                             ┆ ---                 │
    │ str ┆ str                             ┆ null                │
    ╞═════╪═════════════════════════════════╪═════════════════════╡
    │ 1   ┆ THERE IS A DIMER (IDENTICAL CH… ┆ null                │
    └─────┴─────────────────────────────────┴─────────────────────┘
    *****_struct_conf.*****
    shape: (32, 20)
    ┌────────────┬──────────┬────────────┬───────────┬───┬───────────┬───────────┬─────────┬───────────┐
    │ conf_type_ ┆ id       ┆ pdbx_PDB_h ┆ beg_label ┆ … ┆ end_auth_ ┆ pdbx_PDB_ ┆ details ┆ pdbx_PDB_ │
    │ id         ┆ ---      ┆ elix_id    ┆ _comp_id  ┆   ┆ seq_id    ┆ helix_cla ┆ ---     ┆ helix_len │
    │ ---        ┆ str      ┆ ---        ┆ ---       ┆   ┆ ---       ┆ ss        ┆ null    ┆ gth       │
    │ str        ┆          ┆ str        ┆ str       ┆   ┆ str       ┆ ---       ┆         ┆ ---       │
    │            ┆          ┆            ┆           ┆   ┆           ┆ str       ┆         ┆ str       │
    ╞════════════╪══════════╪════════════╪═══════════╪═══╪═══════════╪═══════════╪═════════╪═══════════╡
    │ HELX_P     ┆ HELX_P1  ┆ H1         ┆ GLN       ┆ … ┆ 37        ┆ 1         ┆ null    ┆ 9         │
    │ HELX_P     ┆ HELX_P2  ┆ H2         ┆ GLY       ┆ … ┆ 66        ┆ 1         ┆ null    ┆ 13        │
    │ HELX_P     ┆ HELX_P3  ┆ H3         ┆ PHE       ┆ … ┆ 78        ┆ 1         ┆ null    ┆ 7         │
    │ HELX_P     ┆ HELX_P4  ┆ H4         ┆ ASP       ┆ … ┆ 112       ┆ 1         ┆ null    ┆ 12        │
    │ HELX_P     ┆ HELX_P5  ┆ H5         ┆ THR       ┆ … ┆ 140       ┆ 1         ┆ null    ┆ 10        │
    │ …          ┆ …        ┆ …          ┆ …         ┆ … ┆ …         ┆ …         ┆ …       ┆ …         │
    │ HELX_P     ┆ HELX_P28 ┆ G12        ┆ HIS       ┆ … ┆ 281       ┆ 1         ┆ null    ┆ 6         │
    │ HELX_P     ┆ HELX_P29 ┆ G13        ┆ THR       ┆ … ┆ 313       ┆ 1         ┆ null    ┆ 16        │
    │ HELX_P     ┆ HELX_P30 ┆ G14        ┆ SER       ┆ … ┆ 333       ┆ 1         ┆ null    ┆ 9         │
    │ HELX_P     ┆ HELX_P31 ┆ G15        ┆ ASN       ┆ … ┆ 360       ┆ 1         ┆ null    ┆ 27        │
    │ HELX_P     ┆ HELX_P32 ┆ G16        ┆ ASP       ┆ … ┆ 447       ┆ 1         ┆ null    ┆ 14        │
    └────────────┴──────────┴────────────┴───────────┴───┴───────────┴───────────┴─────────┴───────────┘
    *****_struct_conf_type.*****
    shape: (1, 3)
    ┌────────┬──────────┬───────────┐
    │ id     ┆ criteria ┆ reference │
    │ ---    ┆ ---      ┆ ---       │
    │ str    ┆ null     ┆ null      │
    ╞════════╪══════════╪═══════════╡
    │ HELX_P ┆ null     ┆ null      │
    └────────┴──────────┴───────────┘
    *****_struct_conn.*****
    shape: (34, 35)
    ┌──────────┬────────────┬────────────┬───────────┬───┬─────────┬───────────┬───────────┬───────────┐
    │ id       ┆ conn_type_ ┆ pdbx_leavi ┆ pdbx_PDB_ ┆ … ┆ details ┆ pdbx_dist ┆ pdbx_valu ┆ pdbx_role │
    │ ---      ┆ id         ┆ ng_atom_fl ┆ id        ┆   ┆ ---     ┆ _value    ┆ e_order   ┆ ---       │
    │ str      ┆ ---        ┆ ag         ┆ ---       ┆   ┆ null    ┆ ---       ┆ ---       ┆ null      │
    │          ┆ str        ┆ ---        ┆ null      ┆   ┆         ┆ str       ┆ null      ┆           │
    │          ┆            ┆ null       ┆           ┆   ┆         ┆           ┆           ┆           │
    ╞══════════╪════════════╪════════════╪═══════════╪═══╪═════════╪═══════════╪═══════════╪═══════════╡
    │ disulf1  ┆ disulf     ┆ null       ┆ null      ┆ … ┆ null    ┆ 1.975     ┆ null      ┆ null      │
    │ disulf2  ┆ disulf     ┆ null       ┆ null      ┆ … ┆ null    ┆ 1.995     ┆ null      ┆ null      │
    │ disulf3  ┆ disulf     ┆ null       ┆ null      ┆ … ┆ null    ┆ 1.996     ┆ null      ┆ null      │
    │ disulf4  ┆ disulf     ┆ null       ┆ null      ┆ … ┆ null    ┆ 2.032     ┆ null      ┆ null      │
    │ metalc1  ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 1.996     ┆ null      ┆ null      │
    │ …        ┆ …          ┆ …          ┆ …         ┆ … ┆ …       ┆ …         ┆ …         ┆ …         │
    │ metalc26 ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 2.083     ┆ null      ┆ null      │
    │ metalc27 ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 2.059     ┆ null      ┆ null      │
    │ metalc28 ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 1.926     ┆ null      ┆ null      │
    │ metalc29 ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 2.007     ┆ null      ┆ null      │
    │ metalc30 ┆ metalc     ┆ null       ┆ null      ┆ … ┆ null    ┆ 2.027     ┆ null      ┆ null      │
    └──────────┴────────────┴────────────┴───────────┴───┴─────────┴───────────┴───────────┴───────────┘
    *****_struct_conn_type.*****
    shape: (2, 3)
    ┌────────┬──────────┬───────────┐
    │ id     ┆ criteria ┆ reference │
    │ ---    ┆ ---      ┆ ---       │
    │ str    ┆ null     ┆ null      │
    ╞════════╪══════════╪═══════════╡
    │ disulf ┆ null     ┆ null      │
    │ metalc ┆ null     ┆ null      │
    └────────┴──────────┴───────────┘
    *****_pdbx_struct_conn_angle.*****
    shape: (61, 36)
    ┌─────┬─────────────┬─────────────┬─────────────┬───┬─────────────┬────────────┬───────┬───────────┐
    │ id  ┆ ptnr1_label ┆ ptnr1_label ┆ ptnr1_label ┆ … ┆ ptnr3_PDB_i ┆ ptnr3_symm ┆ value ┆ value_esd │
    │ --- ┆ _atom_id    ┆ _alt_id     ┆ _asym_id    ┆   ┆ ns_code     ┆ etry       ┆ ---   ┆ ---       │
    │ str ┆ ---         ┆ ---         ┆ ---         ┆   ┆ ---         ┆ ---        ┆ str   ┆ null      │
    │     ┆ str         ┆ null        ┆ str         ┆   ┆ null        ┆ str        ┆       ┆           │
    ╞═════╪═════════════╪═════════════╪═════════════╪═══╪═════════════╪════════════╪═══════╪═══════════╡
    │ 1   ┆ OD1         ┆ null        ┆ A           ┆ … ┆ null        ┆ 1_555      ┆ 117.7 ┆ null      │
    │ 2   ┆ OD1         ┆ null        ┆ A           ┆ … ┆ null        ┆ 1_555      ┆ 106.5 ┆ null      │
    │ 3   ┆ OG          ┆ null        ┆ A           ┆ … ┆ null        ┆ 1_555      ┆ 73.3  ┆ null      │
    │ 4   ┆ OD1         ┆ null        ┆ A           ┆ … ┆ null        ┆ 1_555      ┆ 119.4 ┆ null      │
    │ 5   ┆ OG          ┆ null        ┆ A           ┆ … ┆ null        ┆ 1_555      ┆ 122.8 ┆ null      │
    │ …   ┆ …           ┆ …           ┆ …           ┆ … ┆ …           ┆ …          ┆ …     ┆ …         │
    │ 57  ┆ OD1         ┆ null        ┆ B           ┆ … ┆ null        ┆ 1_555      ┆ 96.9  ┆ null      │
    │ 58  ┆ NE2         ┆ null        ┆ B           ┆ … ┆ null        ┆ 1_555      ┆ 93.7  ┆ null      │
    │ 59  ┆ OD1         ┆ null        ┆ B           ┆ … ┆ null        ┆ 1_555      ┆ 137.8 ┆ null      │
    │ 60  ┆ NE2         ┆ null        ┆ B           ┆ … ┆ null        ┆ 1_555      ┆ 107.0 ┆ null      │
    │ 61  ┆ NE2         ┆ null        ┆ B           ┆ … ┆ null        ┆ 1_555      ┆ 109.3 ┆ null      │
    └─────┴─────────────┴─────────────┴─────────────┴───┴─────────────┴────────────┴───────┴───────────┘
    *****_struct_sheet.*****
    shape: (4, 4)
    ┌─────┬──────┬────────────────┬─────────┐
    │ id  ┆ type ┆ number_strands ┆ details │
    │ --- ┆ ---  ┆ ---            ┆ ---     │
    │ str ┆ null ┆ str            ┆ null    │
    ╞═════╪══════╪════════════════╪═════════╡
    │ S1A ┆ null ┆ 10             ┆ null    │
    │ S2A ┆ null ┆ 3              ┆ null    │
    │ S1B ┆ null ┆ 10             ┆ null    │
    │ S2B ┆ null ┆ 3              ┆ null    │
    └─────┴──────┴────────────────┴─────────┘
    *****_struct_sheet_order.*****
    shape: (22, 5)
    ┌──────────┬────────────┬────────────┬────────┬───────────────┐
    │ sheet_id ┆ range_id_1 ┆ range_id_2 ┆ offset ┆ sense         │
    │ ---      ┆ ---        ┆ ---        ┆ ---    ┆ ---           │
    │ str      ┆ str        ┆ str        ┆ null   ┆ str           │
    ╞══════════╪════════════╪════════════╪════════╪═══════════════╡
    │ S1A      ┆ 1          ┆ 2          ┆ null   ┆ parallel      │
    │ S1A      ┆ 2          ┆ 3          ┆ null   ┆ parallel      │
    │ S1A      ┆ 3          ┆ 4          ┆ null   ┆ parallel      │
    │ S1A      ┆ 4          ┆ 5          ┆ null   ┆ parallel      │
    │ S1A      ┆ 5          ┆ 6          ┆ null   ┆ parallel      │
    │ …        ┆ …          ┆ …          ┆ …      ┆ …             │
    │ S1B      ┆ 7          ┆ 8          ┆ null   ┆ parallel      │
    │ S1B      ┆ 8          ┆ 9          ┆ null   ┆ anti-parallel │
    │ S1B      ┆ 9          ┆ 10         ┆ null   ┆ parallel      │
    │ S2B      ┆ 1          ┆ 2          ┆ null   ┆ parallel      │
    │ S2B      ┆ 2          ┆ 3          ┆ null   ┆ anti-parallel │
    └──────────┴────────────┴────────────┴────────┴───────────────┘
    *****_struct_sheet_range.*****
    shape: (26, 16)
    ┌──────────┬─────┬────────────┬────────────┬───┬────────────┬────────────┬────────────┬────────────┐
    │ sheet_id ┆ id  ┆ beg_label_ ┆ beg_label_ ┆ … ┆ beg_auth_s ┆ end_auth_c ┆ end_auth_a ┆ end_auth_s │
    │ ---      ┆ --- ┆ comp_id    ┆ asym_id    ┆   ┆ eq_id      ┆ omp_id     ┆ sym_id     ┆ eq_id      │
    │ str      ┆ str ┆ ---        ┆ ---        ┆   ┆ ---        ┆ ---        ┆ ---        ┆ ---        │
    │          ┆     ┆ str        ┆ str        ┆   ┆ str        ┆ str        ┆ str        ┆ str        │
    ╞══════════╪═════╪════════════╪════════════╪═══╪════════════╪════════════╪════════════╪════════════╡
    │ S1A      ┆ 1   ┆ ASN        ┆ A          ┆ … ┆ 44         ┆ GLY        ┆ A          ┆ 50         │
    │ S1A      ┆ 2   ┆ LEU        ┆ A          ┆ … ┆ 80         ┆ THR        ┆ A          ┆ 85         │
    │ S1A      ┆ 3   ┆ ALA        ┆ A          ┆ … ┆ 142        ┆ THR        ┆ A          ┆ 148        │
    │ S1A      ┆ 4   ┆ ASP        ┆ A          ┆ … ┆ 201        ┆ GLY        ┆ A          ┆ 205        │
    │ S1A      ┆ 5   ┆ GLN        ┆ A          ┆ … ┆ 235        ┆ VAL        ┆ A          ┆ 237        │
    │ …        ┆ …   ┆ …          ┆ …          ┆ … ┆ …          ┆ …          ┆ …          ┆ …          │
    │ S1B      ┆ 9   ┆ LEU        ┆ B          ┆ … ┆ 417        ┆ TYR        ┆ B          ┆ 422        │
    │ S1B      ┆ 10  ┆ GLY        ┆ B          ┆ … ┆ 431        ┆ ASP        ┆ B          ┆ 434        │
    │ S2B      ┆ 1   ┆ GLN        ┆ B          ┆ … ┆ 375        ┆ VAL        ┆ B          ┆ 377        │
    │ S2B      ┆ 2   ┆ LEU        ┆ B          ┆ … ┆ 386        ┆ ASN        ┆ B          ┆ 391        │
    │ S2B      ┆ 3   ┆ VAL        ┆ B          ┆ … ┆ 397        ┆ TYR        ┆ B          ┆ 402        │
    └──────────┴─────┴────────────┴────────────┴───┴────────────┴────────────┴────────────┴────────────┘
    *****_struct_site.*****
    shape: (8, 8)
    ┌─────┬─────────────┬─────────────┬────────────┬────────────┬────────────┬────────────┬────────────┐
    │ id  ┆ pdbx_eviden ┆ pdbx_auth_a ┆ pdbx_auth_ ┆ pdbx_auth_ ┆ pdbx_auth_ ┆ pdbx_num_r ┆ details    │
    │ --- ┆ ce_code     ┆ sym_id      ┆ comp_id    ┆ seq_id     ┆ ins_code   ┆ esidues    ┆ ---        │
    │ str ┆ ---         ┆ ---         ┆ ---        ┆ ---        ┆ ---        ┆ ---        ┆ str        │
    │     ┆ str         ┆ str         ┆ str        ┆ str        ┆ null       ┆ str        ┆            │
    ╞═════╪═════════════╪═════════════╪════════════╪════════════╪════════════╪════════════╪════════════╡
    │ AC1 ┆ Software    ┆ A           ┆ ZN         ┆ 450        ┆ null       ┆ 4          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE ZN │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ A …        │
    │ AC2 ┆ Software    ┆ A           ┆ ZN         ┆ 451        ┆ null       ┆ 6          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE ZN │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ A …        │
    │ AC3 ┆ Software    ┆ A           ┆ MG         ┆ 452        ┆ null       ┆ 5          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE MG │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ A …        │
    │ AC4 ┆ Software    ┆ A           ┆ PO4        ┆ 453        ┆ null       ┆ 11         ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ PO4 A…     │
    │ AC5 ┆ Software    ┆ B           ┆ ZN         ┆ 450        ┆ null       ┆ 4          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE ZN │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ B …        │
    │ AC6 ┆ Software    ┆ B           ┆ ZN         ┆ 451        ┆ null       ┆ 6          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE ZN │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ B …        │
    │ AC7 ┆ Software    ┆ B           ┆ MG         ┆ 452        ┆ null       ┆ 6          ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE MG │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ B …        │
    │ AC8 ┆ Software    ┆ B           ┆ PO4        ┆ 453        ┆ null       ┆ 12         ┆ BINDING    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ SITE FOR   │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ RESIDUE    │
    │     ┆             ┆             ┆            ┆            ┆            ┆            ┆ PO4 B…     │
    └─────┴─────────────┴─────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘
    *****_struct_site_gen.*****
    shape: (54, 14)
    ┌─────┬─────────┬──────────────┬──────────────┬───┬─────────────┬─────────────┬──────────┬─────────┐
    │ id  ┆ site_id ┆ pdbx_num_res ┆ label_comp_i ┆ … ┆ label_atom_ ┆ label_alt_i ┆ symmetry ┆ details │
    │ --- ┆ ---     ┆ ---          ┆ d            ┆   ┆ id          ┆ d           ┆ ---      ┆ ---     │
    │ str ┆ str     ┆ str          ┆ ---          ┆   ┆ ---         ┆ ---         ┆ str      ┆ null    │
    │     ┆         ┆              ┆ str          ┆   ┆ bool        ┆ null        ┆          ┆         │
    ╞═════╪═════════╪══════════════╪══════════════╪═══╪═════════════╪═════════════╪══════════╪═════════╡
    │ 1   ┆ AC1     ┆ 4            ┆ ASP          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 2   ┆ AC1     ┆ 4            ┆ HIS          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 3   ┆ AC1     ┆ 4            ┆ HIS          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 4   ┆ AC1     ┆ 4            ┆ PO4          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 5   ┆ AC2     ┆ 6            ┆ ASP          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ …   ┆ …       ┆ …            ┆ …            ┆ … ┆ …           ┆ …           ┆ …        ┆ …       │
    │ 50  ┆ AC8     ┆ 12           ┆ HIS          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 51  ┆ AC8     ┆ 12           ┆ HIS          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 52  ┆ AC8     ┆ 12           ┆ ZN           ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 53  ┆ AC8     ┆ 12           ┆ ZN           ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    │ 54  ┆ AC8     ┆ 12           ┆ HOH          ┆ … ┆ false       ┆ null        ┆ 1_555    ┆ null    │
    └─────┴─────────┴──────────────┴──────────────┴───┴─────────────┴─────────────┴──────────┴─────────┘
    *****_pdbx_validate_close_contact.*****
    shape: (2, 15)
    ┌─────┬─────────────┬─────────────┬─────────────┬───┬─────────────┬────────────┬────────────┬──────┐
    │ id  ┆ PDB_model_n ┆ auth_atom_i ┆ auth_asym_i ┆ … ┆ auth_seq_id ┆ PDB_ins_co ┆ label_alt_ ┆ dist │
    │ --- ┆ um          ┆ d_1         ┆ d_1         ┆   ┆ _2          ┆ de_2       ┆ id_2       ┆ ---  │
    │ str ┆ ---         ┆ ---         ┆ ---         ┆   ┆ ---         ┆ ---        ┆ ---        ┆ str  │
    │     ┆ str         ┆ str         ┆ str         ┆   ┆ str         ┆ null       ┆ null       ┆      │
    ╞═════╪═════════════╪═════════════╪═════════════╪═══╪═════════════╪════════════╪════════════╪══════╡
    │ 1   ┆ 1           ┆ OG          ┆ A           ┆ … ┆ 453         ┆ null       ┆ null       ┆ 1.92 │
    │ 2   ┆ 1           ┆ OG          ┆ B           ┆ … ┆ 453         ┆ null       ┆ null       ┆ 1.97 │
    └─────┴─────────────┴─────────────┴─────────────┴───┴─────────────┴────────────┴────────────┴──────┘
    *****_pdbx_validate_rmsd_bond.*****
    shape: (2, 19)
    ┌─────┬────────────┬────────────┬────────────┬───┬────────────┬────────────┬───────────┬───────────┐
    │ id  ┆ PDB_model_ ┆ auth_atom_ ┆ auth_asym_ ┆ … ┆ bond_targe ┆ bond_devia ┆ bond_stan ┆ linker_fl │
    │ --- ┆ num        ┆ id_1       ┆ id_1       ┆   ┆ t_value    ┆ tion       ┆ dard_devi ┆ ag        │
    │ str ┆ ---        ┆ ---        ┆ ---        ┆   ┆ ---        ┆ ---        ┆ ation     ┆ ---       │
    │     ┆ str        ┆ str        ┆ str        ┆   ┆ str        ┆ str        ┆ ---       ┆ str       │
    │     ┆            ┆            ┆            ┆   ┆            ┆            ┆ str       ┆           │
    ╞═════╪════════════╪════════════╪════════════╪═══╪════════════╪════════════╪═══════════╪═══════════╡
    │ 1   ┆ 1          ┆ CD         ┆ A          ┆ … ┆ 1.252      ┆ -0.074     ┆ 0.011     ┆ N         │
    │ 2   ┆ 1          ┆ CD         ┆ A          ┆ … ┆ 1.235      ┆ 0.149      ┆ 0.022     ┆ N         │
    └─────┴────────────┴────────────┴────────────┴───┴────────────┴────────────┴───────────┴───────────┘
    *****_pdbx_validate_rmsd_angle.*****
    shape: (29, 25)
    ┌─────┬────────────┬────────────┬────────────┬───┬────────────┬────────────┬───────────┬───────────┐
    │ id  ┆ PDB_model_ ┆ auth_atom_ ┆ auth_asym_ ┆ … ┆ angle_targ ┆ angle_devi ┆ angle_sta ┆ linker_fl │
    │ --- ┆ num        ┆ id_1       ┆ id_1       ┆   ┆ et_value   ┆ ation      ┆ ndard_dev ┆ ag        │
    │ str ┆ ---        ┆ ---        ┆ ---        ┆   ┆ ---        ┆ ---        ┆ iation    ┆ ---       │
    │     ┆ str        ┆ str        ┆ str        ┆   ┆ str        ┆ str        ┆ ---       ┆ str       │
    │     ┆            ┆            ┆            ┆   ┆            ┆            ┆ str       ┆           │
    ╞═════╪════════════╪════════════╪════════════╪═══╪════════════╪════════════╪═══════════╪═══════════╡
    │ 1   ┆ 1          ┆ NE         ┆ A          ┆ … ┆ 120.30     ┆ -4.27      ┆ 0.50      ┆ N         │
    │ 2   ┆ 1          ┆ NE         ┆ A          ┆ … ┆ 120.30     ┆ 3.22       ┆ 0.50      ┆ N         │
    │ 3   ┆ 1          ┆ CA         ┆ A          ┆ … ┆ 115.30     ┆ 28.82      ┆ 2.30      ┆ N         │
    │ 4   ┆ 1          ┆ CA         ┆ A          ┆ … ┆ 113.40     ┆ 13.53      ┆ 1.90      ┆ N         │
    │ 5   ┆ 1          ┆ CB         ┆ A          ┆ … ┆ 121.00     ┆ 5.55       ┆ 0.60      ┆ N         │
    │ …   ┆ …          ┆ …          ┆ …          ┆ … ┆ …          ┆ …          ┆ …         ┆ …         │
    │ 25  ┆ 1          ┆ CB         ┆ B          ┆ … ┆ 118.30     ┆ 6.71       ┆ 0.90      ┆ N         │
    │ 26  ┆ 1          ┆ CD         ┆ B          ┆ … ┆ 123.60     ┆ 31.22      ┆ 1.40      ┆ N         │
    │ 27  ┆ 1          ┆ NH1        ┆ B          ┆ … ┆ 119.40     ┆ -11.67     ┆ 1.10      ┆ N         │
    │ 28  ┆ 1          ┆ NE         ┆ B          ┆ … ┆ 120.30     ┆ 4.10       ┆ 0.50      ┆ N         │
    │ 29  ┆ 1          ┆ NE         ┆ B          ┆ … ┆ 120.30     ┆ 7.41       ┆ 0.50      ┆ N         │
    └─────┴────────────┴────────────┴────────────┴───┴────────────┴────────────┴───────────┴───────────┘
    *****_pdbx_validate_torsion.*****
    shape: (19, 9)
    ┌─────┬─────────────┬─────────────┬─────────────┬───┬─────────────┬────────────┬─────────┬─────────┐
    │ id  ┆ PDB_model_n ┆ auth_comp_i ┆ auth_asym_i ┆ … ┆ PDB_ins_cod ┆ label_alt_ ┆ phi     ┆ psi     │
    │ --- ┆ um          ┆ d           ┆ d           ┆   ┆ e           ┆ id         ┆ ---     ┆ ---     │
    │ str ┆ ---         ┆ ---         ┆ ---         ┆   ┆ ---         ┆ ---        ┆ str     ┆ str     │
    │     ┆ str         ┆ str         ┆ str         ┆   ┆ null        ┆ null       ┆         ┆         │
    ╞═════╪═════════════╪═════════════╪═════════════╪═══╪═════════════╪════════════╪═════════╪═════════╡
    │ 1   ┆ 1           ┆ PRO         ┆ A           ┆ … ┆ null        ┆ null       ┆ -52.81  ┆ -177.76 │
    │ 2   ┆ 1           ┆ GLU         ┆ A           ┆ … ┆ null        ┆ null       ┆ 145.31  ┆ 140.53  │
    │ 3   ┆ 1           ┆ ALA         ┆ A           ┆ … ┆ null        ┆ null       ┆ -110.12 ┆ -168.33 │
    │ 4   ┆ 1           ┆ SER         ┆ A           ┆ … ┆ null        ┆ null       ┆ -143.49 ┆ 23.75   │
    │ 5   ┆ 1           ┆ ASN         ┆ A           ┆ … ┆ null        ┆ null       ┆ 90.00   ┆ 158.97  │
    │ …   ┆ …           ┆ …           ┆ …           ┆ … ┆ …           ┆ …          ┆ …       ┆ …       │
    │ 15  ┆ 1           ┆ GLN         ┆ B           ┆ … ┆ null        ┆ null       ┆ -114.48 ┆ 57.35   │
    │ 16  ┆ 1           ┆ LYS         ┆ B           ┆ … ┆ null        ┆ null       ┆ 159.84  ┆ 42.87   │
    │ 17  ┆ 1           ┆ ASN         ┆ B           ┆ … ┆ null        ┆ null       ┆ 56.70   ┆ 163.76  │
    │ 18  ┆ 1           ┆ THR         ┆ B           ┆ … ┆ null        ┆ null       ┆ -160.71 ┆ -166.30 │
    │ 19  ┆ 1           ┆ GLU         ┆ B           ┆ … ┆ null        ┆ null       ┆ -78.73  ┆ -154.20 │
    └─────┴─────────────┴─────────────┴─────────────┴───┴─────────────┴────────────┴─────────┴─────────┘
    *****_pdbx_validate_planes.*****
    shape: (1, 9)
    ┌─────┬─────────────┬─────────────┬─────────────┬───┬────────────┬────────────┬───────┬────────────┐
    │ id  ┆ PDB_model_n ┆ auth_comp_i ┆ auth_asym_i ┆ … ┆ PDB_ins_co ┆ label_alt_ ┆ rmsd  ┆ type       │
    │ --- ┆ um          ┆ d           ┆ d           ┆   ┆ de         ┆ id         ┆ ---   ┆ ---        │
    │ str ┆ ---         ┆ ---         ┆ ---         ┆   ┆ ---        ┆ ---        ┆ str   ┆ str        │
    │     ┆ str         ┆ str         ┆ str         ┆   ┆ null       ┆ null       ┆       ┆            │
    ╞═════╪═════════════╪═════════════╪═════════════╪═══╪════════════╪════════════╪═══════╪════════════╡
    │ 1   ┆ 1           ┆ ARG         ┆ A           ┆ … ┆ null       ┆ null       ┆ 0.081 ┆ SIDE CHAIN │
    └─────┴─────────────┴─────────────┴─────────────┴───┴────────────┴────────────┴───────┴────────────┘
    *****_pdbx_entry_details.*****
    shape: (1, 6)
    ┌──────────┬─────────────────┬────────────────┬─────────────────┬─────────────────┬────────────────┐
    │ entry_id ┆ compound_detail ┆ source_details ┆ nonpolymer_deta ┆ sequence_detail ┆ has_ligand_of_ │
    │ ---      ┆ s               ┆ ---            ┆ ils             ┆ s               ┆ interest       │
    │ str      ┆ ---             ┆ null           ┆ ---             ┆ ---             ┆ ---            │
    │          ┆ null            ┆                ┆ str             ┆ str             ┆ null           │
    ╞══════════╪═════════════════╪════════════════╪═════════════════╪═════════════════╪════════════════╡
    │ 1ALK     ┆ null            ┆ null           ┆ THERE ARE THREE ┆ SEQUENCE        ┆ null           │
    │          ┆                 ┆                ┆ WATER MOLECULE… ┆ ADVISORY        ┆                │
    │          ┆                 ┆                ┆                 ┆ NOTICE:         ┆                │
    │          ┆                 ┆                ┆                 ┆     …           ┆                │
    └──────────┴─────────────────┴────────────────┴─────────────────┴─────────────────┴────────────────┘
    *****_chem_comp_atom.*****
    shape: (397, 6)
    ┌─────────┬─────────┬─────────────┬────────────────────┬────────────────────┬──────────────┐
    │ comp_id ┆ atom_id ┆ type_symbol ┆ pdbx_aromatic_flag ┆ pdbx_stereo_config ┆ pdbx_ordinal │
    │ ---     ┆ ---     ┆ ---         ┆ ---                ┆ ---                ┆ ---          │
    │ str     ┆ str     ┆ str         ┆ str                ┆ str                ┆ str          │
    ╞═════════╪═════════╪═════════════╪════════════════════╪════════════════════╪══════════════╡
    │ ALA     ┆ N       ┆ N           ┆ N                  ┆ N                  ┆ 1            │
    │ ALA     ┆ CA      ┆ C           ┆ N                  ┆ S                  ┆ 2            │
    │ ALA     ┆ C       ┆ C           ┆ N                  ┆ N                  ┆ 3            │
    │ ALA     ┆ O       ┆ O           ┆ N                  ┆ N                  ┆ 4            │
    │ ALA     ┆ CB      ┆ C           ┆ N                  ┆ N                  ┆ 5            │
    │ …       ┆ …       ┆ …           ┆ …                  ┆ …                  ┆ …            │
    │ VAL     ┆ HG21    ┆ H           ┆ N                  ┆ N                  ┆ 393          │
    │ VAL     ┆ HG22    ┆ H           ┆ N                  ┆ N                  ┆ 394          │
    │ VAL     ┆ HG23    ┆ H           ┆ N                  ┆ N                  ┆ 395          │
    │ VAL     ┆ HXT     ┆ H           ┆ N                  ┆ N                  ┆ 396          │
    │ ZN      ┆ ZN      ┆ ZN          ┆ N                  ┆ N                  ┆ 397          │
    └─────────┴─────────┴─────────────┴────────────────────┴────────────────────┴──────────────┘
    *****_chem_comp_bond.*****
    shape: (379, 7)
    ┌─────────┬───────────┬───────────┬─────────────┬─────────────────┬─────────────────┬──────────────┐
    │ comp_id ┆ atom_id_1 ┆ atom_id_2 ┆ value_order ┆ pdbx_aromatic_f ┆ pdbx_stereo_con ┆ pdbx_ordinal │
    │ ---     ┆ ---       ┆ ---       ┆ ---         ┆ lag             ┆ fig             ┆ ---          │
    │ str     ┆ str       ┆ str       ┆ str         ┆ ---             ┆ ---             ┆ str          │
    │         ┆           ┆           ┆             ┆ str             ┆ str             ┆              │
    ╞═════════╪═══════════╪═══════════╪═════════════╪═════════════════╪═════════════════╪══════════════╡
    │ ALA     ┆ N         ┆ CA        ┆ sing        ┆ N               ┆ N               ┆ 1            │
    │ ALA     ┆ N         ┆ H         ┆ sing        ┆ N               ┆ N               ┆ 2            │
    │ ALA     ┆ N         ┆ H2        ┆ sing        ┆ N               ┆ N               ┆ 3            │
    │ ALA     ┆ CA        ┆ C         ┆ sing        ┆ N               ┆ N               ┆ 4            │
    │ ALA     ┆ CA        ┆ CB        ┆ sing        ┆ N               ┆ N               ┆ 5            │
    │ …       ┆ …         ┆ …         ┆ …           ┆ …               ┆ …               ┆ …            │
    │ VAL     ┆ CG1       ┆ HG13      ┆ sing        ┆ N               ┆ N               ┆ 375          │
    │ VAL     ┆ CG2       ┆ HG21      ┆ sing        ┆ N               ┆ N               ┆ 376          │
    │ VAL     ┆ CG2       ┆ HG22      ┆ sing        ┆ N               ┆ N               ┆ 377          │
    │ VAL     ┆ CG2       ┆ HG23      ┆ sing        ┆ N               ┆ N               ┆ 378          │
    │ VAL     ┆ OXT       ┆ HXT       ┆ sing        ┆ N               ┆ N               ┆ 379          │
    └─────────┴───────────┴───────────┴─────────────┴─────────────────┴─────────────────┴──────────────┘
    *****_atom_sites.*****
    shape: (1, 13)
    ┌──────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐
    │ entry_id ┆ fract_tra ┆ fract_tra ┆ fract_tra ┆ … ┆ fract_tra ┆ fract_tra ┆ fract_tra ┆ fract_tra │
    │ ---      ┆ nsf_matri ┆ nsf_matri ┆ nsf_matri ┆   ┆ nsf_matri ┆ nsf_vecto ┆ nsf_vecto ┆ nsf_vecto │
    │ str      ┆ x[1][1]   ┆ x[1][2]   ┆ x[1][3]   ┆   ┆ x[3][3]   ┆ r[1]      ┆ r[2]      ┆ r[3]      │
    │          ┆ ---       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │
    │          ┆ str       ┆ str       ┆ str       ┆   ┆ str       ┆ str       ┆ str       ┆ str       │
    ╞══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡
    │ 1ALK     ┆ 0.005120  ┆ 0.000000  ┆ 0.000000  ┆ … ┆ 0.013038  ┆ 0.00000   ┆ 0.00000   ┆ 0.00000   │
    └──────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘
    *****_atom_sites_footnote.*****
    shape: (1, 2)
    ┌─────┬─────────────────────────────────┐
    │ id  ┆ text                            │
    │ --- ┆ ---                             │
    │ str ┆ str                             │
    ╞═════╪═════════════════════════════════╡
    │ 1   ┆ RESIDUES 1-4 AND 404-409 ARE N… │
    └─────┴─────────────────────────────────┘
    *****_atom_type.*****
    shape: (7, 1)
    ┌────────┐
    │ symbol │
    │ ---    │
    │ str    │
    ╞════════╡
    │ C      │
    │ MG     │
    │ N      │
    │ O      │
    │ P      │
    │ S      │
    │ ZN     │
    └────────┘
    *****_atom_site.*****
    shape: (6_630, 21)
    ┌───────────┬──────┬────────────┬────────────┬───┬────────────┬────────────┬───────────┬───────────┐
    │ group_PDB ┆ id   ┆ type_symbo ┆ label_atom ┆ … ┆ auth_comp_ ┆ auth_asym_ ┆ auth_atom ┆ pdbx_PDB_ │
    │ ---       ┆ ---  ┆ l          ┆ _id        ┆   ┆ id         ┆ id         ┆ _id       ┆ model_num │
    │ str       ┆ str  ┆ ---        ┆ ---        ┆   ┆ ---        ┆ ---        ┆ ---       ┆ ---       │
    │           ┆      ┆ str        ┆ str        ┆   ┆ str        ┆ str        ┆ str       ┆ str       │
    ╞═══════════╪══════╪════════════╪════════════╪═══╪════════════╪════════════╪═══════════╪═══════════╡
    │ ATOM      ┆ 1    ┆ N          ┆ N          ┆ … ┆ THR        ┆ A          ┆ N         ┆ 1         │
    │ ATOM      ┆ 2    ┆ C          ┆ CA         ┆ … ┆ THR        ┆ A          ┆ CA        ┆ 1         │
    │ ATOM      ┆ 3    ┆ C          ┆ C          ┆ … ┆ THR        ┆ A          ┆ C         ┆ 1         │
    │ ATOM      ┆ 4    ┆ O          ┆ O          ┆ … ┆ THR        ┆ A          ┆ O         ┆ 1         │
    │ ATOM      ┆ 5    ┆ C          ┆ CB         ┆ … ┆ THR        ┆ A          ┆ CB        ┆ 1         │
    │ …         ┆ …    ┆ …          ┆ …          ┆ … ┆ …          ┆ …          ┆ …         ┆ …         │
    │ HETATM    ┆ 6626 ┆ O          ┆ O          ┆ … ┆ HOH        ┆ A          ┆ O         ┆ 1         │
    │ HETATM    ┆ 6627 ┆ O          ┆ O          ┆ … ┆ HOH        ┆ A          ┆ O         ┆ 1         │
    │ HETATM    ┆ 6628 ┆ O          ┆ O          ┆ … ┆ HOH        ┆ B          ┆ O         ┆ 1         │
    │ HETATM    ┆ 6629 ┆ O          ┆ O          ┆ … ┆ HOH        ┆ B          ┆ O         ┆ 1         │
    │ HETATM    ┆ 6630 ┆ O          ┆ O          ┆ … ┆ HOH        ┆ B          ┆ O         ┆ 1         │
    └───────────┴──────┴────────────┴────────────┴───┴────────────┴────────────┴───────────┴───────────┘

もしどのカテゴリにどんなことが書かれているか知りたかったらPDBx/mmCIF Dictionary Resourcesで調べればOK!!

Pandas/PolarsでCIFファイルのデータ解析

dataframeとして扱えるようになったので座標情報が書かれている_atom_siteを中心にデータ解析もしてみましょう!

atom_site

データ解析する前に、atom_siteのitemに何が書かれているか簡単に解説していきましょう。
詳しく知りたい人はこちらをチェック

項目名 説明
group_PDB 原子群の種類(ATOM/HETATM)
id 各原子の一意の識別子
type_symbol 原子の元素記号
label_atom_id PDBがつけた原子の名前
label_alt_id 代替位置の識別子
label_comp_id 残基名
label_asym_id ラベリングによるChain ID
label_entity_id 分子実体の識別子
label_seq_id ラベリングによる残基番号
pdbx_PDB_ins_code PDB insertion code
Cartn_x X座標
Cartn_y Y座標
Cartn_z Z座標
occupancy 原子の占有率
B_iso_or_equiv B factor
pdbx_formal_charge 形式電荷
auth_seq_id 著者指定の残基番号
auth_comp_id 著者指定の残基名
auth_asym_id 著者指定の鎖ID
auth_atom_id 著者指定の原子名
pdbx_PDB_model_num モデル番号

label vs auth

基本的にlabel_となっているitemは機械的なラベリングによる識別子で、auth_は著者側がつけた識別子になります。

特に注意が必要なのはasym_id(所謂ChainID)です。論文やChimeraXなどのソフトウェアなどでは多くの場合auth_asym_idがChainIDとして扱われています。ただ一方で、バイオインフォマティクスなどのシステマチックな処理の場合、label_asym_idを参照した方がいい場合もあります。以下にその違いをまとめてみた。参考

auth(著者/PDB割り当てシステム)

  1. 由来:
    • ポリマー鎖(タンパク質/DNA/RNA)→ 著者が提供
    • 多糖類鎖 → PDBが割り当て
    • 非ポリマー/溶媒 → PDBが割り当て
  2. 特徴:
    • 近接する分子同士で同じチェインIDを共有することがある
    • 特に溶媒やリガンドは、近くのポリマー鎖のIDに合わせて割り当てられる
    • 多くの可視化プログラムで使用される
    • PDBフォーマットの座標ファイルで使用される標準的な方式

label(連続ラベリングシステム)

  1. 由来:
    • すべての成分に対してシステマティックに割り当て
  2. 特徴:
    • アルファベット順の連続的な割り当て(A→Z→AA→BA...)
    • 各成分(ポリマー/非ポリマー)に独自のIDを付与
    • 溶媒とリガンドも独立したIDを持つ
    • バイオインフォマティクス applications向けに最適化
    • より体系的で一貫性のある識別が可能

せっかくなので、この違いをDataFrameを使って可視化してみましょう

from gemmi import cif
import pandas as pd

doc = cif.read('1alk.cif.gz')
block = doc.sole_block()
df = pd.DataFrame(block.get_mmcif_category('_atom_site.'))
diff_asym = df[df['label_asym_id'] != df['auth_asym_id']] # label vs auth
diff_asym[[ #表示するカラムを制限
    'id',
    'label_comp_id',
    'label_asym_id', 
    'auth_asym_id', 
    'label_seq_id',
    'auth_seq_id', 
    'label_atom_id', 
    'auth_atom_id'
]]
polarsの場合
from gemmi import cif
import polars as pl

doc = cif.read('1alk.cif.gz')
block = doc.sole_block()
df = (pl.DataFrame(block.get_mmcif_category('_atom_site.'), strict=False)
        .filter(pl.col('label_asym_id') != pl.col('auth_asym_id'))
        .select(['id',
                'label_comp_id',
                'label_asym_id', 
                'auth_asym_id', 
                'label_seq_id',
                'auth_seq_id', 
                'label_atom_id', 
                'auth_atom_id'])
        )
df

label_auth.png
ご覧の通りイオンや溶媒、水分子などは、authの場合近くのChainに属してますが、labelの場合個々のインスタンスに対して割り当てられています。他にも、seq_idはlabelの場合、polymerでないと割り当てられていません。

viewerなどで見ると一目瞭然です。
colorbychain.png
Chainごとに色付けした1alk(左がauth, 右がauthをlabelで置き換えたもの)
水分子や溶媒などの分け方が異なっているのがわかります。

atom_siteのitemについてなんとなくわかってきたと思いますので実際にデータの解析をしてみましょう。

AlphaFold Serverの予測結果CIFファイルを解析してみる

AlphaFold3/AlphaFold Server の結果もCIFファイルで出力されます。このデータ参照してデータ解析をしてみよう。

ちなみに、AF ServerやAFDBのCIFファイルはModelCIFと呼ばれるdictで書かれています。_maで始まるカテゴリが ModelCIF特有のカラムになっています。

今回は例として、AF ServerのexampleになっているProtein-RNA-Ion: PDB 8AW3 を使ってみましょう。

図1.png

exampleを押して実行後、結果のzipファイルをダウンロード&解凍して、解析を実行するディレクトリに解凍しておいてください。解凍後のdir名はexamplefold_pdb_8aw3になっていると思います。結果フォルダに入っているjosnファイルを使っても解析はできますが、今回はあえてcifファイルで解析していきましょう。

global plDDT

まず、global plDDTを取得してみましょう。global plDDTは_ma_qa_metric_global.metric_value (key-value型)に書かれていますので、今回はfind_mmcif_categoryではなくfind_valueを使って取り出してみましょう。

import pandas as pd
from gemmi import cif

def block2df(block:cif.Block, category_name:str) -> pd.DataFrame:
    return pd.DataFrame(block.get_mmcif_category(category_name))

path = 'fold_protein_rna_ion_pdb_8aw3/fold_protein_rna_ion_pdb_8aw3_model_0.cif'
block = cif.read(path).sole_block()
block.find_value('_ma_qa_metric_global.metric_value')
'71.97'

model_0のglobal plDDTは71.97みたいです。ちなみにAF serverの場合は_ma_qa_metric_local はありません(AFDBのCIFファイルにはあります)。

local plDDT

各原子(AFDBの場合は各残基)のplDDTは座標情報が入ってる_atom_siteの、B_iso_or_equiv のカラムに入っています(本来はB factorが入ってるカラム)。

とりあえず、結果のmodel_0.cifを読み込んで、_atom_site_entity_polyのdataframeを作りましょう。ついでに面倒なので、block2dfという関数もつくちゃいましょう。

import pandas as pd
from gemmi import cif

def block2df(block:cif.Block, category_name:str) -> pd.DataFrame:
    return pd.DataFrame(block.get_mmcif_category(category_name))

path = 'fold_protein_rna_ion_pdb_8aw3/fold_protein_rna_ion_pdb_8aw3_model_0.cif'
block = cif.read(path).sole_block()
atoms = block2df(block, '_atom_site.')
entity_poly = block2df(block, '_entity_poly.')

entity_polyの中身を見てpolymerを探してみます。

entity_poly

entity_poly.png
pdbx_strand_id はatom_siteのauth_asym_idと同じ意味でPDBが割り当てたChainIDになります(参考)。
A, B にポリペプチド鎖(タンパク質)Eにポリヌクレオチド鎖(今回はRNA)が入っていることがわかります。今回はChain A(auth_asym_idがA) の鎖のplDDTを解析してみましょう。

AF serverの場合、label_asym_idauth_asym_idは同一のidが当てられています(多分)のでどちらでフィルターしても大丈夫です。

atoms[atoms['label_asym_id'] != atoms['auth_asym_id']].empty # 一応確認
>> True

Chain AのCA原子を取り出して、残基番号ごとのplDDTの推移を折れ線グラフで可視化してみましょう。

chainA = atoms[(atoms['label_asym_id'] == 'A') & (atoms['label_atom_id'] == 'CA')]
chainA = chainA.astype({# str型になっているので型変更
			'B_iso_or_equiv': float,
			'label_seq_id': int
		}) 

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(10, 5))

# 背景をplDDTカラーにしてわかりやすく
ax.axhspan(90, 100, color='#0053D6', alpha=0.5, label='Very high (>90)')
ax.axhspan(70, 90, color='#65CBF3', alpha=0.5, label='Confident (70-90)')
ax.axhspan(50, 70, color='#FFDB13', alpha=0.5, label='Low (50-70)')
ax.axhspan(0, 50, color='#FF7D45', alpha=0.5, label='Very low (<50)')

# plDDTをプロット
sns.lineplot(data=chainA, x='label_seq_id', y='B_iso_or_equiv', ax=ax, lw=2)

# この辺はお好みで
ax.set_ylim(0, 100)
ticks = np.unique(np.append(ax.get_xticks(), [chainA['label_seq_id'].min(), chainA['label_seq_id'].max()]))
ax.set_xticks(ticks)
ax.set_xlim(chainA['label_seq_id'].min(), chainA['label_seq_id'].max())
ax.set_xlabel('Residue of chain A')
ax.set_ylabel('plDDT')
ax.set_title('fold_protein_rna_ion_pdb_8aw3_model_0')

plt.tight_layout()

plt.show()

plddt_01.png
おおおお!!なんかいい感じのグラフができました!!こうしてみると予測信頼度の高い部分が4~5つくらいの山になっていますね!!ChimeraXなどを使って実際の構造と比べてみましょう!
plddt_st.png
plDDTカラーコマンドに関してはこちらの記事を参照してください。

実際の構造をみると水色以上の領域がちょうど4~5つあるのがわかります。しかもhelixやsheetの部分に対応していることもわかりますね!他にも色々考察ができそうです。

これをみて分かると思いますがグラフで得られる情報と構造を見て分かる情報は結構印象が異なります。 構造だけ見て満足せずに、グラフ等をプロットしてあげることも重要です。

さて、AF3からは残基ごとではなく、atomごとにplDDTが割り当てられています。

なので、

  1. 各残基の原子のうち一番小さいplDDTの原子のplDDT:plDDT_min
  2. 各残基の原子のうち一番大きいplDDTの原子のplDDT:plDDT_max
  3. 各残基各原子のplDDTの平均値:plDDT_mean
  4. CAのplDDT:plDDT_ca

の4つをプロットして違いを見てみましょう。

def block2df(block:cif.Block, category_name:str) -> pd.DataFrame:
    return pd.DataFrame(block.get_mmcif_category(category_name))

path = 'fold_protein_rna_ion_pdb_8aw3/fold_protein_rna_ion_pdb_8aw3_model_0.cif'
block = cif.read(path).sole_block()
atoms = block2df(block, '_atom_site.'
            ).astype({'B_iso_or_equiv': float, 'label_seq_id': int}
            ).rename(columns={'B_iso_or_equiv': 'plDDT'})

chainA = atoms[atoms['label_asym_id'] == 'A']
chainA = chainA.groupby('label_seq_id').agg( #groupbyを使って集計
        plDDT_mean=('plDDT', 'mean'),
        plDDT_min=('plDDT', 'min'),
        plDDT_max=('plDDT', 'max'),
        plDDT_CA=(
            'plDDT',
            lambda x: x[chainA['label_atom_id'] == 'CA'].iloc[0] if len(x[chainA['label_atom_id'] == 'CA']) > 0 else None
        )
    ).reset_index()
chainA

agg.png
いい感じに集計できていますね、これを先ほどの要領でplotしてみましょう。

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# Create the plot
fig, ax = plt.subplots(figsize=(10, 5))

# Add colored background regions
ax.axhspan(90, 100, color='#0053D6', alpha=0.5, label='Very high (>90)')
ax.axhspan(70, 90, color='#65CBF3', alpha=0.5, label='Confident (70-90)')
ax.axhspan(50, 70, color='#FFDB13', alpha=0.5, label='Low (50-70)')
ax.axhspan(0, 50, color='#FF7D45', alpha=0.5, label='Very low (<50)')

# Plot the line
sns.lineplot(data=chainA, x='label_seq_id', y='plDDT_mean', ax=ax, lw=1, label='Mean')
sns.lineplot(data=chainA, x='label_seq_id', y='plDDT_min', ax=ax, lw=1, label='Min')
sns.lineplot(data=chainA, x='label_seq_id', y='plDDT_max', ax=ax, lw=1, label='Max')
sns.lineplot(data=chainA, x='label_seq_id', y='plDDT_CA', ax=ax, lw=1, label='CA')

# Customize the plot
ax.set_ylim(0, 100)
ticks = np.unique(np.append(ax.get_xticks(), [chainA['label_seq_id'].min(), chainA['label_seq_id'].max()]))
ax.set_xticks(ticks)
ax.set_xlim(chainA['label_seq_id'].min(), chainA['label_seq_id'].max())
ax.set_xlabel('Residue')
ax.set_ylabel('plDDT')
ax.set_title('plDDT per residue of chain A')

# Add legend
ax.legend(bbox_to_anchor=(1.02, 1))

# Adjust layout to prevent legend cutoff
plt.tight_layout()

plt.show()

plddt_agg.png
できました!重なっててみづらいですが、maxとCAがほとんど同じだったり、CAは良くてもminになると結構落ち込んでいるところがあるのがわかりますね。
最後に特定のchainのmodelごとのplddtの推移を出力するプログラムを作成してみましょう。

import pandas as pd
import gemmi
from gemmi import cif
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from typing import Literal
import typer

def plot_init(figsize=(10, 5)):
    fig, ax = plt.subplots(figsize=figsize)
    ax.axhspan(90, 100, color='#0053D6', alpha=0.5, label='Very high (>90)')
    ax.axhspan(70, 90, color='#65CBF3', alpha=0.5, label='Confident (70-90)')
    ax.axhspan(50, 70, color='#FFDB13', alpha=0.5, label='Low (50-70)')
    ax.axhspan(0, 50, color='#FF7D45', alpha=0.5, label='Very low (<50)')

    return fig, ax

def plot_customize(data:pd.DataFrame, x:str, ax:plt.Axes, filtering:str, chain_id:str, asym2entity:dict=None):
    
    if x == 'label_seq_id':
        ax.set_xticks(np.unique(np.append(ax.get_xticks(), [data[x].min(), data[x].max()])))
        ax.set_xlim(data[x].min(), data[x].max())
        ax.set_xlabel(f'Residue of chain {chain_id} ({asym2entity["poly_type"]})')
        ax.set_title(f'plDDT ({filtering})')
    
    else:
        ax.set_xlabel(f'Atom of chain {chain_id} ({asym2entity["entity_type"]})')
        ax.set_title(f'plDDT')
    
    ax.set_ylim(0, 100)
    ax.set_ylabel(f'plDDT')
    ax.legend(bbox_to_anchor=(1.02, 1))
    plt.tight_layout()
    
    return ax
    
def block2df(block:cif.Block, category:str):
    return pd.DataFrame(block.get_mmcif_category(category))

def get_asym2entity(block:cif.Block):
    # {'A': {'entity_type': 'polymer', 'poly_type': 'polypeptide(L)'},
    # 'B': {'entity_type': 'non-polymer', 'poly_type': nan},
    # 'C': {'entity_type': 'branched', 'poly_type': nan},
    # 'D': {'entity_type': 'branched', 'poly_type': nan},
    # 'E': {'entity_type': 'branched', 'poly_type': nan},
    # 'F': {'entity_type': 'branched', 'poly_type': nan},
    # 'G': {'entity_type': 'branched', 'poly_type': nan},
    # 'H': {'entity_type': 'branched', 'poly_type': nan}}
    
    asym2entity = (
        block2df(block, '_entity.')
            .rename(columns={'id': 'entity_id', 'type': 'entity_type'})
            .drop(columns=['pdbx_description'])
            .merge(block2df(block, '_struct_asym.').rename(columns={'id': 'asym_id'}),on='entity_id')
            .merge(block2df(block, '_entity_poly.').rename(columns={'type': 'poly_type'}).drop(columns=['pdbx_strand_id']),
                on='entity_id', how='left')
            .drop(columns=['entity_id'])
            .set_index('asym_id')
            .to_dict(orient='index')
        )
    
    return asym2entity

def plot_plddt(asym2entity:dict, filtering:str) -> tuple:
    if asym2entity['entity_type'] in ['non-polymer', 'branched']:
        xy = {'x': 'label_atom_id', 'y': 'B_iso_or_equiv'}
        return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms, label=label, ax=ax, marker='o'), xy
    elif asym2entity['entity_type'] == 'polymer':
        xy = {'x': 'label_seq_id', 'y': 'B_iso_or_equiv'}
        if filtering == 'CA':
            if asym2entity['poly_type'] == 'polypeptide(L)':
                return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms[atoms['label_atom_id'] == "CA"], label=label, ax=ax), xy
            elif asym2entity['poly_type'] == 'polyribonucleotide':
                return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms[atoms['label_atom_id'] == "C4'"], label=label, ax=ax), xy
            else:
                raise ValueError('Invalid poly_type')
        elif filtering == 'mean':
            return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms.groupby('label_seq_id').mean().reset_index(), label=label, ax=ax), xy
        elif filtering == 'min':
            return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms.groupby('label_seq_id').min().reset_index(), label=label, ax=ax), xy
        elif filtering == 'max':
            return lambda atoms,ax,label: sns.lineplot(**xy, data=atoms.groupby('label_seq_id').max().reset_index(), label=label, ax=ax), xy
        else:
            raise ValueError('Invalid filtering')
    else:
        raise ValueError('Invalid entity_type')

def plot_plddt_per_models(cif_dir:str, chain_id:str, filtering=Literal['CA', 'mean', 'min', 'max']):
    files = sorted(list(gemmi.CifWalk(cif_dir)))
    fig, ax = plot_init()
    
    for i,path in enumerate(files):
        block = cif.read(path).sole_block()
        
        if i == 0:
            asym2entity = get_asym2entity(block)
            if chain_id not in asym2entity:
                raise ValueError(f'Invalid chain_id: {chain_id}')
            ploter,xy = plot_plddt(asym2entity[chain_id], filtering)
        
        atoms = block2df(block, '_atom_site').astype({'B_iso_or_equiv': float, 'label_seq_id': int})
        atoms = atoms[atoms['label_asym_id'] == chain_id]
        ax = ploter(atoms, ax, f'model_{i}')
        plt.savefig(f'test_{i}.png')
        
        
    return plot_customize(atoms, xy['x'], ax, filtering, chain_id, asym2entity[chain_id])

def main(cif_dir:str, chain_id:str, filtering:str='CA', save_path:str|None=None):
    plot_plddt_per_models(cif_dir, chain_id, filtering)
    if save_path:   
        plt.savefig(save_path)
    plt.show()
    
if __name__ == '__main__':
    typer.run(main)

いかがでしょうか、このスクリプトでは引数として入力されたchain_idがpolymerなのかnon-polymerなのか、polymerならpolypeptideなのかpolyribonucleotideなのかを、asym2entityという辞書を作って判定しています。dataframeを作ることでmerge(join)が楽にできますね。

また、gemmi.CifWalk(cif_dir)は引数のdir内のcifファイルを再帰的に取得してくれるクラスです。dir内のcifファイルをまとめて処理する時にとっても便利です!!

このスクリプトを実行すると

python gemmi_table.py fold_protein_rna_ion_pdb_8aw3 A

8aw3_A.png

python gemmi_table.py fold_protein_glycan_ion_pdb_7bbv C #Cはglycan

7bbv.png
いい感じですね!!考察が捗りそうです!

このようにdataframeにすることでデータサイエンスをやっている人には慣れ親しんだ操作でcifファイルを解析することができます!!

CIFファイルの書き出し

最後にCIFファイルを編集して書き出すってことをやってみましょう。今回もAF ServerのCIFファイルを使ってみます。

複数のCIFファイルを結合して一つのCIFファイルにする

まずは簡単なところから 複数のCIFファイルを結合した一つのCIFファイルを作ってみましょう。

document(もしくはblock)クラスからCIFファイルを書き出すには.write_file メソッドを使います。

import os
import gemmi
from gemmi import cif
result_dir = 'fold_protein_glycan_ion_pdb_7bbv' #af3のresultディレクトリ
doc = cif.Document() # 空のCIFドキュメントを作成
for path in gemmi.CifWalk(result_dir): #resultディレクトリ内のCIFファイルを読み込む
    block = cif.read(path).sole_block()
    block.name = block.name + '_model_' + os.path.basename(path).split('.')[0].split('_')[-1] #モデル番号を追加
    doc.add_copied_block(block) #CIFファイルをドキュメントに追加
doc.write_file(os.path.join('results.cif')) #結果をresults.cifとして保存
len(cif.read(os.path.join('results.cif')))
>>5

簡単ですね!

一応やっていることを解説すると

  1. 空のDocumentを作る
  2. CifWalkを使ってdir内の全てのcifファイルを再帰的に取得
  3. blockを取得
  4. 取得したblockのnameプロパティ(CIFファイル内のdata_***に該当)をmodel番号を含むように変更する(model間で同じnameになってしまっているため)。
  5. DocumentにAdd
  6. 最後にwrite_fileで書き出し

という感じです。

CIFファイルに情報を追加して書き出し

もちろんですが、CIFファイルに情報を追加/削除することもできます。

解析した日付や内容を_edit_logという新しいカテゴリを作って書いてみましょう。key-valueの追加にはset_pairsメソッドを使います。

import gemmi
from gemmi import cif
from datetime import datetime
path = 'fold_protein_glycan_ion_pdb_7bbv/fold_protein_glycan_ion_pdb_7bbv_model_0.cif'
block = cif.read(path).sole_block()
block.set_pairs('_edit_log.', { 'id': '1',
                                'date': datetime.now().strftime('%Y-%m-%d'),
                                'description': 'This is a test',
                                'software': 'gemmi',
                                'version': gemmi.__version__,})
block.write_file('test.cif')

書き出したファイルの末尾を見てみると…
edit_log.png
_edit_logが追加されていますね!
今度はloop型を追加してみましょう。loop型の場合はset_mmcif_categoryを使います。

from gemmi import cif
import gemmi
import datetime
path = 'fold_protein_glycan_ion_pdb_7bbv/fold_protein_glycan_ion_pdb_7bbv_model_0.cif'
block = cif.read(path).sole_block()
block.set_mmcif_category('_edit_log.', {
    'id': ['1', '2', '3'],
    'date': [datetime.datetime.now().strftime('%Y-%m-%d')]*3,
    'description': [f'Test {i}' for i in range(3)],
    'software': ['gemmi']*3,
    'version': [gemmi.__version__]*3,})
block.write_file('test.cif

中身を見ると…
edit_log_loop.png
loop型が追加されていますね!!
これを応用することで、例えばSASAなどの他で計算した値を書き込んだり、足りない情報を追加しておいたりすることができます!

AF3のCIFファイルにentityの情報を足してみる

AF3で取得したCIFファイルにentityの情報を追加して書き出してみましょう。

とりあえず、各entityについて調べてみましょう。

from gemmi import cif
import pandas as pd
def block2df(block:cif.Block, category_name:str) -> pd.DataFrame:
    return pd.DataFrame(block.get_mmcif_category(category_name))

def get_entity_info(block:cif.Block) -> pd.DataFrame:
    entity = (block2df(block, '_entity.')
                .rename(columns={'id': 'entity_id', 'type': 'entity_type'})            
                .merge(block2df(block, '_struct_asym.') #chainの情報を追加
                            .rename(columns={'id': 'asym_id'}),
                        on='entity_id')
                
                .merge(block2df(block, '_entity_poly.') # polymerの情報を追加
                    .rename(columns={'type': 'poly_type'})
                    .drop(columns=['pdbx_strand_id']),
                        on='entity_id', how='left')
                
                .merge(block2df(block, '_entity_poly_seq') # polmerのseqの長さを追加
                            .groupby('entity_id')
                            .size()
                            .reset_index(name='seq_length'),
                        on='entity_id', how='left')
            )
    return entity[['entity_id', 'pdbx_description','entity_type','asym_id','poly_type','seq_length']]

path = 'fold_protein_rna_ion_pdb_8aw3/fold_protein_rna_ion_pdb_8aw3_model_0.cif'
block = cif.read(path).sole_block()
entity = get_entity_info(block)
entity

entity_info.png
するとこんな感じになりました。ローカル版のAF3ではchain IDが指定できるのでここまでやる必要はないですが、今回はServerなのでどれがどのchainになるのかよくわからないのでPDBのエントリーをカンニングしちゃいましょう。

元になってる8aw3.cifをダウンロードして可視化

path = '/Users/nagaet/qiita/8aw3.cif.gz'
entity_8aw3 = get_entity_info(cif.read(path).sole_block()
								).drop(columns=['asym_id']
								).drop_duplicates()
entity_8aw3

base_entity.png
なんとなく対応関係がわかりました。少し面倒ですが、元のentity_idとAFのentity_idのmappingを作りましょう。

entity2base_entity = {
    '1':'2',
    '2':'3',
    '3':'4',
    '4':'4',
    '5':'1',
}

これをentityに足して、pdbx_descriptionを追加しましょうか

entity = (entity
            .merge(entity_8aw3[['id', 'pdbx_description']], left_on='base_entity_id', right_on='id')
            .drop(columns=['id_y', 'pdbx_description_x', 'base_entity_id'])
            .rename(columns={'id_x': 'id', 'pdbx_description_y': 'pdbx_description'})
        )
entity

replace_entity.png

情報が補完できました!!block内のentityを書き換えてCIFファイルに書き出してみると…

entity = entity.to_dict(orient='list')
block.set_mmcif_category('_entity.', entity)
block.write_file('test.cif')

result_entity.png
変更されていますね!!
この編集したCIFファイルをChimeraXで開くと…
chimera_af.png
書き込む前のファイルのDescriptionは何もないけど…

chimera_add.png
追加した方は情報が追加されました!!

座標情報をDataFrameでごり押し編集

もちろん、DataFrameを使って座標情報を編集することもできます。

auth_asym_idをlabel_asym_idに置き換える

labelのが便利なことがあるのは前述しましたので、実際に置き換えてみましょう。

from gemmi import cif
block = cif.read('1alk.cif.gz').sole_block()
atoms = block.get_mmcif_category('_atom_site.') # dataframe使う必要ないのでdictで
atoms['auth_asym_id'] = atoms['label_asym_id']
block.set_mmcif_category('_atom_site.', atoms)
block.write_file('1alk_label.cif')

これをviewerでchainごとに色付けして見てみましょう。
colorbychain.png
左がauthのまま、右がlabelに置き換えた場合です。こうすると一目瞭然ですね!!

次は座標情報をCA原子だけにしてみましょう。

from gemmi import cif
def block2df(block:cif.Block, category_name:str) -> pd.DataFrame:
    return pd.DataFrame(block.get_mmcif_category(category_name))

block = cif.read('1alk.cif.gz').sole_block()
atoms = block2df(block, '_atom_site.')
atoms = atoms[atoms['label_atom_id'] == 'CA']
block.set_mmcif_category('_atom_site.', atoms.to_dict(orient='list'))
block.write_file('1alk_CA.cif')

これもviewerで見てみると
1alk_CA.png

座標をいじる際は他のカテゴリなどはそのままになることに注意してください!!!

おわりに

いかがでしたでしょうか。一見よくわからないCIFファイルの中身がDataFrameになるだけでとっつきやすくなったんじゃないでしょうか。
CIFファイルは座標だけでなく色々な情報が含まれていますので、是非活用してみてください!!
また、GEMMIにもたくさんの機能があります。ぜひ触ったり、公式ドキュメントを見てみてください!!構造解析のモードの方も余裕があったら書きたいと思ってます!!

コピーしてChimeraXで開いてみてね!

data_message
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.pdbx_PDB_ins_code
_atom_site.occupancy
_atom_site.B_iso_or_equiv
_atom_site.pdbx_formal_charge
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
ATOM 1 O O '.' UNL A 1 1 '.' 1.0 20.0 0 1 UNL A O 1 3.3 9.0 0
ATOM 2 O O '.' UNL A 1 2 '.' 1.0 20.0 0 2 UNL A O 1 5.1 9.0 0
ATOM 3 O O '.' UNL A 1 3 '.' 1.0 20.0 0 3 UNL A O 1 5.3999999999999995 9.0 0
ATOM 4 O O '.' UNL A 1 4 '.' 1.0 20.0 0 4 UNL A O 1 5.7 9.0 0
ATOM 5 O O '.' UNL A 1 5 '.' 1.0 20.0 0 5 UNL A O 1 6.0 9.0 0
ATOM 6 O O '.' UNL A 1 6 '.' 1.0 20.0 0 6 UNL A O 1 6.8999999999999995 9.0 0
ATOM 7 O O '.' UNL A 1 7 '.' 1.0 20.0 0 7 UNL A O 1 7.199999999999999 9.0 0
ATOM 8 O O '.' UNL A 1 8 '.' 1.0 20.0 0 8 UNL A O 1 7.5 9.0 0
ATOM 9 O O '.' UNL A 1 9 '.' 1.0 20.0 0 9 UNL A O 1 7.8 9.0 0
ATOM 10 O O '.' UNL A 1 10 '.' 1.0 20.0 0 10 UNL A O 1 8.1 9.0 0
ATOM 11 O O '.' UNL A 1 11 '.' 1.0 20.0 0 11 UNL A O 1 9.0 9.0 0
ATOM 12 O O '.' UNL A 1 12 '.' 1.0 20.0 0 12 UNL A O 1 9.9 9.0 0
ATOM 13 O O '.' UNL A 1 13 '.' 1.0 20.0 0 13 UNL A O 1 10.2 9.0 0
ATOM 14 O O '.' UNL A 1 14 '.' 1.0 20.0 0 14 UNL A O 1 10.5 9.0 0
ATOM 15 O O '.' UNL A 1 15 '.' 1.0 20.0 0 15 UNL A O 1 3.3 8.7 0
ATOM 16 O O '.' UNL A 1 16 '.' 1.0 20.0 0 16 UNL A O 1 5.1 8.7 0
ATOM 17 O O '.' UNL A 1 17 '.' 1.0 20.0 0 17 UNL A O 1 7.5 8.7 0
ATOM 18 O O '.' UNL A 1 18 '.' 1.0 20.0 0 18 UNL A O 1 9.0 8.7 0
ATOM 19 O O '.' UNL A 1 19 '.' 1.0 20.0 0 19 UNL A O 1 9.6 8.7 0
ATOM 20 O O '.' UNL A 1 20 '.' 1.0 20.0 0 20 UNL A O 1 10.799999999999999 8.7 0
ATOM 21 O O '.' UNL A 1 21 '.' 1.0 20.0 0 21 UNL A O 1 3.3 8.399999999999999 0
ATOM 22 O O '.' UNL A 1 22 '.' 1.0 20.0 0 22 UNL A O 1 5.1 8.399999999999999 0
ATOM 23 O O '.' UNL A 1 23 '.' 1.0 20.0 0 23 UNL A O 1 7.5 8.399999999999999 0
ATOM 24 O O '.' UNL A 1 24 '.' 1.0 20.0 0 24 UNL A O 1 9.0 8.399999999999999 0
ATOM 25 O O '.' UNL A 1 25 '.' 1.0 20.0 0 25 UNL A O 1 9.6 8.399999999999999 0
ATOM 26 O O '.' UNL A 1 26 '.' 1.0 20.0 0 26 UNL A O 1 3.3 8.1 0
ATOM 27 O O '.' UNL A 1 27 '.' 1.0 20.0 0 27 UNL A O 1 5.1 8.1 0
ATOM 28 O O '.' UNL A 1 28 '.' 1.0 20.0 0 28 UNL A O 1 7.5 8.1 0
ATOM 29 O O '.' UNL A 1 29 '.' 1.0 20.0 0 29 UNL A O 1 9.9 8.1 0
ATOM 30 O O '.' UNL A 1 30 '.' 1.0 20.0 0 30 UNL A O 1 10.2 8.1 0
ATOM 31 O O '.' UNL A 1 31 '.' 1.0 20.0 0 31 UNL A O 1 3.3 7.8 0
ATOM 32 O O '.' UNL A 1 32 '.' 1.0 20.0 0 32 UNL A O 1 5.1 7.8 0
ATOM 33 O O '.' UNL A 1 33 '.' 1.0 20.0 0 33 UNL A O 1 5.3999999999999995 7.8 0
ATOM 34 O O '.' UNL A 1 34 '.' 1.0 20.0 0 34 UNL A O 1 5.7 7.8 0
ATOM 35 O O '.' UNL A 1 35 '.' 1.0 20.0 0 35 UNL A O 1 6.0 7.8 0
ATOM 36 O O '.' UNL A 1 36 '.' 1.0 20.0 0 36 UNL A O 1 7.5 7.8 0
ATOM 37 O O '.' UNL A 1 37 '.' 1.0 20.0 0 37 UNL A O 1 10.5 7.8 0
ATOM 38 O O '.' UNL A 1 38 '.' 1.0 20.0 0 38 UNL A O 1 10.799999999999999 7.8 0
ATOM 39 O O '.' UNL A 1 39 '.' 1.0 20.0 0 39 UNL A O 1 3.3 7.5 0
ATOM 40 O O '.' UNL A 1 40 '.' 1.0 20.0 0 40 UNL A O 1 5.1 7.5 0
ATOM 41 O O '.' UNL A 1 41 '.' 1.0 20.0 0 41 UNL A O 1 7.5 7.5 0
ATOM 42 O O '.' UNL A 1 42 '.' 1.0 20.0 0 42 UNL A O 1 10.799999999999999 7.5 0
ATOM 43 O O '.' UNL A 1 43 '.' 1.0 20.0 0 43 UNL A O 1 3.3 7.2 0
ATOM 44 O O '.' UNL A 1 44 '.' 1.0 20.0 0 44 UNL A O 1 5.1 7.2 0
ATOM 45 O O '.' UNL A 1 45 '.' 1.0 20.0 0 45 UNL A O 1 7.5 7.2 0
ATOM 46 O O '.' UNL A 1 46 '.' 1.0 20.0 0 46 UNL A O 1 9.6 7.2 0
ATOM 47 O O '.' UNL A 1 47 '.' 1.0 20.0 0 47 UNL A O 1 10.799999999999999 7.2 0
ATOM 48 O O '.' UNL A 1 48 '.' 1.0 20.0 0 48 UNL A O 1 3.3 6.8999999999999995 0
ATOM 49 O O '.' UNL A 1 49 '.' 1.0 20.0 0 49 UNL A O 1 3.5999999999999996 6.8999999999999995 0
ATOM 50 O O '.' UNL A 1 50 '.' 1.0 20.0 0 50 UNL A O 1 3.9 6.8999999999999995 0
ATOM 51 O O '.' UNL A 1 51 '.' 1.0 20.0 0 51 UNL A O 1 4.2 6.8999999999999995 0
ATOM 52 O O '.' UNL A 1 52 '.' 1.0 20.0 0 52 UNL A O 1 4.5 6.8999999999999995 0
ATOM 53 O O '.' UNL A 1 53 '.' 1.0 20.0 0 53 UNL A O 1 5.1 6.8999999999999995 0
ATOM 54 O O '.' UNL A 1 54 '.' 1.0 20.0 0 54 UNL A O 1 5.3999999999999995 6.8999999999999995 0
ATOM 55 O O '.' UNL A 1 55 '.' 1.0 20.0 0 55 UNL A O 1 5.7 6.8999999999999995 0
ATOM 56 O O '.' UNL A 1 56 '.' 1.0 20.0 0 56 UNL A O 1 6.0 6.8999999999999995 0
ATOM 57 O O '.' UNL A 1 57 '.' 1.0 20.0 0 57 UNL A O 1 6.3 6.8999999999999995 0
ATOM 58 O O '.' UNL A 1 58 '.' 1.0 20.0 0 58 UNL A O 1 7.5 6.8999999999999995 0
ATOM 59 O O '.' UNL A 1 59 '.' 1.0 20.0 0 59 UNL A O 1 9.9 6.8999999999999995 0
ATOM 60 O O '.' UNL A 1 60 '.' 1.0 20.0 0 60 UNL A O 1 10.2 6.8999999999999995 0
ATOM 61 O O '.' UNL A 1 61 '.' 1.0 20.0 0 61 UNL A O 1 10.5 6.8999999999999995 0
ATOM 62 O O '.' UNL A 1 62 '.' 1.0 20.0 0 62 UNL A O 1 3.5999999999999996 4.8 0
ATOM 63 O O '.' UNL A 1 63 '.' 1.0 20.0 0 63 UNL A O 1 3.9 4.8 0
ATOM 64 O O '.' UNL A 1 64 '.' 1.0 20.0 0 64 UNL A O 1 4.2 4.8 0
ATOM 65 O O '.' UNL A 1 65 '.' 1.0 20.0 0 65 UNL A O 1 5.3999999999999995 4.8 0
ATOM 66 O O '.' UNL A 1 66 '.' 1.0 20.0 0 66 UNL A O 1 5.7 4.8 0
ATOM 67 O O '.' UNL A 1 67 '.' 1.0 20.0 0 67 UNL A O 1 6.0 4.8 0
ATOM 68 O O '.' UNL A 1 68 '.' 1.0 20.0 0 68 UNL A O 1 7.199999999999999 4.8 0
ATOM 69 O O '.' UNL A 1 69 '.' 1.0 20.0 0 69 UNL A O 1 8.4 4.8 0
ATOM 70 O O '.' UNL A 1 70 '.' 1.0 20.0 0 70 UNL A O 1 9.299999999999999 4.8 0
ATOM 71 O O '.' UNL A 1 71 '.' 1.0 20.0 0 71 UNL A O 1 10.5 4.8 0
ATOM 72 O O '.' UNL A 1 72 '.' 1.0 20.0 0 72 UNL A O 1 11.7 4.8 0
ATOM 73 O O '.' UNL A 1 73 '.' 1.0 20.0 0 73 UNL A O 1 12.9 4.8 0
ATOM 74 O O '.' UNL A 1 74 '.' 1.0 20.0 0 74 UNL A O 1 14.1 4.8 0
ATOM 75 O O '.' UNL A 1 75 '.' 1.0 20.0 0 75 UNL A O 1 14.7 4.8 0
ATOM 76 O O '.' UNL A 1 76 '.' 1.0 20.0 0 76 UNL A O 1 15.899999999999999 4.8 0
ATOM 77 O O '.' UNL A 1 77 '.' 1.0 20.0 0 77 UNL A O 1 17.4 4.8 0
ATOM 78 O O '.' UNL A 1 78 '.' 1.0 20.0 0 78 UNL A O 1 18.3 4.8 0
ATOM 79 O O '.' UNL A 1 79 '.' 1.0 20.0 0 79 UNL A O 1 19.2 4.8 0
ATOM 80 O O '.' UNL A 1 80 '.' 1.0 20.0 0 80 UNL A O 1 3.3 4.5 0
ATOM 81 O O '.' UNL A 1 81 '.' 1.0 20.0 0 81 UNL A O 1 4.5 4.5 0
ATOM 82 O O '.' UNL A 1 82 '.' 1.0 20.0 0 82 UNL A O 1 5.1 4.5 0
ATOM 83 O O '.' UNL A 1 83 '.' 1.0 20.0 0 83 UNL A O 1 6.3 4.5 0
ATOM 84 O O '.' UNL A 1 84 '.' 1.0 20.0 0 84 UNL A O 1 7.199999999999999 4.5 0
ATOM 85 O O '.' UNL A 1 85 '.' 1.0 20.0 0 85 UNL A O 1 8.4 4.5 0
ATOM 86 O O '.' UNL A 1 86 '.' 1.0 20.0 0 86 UNL A O 1 9.299999999999999 4.5 0
ATOM 87 O O '.' UNL A 1 87 '.' 1.0 20.0 0 87 UNL A O 1 10.5 4.5 0
ATOM 88 O O '.' UNL A 1 88 '.' 1.0 20.0 0 88 UNL A O 1 11.4 4.5 0
ATOM 89 O O '.' UNL A 1 89 '.' 1.0 20.0 0 89 UNL A O 1 11.7 4.5 0
ATOM 90 O O '.' UNL A 1 90 '.' 1.0 20.0 0 90 UNL A O 1 12.9 4.5 0
ATOM 91 O O '.' UNL A 1 91 '.' 1.0 20.0 0 91 UNL A O 1 13.799999999999999 4.5 0
ATOM 92 O O '.' UNL A 1 92 '.' 1.0 20.0 0 92 UNL A O 1 14.7 4.5 0
ATOM 93 O O '.' UNL A 1 93 '.' 1.0 20.0 0 93 UNL A O 1 15.899999999999999 4.5 0
ATOM 94 O O '.' UNL A 1 94 '.' 1.0 20.0 0 94 UNL A O 1 17.4 4.5 0
ATOM 95 O O '.' UNL A 1 95 '.' 1.0 20.0 0 95 UNL A O 1 18.3 4.5 0
ATOM 96 O O '.' UNL A 1 96 '.' 1.0 20.0 0 96 UNL A O 1 19.2 4.5 0
ATOM 97 O O '.' UNL A 1 97 '.' 1.0 20.0 0 97 UNL A O 1 3.3 4.199999999999999 0
ATOM 98 O O '.' UNL A 1 98 '.' 1.0 20.0 0 98 UNL A O 1 4.8 4.199999999999999 0
ATOM 99 O O '.' UNL A 1 99 '.' 1.0 20.0 0 99 UNL A O 1 6.6 4.199999999999999 0
ATOM 100 O O '.' UNL A 1 100 '.' 1.0 20.0 0 100 UNL A O 1 7.199999999999999 4.199999999999999 0
ATOM 101 O O '.' UNL A 1 101 '.' 1.0 20.0 0 101 UNL A O 1 8.4 4.199999999999999 0
ATOM 102 O O '.' UNL A 1 102 '.' 1.0 20.0 0 102 UNL A O 1 9.6 4.199999999999999 0
ATOM 103 O O '.' UNL A 1 103 '.' 1.0 20.0 0 103 UNL A O 1 10.2 4.199999999999999 0
ATOM 104 O O '.' UNL A 1 104 '.' 1.0 20.0 0 104 UNL A O 1 11.4 4.199999999999999 0
ATOM 105 O O '.' UNL A 1 105 '.' 1.0 20.0 0 105 UNL A O 1 12.0 4.199999999999999 0
ATOM 106 O O '.' UNL A 1 106 '.' 1.0 20.0 0 106 UNL A O 1 12.9 4.199999999999999 0
ATOM 107 O O '.' UNL A 1 107 '.' 1.0 20.0 0 107 UNL A O 1 13.5 4.199999999999999 0
ATOM 108 O O '.' UNL A 1 108 '.' 1.0 20.0 0 108 UNL A O 1 14.7 4.199999999999999 0
ATOM 109 O O '.' UNL A 1 109 '.' 1.0 20.0 0 109 UNL A O 1 15.899999999999999 4.199999999999999 0
ATOM 110 O O '.' UNL A 1 110 '.' 1.0 20.0 0 110 UNL A O 1 17.4 4.199999999999999 0
ATOM 111 O O '.' UNL A 1 111 '.' 1.0 20.0 0 111 UNL A O 1 18.3 4.199999999999999 0
ATOM 112 O O '.' UNL A 1 112 '.' 1.0 20.0 0 112 UNL A O 1 19.2 4.199999999999999 0
ATOM 113 O O '.' UNL A 1 113 '.' 1.0 20.0 0 113 UNL A O 1 3.5999999999999996 3.9000000000000004 0
ATOM 114 O O '.' UNL A 1 114 '.' 1.0 20.0 0 114 UNL A O 1 3.9 3.9000000000000004 0
ATOM 115 O O '.' UNL A 1 115 '.' 1.0 20.0 0 115 UNL A O 1 4.8 3.9000000000000004 0
ATOM 116 O O '.' UNL A 1 116 '.' 1.0 20.0 0 116 UNL A O 1 6.6 3.9000000000000004 0
ATOM 117 O O '.' UNL A 1 117 '.' 1.0 20.0 0 117 UNL A O 1 7.199999999999999 3.9000000000000004 0
ATOM 118 O O '.' UNL A 1 118 '.' 1.0 20.0 0 118 UNL A O 1 8.4 3.9000000000000004 0
ATOM 119 O O '.' UNL A 1 119 '.' 1.0 20.0 0 119 UNL A O 1 9.6 3.9000000000000004 0
ATOM 120 O O '.' UNL A 1 120 '.' 1.0 20.0 0 120 UNL A O 1 9.9 3.9000000000000004 0
ATOM 121 O O '.' UNL A 1 121 '.' 1.0 20.0 0 121 UNL A O 1 10.2 3.9000000000000004 0
ATOM 122 O O '.' UNL A 1 122 '.' 1.0 20.0 0 122 UNL A O 1 12.0 3.9000000000000004 0
ATOM 123 O O '.' UNL A 1 123 '.' 1.0 20.0 0 123 UNL A O 1 12.9 3.9000000000000004 0
ATOM 124 O O '.' UNL A 1 124 '.' 1.0 20.0 0 124 UNL A O 1 13.5 3.9000000000000004 0
ATOM 125 O O '.' UNL A 1 125 '.' 1.0 20.0 0 125 UNL A O 1 14.7 3.9000000000000004 0
ATOM 126 O O '.' UNL A 1 126 '.' 1.0 20.0 0 126 UNL A O 1 15.899999999999999 3.9000000000000004 0
ATOM 127 O O '.' UNL A 1 127 '.' 1.0 20.0 0 127 UNL A O 1 17.4 3.9000000000000004 0
ATOM 128 O O '.' UNL A 1 128 '.' 1.0 20.0 0 128 UNL A O 1 18.3 3.9000000000000004 0
ATOM 129 O O '.' UNL A 1 129 '.' 1.0 20.0 0 129 UNL A O 1 19.2 3.9000000000000004 0
ATOM 130 O O '.' UNL A 1 130 '.' 1.0 20.0 0 130 UNL A O 1 4.2 3.5999999999999996 0
ATOM 131 O O '.' UNL A 1 131 '.' 1.0 20.0 0 131 UNL A O 1 4.5 3.5999999999999996 0
ATOM 132 O O '.' UNL A 1 132 '.' 1.0 20.0 0 132 UNL A O 1 4.8 3.5999999999999996 0
ATOM 133 O O '.' UNL A 1 133 '.' 1.0 20.0 0 133 UNL A O 1 6.6 3.5999999999999996 0
ATOM 134 O O '.' UNL A 1 134 '.' 1.0 20.0 0 134 UNL A O 1 7.199999999999999 3.5999999999999996 0
ATOM 135 O O '.' UNL A 1 135 '.' 1.0 20.0 0 135 UNL A O 1 8.4 3.5999999999999996 0
ATOM 136 O O '.' UNL A 1 136 '.' 1.0 20.0 0 136 UNL A O 1 9.9 3.5999999999999996 0
ATOM 137 O O '.' UNL A 1 137 '.' 1.0 20.0 0 137 UNL A O 1 11.1 3.5999999999999996 0
ATOM 138 O O '.' UNL A 1 138 '.' 1.0 20.0 0 138 UNL A O 1 11.4 3.5999999999999996 0
ATOM 139 O O '.' UNL A 1 139 '.' 1.0 20.0 0 139 UNL A O 1 11.7 3.5999999999999996 0
ATOM 140 O O '.' UNL A 1 140 '.' 1.0 20.0 0 140 UNL A O 1 12.0 3.5999999999999996 0
ATOM 141 O O '.' UNL A 1 141 '.' 1.0 20.0 0 141 UNL A O 1 12.9 3.5999999999999996 0
ATOM 142 O O '.' UNL A 1 142 '.' 1.0 20.0 0 142 UNL A O 1 13.2 3.5999999999999996 0
ATOM 143 O O '.' UNL A 1 143 '.' 1.0 20.0 0 143 UNL A O 1 13.5 3.5999999999999996 0
ATOM 144 O O '.' UNL A 1 144 '.' 1.0 20.0 0 144 UNL A O 1 14.7 3.5999999999999996 0
ATOM 145 O O '.' UNL A 1 145 '.' 1.0 20.0 0 145 UNL A O 1 15.899999999999999 3.5999999999999996 0
ATOM 146 O O '.' UNL A 1 146 '.' 1.0 20.0 0 146 UNL A O 1 17.4 3.5999999999999996 0
ATOM 147 O O '.' UNL A 1 147 '.' 1.0 20.0 0 147 UNL A O 1 18.3 3.5999999999999996 0
ATOM 148 O O '.' UNL A 1 148 '.' 1.0 20.0 0 148 UNL A O 1 19.2 3.5999999999999996 0
ATOM 149 O O '.' UNL A 1 149 '.' 1.0 20.0 0 149 UNL A O 1 4.5 3.3000000000000007 0
ATOM 150 O O '.' UNL A 1 150 '.' 1.0 20.0 0 150 UNL A O 1 4.8 3.3000000000000007 0
ATOM 151 O O '.' UNL A 1 151 '.' 1.0 20.0 0 151 UNL A O 1 6.6 3.3000000000000007 0
ATOM 152 O O '.' UNL A 1 152 '.' 1.0 20.0 0 152 UNL A O 1 7.199999999999999 3.3000000000000007 0
ATOM 153 O O '.' UNL A 1 153 '.' 1.0 20.0 0 153 UNL A O 1 8.4 3.3000000000000007 0
ATOM 154 O O '.' UNL A 1 154 '.' 1.0 20.0 0 154 UNL A O 1 9.9 3.3000000000000007 0
ATOM 155 O O '.' UNL A 1 155 '.' 1.0 20.0 0 155 UNL A O 1 11.1 3.3000000000000007 0
ATOM 156 O O '.' UNL A 1 156 '.' 1.0 20.0 0 156 UNL A O 1 12.299999999999999 3.3000000000000007 0
ATOM 157 O O '.' UNL A 1 157 '.' 1.0 20.0 0 157 UNL A O 1 12.9 3.3000000000000007 0
ATOM 158 O O '.' UNL A 1 158 '.' 1.0 20.0 0 158 UNL A O 1 13.5 3.3000000000000007 0
ATOM 159 O O '.' UNL A 1 159 '.' 1.0 20.0 0 159 UNL A O 1 14.7 3.3000000000000007 0
ATOM 160 O O '.' UNL A 1 160 '.' 1.0 20.0 0 160 UNL A O 1 15.899999999999999 3.3000000000000007 0
ATOM 161 O O '.' UNL A 1 161 '.' 1.0 20.0 0 161 UNL A O 1 17.4 3.3000000000000007 0
ATOM 162 O O '.' UNL A 1 162 '.' 1.0 20.0 0 162 UNL A O 1 18.3 3.3000000000000007 0
ATOM 163 O O '.' UNL A 1 163 '.' 1.0 20.0 0 163 UNL A O 1 19.2 3.3000000000000007 0
ATOM 164 O O '.' UNL A 1 164 '.' 1.0 20.0 0 164 UNL A O 1 3.3 3.0 0
ATOM 165 O O '.' UNL A 1 165 '.' 1.0 20.0 0 165 UNL A O 1 4.5 3.0 0
ATOM 166 O O '.' UNL A 1 166 '.' 1.0 20.0 0 166 UNL A O 1 5.1 3.0 0
ATOM 167 O O '.' UNL A 1 167 '.' 1.0 20.0 0 167 UNL A O 1 6.3 3.0 0
ATOM 168 O O '.' UNL A 1 168 '.' 1.0 20.0 0 168 UNL A O 1 7.199999999999999 3.0 0
ATOM 169 O O '.' UNL A 1 169 '.' 1.0 20.0 0 169 UNL A O 1 8.4 3.0 0
ATOM 170 O O '.' UNL A 1 170 '.' 1.0 20.0 0 170 UNL A O 1 9.9 3.0 0
ATOM 171 O O '.' UNL A 1 171 '.' 1.0 20.0 0 171 UNL A O 1 11.1 3.0 0
ATOM 172 O O '.' UNL A 1 172 '.' 1.0 20.0 0 172 UNL A O 1 12.299999999999999 3.0 0
ATOM 173 O O '.' UNL A 1 173 '.' 1.0 20.0 0 173 UNL A O 1 12.9 3.0 0
ATOM 174 O O '.' UNL A 1 174 '.' 1.0 20.0 0 174 UNL A O 1 13.799999999999999 3.0 0
ATOM 175 O O '.' UNL A 1 175 '.' 1.0 20.0 0 175 UNL A O 1 14.7 3.0 0
ATOM 176 O O '.' UNL A 1 176 '.' 1.0 20.0 0 176 UNL A O 1 15.899999999999999 3.0 0
ATOM 177 O O '.' UNL A 1 177 '.' 1.0 20.0 0 177 UNL A O 1 3.5999999999999996 2.6999999999999993 0
ATOM 178 O O '.' UNL A 1 178 '.' 1.0 20.0 0 178 UNL A O 1 3.9 2.6999999999999993 0
ATOM 179 O O '.' UNL A 1 179 '.' 1.0 20.0 0 179 UNL A O 1 4.2 2.6999999999999993 0
ATOM 180 O O '.' UNL A 1 180 '.' 1.0 20.0 0 180 UNL A O 1 5.3999999999999995 2.6999999999999993 0
ATOM 181 O O '.' UNL A 1 181 '.' 1.0 20.0 0 181 UNL A O 1 5.7 2.6999999999999993 0
ATOM 182 O O '.' UNL A 1 182 '.' 1.0 20.0 0 182 UNL A O 1 6.0 2.6999999999999993 0
ATOM 183 O O '.' UNL A 1 183 '.' 1.0 20.0 0 183 UNL A O 1 7.5 2.6999999999999993 0
ATOM 184 O O '.' UNL A 1 184 '.' 1.0 20.0 0 184 UNL A O 1 7.8 2.6999999999999993 0
ATOM 185 O O '.' UNL A 1 185 '.' 1.0 20.0 0 185 UNL A O 1 8.1 2.6999999999999993 0
ATOM 186 O O '.' UNL A 1 186 '.' 1.0 20.0 0 186 UNL A O 1 9.9 2.6999999999999993 0
ATOM 187 O O '.' UNL A 1 187 '.' 1.0 20.0 0 187 UNL A O 1 10.799999999999999 2.6999999999999993 0
ATOM 188 O O '.' UNL A 1 188 '.' 1.0 20.0 0 188 UNL A O 1 12.299999999999999 2.6999999999999993 0
ATOM 189 O O '.' UNL A 1 189 '.' 1.0 20.0 0 189 UNL A O 1 12.9 2.6999999999999993 0
ATOM 190 O O '.' UNL A 1 190 '.' 1.0 20.0 0 190 UNL A O 1 14.1 2.6999999999999993 0
ATOM 191 O O '.' UNL A 1 191 '.' 1.0 20.0 0 191 UNL A O 1 15.0 2.6999999999999993 0
ATOM 192 O O '.' UNL A 1 192 '.' 1.0 20.0 0 192 UNL A O 1 15.299999999999999 2.6999999999999993 0
ATOM 193 O O '.' UNL A 1 193 '.' 1.0 20.0 0 193 UNL A O 1 15.6 2.6999999999999993 0
ATOM 194 O O '.' UNL A 1 194 '.' 1.0 20.0 0 194 UNL A O 1 17.4 2.6999999999999993 0
ATOM 195 O O '.' UNL A 1 195 '.' 1.0 20.0 0 195 UNL A O 1 18.3 2.6999999999999993 0
ATOM 196 O O '.' UNL A 1 196 '.' 1.0 20.0 0 196 UNL A O 1 19.2 2.6999999999999993 0
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?