PyOpenMSを用いたペプチドのモノアイソトピック質量の計算
PythonのライブラリであるPyOpenMS(公式サイト)を用いて、FASTAファイル中のペプチド配列からモノアイソトピック質量を計算します。作業はGoogle Colaboratory内で行いました。
PyOpenMSはOpenMSのプロジェクトの一つです。
- PyOpenMS …プロテオミクスに特化したPythonのライブラリ
- OpenMS …オープンソースのプロテオミクス解析ソフトウェア
- モノアイソトピック質量 …(monoisotopic mass、exact mass)構成原子のうち、最も多い同位体から構成された分子の質量であり、m/zとして質量分析の時に値を利用する場合がある。
なお、同様のライブラリにはPyteomicsがありますが、これを用いた同様の解析はすでに行っています(こちら)。
前回は個人的に作業に慣れていたWindows10とAnacondaの組み合わせでPyteomicsを実践しており、PyOpenMSはcondaで配布がなされておらず記事作成時点で使い慣れていないpipによるインストールが必要なため躊躇しましたが、Google Colaboratoryで比較的手軽に試すことができました。
なお、以降はPyteomicsの時と同じ部分については簡単にのみ記述させていただきます。
index
コード全体
動作環境:
- Google Colaboratory (python3ノートブック 2020/02/12時点)
- pyopenms-2.4.0
input | output |
---|---|
input.fasta | output_mass(listオブジェクト) |
!pip install pyopenms
Google Coraboratoryの基本については別にご参照いただきます。ここではまずpyopenmsをインストールします。
from google.colab import drive
drive.mount('/content/gdrive')
次に、GoogleドライブとGoogle Colaboratoryの間でファイルのやり取りをするために、ドライブをマウントします。
上記セルを実行後に出てくるURLからリンク先へ続いていき、キーを得たら指示に従って出力セル内に入力してください。
from pyopenms import *
f = open('./gdrive/My Drive/input.fasta')
lines = f.readlines()
pep_list = []
pep = ''
for num in range(len(lines)):
line = lines[num]
if line.find('>') == 0:
if pep == '':
pass
else:
pep_list.append(pep)
pep = ''
elif line.find('>') != 0 and line != '\n':
pep += line.replace('\n', '')
if num + 1 == len(lines):
pep_list.append(pep)
output_mass = []
for pep in pep_list:
ps = AASequence.fromString(pep)
pep_mass = ps.getMonoWeight(Residue.ResidueType.Full, 0)
output_mass.append(pep_mass)
print(output_mass)
f.close
openで指定するディレクトリは、MyDrive内の位置を指定してください。今回はMyDrive直下にinput.fastaを置きました。
入力
“input.fasta"はPyteomicsの時と同様です。以下の3つの配列から構成されます。
>test_1
PEPTIDE
>test_2
DNA
>test_3
RNA
SEQUENCE
MSMS
ペプチドリストの作成
pep_list = []
pep = ''
for num in range(len(lines)):
line = lines[num]
if line.find('>') == 0:
if pep == '':
pass
else:
pep_list.append(pep)
pep = ''
elif line.find('>') != 0 and line != '\n':
pep += line.replace('\n', '')
if num + 1 == len(lines):
pep_list.append(pep)
ここのコードについては、Pyteomicsの時と全く同じです。
質量の計算
モノアイソトピック質量の計算には、PyOpenMSではps.getMonoWeight()を用います。
Pyteomicsのmass.calculate_mass()を用いた場合と比較しますが、コードの行数としては変わりません。
ライブラリ | 目的 | 関数 |
---|---|---|
Pyteomics | アミノ酸配列リスト作成 | parser.parse() |
PyOpenMS | アミノ酸配列リスト作成 | AASequence.fromString() |
Pyteomics | 質量計算(Mono) | mass.calculate_mass() |
PyOpenMS | 質量計算(Mono) | getMonoWeight() |
# Pyteomics
for pep in pep_list:
ps = parser.parse(pep, show_unmodified_termini=True)
pep_mass = mass.calculate_mass(parsed_sequence=ps)
output_mass.append(pep_mass)
# PyOpenMS
for pep in pep_list:
ps = AASequence.fromString(pep)
pep_mass = ps.getMonoWeight(Residue.ResidueType.Full, 0)
output_mass.append(pep_mass)
出力
このコードを実行することで、以下の出力が得られます。
[799.3599696906999, 318.11755157420004, 1759.5668408757]
Pyteomicsの結果と並べてみると、
[799.3599696906999, 318.11755157420004, 1759.5668408757] # PyOpenMS
[799.35996402671, 318.11754893338, 1765.5608760516898] # Pyteomics
参照にしている原子量の違いなのかは不明ですが、有効数字6桁までは一致しています。
三つ目の配列である「RNASEQUENCEMSMS」については、U(セレノシステイン)があることで扱いが変わっている可能性があります。