2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pyOpenMSを用いて抽出クロマトグラムを描画する

Last updated at Posted at 2022-12-16

pyOpenMSはpythonのMS解析用のライブラリーである。

これを用いて抽出イオンクロマトグラムを描画しpdfファイルとして出力する方法をまとめる。
google colaboratoryでも利用可能である。

インストール

以下のコマンドでインストールを行う。

pip install pyopenms

描画にはnumpyやmatplotlibを用いるため、これらをこれらもインストールする必要がある。

ファイルの準備

測定データをconverterを用いてmzML形式に変換する。 converterは「MSconvert」を用いると良い。 https://proteowizard.sourceforge.io/download.html

必要なライブラリの読み込みを行う。

import numpy as np
from pyopenms import *
import matplotlib.pyplot as plt

ファイルの読み込み

まず、以下の方法でファイルを開く。

exp = MSExperiment()
MzMLFile().load("filename.mzML", exp)

この開いたファイルでまず、TICを描画してみる。

#calculateTIC()を用いてTICを描画することができる。
#TICの保持時間とシグナル強度を所得する。
tic = exp.calculateTIC() 
retention_times, intensities = tic.get_peaks()

#グラフの描画
plt.plot(retention_times, intensities)

plt.title('TIC')
plt.xlabel('time (s)')
plt.ylabel('intensity (cps)')
plt.savefig('file.pdf')
plt.show()

ダウンロード (1).png

retention_timesを60で割ることで分に変換できる。

#グラフの描画
plt.plot(retention_times/60, intensities)
plt.title('TIC')
plt.xlabel('time (min)')
plt.ylabel('intensity (cps)')
plt.savefig('file.pdf')
plt.show()

抽出イオンクロマトグラムの描画

以下のdefを作成し、抽出イオンクロマトグラムを作成する準備をする。
loc_expには読み出したexpを入力。
min, maxは抽出するイオンの範囲を表す。

def extract_chrom(loc_exp,min,max):
  #データの格納先の作成
  time = np.array(0)
  signal = np.array(0)
  #スペクトルを呼び出し、指定した
  for spec in loc_exp:
    #スペクトルからmzの値とシグナル強度を抽出する。
    mz, intensity = spec.get_peaks()
    sum = 0
    count = 0
    for i in mz:
      if min <= i <= max:
        sum += intensity[count]
      count += 1
    time = np.append(time, spec.getRT())
    signal = np.append(signal, sum)
  return time,signal

timeは保持時間のタイムポイントのリストであり、signalはタイムポイントにおける、指定された範囲にあるイオンの強度の合計を表す。

これを用いて以下の操作を行うことで描画できる。

mass = 352
max_mass = mass - 0.5
min_mass = mass + 0.5
time_l, signal_l = extract_chrom(exp,max_mass,min_mass)
plt.plot(time_l, signal_l, label = 'EIC@' + str(mass))
plt.xlabel('time (s)')
plt.ylabel('intensity (cps)')
plt.savefig('file_eic.pdf')
plt.show()

ダウンロード.png

MSMSデータを除く場合

LCMS解析のメッソドにもよるが、これらのデータにはMSMSのデータが含まれている場合があり、それらにより、データが観察しにくくなる。 出力する getMSLevel()を指定することで解決することができそうである。
def extract_chrom(loc_exp,min,max):
  #データの格納先の作成
  time = np.array(0)
  signal = np.array(0)
  #スペクトルを呼び出し、指定した
  for spec in loc_exp:
    #MSLEVELを判定する項目の追加
    if spec.getMSLevel() == 1: #ここでは1と指定したが、データによって異なると思われる。
      pass
    else:
      #MSLevelが1以外の場合はスキップする。
      continue
    #スペクトルからmzの値とシグナル強度を抽出する。
    mz, intensity = spec.get_peaks()
    sum = 0
    count = 0
    for i in mz:
      if min <= i <= max:
        sum += intensity[count]
      count += 1
    time = np.append(time, spec.getRT())
    signal = np.append(signal, sum)
  return time,signal

データの読み込み

exp = MSExperiment()
MzMLFile().load("filename.mzML", exp)

実際の描画

mass = 352
max_mass = mass - 0.5
min_mass = mass + 0.5
time_l, signal_l = extract_chrom(exp,max_mass,min_mass)
plt.plot(time_l, signal_l, label = 'EIC@' + str(mass))
plt.xlabel('time (s)')
plt.ylabel('intensity (cps)')
plt.savefig('file_eic.pdf')
plt.show()

複数のクロマトグラムをまとめて描画する場合

以下のように書き換えることで、複数の抽出イオンクロマトグラムをまとめて書くことができる。

list = [352, 501, 400]

for i in list:
    mass = i
    max_mass = mass - 0.5
    min_mass = mass + 0.5
    time_l, signal_l = extract_chrom(exp,max_mass,min_mass)
    plt.plot(time_l, signal_l, label = 'EIC@' + str(mass))
    plt.xlabel('time (s)')
    plt.ylabel('intensity (cps)')

plt.savefig('file_eic.pdf')
plt.show()
2
1
1

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?