估计阅读时长: 5 分钟

目前我们根据质谱数据进行代谢物ROI注释分析,很大一部分的工作是建立在已经可以被纯化的化合物的纯标准品所建立的标准品库数据的比对操作之上的。但是依赖于质谱参考谱图数据库所完成的代谢物注释分析,也仅能够得到很小的一部分结果,因为能够纯化或者合成的化合物在整个自然界中目前只占比较小的一部分。并且购买标准品也会需要耗费大量的实验室资金预算。

所以为了尽可能的提升注释的通量,目前在前人的工作研究之中,产生了大量的通过in-silicon的方法进行注释分析,用于补充标准品库的注释分析结果中所缺失的结果部分。在这里我为大家来介绍一下在MZKit软件之中根据一级母离子的m/z值进行相关化学式搜索的in-silicon代谢物注释操作。

原理基础

在了解in-silicon注释操作之前,我们首先来了解以下m/z值是怎么得到的。非常容易进行理解的是,m/z值,根据其定义就是代谢物的离子的精确分子质量与其电荷量的比值。

离子精确分子质量

除了少部分化合物分子非常活泼,可以自身产生电离外,大部分的化合物在质谱数据分析之中,都需要添加额外的分子基团带上相应的电荷才可以被质谱进行检测。所以我们进行mz计算的时候,所使用的分子质量一般是化合物其对应的离子化的离子的精确分子质量。很明显,离子化的精确分子质量就是化合物的化学式加上对应的分子基团的精确分子质量即可。

例如,Leucine的[M+H]+形式的精确分子质量就是 C6H13NO2 + H,除上对应的电荷数量1+就可以得到Leucine[M+H]+的m/z值132.1024。

在这里大家可以找得到在质谱数据分析之中比较常见的离子化类型对应的计算参数:https://fiehnlab.ucdavis.edu/staff/kind/Metabolomics/MS-Adduct-Calculator

通过m/z逆推代谢物化学式

那现在假设我们已经知道了离子的电荷数量,和对应的mz值之后,是不是可以逆推出代谢的精确分子质量从而得到对应的化学式完成一次in-silicons注释分析呢?答案是肯定的。我们只需要将mz值的计算公式颠倒一下即可:

  • 基于mz值的正向的计算公式 (exact_mass + adduct) / charge = mz
  • 可以逆推为 exact_mass = mz * charge - adduct

对于adduct,我们只需要按照上面的链接中的表格数据都循环一次计算出所有的可能性结果即可。

在MZKit中基于mz进行formula搜索

例如,现在在我们的质谱原始数据之中,存在有一个M132T61的离子,我们想进行in-silicon注释。那么我们可以在MZKit软件之中,通过鼠标对这个质谱特征数据进行简单的注释操作:在【Feature Explorer】之中,我们选中需要进行in-silicon注释的ROI Feature,然后通过鼠标右键调出对应的上下文菜单。接着选择【Search Formula】,然后对应的配置数据可以选择【Small Molecule】,之后等待搜索操作执行完成即可。

当MZkit程序完成整个搜索操作之后,我们就可以看见一个结果表格:

在上面的表格之中,每一列的具体含义如下所示:

表头 含义说明
Formula 根据m/z或者exact mass搜索得到的化学式列表,对应的链接会链接查询BioDeep在线数据库
Exact Mass 对应的化学式所计算出的精确分子质量
PPM mz所计算出的精确分子质量与化学式计算出的离子精确分子质量之间的误差
Charge 离子的电荷数量
Adducts 离子加合物分子基团的精确分子质量
M 本体化合物的数量
Precursor Type 对应的离子加合物形式的符号简记

在上面的表格之中,我们可以直接通过点击Formula列之中的链接进入到BioDeep数据库查看对应的搜索结果信息,例如我们在这里点击化学式为C6H13NO2的搜索结果:

http://query.biodeep.cn/search?expression=[formula]&category=metabolite&formula=C6H13NO2

