[ PROMPT_NODE_27154 ]
data_structures
[ SKILL_DOCUMENTATION ]
# 核心数据结构
## 概述
PyOpenMS 使用带有 Python 绑定的 C++ 对象。理解这些核心数据结构对于有效的数据操作至关重要。
## 谱图与实验对象
### MSExperiment
用于存储完整 LC-MS 实验数据(谱图和色谱图)的容器。
python
import pyopenms as ms
# 创建实验对象
exp = ms.MSExperiment()
# 从文件加载
ms.MzMLFile().load("data.mzML", exp)
# 访问属性
print(f"谱图数量: {exp.getNrSpectra()}")
print(f"色谱图数量: {exp.getNrChromatograms()}")
# 获取保留时间 (RT) 范围
rts = [spec.getRT() for spec in exp]
print(f"RT 范围: {min(rts):.1f} - {max(rts):.1f} 秒")
# 访问单个谱图
spec = exp.getSpectrum(0)
# 遍历谱图
for spec in exp:
if spec.getMSLevel() == 2:
print(f"RT 为 {spec.getRT():.2f} 的 MS2 谱图")
# 获取元数据
exp_settings = exp.getExperimentalSettings()
instrument = exp_settings.getInstrument()
print(f"仪器: {instrument.getName()}")
### MSSpectrum
包含 m/z 和强度数组的单个质谱图。
python
# 创建空谱图
spec = ms.MSSpectrum()
# 从实验中获取
exp = ms.MSExperiment()
ms.MzMLFile().load("data.mzML", exp)
spec = exp.getSpectrum(0)
# 基本属性
print(f"MS 级别: {spec.getMSLevel()}")
print(f"保留时间: {spec.getRT():.2f} 秒")
print(f"峰数量: {spec.size()}")
# 以 numpy 数组形式获取峰数据
mz, intensity = spec.get_peaks()
print(f"m/z 范围: {mz.min():.2f} - {mz.max():.2f}")
print(f"最大强度: {intensity.max():.0f}")
# 访问单个峰
for i in range(min(5, spec.size())): # 前 5 个峰
print(f"峰 {i}: m/z={mz[i]:.4f}, 强度={intensity[i]:.0f}")
# 前体信息 (针对 MS2)
if spec.getMSLevel() == 2:
precursors = spec.getPrecursors()
if precursors:
precursor = precursors[0]
print(f"前体 m/z: {precursor.getMZ():.4f}")
print(f"前体电荷: {precursor.getCharge()}")
print(f"前体强度: {precursor.getIntensity():.0f}")
# 设置峰数据
new_mz = [100.0, 200.0, 300.0]
new_intensity = [1000.0, 2000.0, 1500.0]
spec.set_peaks((new_mz, new_intensity))
### MSChromatogram
色谱轨迹(TIC、XIC 或 SRM 转换)。
python
# 从实验中访问色谱图
for chrom in exp.getChromatograms():
print(f"色谱图 ID: {chrom.getNativeID()}")
# 获取数据
rt, intensity = chrom.get_peaks()
print(f" RT 点: {le