2

目的は、Python でタンパク質配列の理論的なトリプシン切断をコーディングすることです。トリプシンの切断 (切断) 規則は、R または K の後で、P の前ではありません (つまり、(K または R) の後に P が続く場合を除き、トリプシンは各 K または R の後でタンパク質配列を切断 (切断) します)。

これは私の正規表現です:

pattern = re.compile('[KR]?[^P].*?[KR](?!P)')
peptides = pattern.findall('GGRGAGSAAWSAAVRYLTMMSSLYQT')

出力:

GGR and GAGSAAWSAAVR

私が欲しいのは:

GGR and GAGSAAWSAAVR and YLTMMSSLYQT

Findall は、カットされたもののみを返し、残りは返しません。ありがとう

4

3 に答える 3

3

あなたが投稿したリンクに従って

トリプシンの切断規則は、R または K の後で、P の前ではありません (つまり、(K または R) の後に P が続かない限り、トリプシンは各 K または R の後でタンパク質配列を切断 (切断) します)。

これは次のように実装できます。

  1. 文字を一致させます。
  2. 次の文字を照合する前に、最後の文字が分割されたKor R(後に が続かないP) の文字ではないことを確認してください。
  3. 次に、その次の文字を消費します。
  4. 手順 2 と 3 を繰り返します。

正規表現では、これは次のようになります。

>>> re.findall(r".(?:(?<![KR](?!P)).)*", 'GGRGAGRPSAAWKSAAVRYLTMMSKPSLYQT')
['GGR', 'GAGRPSAAWK', 'SAAVR', 'YLTMMSKPSLYQT']

(これが有効なシーケンスかどうかはわかりませんが、関連するすべてのケースが含まれています。)

于 2013-08-21T17:59:46.203 に答える
3

ペプチド/タンパク質の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
于 2013-08-21T18:03:49.687 に答える