Rosalind 045 Inferring Peptide from Full Spectrum

题目背景:

  1. 蛋白质质谱分析:这是一种用来确定蛋白质或多肽序列的方法。简化地说,它通过测量蛋白质分子在特定切割点被切割后产生的小片段(离子)的质量来工作。

  2. b离子和y离子:当蛋白质被切割时,会产生两种类型的离子:b离子和y离子。b离子包含蛋白质的起始部分,而y离子包含末尾部分。这两种离子的质量之和等于原始蛋白质的质量。

  3. 问题的核心:给定一串由b离子和y离子的质量组成的列表,需要推断出蛋白质P内部的一段序列(记作t)。这里的关键是找到t的前缀(t-prefix)和后缀(t-suffix),这些前缀和后缀的质量加上某个常数(分别是w1和w2)会出现在给定的列表中。

分析:

第一行是总质量,下面的每行是离子们的数量,每两个离子可以组合成一个蛋白质。但是组合的离子我们并不知道谁是b离子和y离子。然后每个b离子之间的质量差距就是一个氨基酸,直接遍历。

 

代码:

# 直接使用字典存储蛋白质质量数据
mass_table = {
    'A': 71.03711,
    'C': 103.00919,
    'D': 115.02694,
    'E': 129.04259,
    'F': 147.06841,
    'G': 57.02146,
    'H': 137.05891,
    'I': 113.08406,
    'K': 128.09496,
    'L': 113.08406,
    'M': 131.04049,
    'N': 114.04293,
    'P': 97.05276,
    'Q': 128.05858,
    'R': 156.10111,
    'S': 87.03203,
    'T': 101.04768,
    'V': 99.06841,
    'W': 186.07931,
    'Y': 163.06333
}

# 读取质谱数据
spectrum_data = 'D:/pycharm/Rosalind/Data/such.txt'
with open(spectrum_data) as spectrum_file:
    total_mass = float(spectrum_file.readline().strip())
    ions = [float(line.strip()) for line in spectrum_file]

# 推断蛋白质序列长度
n = (len(ions) - 2) // 2
sequence = ''
current_mass = ions[0]

for _ in range(n):
    found = False
    for ion_mass in ions[1:]:
        diff = ion_mass - current_mass
        for amino_acid, amino_acid_mass in mass_table.items():
            if abs(diff - amino_acid_mass) < 0.001:
                sequence += amino_acid
                current_mass += amino_acid_mass
                found = True
                break
        if found:
            break
    if not found:
        sequence += '?'
        break

print(sequence)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值