查询的结果可以了解到,这个物质可能是Leucine。我们进入Leucine的详细页面查看对应的标准品谱图,可以发现,Leucine的特征碎片与前面我们在MZkit软件上所看到的M132T61离子的二级特征是非常相似的:都存在着信号响应非常高的mz约等于为86的分子碎片。

通过在MZKit上简单的鼠标操作,我们就可以大致的确定一个目标离子的化合物注释结果了。

基于MZKit的化学信息学工具箱进行批量搜索

前面我们所讲解的是通过鼠标进行GUI操作来完成搜索注释分析。那面对大批量的数据我们肯定不能够通过鼠标做手动分析的呀。在这里就为大家介绍怎么通过MZKit软件所提供的化学信息学代码库来完成对应的脚本化批量搜索注释操作。

导入MZKit代码库

搜索我们在编辑器中新建对应的Python脚本,通过下面的代码导入MZKit代码库:

import mzkit
from mzkit import formula

调用MZKit化学信息学代码库

那导入了代码库之后,我们就可以做一些和化合物化学式相关的计算分析操作了,例如,计算出化学式对应的精确分子质量:

exact_mass = formula::eval("C40H78NO8P")

如果要根据exact mass搜索所有候选的化学式呢,我们可以

formulas = formula::candidates(exact_mass, ppm = 5, C = [6,72], H = [3,120], O = [1,20], N = [0, 18], P = [0, 18], S = [0, 20])
list = as.data.frame(formulas)
list = list[ order(list[, "ppm"]) , ]

print(`search for exact mass value: ${exact_mass}`)
print(list)

上面的代码就可以让我们实现一个搜索某一个exact mass值在5ppm的误差下的所有候选formula,并且搜索结果按照ppm误差升序排序的功能。
formula::candidates函数之中,除了输入必要的exact mass参数和ppm误差之外,我们还可以自己通过列表参数设定对应的化学元素的数量的搜索范围。

脚本运行示例

下面给出了具体的完整代码用于从exact mass搜索出所有的候选化学式结果信息:

import mzkit
from mzkit import formula

exact_mass = 131.0946
formulas = formula::candidates(exact_mass, ppm = 10, C = [6,72], H = [3,120], O = [1,20], N = [0, 18], P  = [0, 18], S = [0, 20])
list = as.data.frame(formulas)
list = list[ order(list[, "ppm"]) , ]

print(`search for exact mass value: ${exact_mass}`)
print(list)

将上面的测试代码保存为Python脚本文件之后,我们通过MZKit打开开发者工具命令行,然后再命令行中通过R#脚本执行我们的脚本即可:

谢桂纲
Latest posts by 谢桂纲 (see all)

Attachments

8 Responses

  1. This is also a very good post which I really enjoyed reading. It is not every day that I have the possibility to see something like this..

    来自阿联酋
  2. First You got a great blog .I will be interested in more similar topics. i see you got really very useful topics, i will be always checking your blog thanks.

    来自德国
  3. I must admit that your post is really interesting. I have spent a lot of my spare time reading your content. Thank you a lot!

    来自阿联酋
  4. whoah this blog is wonderful i really like reading your articles. Keep up the great paintings! You realize, a lot of people are hunting round for this info, you could help them greatly.

    来自德国

Leave a Reply

Your email address will not be published. Required fields are marked *

博客文章
December 2024
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031  
  1. 在mysql之中,针对24小时内的数据按照半个小时进行一次统计数量: ```sql SELECT DATE_FORMAT(FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(add_time) / 1800) * 1800), '%Y-%m-%d %H:%i') AS half_hour, COUNT(*) AS count FROM user_track.page_view WHERE add_time >=…

  2. 针对图对象进行向量化表示嵌入: 首先,通过node2vec方法,将node表示为向量 第二步,针对node向量矩阵,进行umap降维计算,对node进行排序,生成node排序序列 第三步,针对node排序序列进行SGT序列图嵌入,实现将网络图对象嵌入为一维向量