一种高效存储质谱数据的数据结构

ms-map的Python项目详细描述


女士地图

一种用于存储质谱数据的散斑图

背景

什么是质谱数据

如果你没听说过质谱,我怀疑你会从这个数据结构中得到很多东西,但请随时留下来学习!在

质谱数据是由质谱仪(duh)产生的数据。更具体地说,这个数据结构是用来从质谱仪运行的数字列表(浮点数)中识别肽(氨基酸的短序列)。氨基酸被描述为序列质量。在

更具体地说,这种数据结构的主要用途是使用单电荷和双电荷团来识别肽。输出的最基本形式是一个浮点数列表。它可能看起来像下面这样

[99.023, 140.743, 209.887, 288.115, 402.778]

这个浮点数序列描述了一个特定的氨基酸序列。其工作方式如下:

假设我们的氨基酸序列是:MALW(别开枪我知道质量没有意义)。上面的氨基酸序列描述了离子类型和电荷的任何排列。为了这个例子,我们将把我们的范围限制在b和{}离子,它们可能带有1和{}的电荷。b离子从左到右描述氨基酸,y从右到左。对于我们的示例序列,我们可以将其分解为:

^{pr2}$

所以M可以用a b离子和y离子来描述。区别在于bM的质量,y实际上是{}的质量。但是你可以看到这些离子是如何相互补充的。在

再深入一点,电荷,顾名思义,就是质谱仪中分子和氨基酸链的实际电荷。其中最常见的是1和2。所以我们可以有4种不同的离子组合(b+,b++,y+,y++),来描述每个结。在

使用ms数据的哈希映射

如果您对hash-map数据结构一无所知,请浏览一下this维基百科页面。在

哈希映射的工作原理如下:

插入

一对质量(一个浮点数)和一个序列(氨基酸串)被加入。在

insert(mass, spectrum)

质量的整数值用作键。然后,将质量对sequence插入到整数mass项的列表中。在

input: 123.456, ABC
key: 123
inserting value: 123.456, ABC

任何具有相同质量的值都将附着到相同的质量值,以避免重复

table: {123: [(123.456, [ABC])]}
insert: 123.456, XYZ
table: {123: [(123.456, [ABC, XYZ])]}

不具有相同质量的值不会插入到同一点中

table: {123: [(123.456, [ABC, XYZ])]}
insert: 567.890, LMNOP
table: {123: [(123.456, [ABC, XYZ])], 567: [(567.890, [LMNOP])]}

查找

对表的查找是对体量的查找,而不是对序列的查找。与插入非常相似,查找从获取体量的整数值开始。它用作搜索键。在

search(mass, tolerance)

公差参数用于确定搜索体量时允许的自由度。一旦密钥被提取出来,我们就可以通过一个列表来查找在搜索量的上下界范围内的值。在

search parameters: 123.455, 20
tolerance: 20 ppm of 123.455 -> 0.0025
upper bound: 123.455 + .0025 = 123.4575
lower bound: 123.455 - .0025 =  123.4525
key: 123

table entries at 123: [(123.456, [ABC, XYZ]), (123.999, [YYY])]
table entries at 123 with values between 123.4525 and 123.4575: [(123.456, [ABC, XYZ])]

然后返回质量范围内的值的序列

output: [ABC, XYZ]

安装

要将python绑定作为包安装,请运行

pip install ms_map

要安装源代码,请运行

git clone https://github.com/zmcgrath96/ms_map.git
< p>为构建C++代码,运行测试并生成Python绑定,运行

cd ms_map
$ms_map> chmod u+x build_py.sh
$ms_map> ./build_py.sh

示例

fromms_mapimportPyMSMapif__name__=='__main__':map=PyMSMap()mass=316.308sequence="ZAM"print("Adding mass with sequence to the map")map.insert(mass,sequence)mass=218.095sequence="PSM"print("Adding a different mass with a different sequence to the map")map.insert(mass,sequence)print("Searching for mass that we put in there")results=map.search(316.302,20)print("Results:")forresultinresults:print(result)

美国石油学会

  • insert(mass:float,sequence:str)->无:在表中插入带有序列的mass
  • search(mass:float,ppmΒtol:int)—>;list:使用根据ppm tolerance参数计算的上下限值搜索质量。返回质量在此范围内的所有序列。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JFrame中的Java多线程   java Servlet异常映射   java无法从输出流读取   swing Java带来的小程序GUI问题   java什么原因导致错误“'void'类型此处不允许”以及如何修复它?   Java选择器select(长)与selectNow的区别   java自定义arraylist<mygames>获得不同   java Icepdf注释让页面消失   java反向整数数组   java I在生成同步“无法解析配置的所有依赖项”时遇到此错误:app:debugRuntimeClasspath   多个虚拟机上的java线程访问单个DB实例上的表,有时会导致性能低下和异常   swing更改Java中的默认按钮,使其看起来“更好”   java慢速MQ主题订阅。并行化不能提高性能   java运行Boggle Solver需要一个多小时。我的代码怎么了?   数据库中的java循环与应用程序中的java循环   正则表达式匹配${123…456}并在Java中提取2个数字?   java如何制作我们软件的试用版   Java内存参数计算   从另一个类调用方法时出现java问题