home about terms twitter

PyOpenMSを用いたペプチドのモノアイソトピック質量の計算

date: 2020-02-12 | mod: 2020-02-12

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(セレノシステイン)があることで扱いが変わっている可能性があります。