# Significant contribution from Ben Fry and Nick Polizzi three_to_one = {'ALA': 'A', 'ARG': 'R', 'ASN': 'N', 'ASP': 'D', 'CYS': 'C', 'GLN': 'Q', 'GLU': 'E', 'GLY': 'G', 'HIS': 'H', 'ILE': 'I', 'LEU': 'L', 'LYS': 'K', 'MET': 'M', 'MSE': 'M', # MSE this is almost the same AA as MET. The sulfur is just replaced by Selen 'PHE': 'F', 'PRO': 'P', 'PYL': 'O', 'SER': 'S', 'SEC': 'U', 'THR': 'T', 'TRP': 'W', 'TYR': 'Y', 'VAL': 'V', 'ASX': 'B', 'GLX': 'Z', 'XAA': 'X', 'XLE': 'J'} aa_name2aa_idx = {'ALA': 0, 'ARG': 1, 'ASN': 2, 'ASP': 3, 'CYS': 4, 'GLU': 5, 'GLN': 6, 'GLY': 7, 'HIS': 8, 'ILE': 9, 'LEU': 10, 'LYS': 11, 'MET': 12, 'PHE': 13, 'PRO': 14, 'SER': 15, 'THR': 16, 'TRP': 17, 'TYR': 18, 'VAL': 19, 'MSE': 12} aa_short2long = {'C': 'CYS', 'D': 'ASP', 'S': 'SER', 'Q': 'GLN', 'K': 'LYS', 'I': 'ILE', 'P': 'PRO', 'T': 'THR', 'F': 'PHE', 'N': 'ASN', 'G': 'GLY', 'H': 'HIS', 'L': 'LEU', 'R': 'ARG', 'W': 'TRP', 'A': 'ALA', 'V': 'VAL', 'E': 'GLU', 'Y': 'TYR', 'M': 'MET'} aa_short2aa_idx = {aa_short: aa_name2aa_idx[aa_long] for aa_short, aa_long in aa_short2long.items()} aa_idx2aa_short = {aa_idx: aa_short for aa_short, aa_idx in aa_short2aa_idx.items()} aa_long2short = {aa_long: aa_short for aa_short, aa_long in aa_short2long.items()} aa_long2short['MSE'] = 'M' chi = { 'C' : { 1: ('N' , 'CA' , 'CB' , 'SG' ) }, 'D' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'OD1'), }, 'E' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD' ), 3: ('CB' , 'CG' , 'CD' , 'OE1'), }, 'F' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD1'), }, 'H' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'ND1'), }, 'I' : { 1: ('N' , 'CA' , 'CB' , 'CG1'), 2: ('CA' , 'CB' , 'CG1', 'CD1'), }, 'K' : { 1: ('N' , 'CA' , 'CB' ,'CG' ), 2: ('CA' , 'CB' , 'CG' ,'CD' ), 3: ('CB' , 'CG' , 'CD' ,'CE' ), 4: ('CG' , 'CD' , 'CE' ,'NZ' ), }, 'L' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD1'), }, 'M' : { 1: ('N' , 'CA' , 'CB' ,'CG' ), 2: ('CA' , 'CB' , 'CG' ,'SD' ), 3: ('CB' , 'CG' , 'SD' ,'CE' ), }, 'N' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'OD1'), }, 'P' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD' ), }, 'Q' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD' ), 3: ('CB' , 'CG' , 'CD' , 'OE1'), }, 'R' : { 1: ('N' , 'CA' , 'CB' ,'CG' ), 2: ('CA' , 'CB' , 'CG' ,'CD' ), 3: ('CB' , 'CG' , 'CD' ,'NE' ), 4: ('CG' , 'CD' , 'NE' ,'CZ' ), }, 'S' : { 1: ('N' , 'CA' , 'CB' , 'OG' ), }, 'T' : { 1: ('N' , 'CA' , 'CB' , 'OG1'), }, 'V' : { 1: ('N' , 'CA' , 'CB' , 'CG1'), }, 'W' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD1'), }, 'Y' : { 1: ('N' , 'CA' , 'CB' , 'CG' ), 2: ('CA' , 'CB' , 'CG' , 'CD1'), }, } atom_order = {'G': ['N', 'CA', 'C', 'O'], 'A': ['N', 'CA', 'C', 'O', 'CB'], 'S': ['N', 'CA', 'C', 'O', 'CB', 'OG'], 'C': ['N', 'CA', 'C', 'O', 'CB', 'SG'], 'T': ['N', 'CA', 'C', 'O', 'CB', 'OG1', 'CG2'], 'P': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD'], 'V': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2'], 'M': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'SD', 'CE'], 'N': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'OD1', 'ND2'], 'I': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2', 'CD1'], 'L': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2'], 'D': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'OD1', 'OD2'], 'E': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'OE1', 'OE2'], 'K': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'CE', 'NZ'], 'Q': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'OE1', 'NE2'], 'H': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'ND1', 'CD2', 'CE1', 'NE2'], 'F': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ'], 'R': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'NE', 'CZ', 'NH1', 'NH2'], 'Y': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'OH'], 'W': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'CE2', 'CE3', 'NE1', 'CZ2', 'CZ3', 'CH2'], 'X': ['N', 'CA', 'C', 'O']} # unknown amino acid amino_acid_smiles = { 'PHE': '[NH3+]CC(=O)N[C@@H](Cc1ccccc1)C(=O)NCC(=O)O', 'MET': 'CSCC[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'TYR': '[NH3+]CC(=O)N[C@@H](Cc1ccc(O)cc1)C(=O)NCC(=O)O', 'ILE': 'CC[C@H](C)[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'TRP': '[NH3+]CC(=O)N[C@@H](Cc1c[nH]c2ccccc12)C(=O)NCC(=O)O', 'THR': 'C[C@@H](O)[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'CYS': '[NH3+]CC(=O)N[C@@H](CS)C(=O)NCC(=O)O', 'ALA': 'C[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'LYS': '[NH3+]CCCC[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'PRO': '[NH3+]CC(=O)N1CCC[C@H]1C(=O)NCC(=O)O', 'LEU': 'CC(C)C[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'GLY': '[NH3+]CC(=O)NCC(=O)NCC(=O)O', 'ASP': '[NH3+]CC(=O)N[C@@H](CC(=O)O)C(=O)NCC(=O)O', 'HIS': '[NH3+]CC(=O)N[C@@H](Cc1c[nH]c[nH+]1)C(=O)NCC(=O)O', 'VAL': 'CC(C)[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'SER': '[NH3+]CC(=O)N[C@@H](CO)C(=O)NCC(=O)O', 'ARG': 'NC(=[NH2+])NCCC[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'GLU': '[NH3+]CC(=O)N[C@@H](CCC(=O)O)C(=O)NCC(=O)O', 'GLN': 'NC(=O)CC[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', 'ASN': 'NC(=O)C[C@H](NC(=O)C[NH3+])C(=O)NCC(=O)O', } cg_rdkit_indices = { 'PHE': {4: 'N', 5: 'CA', 13: 'C', 14: 'O', 6: 'CB', 7: 'CG', 8: 'CD1', 12: 'CD2', 9: 'CE1', 11: 'CE2', 10: 'CZ'}, 'MET': {5: 'N', 4: 'CA', 10: 'C', 11: 'O', 3: 'CB', 2: 'CG', 1: 'SD', 0: 'CE'}, 'TYR': {4: 'N', 5: 'CA', 14: 'C', 15: 'O', 6: 'CB', 7: 'CG', 8: 'CD1', 13: 'CD2', 9: 'CE1', 12: 'CE2', 10: 'CZ', 11: 'OH'}, 'ILE': {5: 'N', 4: 'CA', 10: 'C', 11: 'O', 2: 'CB', 1: 'CG1', 3: 'CG2', 0: 'CD1'}, 'TRP': {4: 'N', 5: 'CA', 16: 'C', 17: 'O', 6: 'CB', 7: 'CG', 8: 'CD1', 15: 'CD2', 9: 'NE1', 10: 'CE2', 14: 'CE3', 11: 'CZ2', 13: 'CZ3', 12: 'CH2'}, 'THR': {4: 'N', 3: 'CA', 9: 'C', 10: 'O', 1: 'CB', 2: 'OG1', 0: 'CG2'}, 'CYS': {4: 'N', 5: 'CA', 8: 'C', 9: 'O', 6: 'CB', 7: 'SG'}, 'ALA': {2: 'N', 1: 'CA', 7: 'C', 8: 'O', 0: 'CB'}, 'LYS': {6: 'N', 5: 'CA', 11: 'C', 12: 'O', 4: 'CB', 3: 'CG', 2: 'CD', 1: 'CE', 0: 'NZ'}, 'PRO': {4: 'N', 8: 'CA', 9: 'C', 10: 'O', 7: 'CB', 6: 'CG', 5: 'CD'}, 'LEU': {5: 'N', 4: 'CA', 10: 'C', 11: 'O', 3: 'CB', 1: 'CG', 0: 'CD1', 2: 'CD2'}, 'GLY': {4: 'N', 5: 'CA', 6: 'C', 7: 'O'}, 'ASP': {4: 'N', 5: 'CA', 10: 'C', 11: 'O', 6: 'CB', 7: 'CG', 8: 'OD1', 9: 'OD2'}, 'HIS': {4: 'N', 5: 'CA', 12: 'C', 13: 'O', 6: 'CB', 7: 'CG', 11: 'ND1', 8: 'CD2', 10: 'CE1', 9: 'NE2'}, 'VAL': {4: 'N', 3: 'CA', 9: 'C', 10: 'O', 1: 'CB', 0: 'CG1', 2: 'CG2'}, 'SER': {4: 'N', 5: 'CA', 8: 'C', 9: 'O', 6: 'CB', 7: 'OG'}, 'ARG': {8: 'N', 7: 'CA', 13: 'C', 14: 'O', 6: 'CB', 5: 'CG', 4: 'CD', 3: 'NE', 1: 'CZ', 0: 'NH1', 2: 'NH2'}, 'GLU': {4: 'N', 5: 'CA', 11: 'C', 12: 'O', 6: 'CB', 7: 'CG', 8: 'CD', 9: 'OE1', 10: 'OE2'}, 'GLN': {6: 'N', 5: 'CA', 11: 'C', 12: 'O', 4: 'CB', 3: 'CG', 1: 'CD', 2: 'OE1', 0: 'NE2'}, 'ASN': {5: 'N', 4: 'CA', 10: 'C', 11: 'O', 3: 'CB', 1: 'CG', 2: 'OD1', 0: 'ND2'} } aa_to_cg_indices = {aa_long2short[x]: [atom_order[aa_long2short[x]].index(aname) for aname in index_dict.values()] for x, index_dict in cg_rdkit_indices.items()}