ペプチド/タンパク質のin silico切断は典型的なタスクであり、既に実装されています。たとえばpyteomics
、次の方法で (私が開発したものを)使用できます。
In [1]: from pyteomics.parser import cleave, expasy_rules
In [2]: cleave('GGRGAGSAAWSAAVRYLTMMSSLYQT', expasy_rules['trypsin'])
Out[2]: {'GAGSAAWSAAVR', 'GGR', 'YLTMMSSLYQT'}
ご覧のとおり、一般的な切断ルールは既にコード化されています。ただし、独自のものを提供できます。
In [3]: cleave('GGRGAGSAAWSAAVRYLTMMSSLYQT', '[KR]?[^P].*?[KR](?!P)')
Out[3]: {'GAGSAAWSAAVR', 'GGR', 'YLTMMSSLYQT'}
チュートリアルの関連セクションは次のとおりです。
現在の実装方法に興味がある場合は、ソース コードをご覧ください。
@memoize()
def cleave(sequence, rule, missed_cleavages=0, overlap=False):
"""
Docstring omitted here for brevity.
"""
peptides = set()
cleavage_sites = deque([0], maxlen=missed_cleavages+2)
for i in chain(map(lambda x: x.end(), re.finditer(rule, sequence)),
[None]):
cleavage_sites.append(i)
for j in range(0, len(cleavage_sites)-1):
peptides.add(sequence[cleavage_sites[j]:cleavage_sites[-1]])
if overlap and i not in {0, None}:
peptides.update(
cleave(sequence[i:], rule, missed_cleavages, overlap))
if '' in peptides:
peptides.remove('')
return peptides