我在处理多个基于Web的API时使用多个序列比对,因此我在JavaScript中进行了大部分轻量级分析。我目前正试图弄清楚如何计算JavaScript中的BLOSUM62分数。有许多Python函数,如Github中的以下内容:
math::vec3
使用Blosum62矩阵:
#!/usr/bin/env python
# Usage: python blosum.py blosum62.txt
# Then, enter input in "row col" format -- e..g, "s f".
import sys
class InvalidPairException(Exception):
pass
class Matrix:
def __init__(self, matrix_filename):
self._load_matrix(matrix_filename)
def _load_matrix(self, matrix_filename):
with open(matrix_filename) as matrix_file:
matrix = matrix_file.read()
lines = matrix.strip().split('\n')
header = lines.pop(0)
columns = header.split()
matrix = {}
for row in lines:
entries = row.split()
row_name = entries.pop(0)
matrix[row_name] = {}
if len(entries) != len(columns):
raise Exception('Improper entry number in row')
for column_name in columns:
matrix[row_name][column_name] = entries.pop(0)
self._matrix = matrix
def lookup_score(self, a, b):
a = a.upper()
b = b.upper()
if a not in self._matrix or b not in self._matrix[a]:
raise InvalidPairException('[%s, %s]' % (a, b))
return self._matrix[a][b]
def run_repl(matrix):
while True:
try:
user_input = input('>>> ').strip()
except (EOFError, KeyboardInterrupt) as e:
print()
return
if user_input.lower() in ['q', 'exit', 'quit']:
return
components = user_input.split()
if len(components) != 2:
continue
try:
print(matrix.lookup_score(components[0], components[1]))
except InvalidPairException:
continue
def main():
if len(sys.argv) != 2:
sys.exit('Usage: %s [matrix filename]')
matrix_filename = sys.argv[1]
matrix = Matrix(matrix_filename)
run_repl(matrix)
if __name__ == '__main__':
main()
但是我绝对不确定(作为Python新手)如何将其转换为JavaScript。这有什么JavaScript功能吗?或者有人建议如何处理这个问题吗?
答案 0 :(得分:2)
这不是一个完整的答案,但我将blossum62矩阵变成了javascript友好的东西,所以希望你能自己编写得分(我不明白在上面的示例代码中如何完成得分)
var blossum62 = {'*': {'*': 1, 'A': -4, 'C': -4, 'B': -4, 'E': -4, 'D': -4, 'G': -4, 'F': -4, 'I': -4, 'H': -4, 'K': -4, 'M': -4, 'L': -4, 'N': -4, 'Q': -4, 'P': -4, 'S': -4, 'R': -4, 'T': -4, 'W': -4, 'V': -4, 'Y': -4, 'X': -4, 'Z': -4}, 'A': {'*': -4, 'A': 4, 'C': 0, 'B': -2, 'E': -1, 'D': -2, 'G': 0, 'F': -2, 'I': -1, 'H': -2, 'K': -1, 'M': -1, 'L': -1, 'N': -2, 'Q': -1, 'P': -1, 'S': 1, 'R': -1, 'T': 0, 'W': -3, 'V': 0, 'Y': -2, 'X': 0, 'Z': -1}, 'C': {'*': -4, 'A': 0, 'C': 9, 'B': -3, 'E': -4, 'D': -3, 'G': -3, 'F': -2, 'I': -1, 'H': -3, 'K': -3, 'M': -1, 'L': -1, 'N': -3, 'Q': -3, 'P': -3, 'S': -1, 'R': -3, 'T': -1, 'W': -2, 'V': -1, 'Y': -2, 'X': -2, 'Z': -3}, 'B': {'*': -4, 'A': -2, 'C': -3, 'B': 4, 'E': 1, 'D': 4, 'G': -1, 'F': -3, 'I': -3, 'H': 0, 'K': 0, 'M': -3, 'L': -4, 'N': 3, 'Q': 0, 'P': -2, 'S': 0, 'R': -1, 'T': -1, 'W': -4, 'V': -3, 'Y': -3, 'X': -1, 'Z': 1}, 'E': {'*': -4, 'A': -1, 'C': -4, 'B': 1, 'E': 5, 'D': 2, 'G': -2, 'F': -3, 'I': -3, 'H': 0, 'K': 1, 'M': -2, 'L': -3, 'N': 0, 'Q': 2, 'P': -1, 'S': 0, 'R': 0, 'T': -1, 'W': -3, 'V': -2, 'Y': -2, 'X': -1, 'Z': 4}, 'D': {'*': -4, 'A': -2, 'C': -3, 'B': 4, 'E': 2, 'D': 6, 'G': -1, 'F': -3, 'I': -3, 'H': -1, 'K': -1, 'M': -3, 'L': -4, 'N': 1, 'Q': 0, 'P': -1, 'S': 0, 'R': -2, 'T': -1, 'W': -4, 'V': -3, 'Y': -3, 'X': -1, 'Z': 1}, 'G': {'*': -4, 'A': 0, 'C': -3, 'B': -1, 'E': -2, 'D': -1, 'G': 6, 'F': -3, 'I': -4, 'H': -2, 'K': -2, 'M': -3, 'L': -4, 'N': 0, 'Q': -2, 'P': -2, 'S': 0, 'R': -2, 'T': -2, 'W': -2, 'V': -3, 'Y': -3, 'X': -1, 'Z': -2}, 'F': {'*': -4, 'A': -2, 'C': -2, 'B': -3, 'E': -3, 'D': -3, 'G': -3, 'F': 6, 'I': 0, 'H': -1, 'K': -3, 'M': 0, 'L': 0, 'N': -3, 'Q': -3, 'P': -4, 'S': -2, 'R': -3, 'T': -2, 'W': 1, 'V': -1, 'Y': 3, 'X': -1, 'Z': -3}, 'I': {'*': -4, 'A': -1, 'C': -1, 'B': -3, 'E': -3, 'D': -3, 'G': -4, 'F': 0, 'I': 4, 'H': -3, 'K': -3, 'M': 1, 'L': 2, 'N': -3, 'Q': -3, 'P': -3, 'S': -2, 'R': -3, 'T': -1, 'W': -3, 'V': 3, 'Y': -1, 'X': -1, 'Z': -3}, 'H': {'*': -4, 'A': -2, 'C': -3, 'B': 0, 'E': 0, 'D': -1, 'G': -2, 'F': -1, 'I': -3, 'H': 8, 'K': -1, 'M': -2, 'L': -3, 'N': 1, 'Q': 0, 'P': -2, 'S': -1, 'R': 0, 'T': -2, 'W': -2, 'V': -3, 'Y': 2, 'X': -1, 'Z': 0}, 'K': {'*': -4, 'A': -1, 'C': -3, 'B': 0, 'E': 1, 'D': -1, 'G': -2, 'F': -3, 'I': -3, 'H': -1, 'K': 5, 'M': -1, 'L': -2, 'N': 0, 'Q': 1, 'P': -1, 'S': 0, 'R': 2, 'T': -1, 'W': -3, 'V': -2, 'Y': -2, 'X': -1, 'Z': 1}, 'M': {'*': -4, 'A': -1, 'C': -1, 'B': -3, 'E': -2, 'D': -3, 'G': -3, 'F': 0, 'I': 1, 'H': -2, 'K': -1, 'M': 5, 'L': 2, 'N': -2, 'Q': 0, 'P': -2, 'S': -1, 'R': -1, 'T': -1, 'W': -1, 'V': 1, 'Y': -1, 'X': -1, 'Z': -1}, 'L': {'*': -4, 'A': -1, 'C': -1, 'B': -4, 'E': -3, 'D': -4, 'G': -4, 'F': 0, 'I': 2, 'H': -3, 'K': -2, 'M': 2, 'L': 4, 'N': -3, 'Q': -2, 'P': -3, 'S': -2, 'R': -2, 'T': -1, 'W': -2, 'V': 1, 'Y': -1, 'X': -1, 'Z': -3}, 'N': {'*': -4, 'A': -2, 'C': -3, 'B': 3, 'E': 0, 'D': 1, 'G': 0, 'F': -3, 'I': -3, 'H': 1, 'K': 0, 'M': -2, 'L': -3, 'N': 6, 'Q': 0, 'P': -2, 'S': 1, 'R': 0, 'T': 0, 'W': -4, 'V': -3, 'Y': -2, 'X': -1, 'Z': 0}, 'Q': {'*': -4, 'A': -1, 'C': -3, 'B': 0, 'E': 2, 'D': 0, 'G': -2, 'F': -3, 'I': -3, 'H': 0, 'K': 1, 'M': 0, 'L': -2, 'N': 0, 'Q': 5, 'P': -1, 'S': 0, 'R': 1, 'T': -1, 'W': -2, 'V': -2, 'Y': -1, 'X': -1, 'Z': 3}, 'P': {'*': -4, 'A': -1, 'C': -3, 'B': -2, 'E': -1, 'D': -1, 'G': -2, 'F': -4, 'I': -3, 'H': -2, 'K': -1, 'M': -2, 'L': -3, 'N': -2, 'Q': -1, 'P': 7, 'S': -1, 'R': -2, 'T': -1, 'W': -4, 'V': -2, 'Y': -3, 'X': -2, 'Z': -1}, 'S': {'*': -4, 'A': 1, 'C': -1, 'B': 0, 'E': 0, 'D': 0, 'G': 0, 'F': -2, 'I': -2, 'H': -1, 'K': 0, 'M': -1, 'L': -2, 'N': 1, 'Q': 0, 'P': -1, 'S': 4, 'R': -1, 'T': 1, 'W': -3, 'V': -2, 'Y': -2, 'X': 0, 'Z': 0}, 'R': {'*': -4, 'A': -1, 'C': -3, 'B': -1, 'E': 0, 'D': -2, 'G': -2, 'F': -3, 'I': -3, 'H': 0, 'K': 2, 'M': -1, 'L': -2, 'N': 0, 'Q': 1, 'P': -2, 'S': -1, 'R': 5, 'T': -1, 'W': -3, 'V': -3, 'Y': -2, 'X': -1, 'Z': 0}, 'T': {'*': -4, 'A': 0, 'C': -1, 'B': -1, 'E': -1, 'D': -1, 'G': -2, 'F': -2, 'I': -1, 'H': -2, 'K': -1, 'M': -1, 'L': -1, 'N': 0, 'Q': -1, 'P': -1, 'S': 1, 'R': -1, 'T': 5, 'W': -2, 'V': 0, 'Y': -2, 'X': 0, 'Z': -1}, 'W': {'*': -4, 'A': -3, 'C': -2, 'B': -4, 'E': -3, 'D': -4, 'G': -2, 'F': 1, 'I': -3, 'H': -2, 'K': -3, 'M': -1, 'L': -2, 'N': -4, 'Q': -2, 'P': -4, 'S': -3, 'R': -3, 'T': -2, 'W': 11, 'V': -3, 'Y': 2, 'X': -2, 'Z': -3}, 'V': {'*': -4, 'A': 0, 'C': -1, 'B': -3, 'E': -2, 'D': -3, 'G': -3, 'F': -1, 'I': 3, 'H': -3, 'K': -2, 'M': 1, 'L': 1, 'N': -3, 'Q': -2, 'P': -2, 'S': -2, 'R': -3, 'T': 0, 'W': -3, 'V': 4, 'Y': -1, 'X': -1, 'Z': -2}, 'Y': {'*': -4, 'A': -2, 'C': -2, 'B': -3, 'E': -2, 'D': -3, 'G': -3, 'F': 3, 'I': -1, 'H': 2, 'K': -2, 'M': -1, 'L': -1, 'N': -2, 'Q': -1, 'P': -3, 'S': -2, 'R': -2, 'T': -2, 'W': 2, 'V': -1, 'Y': 7, 'X': -1, 'Z': -2}, 'X': {'*': -4, 'A': 0, 'C': -2, 'B': -1, 'E': -1, 'D': -1, 'G': -1, 'F': -1, 'I': -1, 'H': -1, 'K': -1, 'M': -1, 'L': -1, 'N': -1, 'Q': -1, 'P': -2, 'S': 0, 'R': -1, 'T': 0, 'W': -2, 'V': -1, 'Y': -1, 'X': -1, 'Z': -1}, 'Z': {'*': -4, 'A': -1, 'C': -3, 'B': 1, 'E': 4, 'D': 1, 'G': -2, 'F': -3, 'I': -3, 'H': 0, 'K': 1, 'M': -1, 'L': -3, 'N': 0, 'Q': 3, 'P': -1, 'S': 0, 'R': 0, 'T': -1, 'W': -3, 'V': -2, 'Y': -2, 'X': -1, 'Z': 4}}
然后你可以使用两个索引进行简单的查找:
blossum62["A"]["R"]
-1
矩阵是对称的,因此索引的顺序并不重要
编辑以便于阅读格式:
var blossum62 = {
'*':{'*': 1, 'A': -4, 'C': -4, 'B': -4, 'E': -4,
'D': -4, 'G': -4, 'F': -4, 'I': -4, 'H': -4,
'K': -4, 'M': -4, 'L': -4, 'N': -4, 'Q': -4,
'P': -4, 'S': -4, 'R': -4, 'T': -4, 'W': -4,
'V': -4, 'Y': -4, 'X': -4, 'Z': -4},
'A':{'*': -4, 'A': 4, 'C': 0, 'B': -2, 'E': -1,
'D': -2, 'G': 0, 'F': -2, 'I': -1, 'H': -2,
'K': -1, 'M': -1, 'L': -1, 'N': -2, 'Q': -1,
'P': -1, 'S': 1, 'R': -1, 'T': 0, 'W': -3,
'V': 0, 'Y': -2, 'X': 0, 'Z': -1},
'C':{'*': -4, 'A': 0, 'C': 9, 'B': -3, 'E': -4,
'D': -3, 'G': -3, 'F': -2, 'I': -1, 'H': -3,
'K': -3, 'M': -1, 'L': -1, 'N': -3, 'Q': -3,
'P': -3, 'S': -1, 'R': -3, 'T': -1, 'W': -2,
'V': -1, 'Y': -2, 'X': -2, 'Z': -3},
'B':{'*': -4, 'A': -2, 'C': -3, 'B': 4, 'E': 1,
'D': 4, 'G': -1, 'F': -3, 'I': -3, 'H': 0,
'K': 0, 'M': -3, 'L': -4, 'N': 3, 'Q': 0,
'P': -2, 'S': 0, 'R': -1, 'T': -1, 'W': -4,
'V': -3, 'Y': -3, 'X': -1, 'Z': 1},
'E':{'*': -4, 'A': -1, 'C': -4, 'B': 1, 'E': 5,
'D': 2, 'G': -2, 'F': -3, 'I': -3, 'H': 0,
'K': 1, 'M': -2, 'L': -3, 'N': 0, 'Q': 2,
'P': -1, 'S': 0, 'R': 0, 'T': -1, 'W': -3,
'V': -2, 'Y': -2, 'X': -1, 'Z': 4},
'D':{'*': -4, 'A': -2, 'C': -3, 'B': 4, 'E': 2,
'D': 6, 'G': -1, 'F': -3, 'I': -3, 'H': -1,
'K': -1, 'M': -3, 'L': -4, 'N': 1, 'Q': 0,
'P': -1, 'S': 0, 'R': -2, 'T': -1, 'W': -4,
'V': -3, 'Y': -3, 'X': -1, 'Z': 1},
'G':{'*': -4, 'A': 0, 'C': -3, 'B': -1, 'E': -2,
'D': -1, 'G': 6, 'F': -3, 'I': -4, 'H': -2,
'K': -2, 'M': -3, 'L': -4, 'N': 0, 'Q': -2,
'P': -2, 'S': 0, 'R': -2, 'T': -2, 'W': -2,
'V': -3, 'Y': -3, 'X': -1, 'Z': -2},
'F':{'*': -4, 'A': -2, 'C': -2, 'B': -3, 'E': -3,
'D': -3, 'G': -3, 'F': 6, 'I': 0, 'H': -1,
'K': -3, 'M': 0, 'L': 0, 'N': -3, 'Q': -3,
'P': -4, 'S': -2, 'R': -3, 'T': -2, 'W': 1,
'V': -1, 'Y': 3, 'X': -1, 'Z': -3},
'I':{'*': -4, 'A': -1, 'C': -1, 'B': -3, 'E': -3,
'D': -3, 'G': -4, 'F': 0, 'I': 4, 'H': -3,
'K': -3, 'M': 1, 'L': 2, 'N': -3, 'Q': -3,
'P': -3, 'S': -2, 'R': -3, 'T': -1, 'W': -3,
'V': 3, 'Y': -1, 'X': -1, 'Z': -3},
'H':{'*': -4, 'A': -2, 'C': -3, 'B': 0, 'E': 0,
'D': -1, 'G': -2, 'F': -1, 'I': -3, 'H': 8,
'K': -1, 'M': -2, 'L': -3, 'N': 1, 'Q': 0,
'P': -2, 'S': -1, 'R': 0, 'T': -2, 'W': -2,
'V': -3, 'Y': 2, 'X': -1, 'Z': 0},
'K':{'*': -4, 'A': -1, 'C': -3, 'B': 0, 'E': 1,
'D': -1, 'G': -2, 'F': -3, 'I': -3, 'H': -1,
'K': 5, 'M': -1, 'L': -2, 'N': 0, 'Q': 1,
'P': -1, 'S': 0, 'R': 2, 'T': -1, 'W': -3,
'V': -2, 'Y': -2, 'X': -1, 'Z': 1},
'M':{'*': -4, 'A': -1, 'C': -1, 'B': -3, 'E': -2,
'D': -3, 'G': -3, 'F': 0, 'I': 1, 'H': -2,
'K': -1, 'M': 5, 'L': 2, 'N': -2, 'Q': 0,
'P': -2, 'S': -1, 'R': -1, 'T': -1, 'W': -1,
'V': 1, 'Y': -1, 'X': -1, 'Z': -1},
'L':{'*': -4, 'A': -1, 'C': -1, 'B': -4, 'E': -3,
'D': -4, 'G': -4, 'F': 0, 'I': 2, 'H': -3,
'K': -2, 'M': 2, 'L': 4, 'N': -3, 'Q': -2,
'P': -3, 'S': -2, 'R': -2, 'T': -1, 'W': -2,
'V': 1, 'Y': -1, 'X': -1, 'Z': -3},
'N':{'*': -4, 'A': -2, 'C': -3, 'B': 3, 'E': 0,
'D': 1, 'G': 0, 'F': -3, 'I': -3, 'H': 1,
'K': 0, 'M': -2, 'L': -3, 'N': 6, 'Q': 0,
'P': -2, 'S': 1, 'R': 0, 'T': 0, 'W': -4,
'V': -3, 'Y': -2, 'X': -1, 'Z': 0},
'Q':{'*': -4, 'A': -1, 'C': -3, 'B': 0, 'E': 2,
'D': 0, 'G': -2, 'F': -3, 'I': -3, 'H': 0,
'K': 1, 'M': 0, 'L': -2, 'N': 0, 'Q': 5,
'P': -1, 'S': 0, 'R': 1, 'T': -1, 'W': -2,
'V': -2, 'Y': -1, 'X': -1, 'Z': 3},
'P':{'*': -4, 'A': -1, 'C': -3, 'B': -2, 'E': -1,
'D': -1, 'G': -2, 'F': -4, 'I': -3, 'H': -2,
'K': -1, 'M': -2, 'L': -3, 'N': -2, 'Q': -1,
'P': 7, 'S': -1, 'R': -2, 'T': -1, 'W': -4,
'V': -2, 'Y': -3, 'X': -2, 'Z': -1},
'S':{'*': -4, 'A': 1, 'C': -1, 'B': 0, 'E': 0,
'D': 0, 'G': 0, 'F': -2, 'I': -2, 'H': -1,
'K': 0, 'M': -1, 'L': -2, 'N': 1, 'Q': 0,
'P': -1, 'S': 4, 'R': -1, 'T': 1, 'W': -3,
'V': -2, 'Y': -2, 'X': 0, 'Z': 0},
'R':{'*': -4, 'A': -1, 'C': -3, 'B': -1, 'E': 0,
'D': -2, 'G': -2, 'F': -3, 'I': -3, 'H': 0,
'K': 2, 'M': -1, 'L': -2, 'N': 0, 'Q': 1,
'P': -2, 'S': -1, 'R': 5, 'T': -1, 'W': -3,
'V': -3, 'Y': -2, 'X': -1, 'Z': 0},
'T':{'*': -4, 'A': 0, 'C': -1, 'B': -1, 'E': -1,
'D': -1, 'G': -2, 'F': -2, 'I': -1, 'H': -2,
'K': -1, 'M': -1, 'L': -1, 'N': 0, 'Q': -1,
'P': -1, 'S': 1, 'R': -1, 'T': 5, 'W': -2,
'V': 0, 'Y': -2, 'X': 0, 'Z': -1},
'W':{'*': -4, 'A': -3, 'C': -2, 'B': -4, 'E': -3,
'D': -4, 'G': -2, 'F': 1, 'I': -3, 'H': -2,
'K': -3, 'M': -1, 'L': -2, 'N': -4, 'Q': -2,
'P': -4, 'S': -3, 'R': -3, 'T': -2, 'W': 11,
'V': -3, 'Y': 2, 'X': -2, 'Z': -3},
'V':{'*': -4, 'A': 0, 'C': -1, 'B': -3, 'E': -2,
'D': -3, 'G': -3, 'F': -1, 'I': 3, 'H': -3,
'K': -2, 'M': 1, 'L': 1, 'N': -3, 'Q': -2,
'P': -2, 'S': -2, 'R': -3, 'T': 0, 'W': -3,
'V': 4, 'Y': -1, 'X': -1, 'Z': -2},
'Y':{'*': -4, 'A': -2, 'C': -2, 'B': -3, 'E': -2,
'D': -3, 'G': -3, 'F': 3, 'I': -1, 'H': 2,
'K': -2, 'M': -1, 'L': -1, 'N': -2, 'Q': -1,
'P': -3, 'S': -2, 'R': -2, 'T': -2, 'W': 2,
'V': -1, 'Y': 7, 'X': -1, 'Z': -2},
'X':{'*': -4, 'A': 0, 'C': -2, 'B': -1, 'E': -1,
'D': -1, 'G': -1, 'F': -1, 'I': -1, 'H': -1,
'K': -1, 'M': -1, 'L': -1, 'N': -1, 'Q': -1,
'P': -2, 'S': 0, 'R': -1, 'T': 0, 'W': -2,
'V': -1, 'Y': -1, 'X': -1, 'Z': -1},
'Z':{'*': -4, 'A': -1, 'C': -3, 'B': 1, 'E': 4,
'D': 1, 'G': -2, 'F': -3, 'I': -3, 'H': 0,
'K': 1, 'M': -1, 'L': -3, 'N': 0, 'Q': 3,
'P': -1, 'S': 0, 'R': 0, 'T': -1, 'W': -3,
'V': -2, 'Y': -2, 'X': -1, 'Z': 4}}