Моноизотопный расчет пептидов с использованием питона - PullRequest
0 голосов
/ 14 февраля 2019

Я делаю калькулятор для моноизотопных пептидов, и у меня есть некоторые проблемы, которые я не могу решить.

import re

aminoacid = {
        "I": "C6H13NO2",
        "L": "C6H13NO2",
        "K": "C6H14N2O2",
        "M": "C5H11NO2S",
        "F": "C9H11NO2",
        "T": "C4H9NO3",
        "W": "C11H12N2O2",
        "V": "C5H11NO2",
        "R": "C6H14N4O2",
        "H": "C6H9N3O2",
        "A": "C3H7NO2",
        "N": "C4H8N2O3",
        "D": "C4H7NO4",
        "C": "C3H7NO2S",
        "E": "C5H9NO4",
        "Q": "C5H10N2O3",
        "G": "C2H5NO2",
        "P": "C5H9NO2",
        "S": "C3H7NO3",
        "Y": "C9H11NO3"
}

acid = input('Sequence: ')

s = re.findall('([A-Z][a-z]?)([0-9]*)', formula)

monoisotopic = {'S': 31.972, 'C': 12.0000, 'H': 1.0078, 'O': 15.9949, 'N': 14.0031}

weight = 0
for elem, count in s:

    #For singular elements
    if count=='':
        count = 1

    weight = weight + int(count) * monoisotopic[elem]

print('[M + H]+ : ', weight-(len(acid)-1)*18.0105+1.0078)

print('# of amino acids : ', len(acid))

Если я добавлю одну аминокислоту, например " A ", она будет работать хорошо.Но когда я помещаю последовательности вроде « AILWNG », программа не может их распознать.Как я могу заставить эту программу распознавать две или более аминокислоты?

1 Ответ

0 голосов
/ 17 февраля 2019

Вероятно, это поможет, если мы разделим программу на отдельные функции.Сначала мы определяем аминокислоты и атомный вес (соответствующих) атомов:

aminoacid = {
    'I': 'C6H13NO2',
    'L': 'C6H13NO2',
    'K': 'C6H14N2O2',
    'M': 'C5H11NO2S',
    'F': 'C9H11NO2',
    'T': 'C4H9NO3',
    'W': 'C11H12N2O2',
    'V': 'C5H11NO2',
    'R': 'C6H14N4O2',
    'H': 'C6H9N3O2',
    'A': 'C3H7NO2',
    'N': 'C4H8N2O3',
    'D': 'C4H7NO4',
    'C': 'C3H7NO2S',
    'E': 'C5H9NO4',
    'Q': 'C5H10N2O3',
    'G': 'C2H5NO2',
    'P': 'C5H9NO2',
    'S': 'C3H7NO3',
    'Y': 'C9H11NO3'
}
monoisotopic = {
    'S': 31.972,
    'C': 12.0000,
    'H': 1.0078,
    'O': 15.9949,
    'N': 14.0031
}

Затем можно определить функцию для расчета веса аминокислоты (или любого другого атома):

from re import findall as refindall

def molecular_weight(molecule):
    return sum(
        monoisotopic[atom] * int(num or '1')
        for atom, num in refindall(r'([A-Z][a-z]*)(\d*)', molecule)
    )

Затем мы можем просто суммировать молекулярные массы аминокислот, например:

def proteine_mass(proteine):
    return sum(molecular_weight(aminoacid[char]) for char in proteine)

Например:

>>> proteine_mass('WATER')
733.3594
>>> proteine_mass('AILWNG')
762.4109000000001

(конечно, это не H 2 O, вероятно, указанного выше белка не существует)

...