====== Python モジュール: parmed ======
===== 概要 =====
* Gromacs や AMBER の構造やトポロジーファイルを扱うモジュール
===== インストール =====
$ sudo pip3 install parmed
===== 使い方 =====
import parmed
===== よく使う機能 =====
==== 構造の読み込み ====
structure = parmed.load_file("INPUT")
* ''structure'': 構造オブジェクトを格納する変数
* ''INPUT'': 構造ファイル (.pdb / .gro)
==== 構造の出力 ====
structure.save("OUTPUT", "FORMAT", overwrite = True)
* ''structure'': 構造オブジェクト
* ''OUTPUT'': 出力ファイル (.pdb / .gro)
* ''FORMAT'': 出力ファイルのフォーマット (pdb / gro)
* ''overwrite = True'': 上書き保存する
==== Gromacs トポロジーファイルの読み込み ====
topology = parmed.gromacs.GromacsTopologyFile("INPUT", xyz = "COORD")
* ''topology'': トポロジーオブジェクトを格納する変数
* ''INPUT'': トポロジーファイル (.top)
* ''xyz = "COORD"'': .gro などの座標ファアイル (任意のオプション)
==== Amber トポロジーファイルの読み込み ====
topology = parmed.amber.AmberParm("INPUT", xyz = "COORD")
* ''topology'': トポロジーオブジェクトを格納する変数
* ''INPUT'': トポロジーファイル (.prmtop)
* ''xyz = "COORD"'': .inpcrd などの座標ファアイル (任意のオプション)
==== トポロジーファイルの出力 ====
topology.save("OUTPUT", "FORMAT", overwrite = True)
* ''topology'': トポロジーオブジェクト
* ''OUTPUT'': 出力ファイル (.top / .prmtop)
* ''FORMAT'': 出力ファイルのフォーマット (''gromacs'' (gromacs トポロジー) / ''amber'' (Amber トポロジー))
* ''overwrite = True'': 上書き保存する
==== 情報取得 ====
* 原子オブジェクト\\ object.atoms
* ''object'': トポロジーや構造オブジェクト
* 原子オブジェクトは配列で格納されているため、各原子オブジェクトにアクセスするには ''object.atoms[0]'' のようにアクセスする。
* 原子名\\ object.atoms[x].name
* ''object'': トポロジーや構造オブジェクト
* ''x'': アクセスする原子のインデックス (ファイルにある原子順序番号ではなく、0 から始まる配列のインデックス)
* 原子順序番号\\ object.atoms[x].number
* ''object'': トポロジーや構造オブジェクト
* ''x'': アクセスする原子のインデックス (ファイルにある原子順序番号ではなく、0 から始まる配列のインデックス)
* 原子順序番号は構造オブジェクト、およびトポロジーオブジェクト読み込み時に構造ファイルを読み込ませた場合にのみ有効
* 原子インデックス\\ object.atoms[x].idx
* ''object'': トポロジーや構造オブジェクト
* ''x'': アクセスする原子のインデックス (ファイルにある原子順序番号ではなく、0 から始まる配列のインデックス)
* 原子全てに与えられた 0 から始まるインデックスを返す (原子順序番号は、読み込んだファイル内の原子順序番号を返すため、ファイル内で重複や誤った番号が付けられていると、影響を受ける)
* 残基オブジェクト\\ object.residues
* ''object'': トポロジーや構造オブジェクト
* 残基オブジェクトは配列で格納されているため、各残基オブジェクトにアクセスするには ''object.atoms[0]'' のようにアクセスする。
* 残基名\\ object.residues[x].number
* ''object'': トポロジーや構造オブジェクト
* ''x'': アクセスする残基のインデックス (ファイルにある残基順序番号ではなく、0 から始まる配列のインデックス)
* 残基順序番号\\ object.residues[x].number
* ''object'': トポロジーや構造オブジェクト
* ''x'': アクセスする残基のインデックス (ファイルにある残基順序番号ではなく、0 から始まる配列のインデックス)
* 残基順序番号は構造オブジェクト、およびトポロジーオブジェクト読み込み時に構造ファイルを読み込ませた場合にのみ有効
* 特定原子の残基名および特定残基の原子名\\ object.atoms[x].residue.name
object.residues[y].atoms[z].name
* ''x'': 特定原子のインデックス
* ''y'': 特定残基のインデックス
* ''z'': 特定残基 y に属する原子のインデックス
==== 特定部位の削除 ====
object.strip("AMBER_MASK")
* ''AMBER_MASK'': 削除する部位の Amber mask
===== 使用例 =====
==== PDB から座標を抽出する ====
* example.pdb の場合:\\
import parmed
obj_mol = parmed.load_file("example.pdb")
print(obj_mol.coordinates)
* 座標は numpy.ndarray 形式で取得できる
==== PDB からリガンドの座標を抽出する ====
* 5r7y.pdb (リガンド残基名 ''JFM'') の場合\\
import parmed
obj_mol = parmed.load_file("5r7y.pdb")
obj_ambermask = parmed.amber.AmberMask(obj_mol, ":JFM")
print(obj_mol.coordinates[list(obj_ambermask.Selected())])
* ''parmed.amber.AmberMask(MOLECULE_OBJECT, AMBERMASK)'' で Amber mask による指定ができる。
* AmberMask オブジェクトの ''.Selected()'' はジェネレータで、Amber mask で指定された原子のインデックス (配列インデックス) を返す。
===== 参考サイト =====
* [[https://parmed.github.io/ParmEd/html/index.html | ParmEd — ParmEd documentation]]
{{tag>プログラミング}}