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()
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()
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()