forked from xwu/trait-o-matic
/
substitution_matrix.py
166 lines (162 loc) · 10.1 KB
/
substitution_matrix.py
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/usr/bin/python
# Filename: substitution_matrix.py
# Substitution matrix information
# from http://portal.open-bio.org/pipermail/biopython/2000-September/000418.html
# ---
# This code is part of the Trait-o-matic project and is governed by its license.
blosum = {
95 : {
('W', 'F') : 0, ('L', 'R') : -3, ('S', 'P') : -2, ('V', 'T') : -1,
('Q', 'Q') : 7, ('N', 'A') : -2, ('Z', 'Y') : -4, ('W', 'R') : -4,
('Q', 'A') : -1, ('S', 'D') : -1, ('H', 'H') : 9, ('S', 'H') : -2,
('H', 'D') : -2, ('L', 'N') : -5, ('W', 'A') : -4, ('Y', 'M') : -3,
('G', 'R') : -4, ('Y', 'I') : -2, ('Y', 'E') : -4, ('B', 'Y') : -4,
('Y', 'A') : -3, ('V', 'D') : -5, ('B', 'S') : -1, ('Y', 'Y') : 8,
('G', 'N') : -1, ('E', 'C') : -6, ('Y', 'Q') : -3, ('Z', 'Z') : 4,
('V', 'A') : -1, ('C', 'C') : 9, ('M', 'R') : -2, ('V', 'E') : -3,
('T', 'N') : -1, ('P', 'P') : 8, ('V', 'I') : 3, ('V', 'S') : -3,
('Z', 'P') : -2, ('V', 'M') : 0, ('T', 'F') : -3, ('V', 'Q') : -3,
('K', 'K') : 6, ('P', 'D') : -3, ('I', 'H') : -4, ('I', 'D') : -5,
('T', 'R') : -2, ('P', 'L') : -4, ('K', 'G') : -3, ('M', 'N') : -3,
('P', 'H') : -3, ('F', 'Q') : -4, ('Z', 'G') : -3, ('X', 'L') : -2,
('T', 'M') : -1, ('Z', 'C') : -5, ('X', 'H') : -2, ('D', 'R') : -3,
('B', 'W') : -6, ('X', 'D') : -2, ('Z', 'K') : 0, ('F', 'A') : -3,
('Z', 'W') : -4, ('F', 'E') : -5, ('D', 'N') : 1, ('B', 'K') : -1,
('X', 'X') : -2, ('F', 'I') : -1, ('B', 'G') : -2, ('X', 'T') : -1,
('F', 'M') : -1, ('B', 'C') : -4, ('Z', 'I') : -4, ('Z', 'V') : -3,
('S', 'S') : 5, ('L', 'Q') : -3, ('W', 'E') : -5, ('Q', 'R') : 0,
('N', 'N') : 7, ('W', 'M') : -2, ('Q', 'C') : -4, ('W', 'I') : -4,
('S', 'C') : -2, ('L', 'A') : -2, ('S', 'G') : -1, ('L', 'E') : -4,
('W', 'Q') : -3, ('H', 'G') : -3, ('S', 'K') : -1, ('Q', 'N') : 0,
('N', 'R') : -1, ('H', 'C') : -5, ('Y', 'N') : -3, ('G', 'Q') : -3,
('Y', 'F') : 3, ('C', 'A') : -1, ('V', 'L') : 0, ('G', 'E') : -3,
('G', 'A') : -1, ('K', 'R') : 2, ('E', 'D') : 1, ('Y', 'R') : -3,
('M', 'Q') : -1, ('T', 'I') : -2, ('C', 'D') : -5, ('V', 'F') : -2,
('T', 'A') : 0, ('T', 'P') : -2, ('B', 'P') : -3, ('T', 'E') : -2,
('V', 'N') : -4, ('P', 'G') : -4, ('M', 'A') : -2, ('K', 'H') : -1,
('V', 'R') : -4, ('P', 'C') : -5, ('M', 'E') : -3, ('K', 'L') : -3,
('V', 'V') : 5, ('M', 'I') : 1, ('T', 'Q') : -1, ('I', 'G') : -6,
('P', 'K') : -2, ('M', 'M') : 7, ('K', 'D') : -2, ('I', 'C') : -2,
('Z', 'D') : 0, ('F', 'R') : -4, ('X', 'K') : -1, ('Q', 'D') : -1,
('X', 'G') : -3, ('Z', 'L') : -4, ('X', 'C') : -3, ('Z', 'H') : 0,
('B', 'L') : -5, ('B', 'H') : -1, ('F', 'F') : 7, ('X', 'W') : -4,
('B', 'D') : 4, ('D', 'A') : -3, ('S', 'L') : -3, ('X', 'S') : -1,
('F', 'N') : -4, ('S', 'R') : -2, ('W', 'D') : -6, ('V', 'Y') : -3,
('W', 'L') : -3, ('H', 'R') : -1, ('W', 'H') : -3, ('H', 'N') : 0,
('W', 'T') : -4, ('T', 'T') : 6, ('S', 'F') : -3, ('W', 'P') : -5,
('L', 'D') : -5, ('B', 'I') : -5, ('L', 'H') : -4, ('S', 'N') : 0,
('B', 'T') : -1, ('L', 'L') : 5, ('Y', 'K') : -3, ('E', 'Q') : 2,
('Y', 'G') : -5, ('Z', 'S') : -1, ('Y', 'C') : -4, ('G', 'D') : -2,
('B', 'V') : -5, ('E', 'A') : -1, ('Y', 'W') : 2, ('E', 'E') : 6,
('Y', 'S') : -3, ('C', 'N') : -4, ('V', 'C') : -2, ('T', 'H') : -2,
('P', 'R') : -3, ('V', 'G') : -5, ('T', 'L') : -2, ('V', 'K') : -3,
('K', 'Q') : 1, ('R', 'A') : -2, ('I', 'R') : -4, ('T', 'D') : -2,
('P', 'F') : -5, ('I', 'N') : -4, ('K', 'I') : -4, ('M', 'D') : -5,
('V', 'W') : -3, ('W', 'W') : 11, ('M', 'H') : -3, ('P', 'N') : -3,
('K', 'A') : -1, ('M', 'L') : 2, ('K', 'E') : 0, ('Z', 'E') : 4,
('X', 'N') : -2, ('Z', 'A') : -1, ('Z', 'M') : -2, ('X', 'F') : -2,
('K', 'C') : -5, ('B', 'Q') : -1, ('X', 'B') : -2, ('B', 'M') : -4,
('F', 'C') : -3, ('Z', 'Q') : 4, ('X', 'Z') : -1, ('F', 'G') : -5,
('B', 'E') : 0, ('X', 'V') : -2, ('F', 'K') : -4, ('B', 'A') : -3,
('X', 'R') : -2, ('D', 'D') : 7, ('W', 'G') : -5, ('Z', 'F') : -4,
('S', 'Q') : -1, ('W', 'C') : -4, ('W', 'K') : -5, ('H', 'Q') : 1,
('L', 'C') : -3, ('W', 'N') : -5, ('S', 'A') : 1, ('L', 'G') : -5,
('W', 'S') : -4, ('S', 'E') : -1, ('H', 'E') : -1, ('S', 'I') : -3,
('H', 'A') : -3, ('S', 'M') : -3, ('Y', 'L') : -2, ('Y', 'H') : 1,
('Y', 'D') : -5, ('E', 'R') : -1, ('X', 'P') : -3, ('G', 'G') : 6,
('G', 'C') : -5, ('E', 'N') : -1, ('Y', 'T') : -3, ('Y', 'P') : -5,
('T', 'K') : -1, ('A', 'A') : 5, ('P', 'Q') : -2, ('T', 'C') : -2,
('V', 'H') : -4, ('T', 'G') : -3, ('I', 'Q') : -4, ('Z', 'T') : -2,
('C', 'R') : -5, ('V', 'P') : -4, ('P', 'E') : -2, ('M', 'C') : -3,
('K', 'N') : 0, ('I', 'I') : 5, ('P', 'A') : -1, ('M', 'G') : -4,
('T', 'S') : 1, ('I', 'E') : -4, ('P', 'M') : -3, ('M', 'K') : -2,
('I', 'A') : -2, ('P', 'I') : -4, ('R', 'R') : 7, ('X', 'M') : -2,
('L', 'I') : 1, ('X', 'I') : -2, ('Z', 'B') : 0, ('X', 'E') : -2,
('Z', 'N') : -1, ('X', 'A') : -1, ('B', 'R') : -2, ('B', 'N') : 4,
('F', 'D') : -5, ('X', 'Y') : -2, ('Z', 'R') : -1, ('F', 'H') : -2,
('B', 'F') : -5, ('F', 'L') : 0, ('X', 'Q') : -1, ('B', 'B') : 4
},
100 : {
('W', 'F') : 0, ('L', 'R') : -4, ('S', 'P') : -2, ('V', 'T') : -1,
('Q', 'Q') : 7, ('N', 'A') : -2, ('Z', 'Y') : -4, ('W', 'R') : -4,
('Q', 'A') : -1, ('S', 'D') : -1, ('H', 'H') : 9, ('S', 'H') : -2,
('H', 'D') : -2, ('L', 'N') : -5, ('W', 'A') : -4, ('Y', 'M') : -3,
('G', 'R') : -4, ('Y', 'I') : -3, ('Y', 'E') : -4, ('B', 'Y') : -4,
('Y', 'A') : -4, ('V', 'D') : -5, ('B', 'S') : -1, ('Y', 'Y') : 8,
('G', 'N') : -2, ('E', 'C') : -6, ('Y', 'Q') : -3, ('Z', 'Z') : 4,
('V', 'A') : -1, ('C', 'C') : 9, ('M', 'R') : -2, ('V', 'E') : -3,
('T', 'N') : -1, ('P', 'P') : 8, ('V', 'I') : 2, ('V', 'S') : -3,
('Z', 'P') : -3, ('V', 'M') : 0, ('T', 'F') : -3, ('V', 'Q') : -3,
('K', 'K') : 6, ('P', 'D') : -3, ('I', 'H') : -5, ('I', 'D') : -6,
('T', 'R') : -2, ('P', 'L') : -4, ('K', 'G') : -3, ('M', 'N') : -4,
('P', 'H') : -3, ('F', 'Q') : -4, ('Z', 'G') : -4, ('X', 'L') : -2,
('T', 'M') : -2, ('Z', 'C') : -6, ('X', 'H') : -2, ('D', 'R') : -3,
('B', 'W') : -6, ('X', 'D') : -3, ('Z', 'K') : 0, ('F', 'A') : -4,
('Z', 'W') : -4, ('F', 'E') : -5, ('D', 'N') : 1, ('B', 'K') : -1,
('X', 'X') : -2, ('F', 'I') : -1, ('B', 'G') : -2, ('X', 'T') : -1,
('F', 'M') : -1, ('B', 'C') : -5, ('Z', 'I') : -4, ('Z', 'V') : -3,
('S', 'S') : 6, ('L', 'Q') : -3, ('W', 'E') : -5, ('Q', 'R') : 0,
('N', 'N') : 7, ('W', 'M') : -3, ('Q', 'C') : -5, ('W', 'I') : -4,
('S', 'C') : -2, ('L', 'A') : -3, ('S', 'G') : -1, ('L', 'E') : -5,
('W', 'Q') : -3, ('H', 'G') : -4, ('S', 'K') : -1, ('Q', 'N') : -1,
('N', 'R') : -1, ('H', 'C') : -5, ('Y', 'N') : -3, ('G', 'Q') : -3,
('Y', 'F') : 3, ('C', 'A') : -1, ('V', 'L') : 0, ('G', 'E') : -4,
('G', 'A') : -1, ('K', 'R') : 2, ('E', 'D') : 1, ('Y', 'R') : -3,
('M', 'Q') : -1, ('T', 'I') : -2, ('C', 'D') : -5, ('V', 'F') : -2,
('T', 'A') : -1, ('T', 'P') : -3, ('B', 'P') : -3, ('T', 'E') : -2,
('V', 'N') : -4, ('P', 'G') : -4, ('M', 'A') : -2, ('K', 'H') : -2,
('V', 'R') : -4, ('P', 'C') : -5, ('M', 'E') : -4, ('K', 'L') : -4,
('V', 'V') : 5, ('M', 'I') : 1, ('T', 'Q') : -2, ('I', 'G') : -6,
('P', 'K') : -2, ('M', 'M') : 8, ('K', 'D') : -2, ('I', 'C') : -2,
('Z', 'D') : 0, ('F', 'R') : -4, ('X', 'K') : -2, ('Q', 'D') : -2,
('X', 'G') : -3, ('Z', 'L') : -4, ('X', 'C') : -3, ('Z', 'H') : -1,
('B', 'L') : -5, ('B', 'H') : -1, ('F', 'F') : 7, ('X', 'W') : -4,
('B', 'D') : 4, ('D', 'A') : -3, ('S', 'L') : -4, ('X', 'S') : -1,
('F', 'N') : -5, ('S', 'R') : -2, ('W', 'D') : -7, ('V', 'Y') : -3,
('W', 'L') : -4, ('H', 'R') : -1, ('W', 'H') : -3, ('H', 'N') : 0,
('W', 'T') : -5, ('T', 'T') : 6, ('S', 'F') : -3, ('W', 'P') : -6,
('L', 'D') : -6, ('B', 'I') : -5, ('L', 'H') : -4, ('S', 'N') : 0,
('B', 'T') : -2, ('L', 'L') : 5, ('Y', 'K') : -4, ('E', 'Q') : 1,
('Y', 'G') : -6, ('Z', 'S') : -1, ('Y', 'C') : -4, ('G', 'D') : -3,
('B', 'V') : -5, ('E', 'A') : -2, ('Y', 'W') : 1, ('E', 'E') : 6,
('Y', 'S') : -3, ('C', 'N') : -4, ('V', 'C') : -2, ('T', 'H') : -3,
('P', 'R') : -3, ('V', 'G') : -5, ('T', 'L') : -3, ('V', 'K') : -4,
('K', 'Q') : 1, ('R', 'A') : -2, ('I', 'R') : -4, ('T', 'D') : -2,
('P', 'F') : -5, ('I', 'N') : -5, ('K', 'I') : -4, ('M', 'D') : -5,
('V', 'W') : -4, ('W', 'W') : 11, ('M', 'H') : -3, ('P', 'N') : -4,
('K', 'A') : -2, ('M', 'L') : 2, ('K', 'E') : 0, ('Z', 'E') : 5,
('X', 'N') : -2, ('Z', 'A') : -2, ('Z', 'M') : -3, ('X', 'F') : -3,
('K', 'C') : -5, ('B', 'Q') : -1, ('X', 'B') : -2, ('B', 'M') : -4,
('F', 'C') : -3, ('Z', 'Q') : 3, ('X', 'Z') : -2, ('F', 'G') : -5,
('B', 'E') : 0, ('X', 'V') : -2, ('F', 'K') : -4, ('B', 'A') : -3,
('X', 'R') : -2, ('D', 'D') : 7, ('W', 'G') : -5, ('Z', 'F') : -5,
('S', 'Q') : -1, ('W', 'C') : -5, ('W', 'K') : -5, ('H', 'Q') : 0,
('L', 'C') : -3, ('W', 'N') : -6, ('S', 'A') : 1, ('L', 'G') : -5,
('W', 'S') : -4, ('S', 'E') : -1, ('H', 'E') : -1, ('S', 'I') : -4,
('H', 'A') : -3, ('S', 'M') : -3, ('Y', 'L') : -3, ('Y', 'H') : 1,
('Y', 'D') : -5, ('E', 'R') : -2, ('X', 'P') : -3, ('G', 'G') : 6,
('G', 'C') : -5, ('E', 'N') : -1, ('Y', 'T') : -3, ('Y', 'P') : -5,
('T', 'K') : -2, ('A', 'A') : 5, ('P', 'Q') : -2, ('T', 'C') : -2,
('V', 'H') : -5, ('T', 'G') : -3, ('I', 'Q') : -4, ('Z', 'T') : -2,
('C', 'R') : -5, ('V', 'P') : -4, ('P', 'E') : -3, ('M', 'C') : -3,
('K', 'N') : -1, ('I', 'I') : 5, ('P', 'A') : -1, ('M', 'G') : -5,
('T', 'S') : 1, ('I', 'E') : -5, ('P', 'M') : -4, ('M', 'K') : -2,
('I', 'A') : -3, ('P', 'I') : -4, ('R', 'R') : 7, ('X', 'M') : -2,
('L', 'I') : 1, ('X', 'I') : -2, ('Z', 'B') : 1, ('X', 'E') : -2,
('Z', 'N') : -1, ('X', 'A') : -1, ('B', 'R') : -2, ('B', 'N') : 4,
('F', 'D') : -5, ('X', 'Y') : -3, ('Z', 'R') : -1, ('F', 'H') : -2,
('B', 'F') : -5, ('F', 'L') : 0, ('X', 'Q') : -2, ('B', 'B') : 4
}
}
def blosum_value(threshold, aa1, aa2):
'''
Returns the substitution value for two amino acids (order is
unimportant because BLOSUM is symmetric).
Raises KeyError if a substitution value for the two residues is
not found.
'''
try:
s = blosum[threshold][(aa1, aa2)]
except KeyError:
s = blosum[threshold][(aa2, aa1)]
return s