BLOSUM62 (or 45) Scoring in JavaScript

BLOSUM62 (or 45) Scoring in JavaScript

本文关键字:Scoring in JavaScript or BLOSUM62      更新时间:2023-09-26

我在与几个基于web的API接口的同时处理多个序列比对,所以我的大部分轻量级分析都是用JavaScript进行的。我目前正试图弄清楚如何用JavaScript计算BLOSUM62分数。有很多Python函数,比如Github中的以下函数:

#!/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()

使用Blosum62矩阵:

   A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X  *
A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1  0 -4
R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1  0 -1 -4
N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  3  0 -1 -4
D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4  1 -1 -4
C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4
Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0  3 -1 -4
E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4
G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -2 -1 -4
H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0  0 -1 -4
I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3 -3 -1 -4
L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4 -3 -1 -4
K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0  1 -1 -4
M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3 -1 -1 -4
F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3 -3 -1 -4
P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -1 -2 -4
S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0  0  0 -4
T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1  0 -4
W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -3 -2 -4
Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -2 -1 -4
V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3 -2 -1 -4
B -2 -1  3  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4  1 -1 -4
Z -1  0  0  1 -3  3  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4
X  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2  0  0 -2 -1 -1 -1 -1 -1 -4
* -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4  1

然而,我绝对不确定(作为一个Python新手)如何将其翻译成JavaScript。有JavaScript函数吗?或者有人建议如何处理这个问题吗?

这不是一个完整的答案,但我将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}}