pyopenms-mass-spectrometry について
PyOpenMS は、プロテオミクスやメタボロミクスの質量分析を Python で行うための OpenMS C++ ライブラリのバインディングです。複数形式のファイル入出力、信号処理、特徴量検出、サンプル間の定量解析に対応します。
主な機能
- 01複数の質量分析形式の読み書き
- 02スペクトルの平滑化・フィルタリング・ピーク検出
- 03クロマトグラフィー特徴量の検出とリンク
- 04ペプチド・タンパク質同定結果の処理
- 05非標的メタボロミクスワークフローへの対応
- 06データの pandas へのエクスポート
活用シーン
- 01プロテオミクスまたはメタボロミクスの LC-MS/MS データ処理
- 02サンプル間での特徴量のアラインメントとリンク
- 03FDR 制御による検索エンジン結果のフィルタリング
- 04mzXML と mzML 間のファイル変換
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jaechang-hits/ sciagent-skills --skill pyopenms-mass-spectrometryインストール後、Claude Code で/pyopenms-mass-spectrometryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/data_structures_reference.mdidentification_metabolomics.mdsignal_feature_processing.md詳細
PyOpenMS — 質量分析
概要
PyOpenMS は、計算質量分析向けの OpenMS C++ ライブラリに対する Python バインディングを提供します。プロテオミクスやメタボロミクスのデータ処理に対応しており、10 種類以上の MS 形式のファイル入出力、シグナル処理、特徴検出、ペプチド/タンパク質の同定、サンプル間の定量分析が可能です。
使用する場面
- プロテオミクスまたはメタボロミクス向けに、生の LC-MS/MS データ(mzML、mzXML)を処理する
- クロマトグラフィー特徴量を検出し、複数のサンプル間で対応付ける
- FDR 制御を用いて、MS/MS 検索エンジンの結果からペプチドとタンパク質を同定する
- ノンターゲット・メタボロミクスのワークフロー(ピークピッキング → 特徴検出 → アラインメント → アノテーション)を実行する
- 質量分析ファイル形式(mzML、mzXML、featureXML、idXML)間で変換する
- 生スペクトルデータを平滑化、フィルタリング、重心化する
- 単純なスペクトルライブラリ照合や代謝物同定には、代わりに matchms を使用する
- タンパク質配列の解析(質量分析以外)には、代わりに biopython を使用する
前提条件
uv pip install pyopenms numpy pandas matplotlib
- Python 3.8 以降。ピーク配列の操作には NumPy が必要です
- 入力データ:mzML ファイル(標準的な MS 形式)、FASTA データベース(同定用)
- すべてのアルゴリズムで、一貫したパターンを使用します:
algo = Algorithm(); params = algo.getParameters(); params.setValue(...); algo.setParameters(params)
事前確認
解析コードを書く前に、以下の点をユーザーと確認してください。
decisions:
- id: D1
param: instrumentResolution
kind: required
source: data
ask: "Is this high-resolution data, and are the spectra already centroided or still in profile mode?"
default: null
- id: D2
param: signalToNoiseThreshold
kind: required
source: user
depends_on: [D1]
ask: "How far above noise must a peak rise to be kept during centroiding?"
default: 1.0
skip_if: "spectra already centroided by the acquisition software"
- id: D3
param: massTolerance
kind: required
source: data
depends_on: [D1]
ask: "What mass accuracy should feature detection and linking assume?"
default: "10 ppm"
- id: D4
param: retentionTimeTolerance
kind: required
source: data
ask: "How far apart in retention time may the same feature appear across runs?"
default: "100 s"
- id: D5
param: chargeStateRange
kind: required
source: user
ask: "Which charge states should features be searched for?"
default: "1 to 3 - widen for intact protein or metabolite work"
- id: D6
param: intensityNormalization
kind: optional
source: user
ask: "Should spectra be normalized before comparison, and to total ion current or to the base peak?"
default: "not normalized"
- id: D7
param: smoothingFilter
kind: optional_conditional
source: data
ask: "Does the signal need smoothing before peak picking, and with which filter width?"
default: "no smoothing"
D1 は以降のほぼすべてを左右します。セントロイド化を行わずに プロファイルデータを処理すると、スキャンポイントごとに 1 つの特徴量が 生成されます。また、低分解能データに高分解能向けの許容誤差を適用すると、 異なる化合物の特徴量が対応付けられます。どちらの場合も、特徴量テーブルは 完全な形で出力されます。
クイックスタート
import pyopenms as ms
# Load mzML file
exp = ms.MSExperiment()
ms.MzMLFile().load("sample.mzML", exp)
print(f"Spectra: {exp.getNrSpectra()}, Chromatograms: {exp.getNrChromatograms()}")
# Examine first spectrum
spec = exp.getSpectrum(0)
mz, intensity = spec.get_peaks()
print(f"MS level: {spec.getMSLevel()}, RT: {spec.getRT():.2f}s, Peaks: {len(mz)}")
# Quick preprocessing: smooth + centroid
gauss = ms.GaussFilter()
p = gauss.getParameters(); p.setValue("gaussian_width", 0.1); gauss.setParameters(p)
gauss.filterExperiment(exp)
picker = ms.PeakPickerHiRes()
centroided = ms.MSExperiment()
picker.pickExperiment(exp, centroided)
print(f"Centroided spectra: {centroided.getNrSpectra()}")
コア API
モジュール 1:ファイル入出力とデータアクセス
複数の形式で質量分析データを読み書きします。
import pyopenms as ms
# Read mzML (standard MS format)
exp = ms.MSExperiment()
ms.MzMLFile().load("data.mzML", exp)
# Indexed access for large files (memory-efficient)
loader = ms.IndexedMzMLFileLoader()
indexed_file = ms.OnDiscMSExperiment()
loader.load("large_data.mzML", indexed_file)
spec = indexed_file.getSpectrum(0) # Load single spectrum on demand
print(f"Total spectra: {indexed_file.getNrSpectra()}")
# Read identification results (idXML)
protein_ids, peptide_ids = [], []
ms.IdXMLFile().load("results.idXML", protein_ids, peptide_ids)
print(f"Peptide IDs: {len(peptide_ids)}, Protein IDs: {len(protein_ids)}")
# Read feature map
fm = ms.FeatureMap()
ms.FeatureXMLFile().load("features.featureXML", fm)
print(f"Features: {fm.size()}")
# Write mzML with compression
exp_out = ms.MSExperiment()
# ... populate experiment ...
ms.MzMLFile().store("output.mzML", exp_out)
# Read FASTA database
entries = []
ms.FASTAFile().load("database.fasta", entries)
print(f"Proteins in DB: {len(entries)}")
for e in entries[:3]:
print(f" {e.identifier}: {e.sequence[:30]}...")
対応形式:mzML、mzXML、mzData(スペクトル);featureXML、consensusXML(特徴量);idXML、mzIdentML、pepXML(同定);TraML(トランジション);mzTab(結果);FASTA(配列)
モジュール 2:シグナル処理とピークピッキング
後続の解析に向けて、生スペクトルデータを前処理します。
import pyopenms as ms
exp = ms.MSExperiment()
ms.MzMLFile().load("raw.mzML", exp)
# Gaussian smoothing
gauss = ms.GaussFilter()
p = gauss.getParameters()
p.setValue("gaussian_width", 0.15) # m/z width
gauss.setParameters(p)
gauss.filterExperiment(exp)
# Savitzky-Golay smoothing (alternative)
sg = ms.SavitzkyGolayFilter()
p = sg.getParameters()
p.setValue("frame_length", 15) # Must be odd
sg.setParameters(p)
# sg.filterExperiment(exp) # Use one smoother, not both
# Peak picking (centroiding) — required before feature detection
picker = ms.PeakPickerHiRes()
p = picker.getParameters()
p.setValue("signal_to_noise", 1.0)
picker.setParameters(p)
centroided = ms.MSExperiment()
picker.pickExperiment(exp, centroided)
print(f"Raw peaks in spec 0: {exp.getSpectrum(0).size()}")
print(f"Centroided peaks: {centroided.getSpectrum(0).size()}")
# Normalization
normalizer = ms.Normalizer()
p = normalizer.getParameters()
p.setValue("method", "to_one") # "to_one" or "to_TIC"
normalizer.setParameters(p)
normalizer.filterPeakMap(centroided)
# Peak filtering — remove low-intensity noise
mower = ms.ThresholdMower()
p = mower.getParameters()
p.setValue("threshold", 100.0) # Minimum intensity
mower.setParameters(p)
mower.filterPeakMap(centroided)
# Baseline reduction
morph = ms.MorphologicalFilter()
p = morph.getParameters()
p.setValue("struc_elem_length", 3.0) # m/z window
morph.setParameters(p)
morph.filterExperiment(exp)
モジュール 3:特徴検出と対応付け
クロマトグラフィー特徴量を検出し、サンプル間で対応付けます。
import pyopenms as ms
# Load centroided data
exp = ms.MSExperiment()
ms.MzMLFile().load("centroided.mzML", exp)
# Feature detection (proteomics — centroided data)
ff = ms.FeatureFinder()
features = ms.FeatureMap()
seeds = ms.FeatureMap()
params = ms.FeatureFinder().getParameters("centroided")
ff.run("centroided", exp, features, params, seeds)
print(f"Detected {features.size()} features")
# Access feature properties
for f in features[:5]:
print(f" RT: {f.getRT():.1f}s, m/z: {f.getMZ():.4f}, "
f"intensity: {f.getIntensity():.0f}, quality: {f.getOverallQuality():.3f}")
# Feature linking across samples — align retention times first
aligner = ms.MapAlignmentAlgorithmPoseClustering()
p = aligner.getParameters()
p.setValue("max_num_peaks_considered", 1000)
aligner.setParameters(p)
# Link features into consensus map
linker = ms.FeatureGroupingAlgorithmQT()
p = linker.getParameters()
p.setValue("distance_RT:max_difference", 60.0) # seconds
p.setValue("distance_MZ:max_difference", 10.0) # ppm
linker.setParameters(p)
consensus = ms.ConsensusMap()
linker.group([features_sample1, features_sample2, features_sample3], consensus)
print(f"Consensus features: {consensus.size()}")
# Export to pandas for downstream analysis
import pandas as pd
df = consensus.get_df()
print(f"Consensus table: {df.shape}")
モジュール 4:ペプチドとタンパク質の同定
FDR 制御とタンパク質推定を用いて、検索エンジンの結果を処理します。
import pyopenms as ms
# Load search engine results
protein_ids, peptide_ids = [], []
ms.IdXMLFile().load("search_results.idXML", protein_ids, peptide_ids)
# Examine peptide hits
for pep_id in peptide_ids[:3]:
print(f"Spectrum: RT={pep_id.getRT():.1f}, MZ={pep_id.getMZ():.4f}")
for hit in pep_id.getHits():
seq = hit.getSequence()
print(f" {seq} score={hit.getScore():.4f} charge={hit.getCharge()}")
# FDR filtering (target-decoy approach)
fdr = ms.FalseDiscoveryRate()
fdr.apply(peptide_ids)
# Filter at 1% FDR
filtered = []
for pep_id in peptide_ids:
hits = [h for h in pep_id.getHits() if h.getScore() <= 0.01]
if hits:
pep_id.setHits(hits)
filtered.append(pep_id)
print(f"Peptide IDs at 1% FDR: {len(filtered)}")
# Protein inference
inference = ms.BasicProteinInferenceAlgorithm()
inference.run(peptide_ids, protein_ids)
for prot_id in protein_ids:
for hit in prot_id.getHits()[:5]:
print(f"Protein: {hit.getAccession()}, score: {hit.getScore():.4f}")
# Peptide sequence handling
seq = ms.AASequence.fromString("PEPTIDER")
print(f"Molecular weight: {seq.getMonoWeight():.4f}")
print(f"Formula: {seq.getFormula()}")
# Modified sequence
mod_seq = ms.AASequence.fromString("PEPTM(Oxidation)DER")
print(f"Modified weight: {mod_seq.getMonoWeight():.4f}")
# Enzymatic digestion
digestor = ms.ProteaseDigestion()
digestor.setEnzyme("Trypsin")
digest = []
digestor.digest(ms.AASequence.fromString("MKWVTFISLLLLFSSAYSRGVFRR"), digest)
print(f"Tryptic peptides: {len(digest)}")
モジュール 5:メタボロミクスのパイプライン
生データから特徴量テーブルまで、ノンターゲット・メタボロミクスのワークフローを一通り実行します。
import pyopenms as ms
# Step 1: Load and centroid raw data
exp = ms.MSExperiment()
ms.MzMLFile().load("metabolomics_sample.mzML", exp)
picker = ms.PeakPickerHiRes()
centroided = ms.MSExperiment()
picker.pickExperiment(exp, centroided)
# Step 2: Feature detection for metabolomics (small molecules)
ff = ms.FeatureFinder()
features = ms.FeatureMap()
seeds = ms.FeatureMap()
params = ms.FeatureFinder().getParameters("centroided")
params.setValue("isotopic_pattern:charge_low", 1)
params.setValue("isotopic_pattern:charge_high", 3)
ff.run("centroided", centroided, features, params, seeds)
print(f"Detected features: {features.size()}")
# Step 3: Adduct detection (group related adducts)
decharger = ms.MetaboliteAdductDecharger()
p = decharger.getParameters()
p.setValue("potential_adducts", "H:+:0.6;Na:+:0.3;K:+:0.1") # Positive mode
decharger.setParameters(p)
# decharger.compute(features, feature_map_out, consensus_map_out)
# Step 4: RT alignment across samples
import pyopenms as ms
import pandas as pd
# Assuming feature maps from multiple samples
sample_files = ["sample1.featureXML", "sample2.featureXML", "sample3.featureXML"]
feature_maps = []
for f in sample_files:
fm = ms.FeatureMap()
ms.FeatureXMLFile().load(f, fm)
feature_maps.append(fm)
# Align retention times
aligner = ms.MapAlignmentAlgorithmPoseClustering()
aligner.setReference(0) # Use first sample as reference
# Step 5: Link features to consensus map
linker = ms.FeatureGroupingAlgorithmQT()
p = linker.getParameters()
p.setValue("distance_RT:max_difference", 30.0)
p.setValue("distance_MZ:max_difference", 10.0)
linker.setParameters(p)
consensus = ms.ConsensusMap()
linker.group(feature_maps, consensus)
# Step 6: Export metabolite table
df = consensus.get_df()
print(f"Feature table: {df.shape[0]} features × {df.shape[1]} columns")
print(df[["RT", "mz", "intensity_0", "intensity_1", "intensity_2"]].head())
主要な概念
アルゴリズムのパラメータ設定パターン
PyOpenMS のアルゴリズムはすべて、同じ 3 ステップのパターンに従います。
algo = ms.AlgorithmClass() # 1. Instantiate
params = algo.getParameters() # 2. Get parameters
params.setValue("param_name", value) # 3. Set values
algo.setParameters(params) # 4. Apply
# algo.process(input, output) # 5. Execute
利用可能なパラメータを確認するには:
for key in params.keys():
print(f"{key}: {params.getValue(key)} (type: {params.getDescription(key)})")
コアデータ構造
| オブジェクト | 説明 | 主なメソッド |
|---|---|---|
MSExperiment | スペクトルとクロマトグラムのコレクション | getNrSpectra()、getSpectrum(i)、addSpectrum() |
MSSpectrum | 単一の質量スペクトル(m/z、強度) | get_peaks()、getMSLevel()、getRT()、size() |
MSChromatogram | クロマトグラフィーのトレース | get_peaks()、getNativeID() |
Feature | 検出されたクロマトグラフィーピーク | getRT()、getMZ()、getIntensity()、getOverallQuality() |
FeatureMap | 特徴量のコレクション | size()、get_df()、反復処理 |
ConsensusMap | サンプル間で対応付けられた特徴量 | size()、get_df() |
PeptideIdentification | 1 つのスペクトルの検索結果 | getHits()、getRT()、getMZ() |
AASequence | 修飾を含むアミノ酸配列 | fromString()、getMonoWeight()、getFormula() |
対応ファイル形式
| 形式 | リーダークラス | 内容 |
|---|---|---|
| mzML | MzMLFile | 生スペクトル(標準) |
| mzXML | MzXMLFile | 生スペクトル(レガシー) |
| featureXML | FeatureXMLFile | 検出された特徴量 |
| consensusXML | ConsensusXMLFile | リンクされた特徴量 |
| idXML | IdXMLFile | ペプチド/タンパク質の ID |
| mzIdentML | MzIdentMLFile | ペプチド/タンパク質の ID(標準) |
| FASTA | FASTAFile | タンパク質配列 |
| TraML | TraMLFile | MRM トランジション |
| mzTab | MzTabFile | 定量結果 |
一般的なワークフロー
ワークフロー 1:プロテオミクスの特徴量検出パイプライン
import pyopenms as ms
# Load → Smooth → Centroid → Detect → Export
exp = ms.MSExperiment()
ms.MzMLFile().load("proteomics.mzML", exp)
# Preprocessing
gauss = ms.GaussFilter()
p = gauss.getParameters(); p.setValue("gaussian_width", 0.1); gauss.setParameters(p)
gauss.filterExperiment(exp)
picker = ms.PeakPickerHiRes()
centroided = ms.MSExperiment()
picker.pickExperiment(exp, centroided)
# Feature detection
ff = ms.FeatureFinder()
features = ms.FeatureMap()
params = ff.getParameters("centroided")
ff.run("centroided", centroided, features, params, ms.FeatureMap())
# Export to pandas
df = features.get_df()
print(f"Features: {df.shape}")
df.to_csv("proteomics_features.csv", index=False)
ワークフロー 2:複数サンプルのメタボロミクス比較
- すべてのサンプルの mzML ファイルを読み込みます(コア API モジュール 1)
- 各サンプルをセントロイド化します(コア API モジュール 2 —
PeakPickerHiRes) - サンプルごとに特徴量を検出します(コア API モジュール 3 —
FeatureFinder) - リテンションタイムをアラインメントします(コア API モジュール 3 —
MapAlignmentAlgorithmPoseClustering) - 特徴量をコンセンサスマップにリンクします(コア API モジュール 3 —
FeatureGroupingAlgorithmQT) - コンセンサステーブルを pandas にエクスポートし、反復間の CV でフィルタリングします
ワークフロー 3:同定結果の分析
import pyopenms as ms
import pandas as pd
# Load and filter identifications
protein_ids, peptide_ids = [], []
ms.IdXMLFile().load("search.idXML", protein_ids, peptide_ids)
# FDR filtering
fdr = ms.FalseDiscoveryRate()
fdr.apply(peptide_ids)
# Build results table
rows = []
for pep_id in peptide_ids:
for hit in pep_id.getHits():
if hit.getScore() <= 0.01: # 1% FDR
rows.append({
"sequence": str(hit.getSequence()),
"score": hit.getScore(),
"charge": hit.getCharge(),
"rt": pep_id.getRT(),
"mz": pep_id.getMZ()
})
df = pd.DataFrame(rows)
print(f"Identified peptides at 1% FDR: {len(df)}")
print(f"Unique sequences: {df['sequence'].nunique()}")
df.to_csv("peptide_identifications.csv", index=False)
主なパラメーター
| パラメーター | モジュール | デフォルト | 範囲/オプション | 効果 |
|---|---|---|---|---|
gaussian_width | GaussFilter | 0.2 | 0.05–1.0 | m/z 平滑化ウィンドウの幅 |
frame_length | SavitzkyGolayFilter | 11 | 5–31(奇数) | 平滑化ウィンドウのポイント数 |
signal_to_noise | PeakPickerHiRes | 1.0 | 0.5–10.0 | セントロイド化に必要な最小 S/N |
isotopic_pattern:charge_low | FeatureFinder | 1 | 1–6 | 最小電荷状態 |
isotopic_pattern:charge_high | FeatureFinder | 3 | 1–10 | 最大電荷状態 |
distance_RT:max_difference | FeatureGroupingAlgorithmQT | 100 | 10–300 秒 | 特徴量リンクの RT 許容差 |
distance_MZ:max_difference | FeatureGroupingAlgorithmQT | 10 | 1–50 ppm | 特徴量リンクの m/z 許容差 |
threshold | ThresholdMower | 0.0 | 0–10000 | ピーク強度の最小値 |
method | Normalizer | "to_one" | "to_one"/"to_TIC" | 正規化方法 |
ベストプラクティス
- 特徴量検出の前に必ずセントロイド化します — FeatureFinder にはセントロイド化済みデータが必要です。最初に
PeakPickerHiResを使用します - 大容量ファイルにはインデックス付き読み込みを使用します —
OnDiscMSExperimentはスペクトルをオンデマンドで読み込み、1 GB を超えるファイルでのメモリー問題を回避します - 元のデータを保持します — 処理前に生データの実験を保存します:
orig = ms.MSExperiment(exp)。処理によってデータは破壊的に変更されます - プロファイルとセントロイドを意識します — データ型を確認します:
spec.getType()は 1(プロファイル)または 2(セントロイド)を返します。一部のアルゴリズムでは特定の型が必要です - パラメーターを確認します — 調整する前にパラメーターを出力します:
for k in params.keys(): print(k, params.getValue(k)) - 早めに pandas にエクスポートします —
features.get_df()またはconsensus.get_df()を使用して、統計分析に pandas/numpy を活用します
よく使うレシピ
レシピ 1:スペクトルの統計と品質チェック
import pyopenms as ms
import numpy as np
exp = ms.MSExperiment()
ms.MzMLFile().load("sample.mzML", exp)
ms1_count = sum(1 for s in exp if s.getMSLevel() == 1)
ms2_count = sum(1 for s in exp if s.getMSLevel() == 2)
rt_range = (exp.getSpectrum(0).getRT(), exp.getSpectrum(exp.getNrSpectra()-1).getRT())
peak_counts = [s.size() for s in exp]
print(f"MS1: {ms1_count}, MS2: {ms2_count}")
print(f"RT range: {rt_range[0]:.1f}–{rt_range[1]:.1f}s")
print(f"Peaks per spectrum: mean={np.mean(peak_counts):.0f}, "
f"median={np.median(peak_counts):.0f}")
レシピ 2:理論スペクトルの生成
import pyopenms as ms
# Generate theoretical fragment spectrum for a peptide
tsg = ms.TheoreticalSpectrumGenerator()
p = tsg.getParameters()
p.setValue("add_b_ions", "true")
p.setValue("add_y_ions", "true")
p.setValue("add_metainfo", "true")
tsg.setParameters(p)
spec = ms.MSSpectrum()
seq = ms.AASequence.fromString("PEPTIDER")
tsg.getSpectrum(spec, seq, 1, 2) # charge 1 to 2
mz, intensity = spec.get_peaks()
print(f"Theoretical fragments for PEPTIDER: {len(mz)} ions")
レシピ 3:形式変換(mzXML → mzML)
import pyopenms as ms
exp = ms.MSExperiment()
ms.MzXMLFile().load("old_data.mzXML", exp)
ms.MzMLFile().store("converted.mzML", exp)
print(f"Converted {exp.getNrSpectra()} spectra to mzML format")
トラブルシューティング
| 問題 | 原因 | 解決策 |
|---|---|---|
読み込み時にFileNotFoundが発生する | パスまたは形式が正しくありません | ファイルが存在することを確認し、正しいリーダークラス(.mzMLにはMzMLFile)を使用します |
| 検出後のフィーチャーマップが空になる | セントロイド化されたデータではなく、プロファイルデータを使用しています | FeatureFinderの前にPeakPickerHiResを実行します |
| 検出されるフィーチャーが非常に少ない | S/Nしきい値が厳しすぎます | signal_to_noiseを0.5~1.0に下げ、isotopic_patternの電荷範囲を調整します |
| 大容量ファイルでメモリエラーが発生する | ファイル全体を一度に読み込んでいます | インデックスアクセスにはOnDiscMSExperimentを使用します |
setValueの型エラーが発生する | パラメーターの値の型が正しくありません | 期待される型を確認します:params.getDescription(key)。数値にはfloat、列挙値にはstringを使用します |
| RTアラインメントに失敗する | 共通フィーチャーが少なすぎます | max_num_peaks_consideredを増やし、サンプルが同じ実験のものか確認します |
| FDR値がすべて1.0になる | 検索結果にデコイヒットがありません | ターゲット・デコイデータベースを使って検索が実行されたことを確認し、スコアの向きを確認します |
| フィーチャーのリンクが強すぎる | RT/m/zの許容範囲が広すぎます | distance_RT:max_differenceとdistance_MZ:max_differenceを小さくします |
| 処理が遅い | すべてのスペクトルを処理しています | まずMSレベルでフィルタリングします:[s for s in exp if s.getMSLevel() == 1] |
同梱リソース
-
references/data_structures_reference.md — PyOpenMSのコアオブジェクト(MSExperiment、MSSpectrum、Feature、FeatureMap、ConsensusMap、PeptideIdentification、AASequence、Param)に関する包括的なドキュメントです。オブジェクトの作成、属性アクセス、反復処理のパターン、メモリ管理、型変換を扱います。
- 対象:作成・アクセス・反復処理の例を含む、13種類以上のコアデータ構造クラスすべて
- 本文に移動:Key Conceptsのコアデータ構造の概要表、Core API Module 4のAASequenceの使用方法
- 省略:PyOpenMS APIドキュメントと重複する網羅的な属性一覧
-
references/signal_feature_processing.md — 元の2つのリファレンスを統合した、シグナル処理アルゴリズムとフィーチャー検出・リンクのワークフローです。
- 対象:平滑化(Gaussian、Savitzky-Golay)、ピークピッキング(HiRes、CWT)、正規化、ピークフィルタリング(しきい値、ウィンドウ、上位N個)、ベースライン低減、デコンボリューション、スペクトルのマージ、RTアラインメント、質量校正、フィーチャー検出(セントロイド化、メタボロミクス)、フィーチャーリンク、付加体検出、品質管理
- 本文に移動:Core API Module 2のGaussFilter、PeakPickerHiRes、Normalizer、ThresholdMower、Core API Module 3のFeatureFinder、MapAlignment、FeatureGroupingAlgorithmQT
- 省略:CWTピークピッカーの詳細パラメーター — HiResに比べて使用頻度が低いため、同位体ウェーブレット変換 — 特殊なユースケースのため
-
references/identification_metabolomics.md — 元の2つのリファレンスを統合した、ペプチド・タンパク質同定とノンターゲットメタボロミクスのパイプラインです。
- 対象:検索エンジンの統合、FDR計算、タンパク質推定、酵素消化、スペクトルライブラリ検索、理論スペクトル生成、ノンターゲットメタボロミクスのパイプライン(ピークピッキング → フィーチャー検出 → 付加体検出 → アラインメント → リンク → ギャップフィリング → アノテーション → エクスポート)、化合物同定(質量ベース、MS/MSベース)、正規化(TIC)、QC(CVフィルタリング、ブランクフィルタリング)、MetaboAnalystへのエクスポート
- 本文に移動:Core API Module 4のFDRフィルタリング、タンパク質推定、AASequenceの処理、Core API Module 5のメタボロミクスパイプライン
- 省略:Comet/Mascotの詳細なパラメーター設定 — 検索エンジン固有のため、MetaboAnalystのエクスポート形式の詳細 — 外部ツールのため
関連スキル
- matchms-spectral-matching — MS/MSによるスペクトルライブラリのマッチングと代謝物同定
- biopython-molecular-biology — タンパク質配列解析(FASTA解析、BLAST)
参考資料
- PyOpenMSドキュメント:https://pyopenms.readthedocs.io
- OpenMSプロジェクト:https://www.openms.org
- Röst et al. (2016) OpenMS: a flexible open-source software platform for mass spectrometry data analysis. Nature Methods, DOI: 10.1038/nmeth.3959
- GitHub:https://github.com/OpenMS/OpenMS