Mercurial > repos > guerler > springsuite
annotate spring_package/Alignment.py @ 17:c790d25086dc draft
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
| author | guerler | 
|---|---|
| date | Wed, 28 Oct 2020 05:11:56 +0000 | 
| parents | |
| children | 
| rev | line source | 
|---|---|
| 
17
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
1 from Bio import pairwise2 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
2 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
3 class Alignment: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
4 def __init__(self, fileName): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
5 self.queryName = None | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
6 self.queryStart = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
7 self.queryAlignment = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
8 self.templateName = None | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
9 self.templateStart = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
10 self.templateAlignment = list() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
11 self.readFile(fileName) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
12 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
13 def readFile(self, fileName): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
14 with open(fileName) as file: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
15 for index, line in enumerate(file): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
16 cols = line.split() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
17 if len(cols) > 1 and cols[0] == "Query": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
18 self.queryName = cols[1].split()[0][0:14] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
19 if len(cols) > 1 and cols[0].startswith(">"): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
20 self.templateName = cols[0][1:] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
21 if self.queryName and self.templateName: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
22 if len(cols) > 2: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
23 if cols[0] == "Q" and cols[1] == self.queryName: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
24 self.queryStart.append(self.getStart(cols[2])) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
25 self.queryAlignment.append(cols[3]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
26 if cols[0] == "T" and cols[1] == self.templateName: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
27 self.templateStart.append(self.getStart(cols[2])) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
28 self.templateAlignment.append(cols[3]) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
29 if len(cols) > 1 and cols[0] == "No" and cols[1] == "2": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
30 break | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
31 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
32 def createModel(self, templateChain): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
33 hhrMapping = self.mapSequence(templateChain) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
34 previousResidue = dict() | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
35 for residueNumber in templateChain: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
36 templateResidue = templateChain[residueNumber]["residue"] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
37 previousResidue[residueNumber] = templateResidue | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
38 templateChain[residueNumber]["residue"] = None | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
39 tCount = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
40 for i in range(len(self.templateAlignment)): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
41 templateSequence = self.templateAlignment[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
42 querySequence = self.queryAlignment[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
43 queryStart = self.queryStart[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
44 n = len(querySequence) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
45 qCount = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
46 for j in range(n): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
47 qs = querySequence[j] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
48 ts = templateSequence[j] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
49 rs = hhrMapping[tCount] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
50 if rs != "-" and qs != "-" and ts != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
51 residueNumber = rs | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
52 if residueNumber in templateChain: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
53 pr = previousResidue[residueNumber] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
54 if pr != self.toThreeAmino(ts): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
55 print ("Warning: Ignoring mismatching residue [%s != %s]." % (pr, self.toThreeAmino(ts))) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
56 templateChain[residueNumber]["residue"] = self.toThreeAmino(qs) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
57 templateChain[residueNumber]["residueNumber"] = queryStart + qCount | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
58 else: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
59 print ("Warning: Skipping missing residue [%s]." % residueNumber) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
60 if qs != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
61 qCount = qCount + 1 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
62 if ts != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
63 tCount = tCount + 1 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
64 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
65 def mapSequence(self, templateChain): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
66 pdbSequence = "" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
67 for residueNumber in templateChain: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
68 templateResidue = templateChain[residueNumber]["residue"] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
69 pdbSequence = pdbSequence + self.toSingleAmino(templateResidue) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
70 hhrSequence = "" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
71 for i in range(len(self.templateAlignment)): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
72 templateSequence = self.templateAlignment[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
73 for s in templateSequence: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
74 if s != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
75 hhrSequence = hhrSequence + s | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
76 alignments = pairwise2.align.globalxx(pdbSequence, hhrSequence) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
77 pdbAlignment = alignments[0].seqA | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
78 hhrAlignment = alignments[0].seqB | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
79 pCount = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
80 hCount = 0 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
81 hhrMapping = [] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
82 for i in range(len(pdbAlignment)): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
83 p = pdbAlignment[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
84 h = hhrAlignment[i] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
85 if h != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
86 residueIndex = pCount if p != "-" else p | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
87 hhrMapping.append(residueIndex) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
88 if p != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
89 pCount = pCount + 1 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
90 sortedResidueIndex = sorted(templateChain.keys()) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
91 for i in range(len(hhrMapping)): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
92 if hhrMapping[i] != "-": | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
93 hhrMapping[i] = sortedResidueIndex[hhrMapping[i]] | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
94 return hhrMapping | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
95 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
96 def getStart(self, x): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
97 try: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
98 return int(x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
99 except: | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
100 raise Exception("Invalid start index in alignment [%s]." % x) | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
101 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
102 def toThreeAmino(self, seq): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
103 code = dict(G="GLY", A="ALA", V="VAL", L="LEU", I="ILE", M="MET", F="PHE", P="PRO", Y="TYR", W="TRP", | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
104 K="LYS", S="SER", C="CYS", N="ASN", Q="GLN", H="HIS", T="THR", E="GLU", D="ASP", R="ARG") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
105 return code[seq] if seq in code else "XXX" | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
106 | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
107 def toSingleAmino(self, seq): | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
108 code = dict(GLY="G", ALA="A", VAL="V", LEU="L", ILE="I", MET="M", PHE="F", PRO="P", TYR="Y", TRP="W", | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
109 LYS="K", SER="S", CYS="C", ASN="N", GLN="Q", HIS="H", THR="T", GLU="E", ASP="D", ARG="R") | 
| 
 
c790d25086dc
"planemo upload commit b0ede77caf410ab69043d33a44e190054024d340-dirty"
 
guerler 
parents:  
diff
changeset
 | 
110 return code[seq] if seq in code else "X" | 
