在以三油酸甘油酯加铵峰(m/z 902.817 Da)为例子,学习R包xcms提取DDA二级质谱数据时,发现在用MSDIAL打开的原始数据中确实有902.8左右的母离子,也有产生这个母离子的二级谱,在用findChromPeaks函数检测MS1峰后也能看到有几个一级峰在902.8左右。但在用chromPeakSpectra函数提取了MS2图谱后,出现了两个问题:(1)后续用m/z 902.817找MS1时,有多个一级峰编号,而xcms说明包中的示例数据只有一个一级峰编号;(2)根据一级峰编号提取二级谱图的时候,发现并没有与902.817匹配的二级图谱,与原始数据不符。初步推测可能有两个原因:(1)文件是profile而不是centroid,影响了后续处理;(2)函数的一些参数没有优化。求大佬救命解答TOT
library(xcms)
library(faahKO)
library(RColorBrewer)
library(pander)
library(magrittr)
library(pheatmap)
library(SummarizedExperiment)
library(msdata)
#设置工作目录,方便进行复杂的反复读取文件
setwd("C:/Users/sx/Desktop/桌面/xcms学习/Data")
#获取文件名(实际数据)
dda_file<- list.files(path="C:/Users/sx/Desktop/桌面/xcms学习/Data",pattern = ".mzML")
#示例数据
#dda_file <- system.file("TripleTOF-SWATH/PestMix1_DDA.mzML",package = "msdata")
#读入数据
dda_data <- readMSData(dda_file,mode="onDisk")
dda_data <- filterRt(dda_data, rt = c(700, 1000))
#观察一级谱和二级谱数量
table(msLevel(dda_data))
#确定CentWave的关键参数:peakwidth和ppm
#挑选一个峰进行观察,确定提一级谱的peakwidth
rtr <- c(700,1000)
mzr <- c(902.7,902.9)
chr_raw <- chromatogram(dda_data, mz = mzr, rt = rtr)
plot(chr_raw, col = "green")
#挑选几个峰进行观察,确定一级谱的ppm
dda_data %>%
filterRt(rt = rtr) %>% #先按保留时间过滤原始对象,然后传递到下一步
filterMz(mz = mzr) %>% #然后按m/z过滤,然后传递到下一步
plot(type = "XIC")
#用findChromPeaks函数进行MS1的色谱峰检测
cwp <- CentWaveParam(snthresh = 5, noise = 100,ppm = 10,peakwidth = c(5, 50))
dda_data <- findChromPeaks(dda_data, param = cwp)
#peaks <- chromPeaks(dda_data)#已识别出的峰
nrow(chromPeaks(dda_data))
#提取已识别MS2的峰
dda_spectra <- chromPeakSpectra(dda_data)
length(dda_spectra)
#挑选一个质荷比的母离子,设置好ppm,选出已识别的MS1中可能是这个母离子的碎片的MS1,这步出现第一个问题
ex_mz <- 902.817
chromPeaks(dda_data, mz = ex_mz, ppm = 20)
ex_id <- rownames(chromPeaks(dda_data, mz = ex_mz, ppm = 20))
#按照MS2编号返回在dda_spectra的位置,这一步出现第二个问题
ex_spectra <- dda_spectra[mcols(dda_spectra)$peak_id == ex_id]
ex_spectra
#用combineSpectra缩减为单个质谱图,minProp确定在80%图谱中出现的峰被放入最终结果中
ex_spectrum <- combineSpectra(ex_spectra, method = consensusSpectrum, mzd = 0,
ppm = 20, minProp = 0.8, weighted = FALSE,
intensityFun = median, mzFun = median)
plot(ex_spectrum[[1]])