BoltzGen / model /boltzgen /data /const.py
wuxing0105's picture
Upload folder using huggingface_hub
6aab6b3 verified
Raw
History Blame Contribute Delete
73.6 kB
####################################################################################################
# CHAINS
####################################################################################################
from collections import defaultdict
chain_types = [
"PROTEIN",
"DNA",
"RNA",
"NONPOLYMER",
]
chain_type_ids = {chain: i for i, chain in enumerate(chain_types)}
out_types = [
"dna_protein",
"rna_protein",
"ligand_protein",
"dna_ligand",
"rna_ligand",
"intra_ligand",
"intra_dna",
"intra_rna",
"intra_protein",
"protein_protein",
"design_protein",
"design_ligand",
"design_dna",
"design_rna",
"intra_design",
"design_design",
"modified",
]
out_types_weights_af3 = {
"dna_protein": 10.0,
"rna_protein": 10.0,
"ligand_protein": 10.0,
"dna_ligand": 5.0,
"rna_ligand": 5.0,
"intra_ligand": 20.0,
"intra_dna": 4.0,
"intra_rna": 16.0,
"intra_protein": 20.0,
"protein_protein": 20.0,
"modified": 0.0,
}
out_types_weights = {
"dna_protein": 5.0,
"rna_protein": 5.0,
"ligand_protein": 20.0,
"dna_ligand": 2.0,
"rna_ligand": 2.0,
"intra_ligand": 20.0,
"intra_dna": 2.0,
"intra_rna": 8.0,
"intra_protein": 20.0,
"protein_protein": 20.0,
"design_protein": 20.0,
"design_ligand": 20.0,
"design_dna": 5.0,
"design_rna": 5.0,
"intra_design": 20.0,
"design_design": 20.0,
"modified": 0.0,
}
out_single_types = ["protein", "ligand", "dna", "rna"]
clash_types = [
"dna_protein",
"rna_protein",
"ligand_protein",
"protein_protein",
"dna_ligand",
"rna_ligand",
"ligand_ligand",
"rna_dna",
"dna_dna",
"rna_rna",
]
chain_types_to_clash_type = {
frozenset(("PROTEIN", "DNA")): "dna_protein",
frozenset(("PROTEIN", "RNA")): "rna_protein",
frozenset(("PROTEIN", "NONPOLYMER")): "ligand_protein",
frozenset(("PROTEIN",)): "protein_protein",
frozenset(("NONPOLYMER", "DNA")): "dna_ligand",
frozenset(("NONPOLYMER", "RNA")): "rna_ligand",
frozenset(("NONPOLYMER",)): "ligand_ligand",
frozenset(("DNA", "RNA")): "rna_dna",
frozenset(("DNA",)): "dna_dna",
frozenset(("RNA",)): "rna_rna",
}
chain_type_to_out_single_type = {
"PROTEIN": "protein",
"DNA": "dna",
"RNA": "rna",
"NONPOLYMER": "ligand",
}
####################################################################################################
# RESIDUES & TOKENS
####################################################################################################
canonical_tokens = [
"ALA",
"ARG",
"ASN",
"ASP",
"CYS",
"GLN",
"GLU",
"GLY",
"HIS",
"ILE",
"LEU",
"LYS",
"MET",
"PHE",
"PRO",
"SER",
"THR",
"TRP",
"TYR",
"VAL",
]
non_canonincal_tokens = [
"<pad>",
"-",
"UNK", # unknown protein token
"A",
"G",
"C",
"U",
"N", # unknown rna token
"DA",
"DG",
"DC",
"DT",
"DN", # unknown dna token
]
canonicals_offset = 2
tokens = (
non_canonincal_tokens[:canonicals_offset]
+ canonical_tokens
+ non_canonincal_tokens[canonicals_offset:]
)
token_ids = {token: i for i, token in enumerate(tokens)}
num_tokens = len(tokens)
unk_token = {"PROTEIN": "UNK", "DNA": "DN", "RNA": "N"}
unk_token_ids = {m: token_ids[t] for m, t in unk_token.items()}
mask_token = {"PROTEIN": "UNK", "DNA": "UNK", "RNA": "UNK", "NONPOLYMER": "UNK"}
mask_token_ids = {m: token_ids[t] for m, t in mask_token.items()}
prot_letter_to_token = {
"A": "ALA",
"R": "ARG",
"N": "ASN",
"D": "ASP",
"C": "CYS",
"E": "GLU",
"Q": "GLN",
"G": "GLY",
"H": "HIS",
"I": "ILE",
"L": "LEU",
"K": "LYS",
"M": "MET",
"F": "PHE",
"P": "PRO",
"S": "SER",
"T": "THR",
"W": "TRP",
"Y": "TYR",
"V": "VAL",
"X": "UNK",
"J": "UNK",
"B": "UNK",
"Z": "UNK",
"O": "UNK",
"U": "UNK",
"-": "-",
}
prot_token_to_letter = {v: k for k, v in prot_letter_to_token.items()}
prot_token_to_letter["UNK"] = "X"
rna_letter_to_token = {
"A": "A",
"G": "G",
"C": "C",
"U": "U",
"N": "N",
}
rna_token_to_letter = {v: k for k, v in rna_letter_to_token.items()}
dna_letter_to_token = {
"A": "DA",
"G": "DG",
"C": "DC",
"T": "DT",
"N": "DN",
}
dna_token_to_letter = {v: k for k, v in dna_letter_to_token.items()}
binding_types = [
"UNSPECIFIED",
"BINDING",
"NOT_BINDING",
]
binding_type_ids = {binding_type: i for i, binding_type in enumerate(binding_types)}
ss_types = [
"UNSPECIFIED",
"LOOP",
"HELIX",
"SHEET",
]
ss_type_ids = {ss_type: i for i, ss_type in enumerate(ss_types)}
####################################################################################################
# ATOMS
####################################################################################################
element_to_atomic_num = {
"H": 1,
"HE": 2,
"LI": 3,
"BE": 4,
"B": 5,
"C": 6,
"N": 7,
"O": 8,
"F": 9,
"NE": 10,
"NA": 11,
"MG": 12,
"AL": 13,
"SI": 14,
"P": 15,
"S": 16,
"CL": 17,
"AR": 18,
"K": 19,
"CA": 20,
"SC": 21,
"TI": 22,
"V": 23,
"CR": 24,
"MN": 25,
"FE": 26,
"CO": 27,
"NI": 28,
"CU": 29,
"ZN": 30,
"GA": 31,
"GE": 32,
"AS": 33,
"SE": 34,
"BR": 35,
"KR": 36,
"RB": 37,
"SR": 38,
"Y": 39,
"ZR": 40,
"NB": 41,
"MO": 42,
"TC": 43,
"RU": 44,
"RH": 45,
"PD": 46,
"AG": 47,
"CD": 48,
"IN": 49,
"SN": 50,
"SB": 51,
"TE": 52,
"I": 53,
"XE": 54,
"CS": 55,
"BA": 56,
"LA": 57,
"CE": 58,
"PR": 59,
"ND": 60,
"PM": 61,
"SM": 62,
"EU": 63,
"GD": 64,
"TB": 65,
"DY": 66,
"HO": 67,
"ER": 68,
"TM": 69,
"YB": 70,
"LU": 71,
"HF": 72,
"TA": 73,
"W": 74,
"RE": 75,
"OS": 76,
"IR": 77,
"PT": 78,
"AU": 79,
"HG": 80,
"TL": 81,
"PB": 82,
"BI": 83,
"PO": 84,
"AT": 85,
"RN": 86,
"FR": 87,
"RA": 88,
"AC": 89,
"TH": 90,
"PA": 91,
"U": 92,
"NP": 93,
"PU": 94,
"AM": 95,
"CM": 96,
"BK": 97,
"CF": 98,
"ES": 99,
"FM": 100,
"MD": 101,
"NO": 102,
"LR": 103,
"RF": 104,
"DB": 105,
"SG": 106,
"BH": 107,
"HS": 108,
"MT": 109,
"DS": 110,
"RG": 111,
"CN": 112,
"NH": 113,
"FL": 114,
"MC": 115,
"LV": 116,
"TS": 117,
"OG": 118,
}
atomic_num_to_element = {v: k for k, v in element_to_atomic_num.items()}
num_elements = 128
mask_element = "FL"
mask_element_id = element_to_atomic_num[mask_element]
fake_element = "LV"
fake_element_id = element_to_atomic_num[fake_element]
chirality_types = [
"CHI_UNSPECIFIED",
"CHI_TETRAHEDRAL_CW",
"CHI_TETRAHEDRAL_CCW",
"CHI_SQUAREPLANAR",
"CHI_OCTAHEDRAL",
"CHI_TRIGONALBIPYRAMIDAL",
"CHI_OTHER",
]
chirality_type_ids = {chirality: i for i, chirality in enumerate(chirality_types)}
unk_chirality_type = "CHI_OTHER"
hybridization_map = [
"S",
"SP",
"SP2",
"SP2D",
"SP3",
"SP3D",
"SP3D2",
"OTHER",
"UNSPECIFIED",
]
hybridization_type_ids = {hybrid: i for i, hybrid in enumerate(hybridization_map)}
unk_hybridization_type = "UNSPECIFIED"
atom_types = [ # Note: CB and O order flipped to be consistent with atom14 order
"N",
"CA",
"C",
"O",
"CB",
"CG",
"CG1",
"CG2",
"OG",
"OG1",
"SG",
"CD",
"CD1",
"CD2",
"ND1",
"ND2",
"OD1",
"OD2",
"SD",
"CE",
"CE1",
"CE2",
"CE3",
"NE",
"NE1",
"NE2",
"OE1",
"OE2",
"CH2",
"NH1",
"NH2",
"OH",
"CZ",
"CZ2",
"CZ3",
"NZ",
"OXT",
]
atom_order = {atom_type: i for i, atom_type in enumerate(atom_types)}
# fmt: off
ref_atoms = {
"PAD": [],
"UNK": ["N", "CA", "C", "O", "CB"],
"-": [],
"GLY": ["N", "CA", "C", "O"], # 0
"ALA": ["N", "CA", "C", "O", "CB"], # 1
"CYS": ["N", "CA", "C", "O", "CB", "SG"], # 2
"SER": ["N", "CA", "C", "O", "CB", "OG"], # 2
"PRO": ["N", "CA", "C", "O", "CB", "CG", "CD"],# 3
"THR": ["N", "CA", "C", "O", "CB", "OG1", "CG2"],# 3
"VAL": ["N", "CA", "C", "O", "CB", "CG1", "CG2"],# 3
"ASN": ["N", "CA", "C", "O", "CB", "CG", "OD1", "ND2"],# 4
"ASP": ["N", "CA", "C", "O", "CB", "CG", "OD1", "OD2"],# 4
"ILE": ["N", "CA", "C", "O", "CB", "CG1", "CG2", "CD1"],# 4
"LEU": ["N", "CA", "C", "O", "CB", "CG", "CD1", "CD2"],# 4
"MET": ["N", "CA", "C", "O", "CB", "CG", "SD", "CE"],# 4
"GLN": ["N", "CA", "C", "O", "CB", "CG", "CD", "OE1", "NE2"],# 5
"GLU": ["N", "CA", "C", "O", "CB", "CG", "CD", "OE1", "OE2"],# 5
"LYS": ["N", "CA", "C", "O", "CB", "CG", "CD", "CE", "NZ"],# 5
"HIS": ["N", "CA", "C", "O", "CB", "CG", "ND1", "CD2", "CE1", "NE2"],# 6
"PHE": ["N", "CA", "C", "O", "CB", "CG", "CD1", "CD2", "CE1", "CE2", "CZ"],# 7
"ARG": ["N", "CA", "C", "O", "CB", "CG", "CD", "NE", "CZ", "NH1", "NH2"],# 7
"TYR": ["N", "CA", "C", "O", "CB", "CG", "CD1", "CD2", "CE1", "CE2", "CZ", "OH"], # 8
"TRP": ["N", "CA", "C", "O", "CB", "CG", "CD1", "CD2", "NE1", "CE2", "CE3", "CZ2", "CZ3", "CH2"], # 10 noqa: E501
"A": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'", "N9", "C8", "N7", "C5", "C6", "N6", "N1", "C2", "N3", "C4"], # noqa: E501
"G": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'", "N9", "C8", "N7", "C5", "C6", "O6", "N1", "C2", "N2", "N3", "C4"], # noqa: E501
"C": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'", "N1", "C2", "O2", "N3", "C4", "N4", "C5", "C6"], # noqa: E501
"U": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'", "N1", "C2", "O2", "N3", "C4", "O4", "C5", "C6"], # noqa: E501
"N": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'"], # noqa: E501
"DA": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "C1'", "N9", "C8", "N7", "C5", "C6", "N6", "N1", "C2", "N3", "C4"], # noqa: E501
"DG": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "C1'", "N9", "C8", "N7", "C5", "C6", "O6", "N1", "C2", "N2", "N3", "C4"], # noqa: E501
"DC": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "C1'", "N1", "C2", "O2", "N3", "C4", "N4", "C5", "C6"], # noqa: E501
"DT": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "C1'", "N1", "C2", "O2", "N3", "C4", "O4", "C5", "C7", "C6"], # noqa: E501
"DN": ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "C1'"]
}
protein_backbone_atom_names = ["N", "CA", "C", "O"]
nucleic_backbone_atom_names = ["P", "OP1", "OP2", "O5'", "C5'", "C4'", "O4'", "C3'", "O3'", "C2'", "O2'", "C1'"]
protein_backbone_atom_index = {name: i for i, name in enumerate(protein_backbone_atom_names)}
nucleic_backbone_atom_index = {name: i for i, name in enumerate(nucleic_backbone_atom_names)}
# number of side chain atoms per residue
# 0: GLY
# 1: ALA
# 2: CYS SER
# 3: PRO THR VAL
# 4: ASN ASP ILE LEU MET
# 5: GLN GLU LYS
# 6: HIS
# 7: ARG PHE
# 8: TYR
# 9:
# 10: TRP
# Amino acid code based on proximity to backbone atoms
fake_atom_placements = {
"UNK": [".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N", "N", "N"], # 0
"GLY": [".", ".", ".", ".", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"], # 0
"ALA": [".", ".", ".", ".", ".", "O", "O", "O", "O", "O", "O", "O", "O", "O"], # 1
"CYS": [".", ".", ".", ".", ".", ".", "O", "O", "O", "O", "O", "O", "O", "O"], # 2
"SER": [".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N", "N"], # 2
"PRO": [".", ".", ".", ".", ".", ".", ".", "O", "O", "O", "O", "O", "O", "O"], # 3
"THR": [".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "O", "O", "O", "O"], # 3
"VAL": [".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N"], # 3
"ILE": [".", ".", ".", ".", ".", ".", ".", ".", "O", "O", "O", "O", "O", "O"], # 4
"ASN": [".", ".", ".", ".", ".", ".", ".", ".", "N", "O", "O", "O", "O", "O"], # 4
"ASP": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "O", "O", "O", "O"], # 4
"LEU": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "O", "O"], # 4
"MET": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N"], # 4
"GLN": [".", ".", ".", ".", ".", ".", ".", ".", ".", "O", "O", "O", "O", "O"], # 5
"GLU": [".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "O", "O", "O"], # 5
"LYS": [".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N"], # 5
"HIS": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "O", "O", "O", "O"], # 6
"PHE": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "O", "O", "O"], # 7
"ARG": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N"], # 7
"TYR": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "O", "O"], # 8
"TRP": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."], # 10
}
# {
# 'UNK': [10, 0, 0, 0],
# 'GLY': [0, 0, 0, 10],
# 'ALA': [0, 0, 0, 9],
# 'CYS': [0, 0, 0, 8],
# ...
# }
token_to_placement_count = {ttype:[placement.count(atom_name) for atom_name in ref_atoms["GLY"]] for ttype, placement in fake_atom_placements.items()}
placement_count_to_token = {tuple(v):k for k,v in token_to_placement_count.items()}
fake_atom_placements_N_C = {
"UNK": [".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N", "N", "N"], # 0
"GLY": [".", ".", ".", ".", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C"], # 0
"ALA": [".", ".", ".", ".", ".", "C", "C", "C", "C", "C", "C", "C", "C", "C"], # 1
"CYS": [".", ".", ".", ".", ".", ".", "C", "C", "C", "C", "C", "C", "C", "C"], # 2
"SER": [".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N", "N"], # 2
"PRO": [".", ".", ".", ".", ".", ".", ".", "C", "C", "C", "C", "C", "C", "C"], # 3
"THR": [".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "C", "C", "C", "C"], # 3
"VAL": [".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N", "N"], # 3
"ILE": [".", ".", ".", ".", ".", ".", ".", ".", "C", "C", "C", "C", "C", "C"], # 4
"ASN": [".", ".", ".", ".", ".", ".", ".", ".", "N", "C", "C", "C", "C", "C"], # 4
"ASP": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "C", "C", "C", "C"], # 4
"LEU": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "C", "C"], # 4
"MET": [".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N", "N"], # 4
"GLN": [".", ".", ".", ".", ".", ".", ".", ".", ".", "C", "C", "C", "C", "C"], # 5
"GLU": [".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "C", "C", "C"], # 5
"LYS": [".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N", "N", "N"], # 5
"HIS": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "C", "C", "C", "C"], # 6
"PHE": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "C", "C", "C"], # 7
"ARG": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "N", "N", "N"], # 7
"TYR": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "C", "C"], # 8
"TRP": [".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."], # 10
}
ref_symmetries = {
"PAD": [],
"ALA": [],
"ARG": [],
"ASN": [],
"ASP": [[(6, 7), (7, 6)]],
"CYS": [],
"GLN": [],
"GLU": [[(7, 8), (8, 7)]],
"GLY": [],
"HIS": [],
"ILE": [],
"LEU": [],
"LYS": [],
"MET": [],
"PHE": [[(6, 7), (7, 6), (8, 9), (9, 8)]],
"PRO": [],
"SER": [],
"THR": [],
"TRP": [],
"TYR": [[(6, 7), (7, 6), (8, 9), (9, 8)]],
"VAL": [],
"A": [[(1, 2), (2, 1)]],
"G": [[(1, 2), (2, 1)]],
"C": [[(1, 2), (2, 1)]],
"U": [[(1, 2), (2, 1)]],
#"N": [[(1, 2), (2, 1)]],
"DA": [[(1, 2), (2, 1)]],
"DG": [[(1, 2), (2, 1)]],
"DC": [[(1, 2), (2, 1)]],
"DT": [[(1, 2), (2, 1)]],
#"DN": [[(1, 2), (2, 1)]]
}
res_to_center_atom = {
"UNK": "CA",
"ALA": "CA",
"ARG": "CA",
"ASN": "CA",
"ASP": "CA",
"CYS": "CA",
"GLN": "CA",
"GLU": "CA",
"GLY": "CA",
"HIS": "CA",
"ILE": "CA",
"LEU": "CA",
"LYS": "CA",
"MET": "CA",
"PHE": "CA",
"PRO": "CA",
"SER": "CA",
"THR": "CA",
"TRP": "CA",
"TYR": "CA",
"VAL": "CA",
"A": "C1'",
"G": "C1'",
"C": "C1'",
"U": "C1'",
"N": "C1'",
"DA": "C1'",
"DG": "C1'",
"DC": "C1'",
"DT": "C1'",
"DN": "C1'"
}
res_to_disto_atom = {
"UNK": "CB",
"ALA": "CB",
"ARG": "CB",
"ASN": "CB",
"ASP": "CB",
"CYS": "CB",
"GLN": "CB",
"GLU": "CB",
"GLY": "CA",
"HIS": "CB",
"ILE": "CB",
"LEU": "CB",
"LYS": "CB",
"MET": "CB",
"PHE": "CB",
"PRO": "CB",
"SER": "CB",
"THR": "CB",
"TRP": "CB",
"TYR": "CB",
"VAL": "CB",
"A": "C4",
"G": "C4",
"C": "C2",
"U": "C2",
"N": "C1'",
"DA": "C4",
"DG": "C4",
"DC": "C2",
"DT": "C2",
"DN": "C1'"
}
res_to_center_atom_id = {
res: ref_atoms[res].index(atom)
for res, atom in res_to_center_atom.items()
}
res_to_disto_atom_id = {
res: ref_atoms[res].index(atom)
for res, atom in res_to_disto_atom.items()
}
# fmt: on
####################################################################################################
res_type_weight = [
1.0,
1.0,
1.0,
1.0,
1.0,
2.0,
1.0,
2.0,
1.0,
1.0,
2.0,
4.0,
2.0,
2.0,
2.0,
2.0,
4.0,
4.0,
4.0,
4.0,
4.0,
4.0,
10.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
]
####################################################################################################
# BONDS
####################################################################################################
atom_interface_cutoff = 5.0
interface_cutoff = 15.0
bond_types = [
"OTHER",
"SINGLE",
"DOUBLE",
"TRIPLE",
"AROMATIC",
"COVALENT",
]
bond_type_ids = {bond: i for i, bond in enumerate(bond_types)}
unk_bond_type = "OTHER"
####################################################################################################
# Contacts
####################################################################################################
pocket_contact_info = {
"UNSPECIFIED": 0,
"UNSELECTED": 1,
"POCKET": 2,
"BINDER": 3,
}
contact_conditioning_info = {
"UNSPECIFIED": 0,
"UNSELECTED": 1,
"POCKET>BINDER": 2,
"BINDER>POCKET": 3,
"CONTACT": 4,
}
####################################################################################################
# Affinity
####################################################################################################
activity_types = {
"Ki": 0,
"Kd": 0,
"kd": 0,
"ki_microm": 0,
"IC50": 1,
"AC50": 1,
"EC50": 1,
"ac50_um": 1,
"avgec50": 1,
"ec50": 1,
"ec50_microm": 1,
"ec50_um": 1,
"ic50": 1,
"ic50 (um)": 1,
"ic50(um)": 1,
"ic50_microm": 1,
"mean ic50": 1,
"DEL": 1,
}
####################################################################################################
# CHUNKING
####################################################################################################
chunk_size_threshold = 512
####################################################################################################
# Method conditioning - MD
####################################################################################################
# Methods
method_types_ids = {
"MD": 0,
"X-RAY DIFFRACTION": 1,
"ELECTRON MICROSCOPY": 2,
"SOLUTION NMR": 3,
"SOLID-STATE NMR": 4,
"NEUTRON DIFFRACTION": 4,
"ELECTRON CRYSTALLOGRAPHY": 4,
"FIBER DIFFRACTION": 4,
"POWDER DIFFRACTION": 4,
"INFRARED SPECTROSCOPY": 4,
"FLUORESCENCE TRANSFER": 4,
"EPR": 4,
"THEORETICAL MODEL": 4,
"SOLUTION SCATTERING": 4,
"OTHER": 4,
"AFDB": 5,
"BOLTZ-1": 6,
"FUTURE1": 7, # Placeholder for future supervision sources
"FUTURE2": 8,
"FUTURE3": 9,
"FUTURE4": 10,
"FUTURE5": 11,
}
method_types_ids = {k.lower(): v for k, v in method_types_ids.items()}
num_method_types = len(set(method_types_ids.values()))
# Temperature
temperature_bins = [(265, 280), (280, 295), (295, 310)]
temperature_bins_ids = {temp: i for i, temp in enumerate(temperature_bins)}
temperature_bins_ids["other"] = len(temperature_bins)
num_temp_bins = len(temperature_bins_ids)
# pH
ph_bins = [(0, 6), (6, 8), (8, 14)]
ph_bins_ids = {ph: i for i, ph in enumerate(ph_bins)}
ph_bins_ids["other"] = len(ph_bins)
num_ph_bins = len(ph_bins_ids)
####################################################################################################
# VDW_RADII
####################################################################################################
vdw_radii = [
1.2,
1.4,
2.2,
1.9,
1.8,
1.7,
1.6,
1.55,
1.5,
1.54,
2.4,
2.2,
2.1,
2.1,
1.95,
1.8,
1.8,
1.88,
2.8,
2.4,
2.3,
2.15,
2.05,
2.05,
2.05,
2.05,
2.0,
2.0,
2.0,
2.1,
2.1,
2.1,
2.05,
1.9,
1.9,
2.02,
2.9,
2.55,
2.4,
2.3,
2.15,
2.1,
2.05,
2.05,
2.0,
2.05,
2.1,
2.2,
2.2,
2.25,
2.2,
2.1,
2.1,
2.16,
3.0,
2.7,
2.5,
2.48,
2.47,
2.45,
2.43,
2.42,
2.4,
2.38,
2.37,
2.35,
2.33,
2.32,
2.3,
2.28,
2.27,
2.25,
2.2,
2.1,
2.05,
2.0,
2.0,
2.05,
2.1,
2.05,
2.2,
2.3,
2.3,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.4,
2.0,
2.3,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
]
####################################################################################################
# MODIFIED RESIDUES
####################################################################################################
protein_letters_3to1_extended = {
"A5N": "N",
"A8E": "V",
"A9D": "S",
"AA3": "A",
"AA4": "A",
"AAR": "R",
"ABA": "A",
"ACL": "R",
"AEA": "C",
"AEI": "D",
"AFA": "N",
"AGM": "R",
"AGQ": "Y",
"AGT": "C",
"AHB": "N",
"AHL": "R",
"AHO": "A",
"AHP": "A",
"AIB": "A",
"AKL": "D",
"AKZ": "D",
"ALA": "A",
"ALC": "A",
"ALM": "A",
"ALN": "A",
"ALO": "T",
"ALS": "A",
"ALT": "A",
"ALV": "A",
"ALY": "K",
"AME": "M",
"AN6": "L",
"AN8": "A",
"API": "K",
"APK": "K",
"AR2": "R",
"AR4": "E",
"AR7": "R",
"ARG": "R",
"ARM": "R",
"ARO": "R",
"AS7": "N",
"ASA": "D",
"ASB": "D",
"ASI": "D",
"ASK": "D",
"ASL": "D",
"ASN": "N",
"ASP": "D",
"ASQ": "D",
"AYA": "A",
"AZH": "A",
"AZK": "K",
"AZS": "S",
"AZY": "Y",
"AVJ": "H",
"A30": "Y",
"A3U": "F",
"ECC": "Q",
"ECX": "C",
"EFC": "C",
"EHP": "F",
"ELY": "K",
"EME": "E",
"EPM": "M",
"EPQ": "Q",
"ESB": "Y",
"ESC": "M",
"EXY": "L",
"EXA": "K",
"E0Y": "P",
"E9V": "H",
"E9M": "W",
"EJA": "C",
"EUP": "T",
"EZY": "G",
"E9C": "Y",
"EW6": "S",
"EXL": "W",
"I2M": "I",
"I4G": "G",
"I58": "K",
"IAM": "A",
"IAR": "R",
"ICY": "C",
"IEL": "K",
"IGL": "G",
"IIL": "I",
"ILE": "I",
"ILG": "E",
"ILM": "I",
"ILX": "I",
"ILY": "K",
"IML": "I",
"IOR": "R",
"IPG": "G",
"IT1": "K",
"IYR": "Y",
"IZO": "M",
"IC0": "G",
"M0H": "C",
"M2L": "K",
"M2S": "M",
"M30": "G",
"M3L": "K",
"M3R": "K",
"MA ": "A",
"MAA": "A",
"MAI": "R",
"MBQ": "Y",
"MC1": "S",
"MCL": "K",
"MCS": "C",
"MD3": "C",
"MD5": "C",
"MD6": "G",
"MDF": "Y",
"ME0": "M",
"MEA": "F",
"MEG": "E",
"MEN": "N",
"MEQ": "Q",
"MET": "M",
"MEU": "G",
"MFN": "E",
"MGG": "R",
"MGN": "Q",
"MGY": "G",
"MH1": "H",
"MH6": "S",
"MHL": "L",
"MHO": "M",
"MHS": "H",
"MHU": "F",
"MIR": "S",
"MIS": "S",
"MK8": "L",
"ML3": "K",
"MLE": "L",
"MLL": "L",
"MLY": "K",
"MLZ": "K",
"MME": "M",
"MMO": "R",
"MNL": "L",
"MNV": "V",
"MP8": "P",
"MPQ": "G",
"MSA": "G",
"MSE": "M",
"MSL": "M",
"MSO": "M",
"MT2": "M",
"MTY": "Y",
"MVA": "V",
"MYK": "K",
"MYN": "R",
"QCS": "C",
"QIL": "I",
"QMM": "Q",
"QPA": "C",
"QPH": "F",
"Q3P": "K",
"QVA": "C",
"QX7": "A",
"Q2E": "W",
"Q75": "M",
"Q78": "F",
"QM8": "L",
"QMB": "A",
"QNQ": "C",
"QNT": "C",
"QNW": "C",
"QO2": "C",
"QO5": "C",
"QO8": "C",
"QQ8": "Q",
"U2X": "Y",
"U3X": "F",
"UF0": "S",
"UGY": "G",
"UM1": "A",
"UM2": "A",
"UMA": "A",
"UQK": "A",
"UX8": "W",
"UXQ": "F",
"YCM": "C",
"YOF": "Y",
"YPR": "P",
"YPZ": "Y",
"YTH": "T",
"Y1V": "L",
"Y57": "K",
"YHA": "K",
"200": "F",
"23F": "F",
"23P": "A",
"26B": "T",
"28X": "T",
"2AG": "A",
"2CO": "C",
"2FM": "M",
"2GX": "F",
"2HF": "H",
"2JG": "S",
"2KK": "K",
"2KP": "K",
"2LT": "Y",
"2LU": "L",
"2ML": "L",
"2MR": "R",
"2MT": "P",
"2OR": "R",
"2P0": "P",
"2QZ": "T",
"2R3": "Y",
"2RA": "A",
"2RX": "S",
"2SO": "H",
"2TY": "Y",
"2VA": "V",
"2XA": "C",
"2ZC": "S",
"6CL": "K",
"6CW": "W",
"6GL": "A",
"6HN": "K",
"60F": "C",
"66D": "I",
"6CV": "A",
"6M6": "C",
"6V1": "C",
"6WK": "C",
"6Y9": "P",
"6DN": "K",
"DA2": "R",
"DAB": "A",
"DAH": "F",
"DBS": "S",
"DBU": "T",
"DBY": "Y",
"DBZ": "A",
"DC2": "C",
"DDE": "H",
"DDZ": "A",
"DI7": "Y",
"DHA": "S",
"DHN": "V",
"DIR": "R",
"DLS": "K",
"DM0": "K",
"DMH": "N",
"DMK": "D",
"DNL": "K",
"DNP": "A",
"DNS": "K",
"DNW": "A",
"DOH": "D",
"DON": "L",
"DP1": "R",
"DPL": "P",
"DPP": "A",
"DPQ": "Y",
"DYS": "C",
"D2T": "D",
"DYA": "D",
"DJD": "F",
"DYJ": "P",
"DV9": "E",
"H14": "F",
"H1D": "M",
"H5M": "P",
"HAC": "A",
"HAR": "R",
"HBN": "H",
"HCM": "C",
"HGY": "G",
"HHI": "H",
"HIA": "H",
"HIC": "H",
"HIP": "H",
"HIQ": "H",
"HIS": "H",
"HL2": "L",
"HLU": "L",
"HMR": "R",
"HNC": "C",
"HOX": "F",
"HPC": "F",
"HPE": "F",
"HPH": "F",
"HPQ": "F",
"HQA": "A",
"HR7": "R",
"HRG": "R",
"HRP": "W",
"HS8": "H",
"HS9": "H",
"HSE": "S",
"HSK": "H",
"HSL": "S",
"HSO": "H",
"HT7": "W",
"HTI": "C",
"HTR": "W",
"HV5": "A",
"HVA": "V",
"HY3": "P",
"HYI": "M",
"HYP": "P",
"HZP": "P",
"HIX": "A",
"HSV": "H",
"HLY": "K",
"HOO": "H",
"H7V": "A",
"L5P": "K",
"LRK": "K",
"L3O": "L",
"LA2": "K",
"LAA": "D",
"LAL": "A",
"LBY": "K",
"LCK": "K",
"LCX": "K",
"LDH": "K",
"LE1": "V",
"LED": "L",
"LEF": "L",
"LEH": "L",
"LEM": "L",
"LEN": "L",
"LET": "K",
"LEU": "L",
"LEX": "L",
"LGY": "K",
"LLO": "K",
"LLP": "K",
"LLY": "K",
"LLZ": "K",
"LME": "E",
"LMF": "K",
"LMQ": "Q",
"LNE": "L",
"LNM": "L",
"LP6": "K",
"LPD": "P",
"LPG": "G",
"LPS": "S",
"LSO": "K",
"LTR": "W",
"LVG": "G",
"LVN": "V",
"LWY": "P",
"LYF": "K",
"LYK": "K",
"LYM": "K",
"LYN": "K",
"LYO": "K",
"LYP": "K",
"LYR": "K",
"LYS": "K",
"LYU": "K",
"LYX": "K",
"LYZ": "K",
"LAY": "L",
"LWI": "F",
"LBZ": "K",
"P1L": "C",
"P2Q": "Y",
"P2Y": "P",
"P3Q": "Y",
"PAQ": "Y",
"PAS": "D",
"PAT": "W",
"PBB": "C",
"PBF": "F",
"PCA": "Q",
"PCC": "P",
"PCS": "F",
"PE1": "K",
"PEC": "C",
"PF5": "F",
"PFF": "F",
"PG1": "S",
"PGY": "G",
"PHA": "F",
"PHD": "D",
"PHE": "F",
"PHI": "F",
"PHL": "F",
"PHM": "F",
"PKR": "P",
"PLJ": "P",
"PM3": "F",
"POM": "P",
"PPN": "F",
"PR3": "C",
"PR4": "P",
"PR7": "P",
"PR9": "P",
"PRJ": "P",
"PRK": "K",
"PRO": "P",
"PRS": "P",
"PRV": "G",
"PSA": "F",
"PSH": "H",
"PTH": "Y",
"PTM": "Y",
"PTR": "Y",
"PVH": "H",
"PXU": "P",
"PYA": "A",
"PYH": "K",
"PYX": "C",
"PH6": "P",
"P9S": "C",
"P5U": "S",
"POK": "R",
"T0I": "Y",
"T11": "F",
"TAV": "D",
"TBG": "V",
"TBM": "T",
"TCQ": "Y",
"TCR": "W",
"TEF": "F",
"TFQ": "F",
"TH5": "T",
"TH6": "T",
"THC": "T",
"THR": "T",
"THZ": "R",
"TIH": "A",
"TIS": "S",
"TLY": "K",
"TMB": "T",
"TMD": "T",
"TNB": "C",
"TNR": "S",
"TNY": "T",
"TOQ": "W",
"TOX": "W",
"TPJ": "P",
"TPK": "P",
"TPL": "W",
"TPO": "T",
"TPQ": "Y",
"TQI": "W",
"TQQ": "W",
"TQZ": "C",
"TRF": "W",
"TRG": "K",
"TRN": "W",
"TRO": "W",
"TRP": "W",
"TRQ": "W",
"TRW": "W",
"TRX": "W",
"TRY": "W",
"TS9": "I",
"TSY": "C",
"TTQ": "W",
"TTS": "Y",
"TXY": "Y",
"TY1": "Y",
"TY2": "Y",
"TY3": "Y",
"TY5": "Y",
"TY8": "Y",
"TY9": "Y",
"TYB": "Y",
"TYC": "Y",
"TYE": "Y",
"TYI": "Y",
"TYJ": "Y",
"TYN": "Y",
"TYO": "Y",
"TYQ": "Y",
"TYR": "Y",
"TYS": "Y",
"TYT": "Y",
"TYW": "Y",
"TYY": "Y",
"T8L": "T",
"T9E": "T",
"TNQ": "W",
"TSQ": "F",
"TGH": "W",
"X2W": "E",
"XCN": "C",
"XPR": "P",
"XSN": "N",
"XW1": "A",
"XX1": "K",
"XYC": "A",
"XA6": "F",
"11Q": "P",
"11W": "E",
"12L": "P",
"12X": "P",
"12Y": "P",
"143": "C",
"1AC": "A",
"1L1": "A",
"1OP": "Y",
"1PA": "F",
"1PI": "A",
"1TQ": "W",
"1TY": "Y",
"1X6": "S",
"56A": "H",
"5AB": "A",
"5CS": "C",
"5CW": "W",
"5HP": "E",
"5OH": "A",
"5PG": "G",
"51T": "Y",
"54C": "W",
"5CR": "F",
"5CT": "K",
"5FQ": "A",
"5GM": "I",
"5JP": "S",
"5T3": "K",
"5MW": "K",
"5OW": "K",
"5R5": "S",
"5VV": "N",
"5XU": "A",
"55I": "F",
"999": "D",
"9DN": "N",
"9NE": "E",
"9NF": "F",
"9NR": "R",
"9NV": "V",
"9E7": "K",
"9KP": "K",
"9WV": "A",
"9TR": "K",
"9TU": "K",
"9TX": "K",
"9U0": "K",
"9IJ": "F",
"B1F": "F",
"B27": "T",
"B2A": "A",
"B2F": "F",
"B2I": "I",
"B2V": "V",
"B3A": "A",
"B3D": "D",
"B3E": "E",
"B3K": "K",
"B3U": "H",
"B3X": "N",
"B3Y": "Y",
"BB6": "C",
"BB7": "C",
"BB8": "F",
"BB9": "C",
"BBC": "C",
"BCS": "C",
"BCX": "C",
"BFD": "D",
"BG1": "S",
"BH2": "D",
"BHD": "D",
"BIF": "F",
"BIU": "I",
"BL2": "L",
"BLE": "L",
"BLY": "K",
"BMT": "T",
"BNN": "F",
"BOR": "R",
"BP5": "A",
"BPE": "C",
"BSE": "S",
"BTA": "L",
"BTC": "C",
"BTK": "K",
"BTR": "W",
"BUC": "C",
"BUG": "V",
"BYR": "Y",
"BWV": "R",
"BWB": "S",
"BXT": "S",
"F2F": "F",
"F2Y": "Y",
"FAK": "K",
"FB5": "A",
"FB6": "A",
"FC0": "F",
"FCL": "F",
"FDL": "K",
"FFM": "C",
"FGL": "G",
"FGP": "S",
"FH7": "K",
"FHL": "K",
"FHO": "K",
"FIO": "R",
"FLA": "A",
"FLE": "L",
"FLT": "Y",
"FME": "M",
"FOE": "C",
"FP9": "P",
"FPK": "P",
"FT6": "W",
"FTR": "W",
"FTY": "Y",
"FVA": "V",
"FZN": "K",
"FY3": "Y",
"F7W": "W",
"FY2": "Y",
"FQA": "K",
"F7Q": "Y",
"FF9": "K",
"FL6": "D",
"JJJ": "C",
"JJK": "C",
"JJL": "C",
"JLP": "K",
"J3D": "C",
"J9Y": "R",
"J8W": "S",
"JKH": "P",
"N10": "S",
"N7P": "P",
"NA8": "A",
"NAL": "A",
"NAM": "A",
"NBQ": "Y",
"NC1": "S",
"NCB": "A",
"NEM": "H",
"NEP": "H",
"NFA": "F",
"NIY": "Y",
"NLB": "L",
"NLE": "L",
"NLN": "L",
"NLO": "L",
"NLP": "L",
"NLQ": "Q",
"NLY": "G",
"NMC": "G",
"NMM": "R",
"NNH": "R",
"NOT": "L",
"NPH": "C",
"NPI": "A",
"NTR": "Y",
"NTY": "Y",
"NVA": "V",
"NWD": "A",
"NYB": "C",
"NYS": "C",
"NZH": "H",
"N80": "P",
"NZC": "T",
"NLW": "L",
"N0A": "F",
"N9P": "A",
"N65": "K",
"R1A": "C",
"R4K": "W",
"RE0": "W",
"RE3": "W",
"RGL": "R",
"RGP": "E",
"RT0": "P",
"RVX": "S",
"RZ4": "S",
"RPI": "R",
"RVJ": "A",
"VAD": "V",
"VAF": "V",
"VAH": "V",
"VAI": "V",
"VAL": "V",
"VB1": "K",
"VH0": "P",
"VR0": "R",
"V44": "C",
"V61": "F",
"VPV": "K",
"V5N": "H",
"V7T": "K",
"Z01": "A",
"Z3E": "T",
"Z70": "H",
"ZBZ": "C",
"ZCL": "F",
"ZU0": "T",
"ZYJ": "P",
"ZYK": "P",
"ZZD": "C",
"ZZJ": "A",
"ZIQ": "W",
"ZPO": "P",
"ZDJ": "Y",
"ZT1": "K",
"30V": "C",
"31Q": "C",
"33S": "F",
"33W": "A",
"34E": "V",
"3AH": "H",
"3BY": "P",
"3CF": "F",
"3CT": "Y",
"3GA": "A",
"3GL": "E",
"3MD": "D",
"3MY": "Y",
"3NF": "Y",
"3O3": "E",
"3PX": "P",
"3QN": "K",
"3TT": "P",
"3XH": "G",
"3YM": "Y",
"3WS": "A",
"3WX": "P",
"3X9": "C",
"3ZH": "H",
"7JA": "I",
"73C": "S",
"73N": "R",
"73O": "Y",
"73P": "K",
"74P": "K",
"7N8": "F",
"7O5": "A",
"7XC": "F",
"7ID": "D",
"7OZ": "A",
"C1S": "C",
"C1T": "C",
"C1X": "K",
"C22": "A",
"C3Y": "C",
"C4R": "C",
"C5C": "C",
"C6C": "C",
"CAF": "C",
"CAS": "C",
"CAY": "C",
"CCS": "C",
"CEA": "C",
"CGA": "E",
"CGU": "E",
"CGV": "C",
"CHP": "G",
"CIR": "R",
"CLE": "L",
"CLG": "K",
"CLH": "K",
"CME": "C",
"CMH": "C",
"CML": "C",
"CMT": "C",
"CR5": "G",
"CS0": "C",
"CS1": "C",
"CS3": "C",
"CS4": "C",
"CSA": "C",
"CSB": "C",
"CSD": "C",
"CSE": "C",
"CSJ": "C",
"CSO": "C",
"CSP": "C",
"CSR": "C",
"CSS": "C",
"CSU": "C",
"CSW": "C",
"CSX": "C",
"CSZ": "C",
"CTE": "W",
"CTH": "T",
"CWD": "A",
"CWR": "S",
"CXM": "M",
"CY0": "C",
"CY1": "C",
"CY3": "C",
"CY4": "C",
"CYA": "C",
"CYD": "C",
"CYF": "C",
"CYG": "C",
"CYJ": "K",
"CYM": "C",
"CYQ": "C",
"CYR": "C",
"CYS": "C",
"CYW": "C",
"CZ2": "C",
"CZZ": "C",
"CG6": "C",
"C1J": "R",
"C4G": "R",
"C67": "R",
"C6D": "R",
"CE7": "N",
"CZS": "A",
"G01": "E",
"G8M": "E",
"GAU": "E",
"GEE": "G",
"GFT": "S",
"GHC": "E",
"GHG": "Q",
"GHW": "E",
"GL3": "G",
"GLH": "Q",
"GLJ": "E",
"GLK": "E",
"GLN": "Q",
"GLQ": "E",
"GLU": "E",
"GLY": "G",
"GLZ": "G",
"GMA": "E",
"GME": "E",
"GNC": "Q",
"GPL": "K",
"GSC": "G",
"GSU": "E",
"GT9": "C",
"GVL": "S",
"G3M": "R",
"G5G": "L",
"G1X": "Y",
"G8X": "P",
"K1R": "C",
"KBE": "K",
"KCX": "K",
"KFP": "K",
"KGC": "K",
"KNB": "A",
"KOR": "M",
"KPI": "K",
"KPY": "K",
"KST": "K",
"KYN": "W",
"KYQ": "K",
"KCR": "K",
"KPF": "K",
"K5L": "S",
"KEO": "K",
"KHB": "K",
"KKD": "D",
"K5H": "C",
"K7K": "S",
"OAR": "R",
"OAS": "S",
"OBS": "K",
"OCS": "C",
"OCY": "C",
"OHI": "H",
"OHS": "D",
"OLD": "H",
"OLT": "T",
"OLZ": "S",
"OMH": "S",
"OMT": "M",
"OMX": "Y",
"OMY": "Y",
"ONH": "A",
"ORN": "A",
"ORQ": "R",
"OSE": "S",
"OTH": "T",
"OXX": "D",
"OYL": "H",
"O7A": "T",
"O7D": "W",
"O7G": "V",
"O2E": "S",
"O6H": "W",
"OZW": "F",
"S12": "S",
"S1H": "S",
"S2C": "C",
"S2P": "A",
"SAC": "S",
"SAH": "C",
"SAR": "G",
"SBG": "S",
"SBL": "S",
"SCH": "C",
"SCS": "C",
"SCY": "C",
"SD4": "N",
"SDB": "S",
"SDP": "S",
"SEB": "S",
"SEE": "S",
"SEG": "A",
"SEL": "S",
"SEM": "S",
"SEN": "S",
"SEP": "S",
"SER": "S",
"SET": "S",
"SGB": "S",
"SHC": "C",
"SHP": "G",
"SHR": "K",
"SIB": "C",
"SLL": "K",
"SLZ": "K",
"SMC": "C",
"SME": "M",
"SMF": "F",
"SNC": "C",
"SNN": "N",
"SOY": "S",
"SRZ": "S",
"STY": "Y",
"SUN": "S",
"SVA": "S",
"SVV": "S",
"SVW": "S",
"SVX": "S",
"SVY": "S",
"SVZ": "S",
"SXE": "S",
"SKH": "K",
"SNM": "S",
"SNK": "H",
"SWW": "S",
"WFP": "F",
"WLU": "L",
"WPA": "F",
"WRP": "W",
"WVL": "V",
"02K": "A",
"02L": "N",
"02O": "A",
"02Y": "A",
"033": "V",
"037": "P",
"03Y": "C",
"04U": "P",
"04V": "P",
"05N": "P",
"07O": "C",
"0A0": "D",
"0A1": "Y",
"0A2": "K",
"0A8": "C",
"0A9": "F",
"0AA": "V",
"0AB": "V",
"0AC": "G",
"0AF": "W",
"0AG": "L",
"0AH": "S",
"0AK": "D",
"0AR": "R",
"0BN": "F",
"0CS": "A",
"0E5": "T",
"0EA": "Y",
"0FL": "A",
"0LF": "P",
"0NC": "A",
"0PR": "Y",
"0QL": "C",
"0TD": "D",
"0UO": "W",
"0WZ": "Y",
"0X9": "R",
"0Y8": "P",
"4AF": "F",
"4AR": "R",
"4AW": "W",
"4BF": "F",
"4CF": "F",
"4CY": "M",
"4DP": "W",
"4FB": "P",
"4FW": "W",
"4HL": "Y",
"4HT": "W",
"4IN": "W",
"4MM": "M",
"4PH": "F",
"4U7": "A",
"41H": "F",
"41Q": "N",
"42Y": "S",
"432": "S",
"45F": "P",
"4AK": "K",
"4D4": "R",
"4GJ": "C",
"4KY": "P",
"4L0": "P",
"4LZ": "Y",
"4N7": "P",
"4N8": "P",
"4N9": "P",
"4OG": "W",
"4OU": "F",
"4OV": "S",
"4OZ": "S",
"4PQ": "W",
"4SJ": "F",
"4WQ": "A",
"4HH": "S",
"4HJ": "S",
"4J4": "C",
"4J5": "R",
"4II": "F",
"4VI": "R",
"823": "N",
"8SP": "S",
"8AY": "A",
}
# Nucleic Acids
nucleic_letters_3to1_extended = {
"A ": "A",
"A23": "A",
"A2L": "A",
"A2M": "A",
"A34": "A",
"A35": "A",
"A38": "A",
"A39": "A",
"A3A": "A",
"A3P": "A",
"A40": "A",
"A43": "A",
"A44": "A",
"A47": "A",
"A5L": "A",
"A5M": "C",
"A5O": "A",
"A6A": "A",
"A6C": "C",
"A6G": "G",
"A6U": "U",
"A7E": "A",
"A9Z": "A",
"ABR": "A",
"ABS": "A",
"AD2": "A",
"ADI": "A",
"ADP": "A",
"AET": "A",
"AF2": "A",
"AFG": "G",
"AMD": "A",
"AMO": "A",
"AP7": "A",
"AS ": "A",
"ATD": "T",
"ATL": "T",
"ATM": "T",
"AVC": "A",
"AI5": "C",
"E ": "A",
"E1X": "A",
"EDA": "A",
"EFG": "G",
"EHG": "G",
"EIT": "T",
"EXC": "C",
"E3C": "C",
"E6G": "G",
"E7G": "G",
"EQ4": "G",
"EAN": "T",
"I5C": "C",
"IC ": "C",
"IG ": "G",
"IGU": "G",
"IMC": "C",
"IMP": "G",
"IU ": "U",
"I4U": "U",
"IOO": "G",
"M1G": "G",
"M2G": "G",
"M4C": "C",
"M5M": "C",
"MA6": "A",
"MA7": "A",
"MAD": "A",
"MCY": "C",
"ME6": "C",
"MEP": "U",
"MG1": "G",
"MGQ": "A",
"MGT": "G",
"MGV": "G",
"MIA": "A",
"MMT": "T",
"MNU": "U",
"MRG": "G",
"MTR": "T",
"MTU": "A",
"MFO": "G",
"M7A": "A",
"MHG": "G",
"MMX": "C",
"QUO": "G",
"QCK": "T",
"QSQ": "A",
"U ": "U",
"U25": "U",
"U2L": "U",
"U2P": "U",
"U31": "U",
"U34": "U",
"U36": "U",
"U37": "U",
"U8U": "U",
"UAR": "U",
"UBB": "U",
"UBD": "U",
"UD5": "U",
"UPV": "U",
"UR3": "U",
"URD": "U",
"US3": "T",
"US5": "U",
"UZR": "U",
"UMO": "U",
"U23": "U",
"U48": "C",
"U7B": "C",
"Y ": "A",
"YCO": "C",
"YG ": "G",
"YYG": "G",
"23G": "G",
"26A": "A",
"2AR": "A",
"2AT": "T",
"2AU": "U",
"2BT": "T",
"2BU": "A",
"2DA": "A",
"2DT": "T",
"2EG": "G",
"2GT": "T",
"2JV": "G",
"2MA": "A",
"2MG": "G",
"2MU": "U",
"2NT": "T",
"2OM": "U",
"2OT": "T",
"2PR": "G",
"2SG": "G",
"2ST": "T",
"63G": "G",
"63H": "G",
"64T": "T",
"68Z": "G",
"6CT": "T",
"6HA": "A",
"6HB": "A",
"6HC": "C",
"6HG": "G",
"6HT": "T",
"6IA": "A",
"6MA": "A",
"6MC": "A",
"6MP": "A",
"6MT": "A",
"6MZ": "A",
"6OG": "G",
"6PO": "G",
"6FK": "G",
"6NW": "A",
"6OO": "C",
"D00": "C",
"D3T": "T",
"D4M": "T",
"DA ": "A",
"DC ": "C",
"DCG": "G",
"DCT": "C",
"DDG": "G",
"DFC": "C",
"DFG": "G",
"DG ": "G",
"DG8": "G",
"DGI": "G",
"DGP": "G",
"DHU": "U",
"DNR": "C",
"DOC": "C",
"DPB": "T",
"DRT": "T",
"DT ": "T",
"DZM": "A",
"D4B": "C",
"H2U": "U",
"HN0": "G",
"HN1": "G",
"LC ": "C",
"LCA": "A",
"LCG": "G",
"LG ": "G",
"LGP": "G",
"LHU": "U",
"LSH": "T",
"LST": "T",
"LDG": "G",
"L3X": "A",
"LHH": "C",
"LV2": "C",
"L1J": "G",
"P ": "G",
"P2T": "T",
"P5P": "A",
"PG7": "G",
"PGN": "G",
"PGP": "G",
"PMT": "C",
"PPU": "A",
"PPW": "G",
"PR5": "A",
"PRN": "A",
"PST": "T",
"PSU": "U",
"PU ": "A",
"PVX": "C",
"PYO": "U",
"PZG": "G",
"P4U": "U",
"P7G": "G",
"T ": "T",
"T2S": "T",
"T31": "U",
"T32": "T",
"T36": "T",
"T37": "T",
"T38": "T",
"T39": "T",
"T3P": "T",
"T41": "T",
"T48": "T",
"T49": "T",
"T4S": "T",
"T5S": "T",
"T64": "T",
"T6A": "A",
"TA3": "T",
"TAF": "T",
"TBN": "A",
"TC1": "C",
"TCP": "T",
"TCY": "A",
"TDY": "T",
"TED": "T",
"TFE": "T",
"TFF": "T",
"TFO": "A",
"TFT": "T",
"TGP": "G",
"TCJ": "C",
"TLC": "T",
"TP1": "T",
"TPC": "C",
"TPG": "G",
"TSP": "T",
"TTD": "T",
"TTM": "T",
"TXD": "A",
"TXP": "A",
"TC ": "C",
"TG ": "G",
"T0N": "G",
"T0Q": "G",
"X ": "G",
"XAD": "A",
"XAL": "A",
"XCL": "C",
"XCR": "C",
"XCT": "C",
"XCY": "C",
"XGL": "G",
"XGR": "G",
"XGU": "G",
"XPB": "G",
"XTF": "T",
"XTH": "T",
"XTL": "T",
"XTR": "T",
"XTS": "G",
"XUA": "A",
"XUG": "G",
"102": "G",
"10C": "C",
"125": "U",
"126": "U",
"127": "U",
"12A": "A",
"16B": "C",
"18M": "G",
"1AP": "A",
"1CC": "C",
"1FC": "C",
"1MA": "A",
"1MG": "G",
"1RN": "U",
"1SC": "C",
"5AA": "A",
"5AT": "T",
"5BU": "U",
"5CG": "G",
"5CM": "C",
"5FA": "A",
"5FC": "C",
"5FU": "U",
"5HC": "C",
"5HM": "C",
"5HT": "T",
"5IC": "C",
"5IT": "T",
"5MC": "C",
"5MU": "U",
"5NC": "C",
"5PC": "C",
"5PY": "T",
"9QV": "U",
"94O": "T",
"9SI": "A",
"9SY": "A",
"B7C": "C",
"BGM": "G",
"BOE": "T",
"B8H": "U",
"B8K": "G",
"B8Q": "C",
"B8T": "C",
"B8W": "G",
"B9B": "G",
"B9H": "C",
"BGH": "G",
"F3H": "T",
"F3N": "A",
"F4H": "T",
"FA2": "A",
"FDG": "G",
"FHU": "U",
"FMG": "G",
"FNU": "U",
"FOX": "G",
"F2T": "U",
"F74": "G",
"F4Q": "G",
"F7H": "C",
"F7K": "G",
"JDT": "T",
"JMH": "C",
"J0X": "C",
"N5M": "C",
"N6G": "G",
"N79": "A",
"NCU": "C",
"NMS": "T",
"NMT": "T",
"NTT": "T",
"N7X": "C",
"R ": "A",
"RBD": "A",
"RDG": "G",
"RIA": "A",
"RMP": "A",
"RPC": "C",
"RSP": "C",
"RSQ": "C",
"RT ": "T",
"RUS": "U",
"RFJ": "G",
"V3L": "A",
"VC7": "G",
"Z ": "C",
"ZAD": "A",
"ZBC": "C",
"ZBU": "U",
"ZCY": "C",
"ZGU": "G",
"31H": "A",
"31M": "A",
"3AU": "U",
"3DA": "A",
"3ME": "U",
"3MU": "U",
"3TD": "U",
"70U": "U",
"7AT": "A",
"7DA": "A",
"7GU": "G",
"7MG": "G",
"7BG": "G",
"73W": "C",
"75B": "U",
"7OK": "C",
"7S3": "G",
"7SN": "G",
"C ": "C",
"C25": "C",
"C2L": "C",
"C2S": "C",
"C31": "C",
"C32": "C",
"C34": "C",
"C36": "C",
"C37": "C",
"C38": "C",
"C42": "C",
"C43": "C",
"C45": "C",
"C46": "C",
"C49": "C",
"C4S": "C",
"C5L": "C",
"C6G": "G",
"CAR": "C",
"CB2": "C",
"CBR": "C",
"CBV": "C",
"CCC": "C",
"CDW": "C",
"CFL": "C",
"CFZ": "C",
"CG1": "G",
"CH ": "C",
"CMR": "C",
"CNU": "U",
"CP1": "C",
"CSF": "C",
"CSL": "C",
"CTG": "T",
"CX2": "C",
"C7S": "C",
"C7R": "C",
"G ": "G",
"G1G": "G",
"G25": "G",
"G2L": "G",
"G2S": "G",
"G31": "G",
"G32": "G",
"G33": "G",
"G36": "G",
"G38": "G",
"G42": "G",
"G46": "G",
"G47": "G",
"G48": "G",
"G49": "G",
"G7M": "G",
"GAO": "G",
"GCK": "C",
"GDO": "G",
"GDP": "G",
"GDR": "G",
"GF2": "G",
"GFL": "G",
"GH3": "G",
"GMS": "G",
"GN7": "G",
"GNG": "G",
"GOM": "G",
"GRB": "G",
"GS ": "G",
"GSR": "G",
"GSS": "G",
"GTP": "G",
"GX1": "G",
"KAG": "G",
"KAK": "G",
"O2G": "G",
"OGX": "G",
"OMC": "C",
"OMG": "G",
"OMU": "U",
"ONE": "U",
"O2Z": "A",
"OKN": "C",
"OKQ": "C",
"S2M": "T",
"S4A": "A",
"S4C": "C",
"S4G": "G",
"S4U": "U",
"S6G": "G",
"SC ": "C",
"SDE": "A",
"SDG": "G",
"SDH": "G",
"SMP": "A",
"SMT": "T",
"SPT": "T",
"SRA": "A",
"SSU": "U",
"SUR": "U",
"00A": "A",
"0AD": "G",
"0AM": "A",
"0AP": "C",
"0AV": "A",
"0R8": "C",
"0SP": "A",
"0UH": "G",
"47C": "C",
"4OC": "C",
"4PC": "C",
"4PD": "C",
"4PE": "C",
"4SC": "C",
"4SU": "U",
"45A": "A",
"4U3": "C",
"8AG": "G",
"8AN": "A",
"8BA": "A",
"8FG": "G",
"8MG": "G",
"8OG": "G",
"8PY": "G",
"8AA": "G",
"85Y": "U",
"8OS": "G",
}
####################################################################################################
# Excluded ligands
####################################################################################################
ligand_exclusion = {
"144",
"15P",
"1PE",
"2F2",
"2JC",
"3HR",
"3SY",
"7N5",
"7PE",
"9JE",
"AAE",
"ABA",
"ACE",
"ACN",
"ACT",
"ACY",
"AZI",
"BAM",
"BCN",
"BCT",
"BDN",
"BEN",
"BME",
"BO3",
"BTB",
"BTC",
"BU1",
"C8E",
"CAD",
"CAQ",
"CBM",
"CCN",
"CIT",
"CL",
"CLR",
"CM",
"CMO",
"CO3",
"CPT",
"CXS",
"D10",
"DEP",
"DIO",
"DMS",
"DN",
"DOD",
"DOX",
"EDO",
"EEE",
"EGL",
"EOH",
"EOX",
"EPE",
"ETF",
"FCY",
"FJO",
"FLC",
"FMT",
"FW5",
"GOL",
"GSH",
"GTT",
"GYF",
"HED",
"IHP",
"IHS",
"IMD",
"IOD",
"IPA",
"IPH",
"LDA",
"MB3",
"MEG",
"MES",
"MLA",
"MLI",
"MOH",
"MPD",
"MRD",
"MSE",
"MYR",
"N",
"NA",
"NH2",
"NH4",
"NHE",
"NO3",
"O4B",
"OHE",
"OLA",
"OLC",
"OMB",
"OME",
"OXA",
"P6G",
"PE3",
"PE4",
"PEG",
"PEO",
"PEP",
"PG0",
"PG4",
"PGE",
"PGR",
"PLM",
"PO4",
"POL",
"POP",
"PVO",
"SAR",
"SCN",
"SEO",
"SEP",
"SIN",
"SO4",
"SPD",
"SPM",
"SR",
"STE",
"STO",
"STU",
"TAR",
"TBU",
"TME",
"TPO",
"TRS",
"UNK",
"UNL",
"UNX",
"UPL",
"URE",
}
####################################################################################################
# Ambiguous atoms
####################################################################################################
ambiguous_atoms = {
"LV": "LV",
"FL": "FL",
"CA": {
"*": "C",
"OEX": "CA",
"OEC": "CA",
"543": "CA",
"OC6": "CA",
"OC1": "CA",
"OC7": "CA",
"OEY": "CA",
"OC4": "CA",
"OC3": "CA",
"ICA": "CA",
"CA": "CA",
"OC2": "CA",
"OC5": "CA",
},
"CD": {"*": "C", "CD": "CD", "CD3": "CD", "CD5": "CD", "CD1": "CD"},
"BR": "BR",
"CL": {
"*": "CL",
"C8P": "C",
"L3T": "C",
"TLC": "C",
"TZ0": "C",
"471": "C",
"NLK": "C",
"PGM": "C",
"PNE": "C",
"RCY": "C",
"11F": "C",
"PII": "C",
"C1Q": "C",
"4MD": "C",
"R5A": "C",
"KW2": "C",
"I7M": "C",
"R48": "C",
"FC3": "C",
"55V": "C",
"KPF": "C",
"SPZ": "C",
"0TT": "C",
"R9A": "C",
"5NA": "C",
"C55": "C",
"NIX": "C",
"5PM": "C",
"PP8": "C",
"544": "C",
"812": "C",
"NPM": "C",
"KU8": "C",
"A1AMM": "C",
"4S0": "C",
"AQC": "C",
"2JK": "C",
"WJR": "C",
"A1AAW": "C",
"85E": "C",
"MB0": "C",
"ZAB": "C",
"85K": "C",
"GBP": "C",
"A1H80": "C",
"A1AFR": "C",
"L9M": "C",
"MYK": "C",
"MB9": "C",
"38R": "C",
"EKB": "C",
"NKF": "C",
"UMQ": "C",
"T4K": "C",
"3PT": "C",
"A1A7S": "C",
"1Q9": "C",
"11R": "C",
"D2V": "C",
"SM8": "C",
"IFC": "C",
"DB5": "C",
"L2T": "C",
"GNB": "C",
"PP7": "C",
"072": "C",
"P88": "C",
"DRL": "C",
"C9W": "C",
"NTP": "C",
"4HJ": "C",
"7NA": "C",
"LPC": "C",
"T8W": "C",
"63R": "C",
"570": "C",
"R4A": "C",
"3BG": "C",
"4RB": "C",
"GSO": "C",
"BQ6": "C",
"R4P": "C",
"5CP": "C",
"TTR": "C",
"6UZ": "C",
"SPJ": "C",
"0SA": "C",
"ZL1": "C",
"BYG": "C",
"F0E": "C",
"PC0": "C",
"B2Q": "C",
"KV6": "C",
"NTO": "C",
"CLG": "C",
"R7U": "C",
"SMQ": "C",
"GM2": "C",
"Z7P": "C",
"NXF": "C",
"C6Q": "C",
"A1G": "C",
"433": "C",
"L9N": "C",
"7OX": "C",
"A1H84": "C",
"97L": "C",
"HDV": "C",
"LUO": "C",
"R6A": "C",
"1PC": "C",
"4PT": "C",
"SBZ": "C",
"EAB": "C",
"FL4": "C",
"OPS": "C",
"C2X": "C",
"SLL": "C",
"BFC": "C",
"GIP": "C",
"7CP": "C",
"CLH": "C",
"34E": "C",
"5NE": "C",
"PBF": "C",
"ABD": "C",
"ABC": "C",
"LPF": "C",
"TIZ": "C",
"4HH": "C",
"AFC": "C",
"WQH": "C",
"9JL": "C",
"CS3": "C",
"NL0": "C",
"KPY": "C",
"DNA": "C",
"B3C": "C",
"TKL": "C",
"KVS": "C",
"HO6": "C",
"NLH": "C",
"1PB": "C",
"CYF": "C",
"G4M": "C",
"R5B": "C",
"N4S": "C",
"N11": "C",
"C8F": "C",
"PIJ": "C",
"WIN": "C",
"NT1": "C",
"WJW": "C",
"HF7": "C",
"TY1": "C",
"VM1": "C",
},
"OS": {"*": "O", "DWC": "OS", "OHX": "OS", "OS": "OS", "8WV": "OS", "OS4": "OS"},
"PB": {"*": "P", "ZN9": "PB", "ZN7": "PB", "PBM": "PB", "PB": "PB", "CSB": "PB"},
"CE": {"*": "C", "CE": "CE"},
"FE": {"*": "FE", "TFR": "F", "PF5": "F", "IFC": "F", "F5C": "F"},
"NA": {"*": "N", "CGO": "NA", "R2K": "NA", "LVQ": "NA", "NA": "NA"},
"ND": {"*": "N", "ND": "ND"},
"CF": {"*": "C", "CF": "CF"},
"RU": "RU",
"BRAF": "BR",
"EU": "EU",
"CLAA": "CL",
"CLBQ": "CL",
"CM": {"*": "C", "ZCM": "CM"},
"SN": {"*": "SN", "TAP": "S", "SND": "S", "TAD": "S", "XPT": "S"},
"AG": "AG",
"CLN": "CL",
"CLM": "CL",
"CLA": {"*": "CL", "PII": "C", "TDL": "C", "D0J": "C", "GM2": "C", "PIJ": "C"},
"CLB": {
"*": "CL",
"TD5": "C",
"PII": "C",
"TDL": "C",
"GM2": "C",
"TD7": "C",
"TD6": "C",
"PIJ": "C",
},
"CR": {
"*": "C",
"BW9": "CR",
"CQ4": "CR",
"AC9": "CR",
"TIL": "CR",
"J7U": "CR",
"CR": "CR",
},
"CLAY": "CL",
"CLBC": "CL",
"PD": {
"*": "P",
"F6Q": "PD",
"SVP": "PD",
"SXC": "PD",
"U5U": "PD",
"PD": "PD",
"PLL": "PD",
},
"CO": {
"*": "C",
"J1S": "CO",
"OCN": "CO",
"OL3": "CO",
"OL4": "CO",
"B12": "CO",
"XCO": "CO",
"UFU": "CO",
"CON": "CO",
"OL5": "CO",
"B13": "CO",
"7KI": "CO",
"PL1": "CO",
"OCO": "CO",
"J1R": "CO",
"COH": "CO",
"SIR": "CO",
"6KI": "CO",
"NCO": "CO",
"9CO": "CO",
"PC3": "CO",
"BWU": "CO",
"B1Z": "CO",
"J83": "CO",
"CO": "CO",
"COY": "CO",
"CNC": "CO",
"3CO": "CO",
"OCL": "CO",
"R5Q": "CO",
"X5Z": "CO",
"CBY": "CO",
"OLS": "CO",
"F0X": "CO",
"I2A": "CO",
"OCM": "CO",
},
"CU": {
"*": "C",
"8ZR": "CU",
"K7E": "CU",
"CU3": "CU",
"SI9": "CU",
"35N": "CU",
"C2O": "CU",
"SI7": "CU",
"B15": "CU",
"SI0": "CU",
"CUP": "CU",
"SQ1": "CU",
"CUK": "CU",
"CUL": "CU",
"SI8": "CU",
"IC4": "CU",
"CUM": "CU",
"MM2": "CU",
"B30": "CU",
"S32": "CU",
"V79": "CU",
"IMF": "CU",
"CUN": "CU",
"MM1": "CU",
"MP1": "CU",
"IME": "CU",
"B17": "CU",
"C2C": "CU",
"1CU": "CU",
"CU6": "CU",
"C1O": "CU",
"CU1": "CU",
"B22": "CU",
"CUS": "CU",
"RUQ": "CU",
"CUF": "CU",
"CUA": "CU",
"CU": "CU",
"CUO": "CU",
"0TE": "CU",
"SI4": "CU",
},
"CS": {"*": "C", "CS": "CS"},
"CLQ": "CL",
"CLR": "CL",
"CLU": "CL",
"TE": "TE",
"NI": {
"*": "N",
"USN": "NI",
"NFO": "NI",
"NI2": "NI",
"NFS": "NI",
"NFR": "NI",
"82N": "NI",
"R5N": "NI",
"NFU": "NI",
"A1ICD": "NI",
"NI3": "NI",
"M43": "NI",
"MM5": "NI",
"BF8": "NI",
"TCN": "NI",
"NIK": "NI",
"CUV": "NI",
"MM6": "NI",
"J52": "NI",
"NI": "NI",
"SNF": "NI",
"XCC": "NI",
"F0L": "NI",
"UWE": "NI",
"NFC": "NI",
"3NI": "NI",
"HNI": "NI",
"F43": "NI",
"RQM": "NI",
"NFE": "NI",
"NFB": "NI",
"B51": "NI",
"NI1": "NI",
"WCC": "NI",
"NUF": "NI",
},
"SB": {"*": "S", "UJI": "SB", "SB": "SB", "118": "SB", "SBO": "SB", "3CG": "SB"},
"MO": "MO",
"SEG": "SE",
"CLL": "CL",
"CLAH": "CL",
"CLC": {
"*": "CL",
"TD5": "C",
"PII": "C",
"TDL": "C",
"GM2": "C",
"TD7": "C",
"TD6": "C",
"PIJ": "C",
},
"CLD": {"*": "CL", "PII": "C", "GM2": "C", "PIJ": "C"},
"CLAD": "CL",
"CLAE": "CL",
"LA": "LA",
"RH": "RH",
"BRAC": "BR",
"BRAD": "BR",
"CLBN": "CL",
"CLAC": "CL",
"BRAB": "BR",
"BRAE": "BR",
"MG": "MG",
"IR": "IR",
"SE": {
"*": "SE",
"HII": "S",
"NT2": "S",
"R2P": "S",
"S2P": "S",
"0IU": "S",
"QMB": "S",
"81S": "S",
"0QB": "S",
"UB4": "S",
"OHS": "S",
"Q78": "S",
"0Y2": "S",
"B3M": "S",
"NT1": "S",
"81R": "S",
},
"BRAG": "BR",
"CLF": {"*": "CL", "PII": "C", "GM2": "C", "PIJ": "C"},
"CLE": {"*": "CL", "PII": "C", "GM2": "C", "PIJ": "C"},
"BRAX": "BR",
"CLK": "CL",
"ZN": "ZN",
"AS": "AS",
"AU": "AU",
"PT": "PT",
"CLAS": "CL",
"MN": "MN",
"CLBE": "CL",
"CLBF": "CL",
"CLAF": "CL",
"NA'": {"*": "N", "CGO": "NA"},
"BRAH": "BR",
"BRAI": "BR",
"BRA": "BR",
"BRB": "BR",
"BRAV": "BR",
"HG": {
"*": "HG",
"BBA": "H",
"MID": "H",
"APM": "H",
"4QQ": "H",
"0ZG": "H",
"APH": "H",
},
"AR": "AR",
"D": "H",
"CLAN": "CL",
"SI": "SI",
"CLS": "CL",
"ZR": "ZR",
"CLAR": {"*": "CL", "ZM4": "C"},
"HO": "HO",
"CLI": {"*": "CL", "GM2": "C"},
"CLH": {"*": "CL", "GM2": "C"},
"CLAP": "CL",
"CLBL": "CL",
"CLBM": "CL",
"PR": {"*": "PR", "UF0": "P", "252": "P"},
"IN": "IN",
"CLJ": "CL",
"BRU": "BR",
"SC": {"*": "S", "SFL": "SC"},
"CLG": {"*": "CL", "GM2": "C"},
"BRAT": "BR",
"BRAR": "BR",
"CLAG": "CL",
"CLAB": "CL",
"CLV": "CL",
"TI": "TI",
"CLAX": "CL",
"CLAJ": "CL",
"CL'": {"*": "CL", "BNR": "C", "25A": "C", "BDA": "C"},
"CLAW": "CL",
"BRF": "BR",
"BRE": "BR",
"RE": "RE",
"GD": "GD",
"SM": {"*": "S", "SM": "SM"},
"CLBH": "CL",
"CLBI": "CL",
"CLAI": "CL",
"CLY": "CL",
"CLZ": "CL",
"AC": "AC",
"BR'": "BR",
"CLT": "CL",
"CLO": "CL",
"CLP": "CL",
"LU": "LU",
"BA": {"*": "B", "BA": "BA"},
"CLAU": "CL",
"RB": "RB",
"LI": "LI",
"MOM": "MO",
"BRAQ": "BR",
"SR": {"*": "S", "SR": "SR", "OER": "SR"},
"CLAT": "CL",
"BRAL": "BR",
"SEB": "SE",
"CLW": "CL",
"CLX": "CL",
"BE": "BE",
"BRG": "BR",
"SEA": "SE",
"BRAW": "BR",
"BRBB": "BR",
"ER": "ER",
"TH": "TH",
"BRR": "BR",
"CLBV": "CL",
"AL": "AL",
"CLAV": "CL",
"BRH": "BR",
"CLAQ": "CL",
"GA": "GA",
"X": "*",
"TL": "TL",
"CLBB": "CL",
"TB": "TB",
"CLAK": "CL",
"XE": {"*": "*", "XE": "XE"},
"SEL": "SE",
"PU": {"*": "P", "4PU": "PU"},
"CLAZ": "CL",
"SE'": "SE",
"CLBA": "CL",
"SEN": "SE",
"SNN": "SN",
"MOB": "MO",
"YB": "YB",
"BRC": "BR",
"BRD": "BR",
"CLAM": "CL",
"DA": "H",
"DB": "H",
"DC": "H",
"DXT": "H",
"DXU": "H",
"DXX": "H",
"DXY": "H",
"DXZ": "H",
"DY": "DY",
"TA": "TA",
"XD": "*",
"SED": "SE",
"CLAL": "CL",
"BRAJ": "BR",
"AM": "AM",
"CLAO": "CL",
"BI": "BI",
"KR": "KR",
"BRBJ": "BR",
"UNK": "*",
}
####################################################################################################
# Thermofisher like hydrophobicity computation constants from Jeremie Alexander
####################################################################################################
hydrophobicity_info = {
"W": {"Rc": 12.25, "Rc1": 11.1, "Rc2": 11.8, "Rn": 12.25, "Rn1": 12.1},
"F": {"Rc": 10.90, "Rc1": 7.5, "Rc2": 9.5, "Rn": 10.90, "Rn1": 10.3},
"L": {"Rc": 9.30, "Rc1": 5.55, "Rc2": 7.4, "Rn": 9.30, "Rn1": 9.3},
"I": {"Rc": 8.00, "Rc1": 5.2, "Rc2": 6.6, "Rn": 8.00, "Rn1": 7.7},
"M": {"Rc": 6.20, "Rc1": 4.4, "Rc2": 5.7, "Rn": 6.20, "Rn1": 6.0},
"V": {"Rc": 5.00, "Rc1": 2.9, "Rc2": 3.4, "Rn": 5.00, "Rn1": 4.2},
"Y": {"Rc": 4.85, "Rc1": 3.7, "Rc2": 4.5, "Rn": 4.85, "Rn1": 4.4},
"C": {
"Rc": 0.45,
"Rc1": 0.9,
"Rc2": 0.2,
"Rn": 0.45,
"Rn1": -0.5,
}, # carbamidomethylated Cys
"P": {"Rc": 2.10, "Rc1": 2.1, "Rc2": 2.1, "Rn": 2.10, "Rn1": 2.1},
"A": {"Rc": 1.10, "Rc1": 0.35, "Rc2": 0.5, "Rn": 1.10, "Rn1": -0.1},
"E": {"Rc": 0.95, "Rc1": 1.0, "Rc2": 0.0, "Rn": 0.95, "Rn1": -0.1},
"T": {"Rc": 0.65, "Rc1": 0.8, "Rc2": 0.6, "Rn": 0.65, "Rn1": 0.0},
"D": {"Rc": 0.15, "Rc1": 0.5, "Rc2": 0.4, "Rn": 0.15, "Rn1": -0.5},
"Q": {"Rc": -0.40, "Rc1": -0.7, "Rc2": -0.2, "Rn": -0.40, "Rn1": -1.1},
"S": {"Rc": -0.15, "Rc1": 0.8, "Rc2": -0.1, "Rn": -0.15, "Rn1": -1.2},
"G": {"Rc": -0.35, "Rc1": 0.2, "Rc2": 0.15, "Rn": -0.35, "Rn1": -0.7},
"R": {"Rc": -1.40, "Rc1": 0.5, "Rc2": -1.1, "Rn": -1.30, "Rn1": -1.1},
"N": {"Rc": -0.85, "Rc1": 0.2, "Rc2": -0.2, "Rn": -0.85, "Rn1": -1.1},
"H": {"Rc": -1.45, "Rc1": -0.1, "Rc2": -0.2, "Rn": -1.45, "Rn1": -1.7},
"K": {"Rc": -2.05, "Rc1": -0.6, "Rc2": -1.5, "Rn": -1.90, "Rn1": -1.45},
}
# Nearest-neighbor penalty for hydrophobics adjacent to H/R/K
nn_penalty = {"W": 0.15, "F": 0.10, "L": 0.30, "I": 0.15, "V": 0.20, "Y": 0.05}
####################################################################################################
# Liability metric computation in analyze.py
####################################################################################################
# Severity scoring
liability_severity = {
"UnpairedCys": 10, # Unpaired cysteine
# antibody severities
"DeAmdH": 10, # High-risk deamidation
"FragH": 10, # High fragmentation risk
"Isom": 10, # Aspartate isomerization hotspot
"TrpOx": 10, # Tryptophan oxidation
"IntBind": 10, # Integrin-binding motif
"DeAmdM": 5, # Medium-risk deamidation
"FragM": 5, # Medium fragmentation risk
"DeAmdL": 1, # Low-risk deamidation
# peptide severities
"AspBridge": 10, # Deamidation hotspot (Asn-X)
"AspCleave": 10, # Aspartate cleavage site
"ProtTryp": 10, # Trypsin cleavage site
"DPP4": 5, # DPP4 cleavage site
# cyclic peptide specific liabilities
"LowHydrophilic": 7, # Low overall hydrophilicity
"ConsecIdentical": 7, # Consecutive identical residues
"LongHydrophobic": 7, # Long hydrophobic stretch
}
default_severity = 5
####################################################################################################
# Training task probabilities
####################################################################################################
training_task_probabilities = {
"select_all": [
(0, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(1, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"0prot_>=0nonprot": [
(1, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_0nonprot": [
(0.1, "select_none"),
(0.5, "select_scaffold"),
(0.3, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_>0nonprot": [
(0.05, "select_none"),
(0.2, "select_scaffold"),
(0.15, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0.2, "select_nonprot_interface"),
(0.4, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
">1prot_0nonprot": [
(0.05, "select_none"),
(0.2, "select_scaffold"),
(0.15, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0.1, "select_protein_intefaces"),
(0.4, "select_protein_chains"),
],
">1prot_>0nonprot": [
(0.05, "select_none"),
(0.2, "select_scaffold"),
(0.1, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0.05, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0.1, "select_protein_intefaces"),
(0.4, "select_protein_chains"),
],
}
training_task_probabilities_with_reindexing = {
"select_all": [
(0, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(1, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"0prot_>=0nonprot": [
(1, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_0nonprot": [
(0.1, "select_none"),
(0.25, "select_scaffold"),
(0.15, "select_motif"),
(0.25, "select_scaffold_binder"),
(0.15, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_>0nonprot": [
(0.05, "select_none"),
(0.1, "select_scaffold"),
(0.075, "select_motif"),
(0.1, "select_scaffold_binder"),
(0.075, "select_motif_binder"),
(0.2, "select_nonprot_interface"),
(0.4, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
">1prot_0nonprot": [
(0.05, "select_none"),
(0.1, "select_scaffold"),
(0.075, "select_motif"),
(0.1, "select_scaffold_binder"),
(0.075, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0.1, "select_protein_intefaces"),
(0.4, "select_protein_chains"),
],
">1prot_>0nonprot": [
(0.05, "select_none"),
(0.1, "select_scaffold"),
(0.05, "select_motif"),
(0.1, "select_scaffold_binder"),
(0.05, "select_motif_binder"),
(0.05, "select_nonprot_interface"),
(0.1, "select_standard_prot"),
(0.1, "select_protein_intefaces"),
(0.4, "select_protein_chains"),
],
}
training_task_probabilities_simple = {
"select_all": [
(0, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(1, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"0prot_>=0nonprot": [
(1, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_0nonprot": [
(0, "select_none"),
(0.6, "select_scaffold"),
(0.4, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
"1prot_>0nonprot": [
(0, "select_none"),
(0.1, "select_scaffold"),
(0.1, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.8, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0, "select_protein_chains"),
],
">1prot_0nonprot": [
(0, "select_none"),
(0.1, "select_scaffold"),
(0.1, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0.8, "select_protein_chains"),
],
">1prot_>0nonprot": [
(0, "select_none"),
(0, "select_scaffold"),
(0, "select_motif"),
(0, "select_scaffold_binder"),
(0, "select_motif_binder"),
(0, "select_nonprot_interface"),
(0.4, "select_standard_prot"),
(0, "select_protein_intefaces"),
(0.6, "select_protein_chains"),
],
}
####################################################################################################
# eval.py folding metrics
####################################################################################################
eval_keys_confidence = [
"ligand_iptm",
"interaction_pae",
"min_interaction_pae",
"min_design_to_target_pae",
"iptm",
"ptm",
"protein_iptm",
"design_iptm",
"design_iiptm",
"design_to_target_iptm",
"design_residue_iptm",
"target_ptm",
"design_ptm",
"design_ipsae_min",
"design_to_target_ipsae",
"target_to_design_ipsae",
"ligand_iptm",
"complex_plddt",
"complex_iplddt",
"complex_pde",
"complex_ipde",
]
eval_keys_affinity = [
"affinity_pred_value",
"affinity_probability_binary",
"affinity_probability_binary2",
"affinity_pred_value2",
"affinity_probability_binary1",
"affinity_pred_value1",
]
eval_keys = (
eval_keys_confidence
+ eval_keys_affinity
+ [ # additional keys needed to compute folding metrics
"coords",
"res_type",
"input_coords",
"token_index",
"atom_resolved_mask",
"atom_to_token",
"mol_type",
"backbone_mask",
]
)
folding_dirname = "fold_out_npz"
folding_design_dirname = "fold_out_design_npz"
refold_cif_dirname = "refold_cif"
refold_design_cif_dirname = "refold_design_cif"
affinity_dirname = "affinity_out_npz"
molecules_dirname = "molecules_out_dir"
metrics_dirname = "metrics_tmp"
####################################################################################################
# features
####################################################################################################
token_features = [
"token_index",
"residue_index",
"asym_id",
"entity_id",
"sym_id",
"mol_type",
"res_type",
"res_type_clone",
"is_standard",
"design_mask",
"aa_constraint_mask",
"binding_type",
"structure_group",
"token_bonds",
"type_bonds",
"token_pad_mask",
"token_resolved_mask",
"token_disto_mask",
"token_pair_mask",
"contact_conditioning",
"contact_threshold",
"method_feature",
"temp_feature",
"ph_feature",
"modified",
"ccd",
"cyclic",
"center_coords",
"token_distance_mask",
"target_msa_mask",
"design_ss_mask",
"feature_residue_index",
"feature_asym_id",
"ligand_affinity_mask",
"token_to_res",
"ss_type",
]
atom_features = [
"ref_pos",
"atom_resolved_mask",
"ref_atom_name_chars",
"ref_element",
"ref_charge",
"ref_chirality",
"atom_backbone_feat",
"ref_space_uid",
"coords",
"atom_pad_mask",
"atom_to_token",
"new_to_old_atomidx",
"bfactor",
"plddt",
"masked_ref_atom_name_chars",
"backbone_mask",
"fake_atom_mask",
]
# Formal charges (because CCD ones are missing negative charges???)
formal_charges = {k: defaultdict(int) for k in prot_token_to_letter.keys()}
formal_charges["ASP"]["OD2"] = -1
formal_charges["GLU"]["OE2"] = -1
formal_charges["LYS"]["NZ"] = 1
formal_charges["ARG"]["NH2"] = 1
# Note: Histidine is protonated in CCD, but usually isn't at neutral pH