File size: 1,641 Bytes
a52cd62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import sys
import re

# Nuevas reglas de reconocimiento con patrones suaves
def traducir_a_geneforge(secuencia):
    motivos = []

    # Dom(Kin): 3 o m谩s K seguidos al principio
    if re.search(r"^M*K{3,}", secuencia):
        motivos.append("Dom(Kin)")

    # Mot(NLS): presencia de varias R o K juntas, t铆pica se帽al nuclear
    if re.search(r"[RK]{3,}", secuencia):
        motivos.append("Mot(NLS)")

    # Mot(PEST): alta densidad de E o D (glut谩mico o asp谩rtico)
    if len(re.findall(r"E", secuencia)) >= 5 or "DEG" in secuencia:
        motivos.append("Mot(PEST)")

    # *AcK@X: presencia de "KQAK" o "QAK" como motivo de acetilaci贸n
    if re.search(r"KQAK|QAK", secuencia):
        motivos.append("*AcK@X")

    # *P@X: motivos de fosforilaci贸n comunes
    if re.search(r"[RST]P", secuencia):
        motivos.append("*P@X")

    # Localize(Nucleus): presencia de PRKRK, PKKKRKV
    if "PRKRK" in secuencia or "PKKKRKV" in secuencia:
        motivos.append("Localize(Nucleus)")

    # Localize(Membrane): patrones hidrof贸bicos como AILFL o LAGGAV
    if re.search(r"(AILFL|LAGGAV|LVLL|AAVL)", secuencia):
        motivos.append("Localize(Membrane)")

    if not motivos:
        return "// No se encontraron motivos reconocibles"

    return "^p:" + "-".join(sorted(set(motivos)))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Uso: python traducir_a_geneforgelang_v2.py <secuencia_proteina>")
        sys.exit(1)

    secuencia = sys.argv[1].upper()
    resultado = traducir_a_geneforge(secuencia)
    print("馃攳 GeneForgeLang:")
    print(resultado)