From 8591a5a8e0f01b8a57befb7f54ef8fe5a186fad0 Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Thu, 21 Nov 2024 11:34:16 +0100 Subject: [PATCH 01/29] basis of implementation --- bin/martinize2 | 21 +- vermouth/rcsu/contact_map.py | 684 ++++++++++++++++++++++++++++- vermouth/rcsu/go_pipeline.py | 12 +- vermouth/rcsu/go_structure_bias.py | 18 +- vermouth/system.py | 1 + 5 files changed, 718 insertions(+), 18 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 893aee5fc..1a00763c8 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -48,7 +48,7 @@ from vermouth.map_input import ( generate_all_self_mappings, combine_mappings, ) -from vermouth.rcsu.contact_map import read_go_map +from vermouth.rcsu.contact_map import GenerateContactMap, read_go_map from vermouth.rcsu.go_pipeline import GoPipeline from vermouth.gmx.topology import write_gmx_topology @@ -965,6 +965,20 @@ def entry(): elif args.cystein_bridge != "auto": vermouth.AddCysteinBridgesThreshold(args.cystein_bridge).run_system(system) + go_map = None + if args.go: + # need this here because have to get contact map at atomistic resolution + # can also change this later once we can obtain contact map either from server or here + # not great atm because splits the go_map across the martinize function + # but can probably do something later along: + ''' + if go_map is None: + go_map = args.go_from_server + i.e. have another argument where the server file can still be used as an input. + ''' + LOGGER.info("Generating Go model contact map.", type="step") + go_map = GenerateContactMap(path=args.go).run_system(system) + # Run martinize on the system. system = martinize( system, @@ -987,8 +1001,9 @@ def entry(): # Generate the Go model if required if args.go: - LOGGER.info("Reading Go model contact map.", type="step") - go_map = read_go_map(args.go) + if go_map is not None: + LOGGER.info("Reading Go model contact map.", type="step") + go_map = read_go_map(args.go) LOGGER.info("Generating the Go model.", type="step") GoPipeline.run_system(system, moltype=args.govs_moltype, diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 111f0c94f..85b487c78 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -1,4 +1,4 @@ -# Copyright 2023 University of Groningen +# Copyright 2024 University of Groningen # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,10 +12,667 @@ # See the License for the specific language governing permissions and # limitations under the License. +from ..processors.processor import Processor +import numpy as np +from scipy.spatial.distance import euclidean, cdist +# import numpy.ma as ma +import time + +# REFERENCES FOR PROTEIN MAP +# REFERENCE: J. Tsai, R. Taylor, C. Chothia, and M. Gerstein, J. Mol. Biol 290:290 (1999) +# REFERENCE: https:# aip.scitation.org/doi/suppl/10.1063/1.4929599/suppl_file/sm.pdf +PROTEIN_MAP = { + "ALA": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0} + }, + "ARG": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA ': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 7}, + 'NE': {'vrad': 1.64, 'atype': 3}, + 'CZ': {'vrad': 1.61, 'atype': 6}, + 'NH1': {'vrad': 1.64, 'atype': 3}, + 'NH2': {'vrad': 1.64, 'atype': 3}, + 'default': {'vrad': 0.00, 'atype': 0} + }, + "ASN": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 6}, + 'OD1': {'vrad': 1.42, 'atype': 2}, + 'ND2': {'vrad': 1.64, 'atype': 3}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "ASP": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 6}, + 'OD1': {'vrad': 1.46, 'atype': 2}, + 'OD2': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "CYM": {}, + "CYX": {}, + "CYS": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'SG': {'vrad': 1.77, 'atype': 6}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "GLN": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.61, 'atype': 6}, + 'OE1': {'vrad': 1.42, 'atype': 2}, + 'NE2': {'vrad': 1.64, 'atype': 3}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "GLU": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.61, 'atype': 6}, + 'OE1': {'vrad': 1.46, 'atype': 2}, + 'OE2': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "GLY": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 6}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "HIE": {}, + "HIP": {}, + "HIS": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'ND1': {'vrad': 1.64, 'atype': 1}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'NE2': {'vrad': 1.64, 'atype': 1}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "ILE": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG1': {'vrad': 1.88, 'atype': 4}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'CD1': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "LEU": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD1': {'vrad': 1.88, 'atype': 4}, + 'CD2': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "LYS": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, + 'CE': {'vrad': 1.88, 'atype': 7}, + 'NZ': {'vrad': 1.64, 'atype': 3}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "MET": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'SD': {'vrad': 1.77, 'atype': 8}, + 'CE': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "PHE": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 5}, + 'CD1': {'vrad': 1.61, 'atype': 5}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'CE2': {'vrad': 1.76, 'atype': 5}, + 'CZ': {'vrad': 1.76, 'atype': 5}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "PRO": { + 'N': {'vrad': 1.64, 'atype': 6}, + 'CA': {'vrad': 1.88, 'atype': 4}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "SER": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 6}, + 'OG': {'vrad': 1.46, 'atype': 1}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "THR": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 6}, + 'OG1': {'vrad': 1.46, 'atype': 1}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "TRP": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'CD1': {'vrad': 1.76, 'atype': 5}, + 'CD2': {'vrad': 1.61, 'atype': 5}, + 'NE1': {'vrad': 1.64, 'atype': 3}, + 'CE2': {'vrad': 1.61, 'atype': 5}, + 'CE3': {'vrad': 1.76, 'atype': 5}, + 'CZ2': {'vrad': 1.76, 'atype': 5}, + 'CZ3': {'vrad': 1.76, 'atype': 5}, + 'CH2': {'vrad': 1.76, 'atype': 5}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "TYR": { + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'CD1': {'vrad': 1.76, 'atype': 5}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'CE2': {'vrad': 1.76, 'atype': 5}, + 'CZ': {'vrad': 1.61, 'atype': 5}, + 'OH': {'vrad': 1.46, 'atype': 1}, + 'default': {'vrad': 0.00, 'atype': 0}, + }, + "VAL": { + 'N ': {'vrad': 1.64, 'atype': 3}, + 'CA ': {'vrad': 1.88, 'atype': 7}, + 'C ': {'vrad': 1.61, 'atype': 6}, + 'O ': {'vrad': 1.42, 'atype': 2}, + 'CB ': {'vrad': 1.88, 'atype': 4}, + 'CG1': {'vrad': 1.88, 'atype': 4}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'default': {'vrad': 0.00, 'atype': 0}, + } +} + + +def BONDTYPE(i, j): + MAXATOMTYPE = 10 + assert i >= 1 + assert i <= MAXATOMTYPE + assert j >= 1 + assert j <= MAXATOMTYPE + + i -= 1 + j -= 1 + # BOND TYPE + # Types of contacts: + # HB -- 1 -- hydrogen-bond + # PH -- 2 -- hydrophobic + # AR -- 3 -- aromatic - contacts between aromatic rings + # IB -- 4 -- ionic bridge - contacts created by two atoms with different charges + # DC -- 5 -- destabilizing contact - contacts which are in general repulsive + # OT -- 6 -- denotes negligible other contacts. + # 1-HB,2-PH,3-AR,4-IP,5-DC,6-OT + btype = np.array([[1, 1, 1, 5, 5, 6, 6, 6, 1, 1], + [1, 5, 1, 5, 5, 6, 6, 6, 1, 5], + [1, 1, 5, 5, 5, 6, 6, 6, 5, 1], + [5, 5, 5, 2, 2, 6, 6, 6, 5, 5], + [5, 5, 5, 2, 3, 6, 6, 6, 5, 5], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [1, 1, 5, 5, 5, 6, 6, 6, 5, 4], + [1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) + return btype[i][j] + +def get_nres(molecule): + """ + get the total number of residues in a molecule, across all chains + """ + chains = list([molecule.nodes[node]['chain'] for node in molecule.nodes]) + resids = list([molecule.nodes[node]['resid'] for node in molecule.nodes]) + + # for all unique chains, get all the resids in that chain + lens = 0 + for i, c in enumerate(list(set(chains))): + res = [] + for j, k in enumerate(chains): + if k == c: + res.append(j) + lens += len(list(set([resids[j] for j in res]))) + return lens + +def atom_coords(residue_nodes, atomid): + """ + get the coordinates of an atom indexed internally within a serially numbered residue + """ + try: + return residue_nodes[atomid]['position'] + except KeyError: + return np.array([np.nan, np.nan, np.nan]) + +def vdw_radius(residue_nodes, atomid): + """ + get the vdw radius of an atom indexed internally within a serially numbered residue + """ + res_vdw = PROTEIN_MAP[residue_nodes[atomid]['resname']] + try: + atom_vdw = res_vdw[residue_nodes[atomid]['atomname']]['vrad'] + except KeyError: + atom_vdw = res_vdw['default']['vrad'] + return atom_vdw + +def get_residue(molecule, serial_resid): + """ + get the node entry of a molecule from its serial resid + """ + residue_nodes = [] + for node in molecule.nodes: + if molecule.nodes[node]['_res_serial'] == serial_resid: + residue_nodes.append(molecule.nodes[node]) + + return residue_nodes + +def make_surface(position, fiba, fibb, vrad): + """ + Generate points on a sphere using Fibonacci points + + position: centre of sphere + """ + x, y, z = position[0], position[1], position[2] + phi_aux = 0 + + surface = np.zeros((0, 3)) + for k in range(fibb): + + phi_aux += fiba + if phi_aux > fibb: + phi_aux -= fibb + + theta = np.arccos(1.0 - 2.0 * k / fibb) + phi = 2.0 * np.pi * phi_aux / fibb + surface_x = x + vrad * np.sin(theta) * np.cos(phi) + surface_y = y + vrad * np.sin(theta) * np.sin(phi) + surface_z = z + vrad * np.cos(theta) + surface = np.vstack((surface, np.array([surface_x, surface_y, surface_z]))) + return surface + +def model_assertion(res0, res1): + """ + assert that two residues are from the same model in a pdb + + maybe this can be scrapped given main() is called from run_molecule, so they must be? + """ + result = [] + for i in res0: + for j in res1: + try: + assert i['mol_idx'] == j['mol_idx'] + result.append(True) + except AssertionError: + result.append(False) + + return all(result) + +def residue_COM(residue): + """ + get the centre of mass of a residue + + residue: list of molecule.nodes that make up a residue + """ + positions = np.zeros((0,3)) + weights = np.zeros(0) + for i in residue: + try: + positions = np.vstack((positions, i['position'])) + weights = np.append(weights, i['mass']) + except KeyError: + pass + return np.average(positions, axis=0, weights=weights) + +def get_atype(residue_nodes, atomid): + """ + get the vdw radius of an atom indexed internally within a serially numbered residue + """ + res_vdw = PROTEIN_MAP[residue_nodes[atomid]['resname']] + try: + atom_vdw = res_vdw[residue_nodes[atomid]['atomname']]['atype'] + except KeyError: + atom_vdw = res_vdw['default']['atype'] + return atom_vdw + + +def DISTANCE_C_ALPHA(res0, res1): + """ + identify the CA atoms within a residue and calculate the distance between them + """ + atom0 = None + atom1 = None + for i in res0: + if i['atomname'] == 'CA': + atom0 = i + continue + for i in res1: + if i['atomname'] == 'CA': + atom1 = i + continue + if (atom0 is not None) and (atom1 is not None): + return euclidean(atom0['position'], atom1['position'])*10 #this distance is working, because the output distances where the contacts are found are matching + else: + return None + +def atom2res(nresidues, atom_array, mask, onemax=False): + ''' + count the atom entries in each residue and return an array at the residue level + ''' + out = np.zeros((nresidues, nresidues), dtype=int) + # map all atom back to residues + for i in range(nresidues): + find0 = np.where(mask == i)[0] + for j in range(nresidues): + find1 = np.where(mask == j)[0] + out[i, j] = np.count_nonzero(atom_array[find0][:, find1]) + + if onemax: + out[np.where(out > 0)] = 1 + return out + +def res2atom(nresidues, res_array, mask): + ''' + take an array with residue level data and repeat the entries over each atom within the residue + ''' + # find out what the values are, and how many of them there are + unique_values, counts = np.unique(mask, return_counts=True) + + assert len(unique_values) == nresidues + + out = np.zeros((len(mask), len(mask))) + start0 = 0 + for i, j in zip(unique_values, counts): + start1 = 0 + for k, l in zip(unique_values, counts): + target_value = res_array[i, k] + out[start0:start0 + j, start1:start1 + l] = target_value + start1 += l + start0 += j + + return out + +def main(molecule): + start0 = time.time() + # get the number of residues + nresidues = get_nres(molecule) + + # Fibonacci sequence generation. Can make arguments for this later, but 14 is what's usually needed + fib = 14 + fiba, fibb = 0, 1 + for _ in range(fib): + fiba, fibb = fibb, fiba + fibb + + alpha = 1.24 # Enlargement factor for attraction effects + water_radius = 2.80 # Radius of a water molecule in A + + # loop over all atoms in the protein to get atom information + coords = [] + vdw_list = [] + mask = [] + atypes = [] + coms = [] + for i in range(nresidues): + res0 = get_residue(molecule, i) + mask.append([str(i)]*len(res0)) + coms.append(residue_COM(res0)) + for j in range(len(res0)): + coords.append(atom_coords(res0, j)) + vdw_list.append(vdw_radius(res0, j)) + atypes.append(get_atype(res0, j)) + mask = np.array([x for xs in mask for x in xs], dtype=int) + + # definitely need the *10 here to make sure these distances are correct. + com_distances = res2atom(nresidues, cdist(np.array(coms), np.array(coms))*10, mask) + + setup_time = time.time() + + # calculate all interatomic distances in the protein + distances = cdist(np.array(coords), np.array(coords))*10 + distance_time = time.time() + + # generate fibonacci spheres for all atoms. This is a big time limiting step atm + spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) + sphere_time = time.time() + # print(f'sphere time {sphere_time - distance_time}') + + # # vdw is nxn array of all pairs of atomic vdws + vdw_sum_array = np.array(vdw_list)[:, np.newaxis] + np.array(vdw_list)[np.newaxis, :] + + # Enlarged overlap (OV) contact + overlapcounter = np.zeros(distances.shape, dtype=int) + overlapcounter[distances < (vdw_sum_array * alpha)] = 1 # this still needs correcting for intra-residue contacts + overlapcounter[np.where(com_distances < 3.5 * 4)] = 0 + + contactcounter = np.zeros(distances.shape, dtype=int) + stabilizercounter = np.zeros(distances.shape, dtype=int) + destabilizercounter = np.zeros(distances.shape, dtype=int) + + # this loop takes about as long as the sphere point generation, pretty sure it could be sped up somehow + # find where csu contacts are possibly relevant + csu_criteria = np.zeros(distances.shape) + csu_targets = np.where(distances < (vdw_sum_array * water_radius)) + for i in np.unique(csu_targets[0]): + group = np.stack(csu_targets).T[csu_targets[0] == i] + target_coords = [] + for j in group: + if (not mask[j[0]] == mask[j[1]]) and (com_distances[j[0], j[1]] < 3.5 * 4): + target_coords.append(coords[j[1]]) + if len(target_coords) > 0: + contact_distances = cdist(spheres[group.T[0]][0], np.stack(target_coords)) + # this now gives the correct indexing + csu_criteria[i, np.unravel_index(contact_distances.argmin(), contact_distances.shape)[1]] = 1 + print(csu_criteria) + # csu_time = time.time() + # # print(f'csu time {csu_time - sphere_time}') + # + # for i in range(distances.shape[0]): + # for j in range(distances.shape[1]): + # at1, at2 = atypes[i], atypes[j] + # if at1 > 0 and at2 > 0: + # contactcounter[i, j] += 1 + # btype = BONDTYPE(at1, at2) + # if btype <= 4: + # stabilizercounter[i, j] += 1 + # if btype == 5: + # destabilizercounter[i, j] += 1 + # counting = time.time() + # # print(f'counting time {counting - csu_time}') + # + # overlap_residues = atom2res(nresidues, overlapcounter, mask, onemax=True) + # contact_residues = atom2res(nresidues, contactcounter, mask) + # stabiliser_residues = atom2res(nresidues, stabilizercounter, mask) + # destabiliser_residues = atom2res(nresidues, destabilizercounter, mask) + # + # finish = time.time() + # # print(f'finish {finish - counting}') + # + # with open('test.out', 'w') as f: + # count = 0 + # for i1 in range(nresidues): + # for i2 in range(nresidues): + # res0 = get_residue(molecule, i1) + # res1 = get_residue(molecule, i2) + # if not (i1 == i2) and model_assertion(res0, res1): + # over = overlap_residues[i1, i2] + # cont = contact_residues[i1, i2] + # stab = stabiliser_residues[i1, i2] + # dest = destabiliser_residues[i1, i2] + # ocsu = stab + # rcsu = stab - dest + # + # if over > 0 or cont > 0: + # count += 1 + # msg = (f"R {count:6d} " + # f"{i1 + 1:5d} {res0[0]['resname']:4} {res0[0]['chain']:1} {res0[0]['resid']:4d} " + # f"{i2 + 1:5d} {res1[0]['resname']:4} {res1[0]['chain']:1} {res1[0]['resid']:4d} " + # f"{DISTANCE_C_ALPHA(res0, res1):8.4f} " + # f"{over} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0} " + # f"{rcsu:6d} {cont:6d} {res0[0]['mol_idx']:4d}\n") + # f.writelines(msg) + # + + + + + + + + + + + + + + # at1 = get_atype(res0, j1) + # at2 = get_atype(get_residue(molecule, int(s[3])), int(s[4])) + # if at1 > 0 and at2 > 0: + # contactcounter[i1, int(s[3])] += 1 + # btype = BONDTYPE(at1, at2) + # if btype <= 4: + # stabilizercounter[i1, int(s[3])] += 1 + # if btype == 5: + # destabilizercounter[i1, int(s[3])] += 1 + + + # base_atom_vdw = vdw_radius(res0, j1) + # if base_atom_coords is not None: + # generate the Fibonacci surface points on a sphere + # surface = make_surface(base_atom_coords, fiba, fibb, base_atom_vdw + water_radius) + # loop over all the residues a second time + # for i2 in range(nresidues): + # res1 = get_residue(molecule, i2) + # if model_assertion(res0, res1) and close_residues(res0, res1): + # for j2 in range(len(res1)): + # if not (i1 == i2 and j1 == j2): + # target_atom_coords = atom_coords(res1, j2) + # target_atom_vdw = vdw_radius(res1, j2) + # if target_atom_coords is not None: + # distance = euclidean(base_atom_coords, target_atom_coords)*10 + # + # # Enlarged overlap (OV) contact + # if distance <= ((base_atom_vdw + target_atom_vdw) * alpha): + # overlapcounter[i1, i2] = 1 + # + # # CSU contacts + # if distance <= ((base_atom_vdw + target_atom_vdw) * water_radius): + # for k in range(fibb): + # s = surface[k] + # if (euclidean(s[:3], target_atom_coords) < target_atom_vdw + water_radius) \ + # and distance <= s[5]: + # s[3] = i2 + # s[4] = j2 + # s[5] = distance + # + # for k in range(fibb): + # s = surface[k] + # if s[3] >= 0 and s[4] >= 0: + # at1 = get_atype(res0, j1) + # at2 = get_atype(get_residue(molecule, int(s[3])), int(s[4])) + # if at1 > 0 and at2 > 0: + # contactcounter[i1, int(s[3])] += 1 + # btype = BONDTYPE(at1, at2) + # if btype <= 4: + # stabilizercounter[i1, int(s[3])] += 1 + # if btype == 5: + # destabilizercounter[i1, int(s[3])] += 1 + # + # with open('test.out', 'w') as f: + # count = 0 + # for i1 in range(nresidues): + # for i2 in range(nresidues): + # res0 = get_residue(molecule, i1) + # res1 = get_residue(molecule, i2) + # if not (i1 == i2) and model_assertion(res0, res1): + # over = overlapcounter[i1, i2] + # cont = contactcounter[i1, i2] + # stab = stabilizercounter[i1, i2] + # dest = destabilizercounter[i1, i2] + # ocsu = stab + # rcsu = stab - dest + # + # if over > 0 or cont > 0: + # count += 1 + # msg = (f"R {count:6d} " + # f"{i1 + 1:5d} {res0[0]['resname']:4} {res0[0]['chain']:1} {res0[0]['resid']:4d} " + # f"{i2 + 1:5d} {res1[0]['resname']:4} {res1[0]['chain']:1} {res1[0]['resid']:4d} " + # f"{DISTANCE_C_ALPHA(res0, res1):8.4f} " + # f"{over} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0} " + # f"{rcsu:6d} {cont:6d} {res0[0]['mol_idx']:4d}\n") + # f.writelines(msg) + """ Read RCSU Go model contact maps. """ + def read_go_map(file_path): """ Read a RCSU contact map from the c code as published in @@ -51,3 +708,28 @@ def read_go_map(file_path): raise IOError("You contact map is empty. Are you sure it has the right formatting?") return contacts + + +class GenerateContactMap(Processor): + """ + Processor to generate the contact rCSU contact map for a protein from an atomistic structure + """ + def __init__(self, path=None): + self.path = path + + def run_molecule(self, molecule): + self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) + main(molecule) + return molecule + + def run_system(self, system): + """ + Process `system`. + + Parameters + ---------- + system: vermouth.system.System + The system to process. Is modified in-place. + """ + self.system = system + super().run_system(system) diff --git a/vermouth/rcsu/go_pipeline.py b/vermouth/rcsu/go_pipeline.py index b01bb867a..ecb35cf77 100644 --- a/vermouth/rcsu/go_pipeline.py +++ b/vermouth/rcsu/go_pipeline.py @@ -20,9 +20,10 @@ from ..processors.processor import Processor from .go_vs_includes import VirtualSiteCreator from .go_structure_bias import ComputeStructuralGoBias +from .contact_map import GenerateContactMap from ..processors import SetMoleculeMeta -class GoProcessorPipline(Processor): +class GoProcessorPipeline(Processor): """ Wrapping all processors for the go model. """ @@ -46,10 +47,11 @@ def run_system(self, system, **kwargs): self.prepare_run(system, moltype=kwargs['moltype']) for processor in self.processor_list: process_args = inspect.getfullargspec(processor).args - process_args_values = {arg:self.kwargs[arg] for arg in kwargs.keys() if arg in process_args} + process_args_values = {arg: self.kwargs[arg] for arg in kwargs.keys() if arg in process_args} processor(**process_args_values).run_system(system) return system -GoPipeline = GoProcessorPipline([SetMoleculeMeta, - VirtualSiteCreator, - ComputeStructuralGoBias]) + +GoPipeline = GoProcessorPipeline([SetMoleculeMeta, + VirtualSiteCreator, + ComputeStructuralGoBias]) diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index 6f7544244..5eea8ea69 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -46,7 +46,7 @@ class ComputeStructuralGoBias(Processor): replacement in the GoPipeline. """ def __init__(self, - contact_map, + # contact_map, cutoff_short, cutoff_long, go_eps, @@ -85,7 +85,7 @@ def __init__(self, magic number for Go contacts from the old GoVirt script. """ - self.contact_map = contact_map + # self.contact_map = contact_map self.cutoff_short = cutoff_short self.cutoff_long = cutoff_long self.go_eps = go_eps @@ -137,7 +137,7 @@ def contact_selector(self, molecule): """ Select all contacts from the contact map that according to their distance and graph - connectivity are elegible to form a Go + connectivity are eligible to form a Go bond and create exclusions between the backbone beads of those contacts. @@ -150,22 +150,22 @@ def contact_selector(self, molecule): list[(collections.abc.Hashable, collections.abc.Hashable, float)] list of node keys and distance """ - # distance_matrix of elegible pairs as tuple(node, node, dist) + # distance_matrix of eligible pairs as tuple(node, node, dist) contact_matrix = [] - # distance_matrix of elegible symmetrical pairs as tuple(node, node, dist) + # distance_matrix of eligible symmetrical pairs as tuple(node, node, dist) symmetrical_matrix = [] # find all pairs of residues that are within bonded distance of # self.res_dist connected_pairs = dict(nx.all_pairs_shortest_path_length(self.res_graph, cutoff=self.res_dist)) - for contact in self.contact_map: + for contact in self.system.go_params["go_map"][0]:#self.contact_map: resIDA, chainA, resIDB, chainB = contact # identify the contact in the residue graph based on # chain ID and resid resA = self._chain_id_to_resnode(chainA, resIDA) resB = self._chain_id_to_resnode(chainB, resIDB) # make sure that both residues are not connected - # note: contacts should be symmteric so we only + # note: contacts should be symmetric so we only # check against one if resB not in connected_pairs[resA]: # now we lookup the backbone nodes within the residue contact @@ -190,8 +190,8 @@ def contact_selector(self, molecule): # and add the exclusions. Else, we add to the full valid contact_matrix # and continue searching. if (atype_b, atype_a, dist) in contact_matrix: - # generate backbone backbone exclusions - # perhaps one day can be it's own function + # generate backbone-backbone exclusions + # perhaps one day can be its own function excl = Interaction(atoms=(bb_node_A, bb_node_B), parameters=[], meta={"group": "Go model exclusion"}) molecule.interactions['exclusions'].append(excl) diff --git a/vermouth/system.py b/vermouth/system.py index b1e7d9fa9..b5c19d2cd 100644 --- a/vermouth/system.py +++ b/vermouth/system.py @@ -32,6 +32,7 @@ def __init__(self, force_field=None): self._force_field = None self.force_field = force_field self.gmx_topology_params = defaultdict(list) + self.go_params = defaultdict(list) @property def force_field(self): From 56d319d015c466ad9fa163073936642a50095c8f Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Tue, 26 Nov 2024 09:22:22 +0100 Subject: [PATCH 02/29] basic implementation of go model --- vermouth/rcsu/contact_map.py | 172 ++++------------------------------- 1 file changed, 20 insertions(+), 152 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 85b487c78..c9ffb87b5 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -15,8 +15,6 @@ from ..processors.processor import Processor import numpy as np from scipy.spatial.distance import euclidean, cdist -# import numpy.ma as ma -import time # REFERENCES FOR PROTEIN MAP # REFERENCE: J. Tsai, R. Taylor, C. Chothia, and M. Gerstein, J. Mol. Biol 290:290 (1999) @@ -460,7 +458,6 @@ def res2atom(nresidues, res_array, mask): return out def main(molecule): - start0 = time.time() # get the number of residues nresidues = get_nres(molecule) @@ -492,24 +489,19 @@ def main(molecule): # definitely need the *10 here to make sure these distances are correct. com_distances = res2atom(nresidues, cdist(np.array(coms), np.array(coms))*10, mask) - setup_time = time.time() - # calculate all interatomic distances in the protein distances = cdist(np.array(coords), np.array(coords))*10 - distance_time = time.time() # generate fibonacci spheres for all atoms. This is a big time limiting step atm spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) - sphere_time = time.time() - # print(f'sphere time {sphere_time - distance_time}') - # # vdw is nxn array of all pairs of atomic vdws + # vdw is nxn array of all pairs of atomic vdws vdw_sum_array = np.array(vdw_list)[:, np.newaxis] + np.array(vdw_list)[np.newaxis, :] # Enlarged overlap (OV) contact overlapcounter = np.zeros(distances.shape, dtype=int) overlapcounter[distances < (vdw_sum_array * alpha)] = 1 # this still needs correcting for intra-residue contacts - overlapcounter[np.where(com_distances < 3.5 * 4)] = 0 + overlapcounter[com_distances > 3.5 * 4] = 0 # nb condition goes the other way here contactcounter = np.zeros(distances.shape, dtype=int) stabilizercounter = np.zeros(distances.shape, dtype=int) @@ -518,155 +510,31 @@ def main(molecule): # this loop takes about as long as the sphere point generation, pretty sure it could be sped up somehow # find where csu contacts are possibly relevant csu_criteria = np.zeros(distances.shape) - csu_targets = np.where(distances < (vdw_sum_array * water_radius)) + csu_targets = np.where(distances <= (vdw_sum_array + water_radius)) for i in np.unique(csu_targets[0]): group = np.stack(csu_targets).T[csu_targets[0] == i] target_coords = [] for j in group: - if (not mask[j[0]] == mask[j[1]]) and (com_distances[j[0], j[1]] < 3.5 * 4): + if (not mask[j[0]] == mask[j[1]]) and (com_distances[j[0], j[1]] <= 3.5 * 4): target_coords.append(coords[j[1]]) if len(target_coords) > 0: contact_distances = cdist(spheres[group.T[0]][0], np.stack(target_coords)) - # this now gives the correct indexing - csu_criteria[i, np.unravel_index(contact_distances.argmin(), contact_distances.shape)[1]] = 1 - print(csu_criteria) - # csu_time = time.time() - # # print(f'csu time {csu_time - sphere_time}') - # - # for i in range(distances.shape[0]): - # for j in range(distances.shape[1]): - # at1, at2 = atypes[i], atypes[j] - # if at1 > 0 and at2 > 0: - # contactcounter[i, j] += 1 - # btype = BONDTYPE(at1, at2) - # if btype <= 4: - # stabilizercounter[i, j] += 1 - # if btype == 5: - # destabilizercounter[i, j] += 1 - # counting = time.time() - # # print(f'counting time {counting - csu_time}') - # - # overlap_residues = atom2res(nresidues, overlapcounter, mask, onemax=True) - # contact_residues = atom2res(nresidues, contactcounter, mask) - # stabiliser_residues = atom2res(nresidues, stabilizercounter, mask) - # destabiliser_residues = atom2res(nresidues, destabilizercounter, mask) - # - # finish = time.time() - # # print(f'finish {finish - counting}') - # - # with open('test.out', 'w') as f: - # count = 0 - # for i1 in range(nresidues): - # for i2 in range(nresidues): - # res0 = get_residue(molecule, i1) - # res1 = get_residue(molecule, i2) - # if not (i1 == i2) and model_assertion(res0, res1): - # over = overlap_residues[i1, i2] - # cont = contact_residues[i1, i2] - # stab = stabiliser_residues[i1, i2] - # dest = destabiliser_residues[i1, i2] - # ocsu = stab - # rcsu = stab - dest - # - # if over > 0 or cont > 0: - # count += 1 - # msg = (f"R {count:6d} " - # f"{i1 + 1:5d} {res0[0]['resname']:4} {res0[0]['chain']:1} {res0[0]['resid']:4d} " - # f"{i2 + 1:5d} {res1[0]['resname']:4} {res1[0]['chain']:1} {res1[0]['resid']:4d} " - # f"{DISTANCE_C_ALPHA(res0, res1):8.4f} " - # f"{over} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0} " - # f"{rcsu:6d} {cont:6d} {res0[0]['mol_idx']:4d}\n") - # f.writelines(msg) - # - - - - - - - - - - - - - - # at1 = get_atype(res0, j1) - # at2 = get_atype(get_residue(molecule, int(s[3])), int(s[4])) - # if at1 > 0 and at2 > 0: - # contactcounter[i1, int(s[3])] += 1 - # btype = BONDTYPE(at1, at2) - # if btype <= 4: - # stabilizercounter[i1, int(s[3])] += 1 - # if btype == 5: - # destabilizercounter[i1, int(s[3])] += 1 - - - # base_atom_vdw = vdw_radius(res0, j1) - # if base_atom_coords is not None: - # generate the Fibonacci surface points on a sphere - # surface = make_surface(base_atom_coords, fiba, fibb, base_atom_vdw + water_radius) - # loop over all the residues a second time - # for i2 in range(nresidues): - # res1 = get_residue(molecule, i2) - # if model_assertion(res0, res1) and close_residues(res0, res1): - # for j2 in range(len(res1)): - # if not (i1 == i2 and j1 == j2): - # target_atom_coords = atom_coords(res1, j2) - # target_atom_vdw = vdw_radius(res1, j2) - # if target_atom_coords is not None: - # distance = euclidean(base_atom_coords, target_atom_coords)*10 - # - # # Enlarged overlap (OV) contact - # if distance <= ((base_atom_vdw + target_atom_vdw) * alpha): - # overlapcounter[i1, i2] = 1 - # - # # CSU contacts - # if distance <= ((base_atom_vdw + target_atom_vdw) * water_radius): - # for k in range(fibb): - # s = surface[k] - # if (euclidean(s[:3], target_atom_coords) < target_atom_vdw + water_radius) \ - # and distance <= s[5]: - # s[3] = i2 - # s[4] = j2 - # s[5] = distance - # - # for k in range(fibb): - # s = surface[k] - # if s[3] >= 0 and s[4] >= 0: - # at1 = get_atype(res0, j1) - # at2 = get_atype(get_residue(molecule, int(s[3])), int(s[4])) - # if at1 > 0 and at2 > 0: - # contactcounter[i1, int(s[3])] += 1 - # btype = BONDTYPE(at1, at2) - # if btype <= 4: - # stabilizercounter[i1, int(s[3])] += 1 - # if btype == 5: - # destabilizercounter[i1, int(s[3])] += 1 - # - # with open('test.out', 'w') as f: - # count = 0 - # for i1 in range(nresidues): - # for i2 in range(nresidues): - # res0 = get_residue(molecule, i1) - # res1 = get_residue(molecule, i2) - # if not (i1 == i2) and model_assertion(res0, res1): - # over = overlapcounter[i1, i2] - # cont = contactcounter[i1, i2] - # stab = stabilizercounter[i1, i2] - # dest = destabilizercounter[i1, i2] - # ocsu = stab - # rcsu = stab - dest - # - # if over > 0 or cont > 0: - # count += 1 - # msg = (f"R {count:6d} " - # f"{i1 + 1:5d} {res0[0]['resname']:4} {res0[0]['chain']:1} {res0[0]['resid']:4d} " - # f"{i2 + 1:5d} {res1[0]['resname']:4} {res1[0]['chain']:1} {res1[0]['resid']:4d} " - # f"{DISTANCE_C_ALPHA(res0, res1):8.4f} " - # f"{over} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0} " - # f"{rcsu:6d} {cont:6d} {res0[0]['mol_idx']:4d}\n") - # f.writelines(msg) + # np.unravel_index(contact_distances.argmin(), contact_distances.shape) - get the index in the group + # which has the shortest distance to the target atom indexed by i + csu_criteria[i, group[np.unravel_index(contact_distances.argmin(), contact_distances.shape)[1]][1]] = 1 + + for i in range(distances.shape[0]): + for j in range(distances.shape[1]): + at1, at2 = atypes[i], atypes[j] + if (at1 > 0) and (at2 > 0) and (csu_criteria[i, j] > 0): + contactcounter[i, j] += 1 + btype = BONDTYPE(at1, at2) + print(at1, at2, csu_criteria[i, j], btype) + if btype <= 4: + stabilizercounter[i, j] += 1 + if btype == 5: + destabilizercounter[i, j] += 1 + """ Read RCSU Go model contact maps. From 5ca464f372205eabfc24ceba169dd96a0c9ccdb5 Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Fri, 6 Dec 2024 17:36:28 +0100 Subject: [PATCH 03/29] implementation of working go model with flexible CLI - local generation of contact map guaranteed to reproduce one from server - -go argument now accepts either path for file from server, or no argument to use the native implementation --- bin/martinize2 | 55 ++-- vermouth/rcsu/contact_map.py | 475 +++++++++++++++-------------- vermouth/rcsu/go_structure_bias.py | 2 +- 3 files changed, 283 insertions(+), 249 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 1a00763c8..f5e0cdfde 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -22,6 +22,7 @@ import argparse import functools import logging import itertools +import os.path from pathlib import Path import sys import networkx as nx @@ -48,7 +49,7 @@ from vermouth.map_input import ( generate_all_self_mappings, combine_mappings, ) -from vermouth.rcsu.contact_map import GenerateContactMap, read_go_map +from vermouth.rcsu.contact_map import GenerateContactMap from vermouth.rcsu.go_pipeline import GoPipeline from vermouth.gmx.topology import write_gmx_topology @@ -538,11 +539,18 @@ def entry(): go_group.add_argument( "-go", dest="go", - required=False, - type=Path, - default=None, - help="Contact map to be used for the Martini Go model." - "Currently, only one format is supported. See docs.", + nargs='?', + const=None, + type=str, + help="Use Martini Go model. Accepts either an input file from the server, " + "or just provide the flag to calculate as part of Martinize. Can be slow for large proteins " + "(> 1500 residues)" + # required=False, + # type=Path, + # action='store_true', + # default=False, + # help="Contact map to be used for the Martini Go model." + # "Currently, only one format is supported. See docs.", ) go_group.add_argument( "-go-eps", @@ -824,6 +832,15 @@ def entry(): "be used together." ) + go = False + go_file = None + if args.go is None: + go = True + else: + if os.path.isfile(args.go): + go_file = args.go + go = True + if args.to_ff.startswith("elnedyn"): # FIXME: This type of thing should be added to the FF itself. LOGGER.info( @@ -965,19 +982,13 @@ def entry(): elif args.cystein_bridge != "auto": vermouth.AddCysteinBridgesThreshold(args.cystein_bridge).run_system(system) - go_map = None - if args.go: + go_map = False + if go: # need this here because have to get contact map at atomistic resolution - # can also change this later once we can obtain contact map either from server or here - # not great atm because splits the go_map across the martinize function - # but can probably do something later along: - ''' - if go_map is None: - go_map = args.go_from_server - i.e. have another argument where the server file can still be used as an input. - ''' - LOGGER.info("Generating Go model contact map.", type="step") - go_map = GenerateContactMap(path=args.go).run_system(system) + if go_file is None: + LOGGER.info("Generating Go model contact map.", type="step") + GenerateContactMap().run_system(system) + go_map = True # Run martinize on the system. system = martinize( @@ -1000,14 +1011,14 @@ def entry(): vermouth.ApplyPosres(node_selector, args.posres_fc).run_system(system) # Generate the Go model if required - if args.go: - if go_map is not None: + if go: + if not go_map: LOGGER.info("Reading Go model contact map.", type="step") - go_map = read_go_map(args.go) + GenerateContactMap(path=go_file).run_system(system) LOGGER.info("Generating the Go model.", type="step") GoPipeline.run_system(system, moltype=args.govs_moltype, - contact_map=go_map, + # contact_map=go_map, cutoff_short=args.go_low, cutoff_long=args.go_up, go_eps=args.go_eps, diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index c9ffb87b5..568c1bf12 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -16,9 +16,6 @@ import numpy as np from scipy.spatial.distance import euclidean, cdist -# REFERENCES FOR PROTEIN MAP -# REFERENCE: J. Tsai, R. Taylor, C. Chothia, and M. Gerstein, J. Mol. Biol 290:290 (1999) -# REFERENCE: https:# aip.scitation.org/doi/suppl/10.1063/1.4929599/suppl_file/sm.pdf PROTEIN_MAP = { "ALA": { 'N': {'vrad': 1.64, 'atype': 3}, @@ -30,7 +27,7 @@ }, "ARG": { 'N': {'vrad': 1.64, 'atype': 3}, - 'CA ': {'vrad': 1.88, 'atype': 7}, + 'CA': {'vrad': 1.88, 'atype': 7}, 'C': {'vrad': 1.61, 'atype': 6}, 'O': {'vrad': 1.42, 'atype': 2}, 'CB': {'vrad': 1.88, 'atype': 4}, @@ -129,7 +126,7 @@ 'CB': {'vrad': 1.88, 'atype': 4}, 'CG1': {'vrad': 1.88, 'atype': 4}, 'CG2': {'vrad': 1.88, 'atype': 4}, - 'CD1': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, 'default': {'vrad': 0.00, 'atype': 0}, }, "LEU": { @@ -242,11 +239,11 @@ 'default': {'vrad': 0.00, 'atype': 0}, }, "VAL": { - 'N ': {'vrad': 1.64, 'atype': 3}, - 'CA ': {'vrad': 1.88, 'atype': 7}, - 'C ': {'vrad': 1.61, 'atype': 6}, - 'O ': {'vrad': 1.42, 'atype': 2}, - 'CB ': {'vrad': 1.88, 'atype': 4}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, 'CG1': {'vrad': 1.88, 'atype': 4}, 'CG2': {'vrad': 1.88, 'atype': 4}, 'default': {'vrad': 0.00, 'atype': 0}, @@ -254,83 +251,29 @@ } -def BONDTYPE(i, j): - MAXATOMTYPE = 10 - assert i >= 1 - assert i <= MAXATOMTYPE - assert j >= 1 - assert j <= MAXATOMTYPE - - i -= 1 - j -= 1 - # BOND TYPE - # Types of contacts: - # HB -- 1 -- hydrogen-bond - # PH -- 2 -- hydrophobic - # AR -- 3 -- aromatic - contacts between aromatic rings - # IB -- 4 -- ionic bridge - contacts created by two atoms with different charges - # DC -- 5 -- destabilizing contact - contacts which are in general repulsive - # OT -- 6 -- denotes negligible other contacts. - # 1-HB,2-PH,3-AR,4-IP,5-DC,6-OT - btype = np.array([[1, 1, 1, 5, 5, 6, 6, 6, 1, 1], - [1, 5, 1, 5, 5, 6, 6, 6, 1, 5], - [1, 1, 5, 5, 5, 6, 6, 6, 5, 1], - [5, 5, 5, 2, 2, 6, 6, 6, 5, 5], - [5, 5, 5, 2, 3, 6, 6, 6, 5, 5], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [1, 1, 5, 5, 5, 6, 6, 6, 5, 4], - [1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) - return btype[i][j] - -def get_nres(molecule): - """ - get the total number of residues in a molecule, across all chains +def get_vdw_radius(resname, atomname): """ - chains = list([molecule.nodes[node]['chain'] for node in molecule.nodes]) - resids = list([molecule.nodes[node]['resid'] for node in molecule.nodes]) - - # for all unique chains, get all the resids in that chain - lens = 0 - for i, c in enumerate(list(set(chains))): - res = [] - for j, k in enumerate(chains): - if k == c: - res.append(j) - lens += len(list(set([resids[j] for j in res]))) - return lens - -def atom_coords(residue_nodes, atomid): - """ - get the coordinates of an atom indexed internally within a serially numbered residue + get the vdw radius of an atom indexed internally within a serially numbered residue """ + res_vdw = PROTEIN_MAP[resname] try: - return residue_nodes[atomid]['position'] + atom_vdw = res_vdw[atomname]['vrad'] except KeyError: - return np.array([np.nan, np.nan, np.nan]) + atom_vdw = res_vdw['default']['vrad'] + return atom_vdw -def vdw_radius(residue_nodes, atomid): + +def get_atype(resname, atomname): """ get the vdw radius of an atom indexed internally within a serially numbered residue """ - res_vdw = PROTEIN_MAP[residue_nodes[atomid]['resname']] + res_vdw = PROTEIN_MAP[resname] try: - atom_vdw = res_vdw[residue_nodes[atomid]['atomname']]['vrad'] + atom_vdw = res_vdw[atomname]['atype'] except KeyError: - atom_vdw = res_vdw['default']['vrad'] + atom_vdw = res_vdw['default']['atype'] return atom_vdw -def get_residue(molecule, serial_resid): - """ - get the node entry of a molecule from its serial resid - """ - residue_nodes = [] - for node in molecule.nodes: - if molecule.nodes[node]['_res_serial'] == serial_resid: - residue_nodes.append(molecule.nodes[node]) - - return residue_nodes def make_surface(position, fiba, fibb, vrad): """ @@ -356,112 +299,93 @@ def make_surface(position, fiba, fibb, vrad): surface = np.vstack((surface, np.array([surface_x, surface_y, surface_z]))) return surface -def model_assertion(res0, res1): - """ - assert that two residues are from the same model in a pdb - maybe this can be scrapped given main() is called from run_molecule, so they must be? - """ - result = [] - for i in res0: - for j in res1: - try: - assert i['mol_idx'] == j['mol_idx'] - result.append(True) - except AssertionError: - result.append(False) - - return all(result) - -def residue_COM(residue): - """ - get the centre of mass of a residue +def res2atom(arrin, residues, nresidues): + ''' + take an array with residue level data and repeat the entries over + each atom within the residue - residue: list of molecule.nodes that make up a residue - """ - positions = np.zeros((0,3)) - weights = np.zeros(0) - for i in residue: - try: - positions = np.vstack((positions, i['position'])) - weights = np.append(weights, i['mass']) - except KeyError: - pass - return np.average(positions, axis=0, weights=weights) + would be nice to do this with list comprension but Ican't work out how + to do something like: -def get_atype(residue_nodes, atomid): - """ - get the vdw radius of an atom indexed internally within a serially numbered residue - """ - res_vdw = PROTEIN_MAP[residue_nodes[atomid]['resname']] - try: - atom_vdw = res_vdw[residue_nodes[atomid]['atomname']]['atype'] - except KeyError: - atom_vdw = res_vdw['default']['atype'] - return atom_vdw + [np.tile(res_dists[i-1,j-1], + np.where(residues == i)[0].size) + for i in range(1, nresidues+1) + for j in range(1, nresidues+1) + ] + to get it correct in the 2 dimensional way we actually need. -def DISTANCE_C_ALPHA(res0, res1): - """ - identify the CA atoms within a residue and calculate the distance between them - """ - atom0 = None - atom1 = None - for i in res0: - if i['atomname'] == 'CA': - atom0 = i - continue - for i in res1: - if i['atomname'] == 'CA': - atom1 = i - continue - if (atom0 is not None) and (atom1 is not None): - return euclidean(atom0['position'], atom1['position'])*10 #this distance is working, because the output distances where the contacts are found are matching - else: - return None - -def atom2res(nresidues, atom_array, mask, onemax=False): - ''' - count the atom entries in each residue and return an array at the residue level - ''' - out = np.zeros((nresidues, nresidues), dtype=int) - # map all atom back to residues - for i in range(nresidues): - find0 = np.where(mask == i)[0] - for j in range(nresidues): - find1 = np.where(mask == j)[0] - out[i, j] = np.count_nonzero(atom_array[find0][:, find1]) - - if onemax: - out[np.where(out > 0)] = 1 - return out + At the moment we only need this function once + (to get the residue COGs foreach atom) + so it's not too much of a limiting factor, but something to optimise + better in future -def res2atom(nresidues, res_array, mask): - ''' - take an array with residue level data and repeat the entries over each atom within the residue ''' - # find out what the values are, and how many of them there are - unique_values, counts = np.unique(mask, return_counts=True) + # find out how many residues we have, and how many atoms are in each of them + unique_values, counts = np.unique(residues, return_counts=True) assert len(unique_values) == nresidues - out = np.zeros((len(mask), len(mask))) + out = np.zeros((len(residues), len(residues))) start0 = 0 - for i, j in zip(unique_values, counts): + for i, j in zip(unique_values - 1, counts): start1 = 0 - for k, l in zip(unique_values, counts): - target_value = res_array[i, k] - out[start0:start0 + j, start1:start1 + l] = target_value + for k, l in zip(unique_values - 1, counts): + target_value = arrin[i, k] + out[start0:start0 + j, start1:start1 + l] = target_value.sum() start1 += l start0 += j return out -def main(molecule): - # get the number of residues - nresidues = get_nres(molecule) - # Fibonacci sequence generation. Can make arguments for this later, but 14 is what's usually needed +def atom2res(arrin, residues, nresidues, norm=False): + ''' + take an array with atom level data and sum the entries over within the residue + ''' + out = np.array([int(arrin[np.where(residues == i)[0], np.where(residues == j)[0][:, np.newaxis]].sum()) + for i in range(1, nresidues + 1) + for j in range(1, nresidues + 1)]).reshape((nresidues, nresidues)) + if norm: + out[out > 0] = 1 + + return out + + +def BONDTYPE(i, j): + MAXATOMTYPE = 10 + assert i >= 1 + assert i <= MAXATOMTYPE + assert j >= 1 + assert j <= MAXATOMTYPE + + i -= 1 + j -= 1 + # BOND TYPE + # Types of contacts: + # HB -- 1 -- hydrogen-bond + # PH -- 2 -- hydrophobic + # AR -- 3 -- aromatic - contacts between aromatic rings + # IB -- 4 -- ionic bridge - contacts created by two atoms with different charges + # DC -- 5 -- destabilizing contact - contacts which are in general repulsive + # OT -- 6 -- denotes negligible other contacts. + # 1-HB,2-PH,3-AR,4-IP,5-DC,6-OT + btype = np.array([[1, 1, 1, 5, 5, 6, 6, 6, 1, 1], + [1, 5, 1, 5, 5, 6, 6, 6, 1, 5], + [1, 1, 5, 5, 5, 6, 6, 6, 5, 1], + [5, 5, 5, 2, 2, 6, 6, 6, 5, 5], + [5, 5, 5, 2, 3, 6, 6, 6, 5, 5], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [1, 1, 5, 5, 5, 6, 6, 6, 5, 4], + [1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) + return btype[i][j] + +def calculate_contact_map(mol): + + # some initial definitions of variables that we need fib = 14 fiba, fibb = 0, 1 for _ in range(fib): @@ -470,70 +394,168 @@ def main(molecule): alpha = 1.24 # Enlargement factor for attraction effects water_radius = 2.80 # Radius of a water molecule in A - # loop over all atoms in the protein to get atom information + # 1) Set up the basic information that we need to calculate the contact map + residues = [] coords = [] vdw_list = [] - mask = [] atypes = [] - coms = [] - for i in range(nresidues): - res0 = get_residue(molecule, i) - mask.append([str(i)]*len(res0)) - coms.append(residue_COM(res0)) - for j in range(len(res0)): - coords.append(atom_coords(res0, j)) - vdw_list.append(vdw_radius(res0, j)) - atypes.append(get_atype(res0, j)) - mask = np.array([x for xs in mask for x in xs], dtype=int) - - # definitely need the *10 here to make sure these distances are correct. - com_distances = res2atom(nresidues, cdist(np.array(coms), np.array(coms))*10, mask) - - # calculate all interatomic distances in the protein - distances = cdist(np.array(coords), np.array(coords))*10 - - # generate fibonacci spheres for all atoms. This is a big time limiting step atm - spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) + resnames = [] + ca_pos = [] + chains = [] + for node in mol.nodes: + try: + coords.append(mol.nodes[node]['position'] * 10) # need *10 here because of the way Vermouth read coords + residues.append(mol.nodes[node]['resid']) + resnames.append(mol.nodes[node]['resname']) + vdw_list.append(get_vdw_radius(mol.nodes[node]['resname'], + mol.nodes[node]['atomname'])) + atypes.append(get_atype(mol.nodes[node]['resname'], + mol.nodes[node]['atomname'])) + if mol.nodes[node]['atomname'] == "CA": + ca_pos.append(mol.nodes[node]['position']) + chains.append(mol.nodes[node]['chain']) + + except KeyError: + pass + + residues = np.array(residues) + vdw_list = np.array(vdw_list) + atypes = np.array(atypes) + + # 2) find the number of residues that we have + nresidues = len(list(set(residues))) + + # 4) set up final bits of information + # sums of vdw pairs for each atom we have + vdw_sum_array = vdw_list[:, np.newaxis] + vdw_list[np.newaxis, :] + + # distances between all the atoms that we have + atomic_distances = cdist(np.stack(coords), np.stack(coords)) - # vdw is nxn array of all pairs of atomic vdws - vdw_sum_array = np.array(vdw_list)[:, np.newaxis] + np.array(vdw_list)[np.newaxis, :] - - # Enlarged overlap (OV) contact - overlapcounter = np.zeros(distances.shape, dtype=int) - overlapcounter[distances < (vdw_sum_array * alpha)] = 1 # this still needs correcting for intra-residue contacts - overlapcounter[com_distances > 3.5 * 4] = 0 # nb condition goes the other way here - - contactcounter = np.zeros(distances.shape, dtype=int) - stabilizercounter = np.zeros(distances.shape, dtype=int) - destabilizercounter = np.zeros(distances.shape, dtype=int) - - # this loop takes about as long as the sphere point generation, pretty sure it could be sped up somehow - # find where csu contacts are possibly relevant - csu_criteria = np.zeros(distances.shape) - csu_targets = np.where(distances <= (vdw_sum_array + water_radius)) - for i in np.unique(csu_targets[0]): - group = np.stack(csu_targets).T[csu_targets[0] == i] - target_coords = [] - for j in group: - if (not mask[j[0]] == mask[j[1]]) and (com_distances[j[0], j[1]] <= 3.5 * 4): - target_coords.append(coords[j[1]]) - if len(target_coords) > 0: - contact_distances = cdist(spheres[group.T[0]][0], np.stack(target_coords)) - # np.unravel_index(contact_distances.argmin(), contact_distances.shape) - get the index in the group - # which has the shortest distance to the target atom indexed by i - csu_criteria[i, group[np.unravel_index(contact_distances.argmin(), contact_distances.shape)[1]][1]] = 1 - - for i in range(distances.shape[0]): - for j in range(distances.shape[1]): - at1, at2 = atypes[i], atypes[j] - if (at1 > 0) and (at2 > 0) and (csu_criteria[i, j] > 0): - contactcounter[i, j] += 1 - btype = BONDTYPE(at1, at2) - print(at1, at2, csu_criteria[i, j], btype) - if btype <= 4: - stabilizercounter[i, j] += 1 - if btype == 5: - destabilizercounter[i, j] += 1 + # array with 1 on the diagonal, so we can exclude the self atoms + diagonal_ones = np.diagflat(np.ones(atomic_distances.shape[0], dtype=int)) + + # get the coordinates of the centres of geometry for each residue + res_cogs = np.stack( + [np.stack(coords[np.where(residues == i)[0][0]:np.where(residues == i)[0][-1]]).mean(axis=0) for i in + range(1, nresidues + 1)]) + res_dists = res2atom(cdist(res_cogs, res_cogs), residues, nresidues) + + # 5) find atoms which meet the overlap criterion + over = np.zeros_like(atomic_distances) + overlaps = np.where((atomic_distances <= (vdw_sum_array * alpha)) & (diagonal_ones != 1) & (res_dists < 14)) + over[overlaps[0], overlaps[1]] = 1 + + # 6) set up the surface overlap criterion + # generate fibonacci spheres for all atoms. + # can't decide whether quicker/better for memory to generate all in one go here + # or incorporate into the loop. left + spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) + surface_overlaps = np.where( + (atomic_distances <= (vdw_sum_array + water_radius)) & (diagonal_ones != 1) & (res_dists < 14)) + # find which atoms are uniquely involved as base points + base_points = np.unique(surface_overlaps[0]) + + hit_results = np.ones((spheres.shape[0], spheres.shape[1]), dtype=int) * -1 + + # loop over all base points + for base_point in base_points: + + # generate the base point sphere now if we didn't earlier. + # sphere = make_surface(coords[base_point], fiba, fibb, vdw_list[base_point] + water_radius) + # get the target points + target_points = surface_overlaps[1][np.where(surface_overlaps[0] == base_point)[0]] + # array of all the target point coordinates + target_point_coords = np.stack(coords)[target_points] + # distances between the points on the base sphere surface and the target point coordinates + surface_to_point = cdist(spheres[base_point], target_point_coords) + # surface_to_point = cdist(sphere, target_point_coords) + # cutoff distances for each of the target points + target_distances = vdw_list[target_points] + water_radius + + for i, j in enumerate(surface_to_point): + ''' + first find where the radius condition is met, i.e. where the distance between + the target point and this point on the surface is smaller than the vdw radius + of the target point + ''' + radius_condition = j < target_distances + if any(radius_condition): + ''' + For all the points that meet this condition, look at the distance between the + target point and the base point + ''' + distances_to_compare = atomic_distances[base_point][target_points[radius_condition]] + ''' + the point that we need is the point with the smallest distance + ''' + point_needed = target_points[radius_condition][distances_to_compare.argmin()] + hit_results[base_point, i] = point_needed + + contactcounter_1 = np.zeros_like(atomic_distances) + stabilisercounter_1 = np.zeros_like(atomic_distances) + destabilisercounter_1 = np.zeros_like(atomic_distances) + + for i, j in enumerate(hit_results): + for k in j: + if k >= 0: + at1 = atypes[i] + at2 = atypes[k] + if (at1 > 0) and (at2 > 0): + contactcounter_1[i, k] += 1 + btype = BONDTYPE(at1, at2) + if btype <= 4: + stabilisercounter_1[i, k] += 1 + if btype == 5: + destabilisercounter_1[i, k] += 1 + + overlapcounter_2 = atom2res(over, residues, nresidues, norm=True) + contactcounter_2 = atom2res(contactcounter_1, residues, nresidues) + stabilisercounter_2 = atom2res(stabilisercounter_1, residues, nresidues) + destabilisercounter_2 = atom2res(destabilisercounter_1, residues, nresidues) + + resnames = np.array(resnames)[np.unique(residues, return_index=True)[1]] + resids = np.array(residues)[np.unique(residues, return_index=True)[1]] + + # this to write out the file if needed + # with open('contact_map_out.out', 'w') as f: + # count = 0 + # for i1 in range(nresidues): + # for i2 in range(nresidues): + # over = overlapcounter_2[i1, i2] + # cont = contactcounter_2[i1, i2] + # stab = stabilisercounter_2[i1, i2] + # dest = destabilisercounter_2[i1, i2] + # ocsu = stab + # rcsu = stab - dest + # + # if (over > 0 or cont > 0) and (i1 != i2): + # count += 1 + # msg = (f"R {int(count):6d} " + # f"{int(i1 + 1):5d} {resnames[i1]:3s} A {int(resids[i1]):4d} " + # f"{int(i2 + 1):5d} {resnames[i2]:3s} A {int(resids[i2]):4d} " + # f"{euclidean(ca_pos[i1], ca_pos[i2]) * 10:9.4f} " + # f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" + # f"{int(rcsu):6d} {int(cont):6d}\n") + # f.writelines(msg) + + contacts = [] + for i1 in range(nresidues): + for i2 in range(nresidues): + over = overlapcounter_2[i1, i2] + cont = contactcounter_2[i1, i2] + stab = stabilisercounter_2[i1, i2] + dest = destabilisercounter_2[i1, i2] + # ocsu = stab + rcsu = 1 if (stab - dest) > 0 else 0 + + if (over > 0 or cont > 0) and (i1 != i2): + if over == 1 or (over == 0 and rcsu == 1): + # this is a OV or rCSU contact we take it + chain_i1 = chains[np.where(residues == i1+1)[0][0]] + chain_i2 = chains[np.where(residues == i2+1)[0][0]] + contacts.append((i1+1, chain_i1, i2+1, chain_i2)) + return contacts """ @@ -574,7 +596,6 @@ def read_go_map(file_path): if len(contacts) == 0: raise IOError("You contact map is empty. Are you sure it has the right formatting?") - return contacts @@ -586,8 +607,10 @@ def __init__(self, path=None): self.path = path def run_molecule(self, molecule): - self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) - main(molecule) + if self.path is None: + self.system.go_params["go_map"].append(calculate_contact_map(molecule)) + else: + self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) return molecule def run_system(self, system): diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index 5eea8ea69..28a66092c 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -158,7 +158,7 @@ def contact_selector(self, molecule): # self.res_dist connected_pairs = dict(nx.all_pairs_shortest_path_length(self.res_graph, cutoff=self.res_dist)) - for contact in self.system.go_params["go_map"][0]:#self.contact_map: + for contact in self.system.go_params["go_map"][0]: resIDA, chainA, resIDB, chainB = contact # identify the contact in the residue graph based on # chain ID and resid From ba02c224e8ec52e0566b9e92881e19031b84586d Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Sat, 7 Dec 2024 17:33:17 +0100 Subject: [PATCH 04/29] change to using _res_serial attribute, so we can deal with > 1 chain --- vermouth/rcsu/contact_map.py | 61 +++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 568c1bf12..6427747c2 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -305,13 +305,13 @@ def res2atom(arrin, residues, nresidues): take an array with residue level data and repeat the entries over each atom within the residue - would be nice to do this with list comprension but Ican't work out how + would be nice to do this with list comprehension but I can't work out how to do something like: - [np.tile(res_dists[i-1,j-1], + [np.tile(res_dists[i,j], np.where(residues == i)[0].size) - for i in range(1, nresidues+1) - for j in range(1, nresidues+1) + for i in range(nresidues) + for j in range(nresidues) ] to get it correct in the 2 dimensional way we actually need. @@ -329,9 +329,9 @@ def res2atom(arrin, residues, nresidues): out = np.zeros((len(residues), len(residues))) start0 = 0 - for i, j in zip(unique_values - 1, counts): + for i, j in zip(unique_values, counts): start1 = 0 - for k, l in zip(unique_values - 1, counts): + for k, l in zip(unique_values, counts): target_value = arrin[i, k] out[start0:start0 + j, start1:start1 + l] = target_value.sum() start1 += l @@ -345,8 +345,8 @@ def atom2res(arrin, residues, nresidues, norm=False): take an array with atom level data and sum the entries over within the residue ''' out = np.array([int(arrin[np.where(residues == i)[0], np.where(residues == j)[0][:, np.newaxis]].sum()) - for i in range(1, nresidues + 1) - for j in range(1, nresidues + 1)]).reshape((nresidues, nresidues)) + for i in range(nresidues) + for j in range(nresidues)]).reshape((nresidues, nresidues)) if norm: out[out > 0] = 1 @@ -402,10 +402,12 @@ def calculate_contact_map(mol): resnames = [] ca_pos = [] chains = [] + res_serial = [] for node in mol.nodes: try: coords.append(mol.nodes[node]['position'] * 10) # need *10 here because of the way Vermouth read coords residues.append(mol.nodes[node]['resid']) + res_serial.append(mol.nodes[node]['_res_serial']) resnames.append(mol.nodes[node]['resname']) vdw_list.append(get_vdw_radius(mol.nodes[node]['resname'], mol.nodes[node]['atomname'])) @@ -421,9 +423,10 @@ def calculate_contact_map(mol): residues = np.array(residues) vdw_list = np.array(vdw_list) atypes = np.array(atypes) + res_serial = np.array(res_serial) # 2) find the number of residues that we have - nresidues = len(list(set(residues))) + nresidues = len(list(set(res_serial))) # 4) set up final bits of information # sums of vdw pairs for each atom we have @@ -436,23 +439,26 @@ def calculate_contact_map(mol): diagonal_ones = np.diagflat(np.ones(atomic_distances.shape[0], dtype=int)) # get the coordinates of the centres of geometry for each residue - res_cogs = np.stack( - [np.stack(coords[np.where(residues == i)[0][0]:np.where(residues == i)[0][-1]]).mean(axis=0) for i in - range(1, nresidues + 1)]) - res_dists = res2atom(cdist(res_cogs, res_cogs), residues, nresidues) + res_cogs = np.stack([np.stack(coords[np.where(res_serial == i)[0][0]: + np.where(res_serial == i)[0][-1]]).mean(axis=0) + for i in range(nresidues)]) + res_dists = res2atom(cdist(res_cogs, res_cogs), res_serial, nresidues) # 5) find atoms which meet the overlap criterion over = np.zeros_like(atomic_distances) - overlaps = np.where((atomic_distances <= (vdw_sum_array * alpha)) & (diagonal_ones != 1) & (res_dists < 14)) + overlaps = np.where((atomic_distances <= (vdw_sum_array * alpha)) & + (diagonal_ones != 1) & + (res_dists < 14)) over[overlaps[0], overlaps[1]] = 1 # 6) set up the surface overlap criterion # generate fibonacci spheres for all atoms. # can't decide whether quicker/better for memory to generate all in one go here - # or incorporate into the loop. left + # or incorporate into the loop. code to do it more on the fly is left in the loop for now spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) - surface_overlaps = np.where( - (atomic_distances <= (vdw_sum_array + water_radius)) & (diagonal_ones != 1) & (res_dists < 14)) + surface_overlaps = np.where((atomic_distances <= (vdw_sum_array + water_radius)) & + (diagonal_ones != 1) & + (res_dists < 14)) # find which atoms are uniquely involved as base points base_points = np.unique(surface_overlaps[0]) @@ -509,13 +515,14 @@ def calculate_contact_map(mol): if btype == 5: destabilisercounter_1[i, k] += 1 - overlapcounter_2 = atom2res(over, residues, nresidues, norm=True) - contactcounter_2 = atom2res(contactcounter_1, residues, nresidues) - stabilisercounter_2 = atom2res(stabilisercounter_1, residues, nresidues) - destabilisercounter_2 = atom2res(destabilisercounter_1, residues, nresidues) + overlapcounter_2 = atom2res(over, res_serial, nresidues, norm=True) + contactcounter_2 = atom2res(contactcounter_1, res_serial, nresidues) + stabilisercounter_2 = atom2res(stabilisercounter_1, res_serial, nresidues) + destabilisercounter_2 = atom2res(destabilisercounter_1, res_serial, nresidues) - resnames = np.array(resnames)[np.unique(residues, return_index=True)[1]] - resids = np.array(residues)[np.unique(residues, return_index=True)[1]] + # resnames = np.array(resnames)[np.unique(res_serial, return_index=True)[1]] + resids = np.array(residues)[np.unique(res_serial, return_index=True)[1]] + chains = np.array(chains)[np.unique(res_serial, return_index=True)[1]] # this to write out the file if needed # with open('contact_map_out.out', 'w') as f: @@ -532,8 +539,8 @@ def calculate_contact_map(mol): # if (over > 0 or cont > 0) and (i1 != i2): # count += 1 # msg = (f"R {int(count):6d} " - # f"{int(i1 + 1):5d} {resnames[i1]:3s} A {int(resids[i1]):4d} " - # f"{int(i2 + 1):5d} {resnames[i2]:3s} A {int(resids[i2]):4d} " + # f"{int(i1 + 1):5d} {resnames[i1]:3s} {chains[i1]:1s} {int(resids[i1]):4d} " + # f"{int(i2 + 1):5d} {resnames[i2]:3s} {chains[i2]:1s} {int(resids[i2]):4d} " # f"{euclidean(ca_pos[i1], ca_pos[i2]) * 10:9.4f} " # f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" # f"{int(rcsu):6d} {int(cont):6d}\n") @@ -552,9 +559,7 @@ def calculate_contact_map(mol): if (over > 0 or cont > 0) and (i1 != i2): if over == 1 or (over == 0 and rcsu == 1): # this is a OV or rCSU contact we take it - chain_i1 = chains[np.where(residues == i1+1)[0][0]] - chain_i2 = chains[np.where(residues == i2+1)[0][0]] - contacts.append((i1+1, chain_i1, i2+1, chain_i2)) + contacts.append((resids[i1], chains[i1], resids[i2], chains[i2])) return contacts From 4ecfe5ab697ab190eab7bef928fe75af4e33a6f0 Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Thu, 12 Dec 2024 14:16:53 +0100 Subject: [PATCH 05/29] fix contact map calculation - sometimes vermouth reads in atoms/residues in a strange order. This is seems to go especially weird for heteromers for some reason that I can't figure out. So, we sort out how we deal with reading the system by using a residue graph and making sure we read each residue node in order - Also deal with missing OXT atoms if we have a contact with a modified atom. This is a definite source of error in the implementation in the server, which strictly assumes canonical pdb atom names and order - NB: above error also causes issues for contact map files when the CA atom is not the first one listed. This doesn't actually affect us, because 1) we note CA directly, 2) it's not actually needed for the contact map in the end. - fix up some other imports/linting --- vermouth/rcsu/contact_map.py | 564 ++++++++++++++++------------- vermouth/rcsu/go_pipeline.py | 1 - vermouth/rcsu/go_structure_bias.py | 2 +- 3 files changed, 312 insertions(+), 255 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 6427747c2..c16606da3 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -15,238 +15,261 @@ from ..processors.processor import Processor import numpy as np from scipy.spatial.distance import euclidean, cdist +from .. import MergeAllMolecules +from ..graph_utils import make_residue_graph + PROTEIN_MAP = { "ALA": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0} + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0} }, "ARG": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.88, 'atype': 7}, - 'NE': {'vrad': 1.64, 'atype': 3}, - 'CZ': {'vrad': 1.61, 'atype': 6}, - 'NH1': {'vrad': 1.64, 'atype': 3}, - 'NH2': {'vrad': 1.64, 'atype': 3}, - 'default': {'vrad': 0.00, 'atype': 0} + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 7}, + 'NE': {'vrad': 1.64, 'atype': 3}, + 'CZ': {'vrad': 1.61, 'atype': 6}, + 'NH1': {'vrad': 1.64, 'atype': 3}, + 'NH2': {'vrad': 1.64, 'atype': 3}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0} }, "ASN": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.61, 'atype': 6}, - 'OD1': {'vrad': 1.42, 'atype': 2}, - 'ND2': {'vrad': 1.64, 'atype': 3}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 6}, + 'OD1': {'vrad': 1.42, 'atype': 2}, + 'ND2': {'vrad': 1.64, 'atype': 3}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "ASP": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.61, 'atype': 6}, - 'OD1': {'vrad': 1.46, 'atype': 2}, - 'OD2': {'vrad': 1.42, 'atype': 2}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 6}, + 'OD1': {'vrad': 1.46, 'atype': 2}, + 'OD2': {'vrad': 1.42, 'atype': 2}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "CYM": {}, "CYX": {}, "CYS": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'SG': {'vrad': 1.77, 'atype': 6}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'SG': {'vrad': 1.77, 'atype': 6}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "GLN": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.61, 'atype': 6}, - 'OE1': {'vrad': 1.42, 'atype': 2}, - 'NE2': {'vrad': 1.64, 'atype': 3}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.61, 'atype': 6}, + 'OE1': {'vrad': 1.42, 'atype': 2}, + 'NE2': {'vrad': 1.64, 'atype': 3}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "GLU": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.61, 'atype': 6}, - 'OE1': {'vrad': 1.46, 'atype': 2}, - 'OE2': {'vrad': 1.42, 'atype': 2}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.61, 'atype': 6}, + 'OE1': {'vrad': 1.46, 'atype': 2}, + 'OE2': {'vrad': 1.42, 'atype': 2}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "GLY": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 6}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 6}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "HIE": {}, "HIP": {}, "HIS": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.61, 'atype': 5}, - 'ND1': {'vrad': 1.64, 'atype': 1}, - 'CD2': {'vrad': 1.76, 'atype': 5}, - 'CE1': {'vrad': 1.76, 'atype': 5}, - 'NE2': {'vrad': 1.64, 'atype': 1}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'ND1': {'vrad': 1.64, 'atype': 1}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'NE2': {'vrad': 1.64, 'atype': 1}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "ILE": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG1': {'vrad': 1.88, 'atype': 4}, - 'CG2': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG1': {'vrad': 1.88, 'atype': 4}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "LEU": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD1': {'vrad': 1.88, 'atype': 4}, - 'CD2': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD1': {'vrad': 1.88, 'atype': 4}, + 'CD2': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "LYS": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.88, 'atype': 4}, - 'CE': {'vrad': 1.88, 'atype': 7}, - 'NZ': {'vrad': 1.64, 'atype': 3}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, + 'CE': {'vrad': 1.88, 'atype': 7}, + 'NZ': {'vrad': 1.64, 'atype': 3}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "MET": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'SD': {'vrad': 1.77, 'atype': 8}, - 'CE': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'SD': {'vrad': 1.77, 'atype': 8}, + 'CE': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "PHE": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 5}, - 'CD1': {'vrad': 1.61, 'atype': 5}, - 'CD2': {'vrad': 1.76, 'atype': 5}, - 'CE1': {'vrad': 1.76, 'atype': 5}, - 'CE2': {'vrad': 1.76, 'atype': 5}, - 'CZ': {'vrad': 1.76, 'atype': 5}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 5}, + 'CD1': {'vrad': 1.61, 'atype': 5}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'CE2': {'vrad': 1.76, 'atype': 5}, + 'CZ': {'vrad': 1.76, 'atype': 5}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "PRO": { - 'N': {'vrad': 1.64, 'atype': 6}, - 'CA': {'vrad': 1.88, 'atype': 4}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.88, 'atype': 4}, - 'CD': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 6}, + 'CA': {'vrad': 1.88, 'atype': 4}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.88, 'atype': 4}, + 'CD': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "SER": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 6}, - 'OG': {'vrad': 1.46, 'atype': 1}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 6}, + 'OG': {'vrad': 1.46, 'atype': 1}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "THR": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 6}, - 'OG1': {'vrad': 1.46, 'atype': 1}, - 'CG2': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 6}, + 'OG1': {'vrad': 1.46, 'atype': 1}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "TRP": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.61, 'atype': 5}, - 'CD1': {'vrad': 1.76, 'atype': 5}, - 'CD2': {'vrad': 1.61, 'atype': 5}, - 'NE1': {'vrad': 1.64, 'atype': 3}, - 'CE2': {'vrad': 1.61, 'atype': 5}, - 'CE3': {'vrad': 1.76, 'atype': 5}, - 'CZ2': {'vrad': 1.76, 'atype': 5}, - 'CZ3': {'vrad': 1.76, 'atype': 5}, - 'CH2': {'vrad': 1.76, 'atype': 5}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'CD1': {'vrad': 1.76, 'atype': 5}, + 'CD2': {'vrad': 1.61, 'atype': 5}, + 'NE1': {'vrad': 1.64, 'atype': 3}, + 'CE2': {'vrad': 1.61, 'atype': 5}, + 'CE3': {'vrad': 1.76, 'atype': 5}, + 'CZ2': {'vrad': 1.76, 'atype': 5}, + 'CZ3': {'vrad': 1.76, 'atype': 5}, + 'CH2': {'vrad': 1.76, 'atype': 5}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "TYR": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG': {'vrad': 1.61, 'atype': 5}, - 'CD1': {'vrad': 1.76, 'atype': 5}, - 'CD2': {'vrad': 1.76, 'atype': 5}, - 'CE1': {'vrad': 1.76, 'atype': 5}, - 'CE2': {'vrad': 1.76, 'atype': 5}, - 'CZ': {'vrad': 1.61, 'atype': 5}, - 'OH': {'vrad': 1.46, 'atype': 1}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG': {'vrad': 1.61, 'atype': 5}, + 'CD1': {'vrad': 1.76, 'atype': 5}, + 'CD2': {'vrad': 1.76, 'atype': 5}, + 'CE1': {'vrad': 1.76, 'atype': 5}, + 'CE2': {'vrad': 1.76, 'atype': 5}, + 'CZ': {'vrad': 1.61, 'atype': 5}, + 'OH': {'vrad': 1.46, 'atype': 1}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, }, "VAL": { - 'N': {'vrad': 1.64, 'atype': 3}, - 'CA': {'vrad': 1.88, 'atype': 7}, - 'C': {'vrad': 1.61, 'atype': 6}, - 'O': {'vrad': 1.42, 'atype': 2}, - 'CB': {'vrad': 1.88, 'atype': 4}, - 'CG1': {'vrad': 1.88, 'atype': 4}, - 'CG2': {'vrad': 1.88, 'atype': 4}, - 'default': {'vrad': 0.00, 'atype': 0}, + 'N': {'vrad': 1.64, 'atype': 3}, + 'CA': {'vrad': 1.88, 'atype': 7}, + 'C': {'vrad': 1.61, 'atype': 6}, + 'O': {'vrad': 1.42, 'atype': 2}, + 'CB': {'vrad': 1.88, 'atype': 4}, + 'CG1': {'vrad': 1.88, 'atype': 4}, + 'CG2': {'vrad': 1.88, 'atype': 4}, + 'OXT': {'vrad': 1.42, 'atype': 2}, + 'default': {'vrad': 0.00, 'atype': 0}, } } @@ -301,7 +324,7 @@ def make_surface(position, fiba, fibb, vrad): def res2atom(arrin, residues, nresidues): - ''' + """ take an array with residue level data and repeat the entries over each atom within the residue @@ -321,7 +344,7 @@ def res2atom(arrin, residues, nresidues): so it's not too much of a limiting factor, but something to optimise better in future - ''' + """ # find out how many residues we have, and how many atoms are in each of them unique_values, counts = np.unique(residues, return_counts=True) @@ -341,9 +364,9 @@ def res2atom(arrin, residues, nresidues): def atom2res(arrin, residues, nresidues, norm=False): - ''' + """ take an array with atom level data and sum the entries over within the residue - ''' + """ out = np.array([int(arrin[np.where(residues == i)[0], np.where(residues == j)[0][:, np.newaxis]].sum()) for i in range(nresidues) for j in range(nresidues)]).reshape((nresidues, nresidues)) @@ -353,12 +376,12 @@ def atom2res(arrin, residues, nresidues, norm=False): return out -def BONDTYPE(i, j): - MAXATOMTYPE = 10 +def bondtype(i, j): + maxatomtype = 10 assert i >= 1 - assert i <= MAXATOMTYPE + assert i <= maxatomtype assert j >= 1 - assert j <= MAXATOMTYPE + assert j <= maxatomtype i -= 1 j -= 1 @@ -383,66 +406,89 @@ def BONDTYPE(i, j): [1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) return btype[i][j] -def calculate_contact_map(mol): - # some initial definitions of variables that we need - fib = 14 - fiba, fibb = 0, 1 - for _ in range(fib): - fiba, fibb = fibb, fiba + fibb +def contact_info(system): - alpha = 1.24 # Enlargement factor for attraction effects - water_radius = 2.80 # Radius of a water molecule in A + system = MergeAllMolecules().run_system(system) + G = make_residue_graph(system.molecules[0]) - # 1) Set up the basic information that we need to calculate the contact map - residues = [] - coords = [] - vdw_list = [] - atypes = [] + resids = [] + chains = [] resnames = [] + positions_all = [] + cogs = [] ca_pos = [] - chains = [] + vdw_list = [] + atypes = [] res_serial = [] - for node in mol.nodes: - try: - coords.append(mol.nodes[node]['position'] * 10) # need *10 here because of the way Vermouth read coords - residues.append(mol.nodes[node]['resid']) - res_serial.append(mol.nodes[node]['_res_serial']) - resnames.append(mol.nodes[node]['resname']) - vdw_list.append(get_vdw_radius(mol.nodes[node]['resname'], - mol.nodes[node]['atomname'])) - atypes.append(get_atype(mol.nodes[node]['resname'], - mol.nodes[node]['atomname'])) - if mol.nodes[node]['atomname'] == "CA": - ca_pos.append(mol.nodes[node]['position']) - chains.append(mol.nodes[node]['chain']) - - except KeyError: - pass - - residues = np.array(residues) + nodes = [] + for node in G.nodes: + # we only need these for writing at the end + resnames.append(G.nodes[node]['resname']) + resids.append(G.nodes[node]['resid']) + chains.append(G.nodes[node]['chain']) + nodes.append(G.nodes[node]['_res_serial']) + + res_pos = [] + for subnode in sorted(G.nodes[node]['graph'].nodes): + if 'position' in G.nodes[node]['graph'].nodes[subnode]: + res_serial.append(G.nodes[node]['graph'].nodes[subnode]['_res_serial']) + + res_pos.append(G.nodes[node]['graph'].nodes[subnode]['position'] * 10) + positions_all.append(G.nodes[node]['graph'].nodes[subnode]['position'] * 10) + + vdw_list.append(get_vdw_radius(G.nodes[node]['graph'].nodes[subnode]['resname'], + G.nodes[node]['graph'].nodes[subnode]['atomname'])) + atypes.append(get_atype(G.nodes[node]['graph'].nodes[subnode]['resname'], + G.nodes[node]['graph'].nodes[subnode]['atomname'])) + + if G.nodes[node]['graph'].nodes[subnode]['atomname'] == 'CA': + ca_pos.append(G.nodes[node]['graph'].nodes[subnode]['position']) + + cogs.append(np.stack(np.tile(np.stack(res_pos).mean(axis=0), (len(res_pos), 1)))) + + cogs = np.vstack(cogs) vdw_list = np.array(vdw_list) atypes = np.array(atypes) + coords = np.stack(positions_all) res_serial = np.array(res_serial) + resids = np.array(resids) + chains = np.array(chains) + resnames = np.array(resnames) + nodes = np.array(nodes) + # 2) find the number of residues that we have - nresidues = len(list(set(res_serial))) + nresidues = len(G) + + return cogs, vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G + + +def calculate_contact_map(cogs, vdw_list, atypes, coords, res_serial, + resids, chains, resnames, nodes, ca_pos, nresidues, + G): + + # some initial definitions of variables that we need + fib = 14 + fiba, fibb = 0, 1 + for _ in range(fib): + fiba, fibb = fibb, fiba + fibb + + alpha = 1.24 # Enlargement factor for attraction effects + water_radius = 2.80 # Radius of a water molecule in A # 4) set up final bits of information # sums of vdw pairs for each atom we have vdw_sum_array = vdw_list[:, np.newaxis] + vdw_list[np.newaxis, :] # distances between all the atoms that we have - atomic_distances = cdist(np.stack(coords), np.stack(coords)) + atomic_distances = cdist(coords, coords) # array with 1 on the diagonal, so we can exclude the self atoms diagonal_ones = np.diagflat(np.ones(atomic_distances.shape[0], dtype=int)) # get the coordinates of the centres of geometry for each residue - res_cogs = np.stack([np.stack(coords[np.where(res_serial == i)[0][0]: - np.where(res_serial == i)[0][-1]]).mean(axis=0) - for i in range(nresidues)]) - res_dists = res2atom(cdist(res_cogs, res_cogs), res_serial, nresidues) + res_dists = cdist(cogs, cogs) # 5) find atoms which meet the overlap criterion over = np.zeros_like(atomic_distances) @@ -472,7 +518,7 @@ def calculate_contact_map(mol): # get the target points target_points = surface_overlaps[1][np.where(surface_overlaps[0] == base_point)[0]] # array of all the target point coordinates - target_point_coords = np.stack(coords)[target_points] + target_point_coords = coords[target_points] # distances between the points on the base sphere surface and the target point coordinates surface_to_point = cdist(spheres[base_point], target_point_coords) # surface_to_point = cdist(sphere, target_point_coords) @@ -509,7 +555,7 @@ def calculate_contact_map(mol): at2 = atypes[k] if (at1 > 0) and (at2 > 0): contactcounter_1[i, k] += 1 - btype = BONDTYPE(at1, at2) + btype = bondtype(at1, at2) if btype <= 4: stabilisercounter_1[i, k] += 1 if btype == 5: @@ -520,12 +566,8 @@ def calculate_contact_map(mol): stabilisercounter_2 = atom2res(stabilisercounter_1, res_serial, nresidues) destabilisercounter_2 = atom2res(destabilisercounter_1, res_serial, nresidues) - # resnames = np.array(resnames)[np.unique(res_serial, return_index=True)[1]] - resids = np.array(residues)[np.unique(res_serial, return_index=True)[1]] - chains = np.array(chains)[np.unique(res_serial, return_index=True)[1]] - - # this to write out the file if needed - # with open('contact_map_out.out', 'w') as f: + # # this to write out the file if needed + # with open('contact_map_vermouth.out', 'w') as f: # count = 0 # for i1 in range(nresidues): # for i2 in range(nresidues): @@ -537,11 +579,13 @@ def calculate_contact_map(mol): # rcsu = stab - dest # # if (over > 0 or cont > 0) and (i1 != i2): + # a = np.where(nodes == i1)[0][0] + # b = np.where(nodes == i2)[0][0] # count += 1 # msg = (f"R {int(count):6d} " - # f"{int(i1 + 1):5d} {resnames[i1]:3s} {chains[i1]:1s} {int(resids[i1]):4d} " - # f"{int(i2 + 1):5d} {resnames[i2]:3s} {chains[i2]:1s} {int(resids[i2]):4d} " - # f"{euclidean(ca_pos[i1], ca_pos[i2]) * 10:9.4f} " + # f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s} {G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " + # f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s} {G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " + # f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " # f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" # f"{int(rcsu):6d} {int(cont):6d}\n") # f.writelines(msg) @@ -557,9 +601,13 @@ def calculate_contact_map(mol): rcsu = 1 if (stab - dest) > 0 else 0 if (over > 0 or cont > 0) and (i1 != i2): + a = np.where(nodes == i1)[0][0] + b = np.where(nodes == i2)[0][0] if over == 1 or (over == 0 and rcsu == 1): # this is a OV or rCSU contact we take it - contacts.append((resids[i1], chains[i1], resids[i2], chains[i2])) + contacts.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], + int(G.nodes[b]['resid']), G.nodes[b]['chain'])) + return contacts @@ -611,13 +659,6 @@ class GenerateContactMap(Processor): def __init__(self, path=None): self.path = path - def run_molecule(self, molecule): - if self.path is None: - self.system.go_params["go_map"].append(calculate_contact_map(molecule)) - else: - self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) - return molecule - def run_system(self, system): """ Process `system`. @@ -628,4 +669,21 @@ def run_system(self, system): The system to process. Is modified in-place. """ self.system = system - super().run_system(system) + + cogs, vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G = contact_info(system) + + if self.path is None: + self.system.go_params["go_map"].append(calculate_contact_map(cogs, + vdw_list, + atypes, + coords, + res_serial, + resids, + chains, + resnames, + nodes, + ca_pos, + nresidues, + G)) + else: + self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) diff --git a/vermouth/rcsu/go_pipeline.py b/vermouth/rcsu/go_pipeline.py index ecb35cf77..1917cb178 100644 --- a/vermouth/rcsu/go_pipeline.py +++ b/vermouth/rcsu/go_pipeline.py @@ -20,7 +20,6 @@ from ..processors.processor import Processor from .go_vs_includes import VirtualSiteCreator from .go_structure_bias import ComputeStructuralGoBias -from .contact_map import GenerateContactMap from ..processors import SetMoleculeMeta class GoProcessorPipeline(Processor): diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index 28a66092c..b516657c2 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -157,7 +157,7 @@ def contact_selector(self, molecule): # find all pairs of residues that are within bonded distance of # self.res_dist connected_pairs = dict(nx.all_pairs_shortest_path_length(self.res_graph, - cutoff=self.res_dist)) + cutoff=self.res_dist)) for contact in self.system.go_params["go_map"][0]: resIDA, chainA, resIDB, chainB = contact # identify the contact in the residue graph based on From a1a217f02a771c9521da348e1e668e5312de9fca Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:48:07 +0000 Subject: [PATCH 06/29] change implementation to using KDTree. --- bin/martinize2 | 20 +-- vermouth/rcsu/contact_map.py | 224 +++++++++++------------------ vermouth/rcsu/go_structure_bias.py | 2 - 3 files changed, 92 insertions(+), 154 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index f6824eea0..5b3d0a486 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -549,16 +549,10 @@ def entry(): dest="go", nargs='?', const=None, - type=str, + type=Path, help="Use Martini Go model. Accepts either an input file from the server, " "or just provide the flag to calculate as part of Martinize. Can be slow for large proteins " "(> 1500 residues)" - # required=False, - # type=Path, - # action='store_true', - # default=False, - # help="Contact map to be used for the Martini Go model." - # "Currently, only one format is supported. See docs.", ) go_group.add_argument( "-go-eps", @@ -834,12 +828,19 @@ def entry(): "be used together." ) + """ + Sort out the use of the go model: + + go = True : do the go model + go_file = None : calculate the contact map in martinize2 + go_file = some file : read in the contact map from elsewhere + """ go = False go_file = None if args.go is None: go = True else: - if os.path.isfile(args.go): + if Path(args.go).is_file(): go_file = args.go go = True @@ -1015,14 +1016,13 @@ def entry(): # Generate the Go model if required if go: - if not go_map: + if not system.go_params["go_map"]: LOGGER.info("Reading Go model contact map.", type="step") GenerateContactMap(path=go_file).run_system(system) go_name_prefix = args.molname LOGGER.info("Generating the Go model.", type="step") GoPipeline.run_system(system, moltype=go_name_prefix, - # contact_map=go_map, cutoff_short=args.go_low, cutoff_long=args.go_up, go_eps=args.go_eps, diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index c16606da3..859060f24 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -15,6 +15,7 @@ from ..processors.processor import Processor import numpy as np from scipy.spatial.distance import euclidean, cdist +from scipy.spatial import cKDTree as KDTree from .. import MergeAllMolecules from ..graph_utils import make_residue_graph @@ -280,10 +281,10 @@ def get_vdw_radius(resname, atomname): """ res_vdw = PROTEIN_MAP[resname] try: - atom_vdw = res_vdw[atomname]['vrad'] + atom_vdw = res_vdw[atomname] except KeyError: - atom_vdw = res_vdw['default']['vrad'] - return atom_vdw + atom_vdw = res_vdw['default'] + return atom_vdw['vrad'] def get_atype(resname, atomname): @@ -292,19 +293,25 @@ def get_atype(resname, atomname): """ res_vdw = PROTEIN_MAP[resname] try: - atom_vdw = res_vdw[atomname]['atype'] + atom_vdw = res_vdw[atomname] except KeyError: - atom_vdw = res_vdw['default']['atype'] - return atom_vdw + atom_vdw = res_vdw['default'] + return atom_vdw['atype'] def make_surface(position, fiba, fibb, vrad): """ Generate points on a sphere using Fibonacci points + position: np.array + shape (3,) array of an atomic position to build a sphere around + fiba: int. n-1 fibonacci number to build number of points on sphere + fibb: int. n fibonacci number to build number of points on sphere + vrad: float. VdW radius of the input atom to build a sphere around. + position: centre of sphere """ - x, y, z = position[0], position[1], position[2] + x, y, z = position phi_aux = 0 surface = np.zeros((0, 3)) @@ -323,49 +330,18 @@ def make_surface(position, fiba, fibb, vrad): return surface -def res2atom(arrin, residues, nresidues): - """ - take an array with residue level data and repeat the entries over - each atom within the residue - - would be nice to do this with list comprehension but I can't work out how - to do something like: - - [np.tile(res_dists[i,j], - np.where(residues == i)[0].size) - for i in range(nresidues) - for j in range(nresidues) - ] - - to get it correct in the 2 dimensional way we actually need. - - At the moment we only need this function once - (to get the residue COGs foreach atom) - so it's not too much of a limiting factor, but something to optimise - better in future - - """ - # find out how many residues we have, and how many atoms are in each of them - unique_values, counts = np.unique(residues, return_counts=True) - - assert len(unique_values) == nresidues - - out = np.zeros((len(residues), len(residues))) - start0 = 0 - for i, j in zip(unique_values, counts): - start1 = 0 - for k, l in zip(unique_values, counts): - target_value = arrin[i, k] - out[start0:start0 + j, start1:start1 + l] = target_value.sum() - start1 += l - start0 += j - - return out - - def atom2res(arrin, residues, nresidues, norm=False): """ take an array with atom level data and sum the entries over within the residue + + arrin: np.ndarray + NxN array of entries for each atom + residues: np.array + array of length N indicating which residue an atom belongs to + nresidues: int + number of residues in the molecule + norm: bool + if True, then any entry > 0 in the summed array = 1 """ out = np.array([int(arrin[np.where(residues == i)[0], np.where(residues == j)[0][:, np.newaxis]].sum()) for i in range(nresidues) @@ -378,10 +354,8 @@ def atom2res(arrin, residues, nresidues, norm=False): def bondtype(i, j): maxatomtype = 10 - assert i >= 1 - assert i <= maxatomtype - assert j >= 1 - assert j <= maxatomtype + assert 1 <= i <= maxatomtype + assert 1 <= j <= maxatomtype i -= 1 j -= 1 @@ -416,38 +390,33 @@ def contact_info(system): chains = [] resnames = [] positions_all = [] - cogs = [] ca_pos = [] vdw_list = [] atypes = [] res_serial = [] nodes = [] - for node in G.nodes: + for residue in G.nodes: # we only need these for writing at the end - resnames.append(G.nodes[node]['resname']) - resids.append(G.nodes[node]['resid']) - chains.append(G.nodes[node]['chain']) - nodes.append(G.nodes[node]['_res_serial']) + resnames.append(G.nodes[residue]['resname']) + resids.append(G.nodes[residue]['resid']) + chains.append(G.nodes[residue]['chain']) + nodes.append(G.nodes[residue]['_res_serial']) - res_pos = [] - for subnode in sorted(G.nodes[node]['graph'].nodes): - if 'position' in G.nodes[node]['graph'].nodes[subnode]: - res_serial.append(G.nodes[node]['graph'].nodes[subnode]['_res_serial']) + for atom in sorted(G.nodes[residue]['graph'].nodes): + if 'position' in G.nodes[residue]['graph'].nodes[atom]: + res_serial.append(G.nodes[residue]['graph'].nodes[atom]['_res_serial']) - res_pos.append(G.nodes[node]['graph'].nodes[subnode]['position'] * 10) - positions_all.append(G.nodes[node]['graph'].nodes[subnode]['position'] * 10) + positions_all.append(G.nodes[residue]['graph'].nodes[atom]['position'] * 10) - vdw_list.append(get_vdw_radius(G.nodes[node]['graph'].nodes[subnode]['resname'], - G.nodes[node]['graph'].nodes[subnode]['atomname'])) - atypes.append(get_atype(G.nodes[node]['graph'].nodes[subnode]['resname'], - G.nodes[node]['graph'].nodes[subnode]['atomname'])) + vdw_list.append(get_vdw_radius(G.nodes[residue]['graph'].nodes[atom]['resname'], + G.nodes[residue]['graph'].nodes[atom]['atomname'])) + atypes.append(get_atype(G.nodes[residue]['graph'].nodes[atom]['resname'], + G.nodes[residue]['graph'].nodes[atom]['atomname'])) - if G.nodes[node]['graph'].nodes[subnode]['atomname'] == 'CA': - ca_pos.append(G.nodes[node]['graph'].nodes[subnode]['position']) + if G.nodes[residue]['graph'].nodes[atom]['atomname'] == 'CA': + ca_pos.append(G.nodes[residue]['graph'].nodes[atom]['position']) - cogs.append(np.stack(np.tile(np.stack(res_pos).mean(axis=0), (len(res_pos), 1)))) - cogs = np.vstack(cogs) vdw_list = np.array(vdw_list) atypes = np.array(atypes) coords = np.stack(positions_all) @@ -461,10 +430,10 @@ def contact_info(system): # 2) find the number of residues that we have nresidues = len(G) - return cogs, vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G + return vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G -def calculate_contact_map(cogs, vdw_list, atypes, coords, res_serial, +def calculate_contact_map(vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G): @@ -473,80 +442,52 @@ def calculate_contact_map(cogs, vdw_list, atypes, coords, res_serial, fiba, fibb = 0, 1 for _ in range(fib): fiba, fibb = fibb, fiba + fibb + natoms = len(coords) alpha = 1.24 # Enlargement factor for attraction effects water_radius = 2.80 # Radius of a water molecule in A - # 4) set up final bits of information - # sums of vdw pairs for each atom we have - vdw_sum_array = vdw_list[:, np.newaxis] + vdw_list[np.newaxis, :] + coords_tree = KDTree(coords) + # all_vdw = np.array([x for xs in + # [[PROTEIN_MAP[i][j]['vrad'] for j in PROTEIN_MAP[i].keys()] + # for i in PROTEIN_MAP.keys()] + # for x in xs]) + over = np.zeros((len(coords), len(coords))) + vdw_max = 1.88 # all_vdw.max() + over_sdm = coords_tree.sparse_distance_matrix(coords_tree, 2 * vdw_max * alpha) + for (idx, jdx), distance_between in over_sdm.items(): + if idx != jdx: + if distance_between < (vdw_list[idx] + vdw_list[jdx]) * alpha: + over[idx, jdx] = 1 + + # set up the surface overlap criterion + # generate fibonacci spheres for all atoms. + # can't decide whether quicker/better for memory to generate all in one go here + # or incorporate into the loop. code to do it more on the fly is left in the loop for now + spheres = np.stack([KDTree(make_surface(i, fiba, fibb, water_radius + j)) + for i, j in zip(coords, vdw_list)]) - # distances between all the atoms that we have - atomic_distances = cdist(coords, coords) + hit_results = np.full((natoms, fibb), -1) + dists_counter = np.full((natoms, fibb), np.inf) + surface_sdm = coords_tree.sparse_distance_matrix(coords_tree, (2 * vdw_max) + water_radius) + for (idx, jdx), distance_between in surface_sdm.items(): + if idx != jdx: - # array with 1 on the diagonal, so we can exclude the self atoms - diagonal_ones = np.diagflat(np.ones(atomic_distances.shape[0], dtype=int)) + if distance_between < (vdw_list[idx] + vdw_list[jdx] + water_radius): - # get the coordinates of the centres of geometry for each residue - res_dists = cdist(cogs, cogs) + base_tree = spheres[idx] + vdw = vdw_list[jdx] + water_radius - # 5) find atoms which meet the overlap criterion - over = np.zeros_like(atomic_distances) - overlaps = np.where((atomic_distances <= (vdw_sum_array * alpha)) & - (diagonal_ones != 1) & - (res_dists < 14)) - over[overlaps[0], overlaps[1]] = 1 + res = np.array(base_tree.query_ball_point(coords[jdx], vdw)) + if len(res) > 0: + to_fill = np.where(distance_between < dists_counter[idx][res])[0] - # 6) set up the surface overlap criterion - # generate fibonacci spheres for all atoms. - # can't decide whether quicker/better for memory to generate all in one go here - # or incorporate into the loop. code to do it more on the fly is left in the loop for now - spheres = np.stack([make_surface(i, fiba, fibb, water_radius + j) for i, j in zip(coords, vdw_list)]) - surface_overlaps = np.where((atomic_distances <= (vdw_sum_array + water_radius)) & - (diagonal_ones != 1) & - (res_dists < 14)) - # find which atoms are uniquely involved as base points - base_points = np.unique(surface_overlaps[0]) - - hit_results = np.ones((spheres.shape[0], spheres.shape[1]), dtype=int) * -1 - - # loop over all base points - for base_point in base_points: - - # generate the base point sphere now if we didn't earlier. - # sphere = make_surface(coords[base_point], fiba, fibb, vdw_list[base_point] + water_radius) - # get the target points - target_points = surface_overlaps[1][np.where(surface_overlaps[0] == base_point)[0]] - # array of all the target point coordinates - target_point_coords = coords[target_points] - # distances between the points on the base sphere surface and the target point coordinates - surface_to_point = cdist(spheres[base_point], target_point_coords) - # surface_to_point = cdist(sphere, target_point_coords) - # cutoff distances for each of the target points - target_distances = vdw_list[target_points] + water_radius - - for i, j in enumerate(surface_to_point): - ''' - first find where the radius condition is met, i.e. where the distance between - the target point and this point on the surface is smaller than the vdw radius - of the target point - ''' - radius_condition = j < target_distances - if any(radius_condition): - ''' - For all the points that meet this condition, look at the distance between the - target point and the base point - ''' - distances_to_compare = atomic_distances[base_point][target_points[radius_condition]] - ''' - the point that we need is the point with the smallest distance - ''' - point_needed = target_points[radius_condition][distances_to_compare.argmin()] - hit_results[base_point, i] = point_needed - - contactcounter_1 = np.zeros_like(atomic_distances) - stabilisercounter_1 = np.zeros_like(atomic_distances) - destabilisercounter_1 = np.zeros_like(atomic_distances) + dists_counter[idx][res[to_fill]] = distance_between + hit_results[idx][res[to_fill]] = jdx + + contactcounter_1 = np.zeros((natoms, natoms)) + stabilisercounter_1 = np.zeros((natoms, natoms)) + destabilisercounter_1 = np.zeros((natoms, natoms)) for i, j in enumerate(hit_results): for k in j: @@ -670,11 +611,10 @@ def run_system(self, system): """ self.system = system - cogs, vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G = contact_info(system) - if self.path is None: - self.system.go_params["go_map"].append(calculate_contact_map(cogs, - vdw_list, + vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G = contact_info( + system) + self.system.go_params["go_map"].append(calculate_contact_map(vdw_list, atypes, coords, res_serial, diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index b516657c2..e509e709c 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -46,7 +46,6 @@ class ComputeStructuralGoBias(Processor): replacement in the GoPipeline. """ def __init__(self, - # contact_map, cutoff_short, cutoff_long, go_eps, @@ -85,7 +84,6 @@ def __init__(self, magic number for Go contacts from the old GoVirt script. """ - # self.contact_map = contact_map self.cutoff_short = cutoff_short self.cutoff_long = cutoff_long self.go_eps = go_eps From 3468c0e3b21ed07b8597b6809099d8b8ff576829 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:47:44 +0000 Subject: [PATCH 07/29] tidy up for readability and testing, added comments and docstrings --- vermouth/rcsu/contact_map.py | 246 +++++++++++++++++++++++++---------- 1 file changed, 175 insertions(+), 71 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 859060f24..48231b32d 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -382,6 +382,9 @@ def bondtype(i, j): def contact_info(system): + """ + get the atom attributes that we need to calculate the contacts + """ system = MergeAllMolecules().run_system(system) G = make_residue_graph(system.molecules[0]) @@ -432,59 +435,105 @@ def contact_info(system): return vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G - -def calculate_contact_map(vdw_list, atypes, coords, res_serial, - resids, chains, resnames, nodes, ca_pos, nresidues, - G): - - # some initial definitions of variables that we need - fib = 14 - fiba, fibb = 0, 1 - for _ in range(fib): - fiba, fibb = fibb, fiba + fibb - natoms = len(coords) - +def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max): + """ + Find enlarged (OV) overlap contacts + + coords_tree: KDTree + KDTree of the input coordinates + vdw_list: list + list of vdw radii of the input coordinates + natoms: int + number of atoms in the molecule + vdw_max: float + maximum possible vdw radius of atoms + """ alpha = 1.24 # Enlargement factor for attraction effects - water_radius = 2.80 # Radius of a water molecule in A - - coords_tree = KDTree(coords) - # all_vdw = np.array([x for xs in - # [[PROTEIN_MAP[i][j]['vrad'] for j in PROTEIN_MAP[i].keys()] - # for i in PROTEIN_MAP.keys()] - # for x in xs]) - over = np.zeros((len(coords), len(coords))) - vdw_max = 1.88 # all_vdw.max() + over = np.zeros((natoms, natoms)) over_sdm = coords_tree.sparse_distance_matrix(coords_tree, 2 * vdw_max * alpha) for (idx, jdx), distance_between in over_sdm.items(): if idx != jdx: if distance_between < (vdw_list[idx] + vdw_list[jdx]) * alpha: over[idx, jdx] = 1 + return over + +def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max): + """ + Calculate contacts of structural units (CSU) + + coords: Nx3 numpy array + coordinates of atoms in the molecule + vdw_list: list + vdw radii of the atoms in the molecule + fiba, fibb: int + n-1th and nth fibonacci numbers from which to generate points on a sphere around the input coordinate + natoms: int + number of atoms in the molecule + coords_tree: KDTree + KDTree of the input coordinates + vdw_max: float + maximum possible vdw radius of atoms + + Returns: + hit_results: natoms x fibb np.array + each i,j entry is the index of the atom in coords which is the closest atom to atom i at index j of the + fibonacci sphere + + """ + water_radius = 2.80 # Radius of a water molecule in A - # set up the surface overlap criterion # generate fibonacci spheres for all atoms. - # can't decide whether quicker/better for memory to generate all in one go here - # or incorporate into the loop. code to do it more on the fly is left in the loop for now + # can't decide whether quicker/better for memory to generate all in one go here or incorporate into the loop spheres = np.stack([KDTree(make_surface(i, fiba, fibb, water_radius + j)) for i, j in zip(coords, vdw_list)]) + #setup arrays to keep track hit_results = np.full((natoms, fibb), -1) dists_counter = np.full((natoms, fibb), np.inf) + + # sparse matrix with a cutoff at the maximum possible distance for a contact surface_sdm = coords_tree.sparse_distance_matrix(coords_tree, (2 * vdw_max) + water_radius) + # n.b. this loop works because sparse_distance_matrix is sorted by (idx, jdx) pairs for (idx, jdx), distance_between in surface_sdm.items(): + # don't take atoms which are identical if idx != jdx: - + # check that the distance between them is shorter than the vdw sum and the water radius if distance_between < (vdw_list[idx] + vdw_list[jdx] + water_radius): - + # get the KDTree corresponding to this base point base_tree = spheres[idx] + + # get the vdw distance of the target point vdw = vdw_list[jdx] + water_radius + # find points on the base point sphere which are within the vdw cutoff of the target point's coordinate res = np.array(base_tree.query_ball_point(coords[jdx], vdw)) + + # if we have any results if len(res) > 0: + # find where the distance between the two points is smaller than the current recorded distance + # at the points which are within the cutoff to_fill = np.where(distance_between < dists_counter[idx][res])[0] + # record the new distances and indices of the points dists_counter[idx][res[to_fill]] = distance_between hit_results[idx][res[to_fill]] = jdx + return hit_results + + +def contact_types(hit_results, natoms, atypes): + """ + From CSU contacts, establish contact types from atomtypes + + hit_results: NxM ndarray + array for N atoms in molecule for M fibonnaci points on each atom. + Each i,j entry is the index of the atom which is the closest contact to i + natoms: int + number of atoms in the molecule + atypes: array + list of the atomtypes of each atom in the molecule + """ + contactcounter_1 = np.zeros((natoms, natoms)) stabilisercounter_1 = np.zeros((natoms, natoms)) destabilisercounter_1 = np.zeros((natoms, natoms)) @@ -502,43 +551,68 @@ def calculate_contact_map(vdw_list, atypes, coords, res_serial, if btype == 5: destabilisercounter_1[i, k] += 1 + return contactcounter_1, stabilisercounter_1, destabilisercounter_1 + + +def calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): + """ + run the contact calculation functions + + vdw_list: np.array + list of the vdw radii of the atoms in the system + atypes: np.array + list of the atom types in the system to determine the nature of contacts + coords: nx3 array + coordinates of all the atoms in the system + res_serial: np.array + list of the serial residue number of each atom in the system + nresidues: int + number of residues in the system + """ + + # some initial definitions of variables that we need + fib = 14 + fiba, fibb = 0, 1 + for _ in range(fib): + fiba, fibb = fibb, fiba + fibb + + natoms = len(coords) + + # all_vdw = np.array([x for xs in + # [[PROTEIN_MAP[i][j]['vrad'] for j in PROTEIN_MAP[i].keys()] + # for i in PROTEIN_MAP.keys()] + # for x in xs]) + vdw_max = 1.88 # all_vdw.max() + + # make the KDTree of the input coordinates + coords_tree = KDTree(coords) + + # calculate the OV contacts of the molecule + over = calculate_overlap(coords_tree, vdw_list, natoms, vdw_max) + + # Calculate the CSU contacts of the molecule + hit_results = calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max) + + # find the types of contacts we have + contactcounter_1, stabilisercounter_1, destabilisercounter_1 = contact_types(hit_results, natoms, atypes) + + # transform the resolution between atoms and residues overlapcounter_2 = atom2res(over, res_serial, nresidues, norm=True) contactcounter_2 = atom2res(contactcounter_1, res_serial, nresidues) stabilisercounter_2 = atom2res(stabilisercounter_1, res_serial, nresidues) destabilisercounter_2 = atom2res(destabilisercounter_1, res_serial, nresidues) - # # this to write out the file if needed - # with open('contact_map_vermouth.out', 'w') as f: - # count = 0 - # for i1 in range(nresidues): - # for i2 in range(nresidues): - # over = overlapcounter_2[i1, i2] - # cont = contactcounter_2[i1, i2] - # stab = stabilisercounter_2[i1, i2] - # dest = destabilisercounter_2[i1, i2] - # ocsu = stab - # rcsu = stab - dest - # - # if (over > 0 or cont > 0) and (i1 != i2): - # a = np.where(nodes == i1)[0][0] - # b = np.where(nodes == i2)[0][0] - # count += 1 - # msg = (f"R {int(count):6d} " - # f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s} {G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " - # f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s} {G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " - # f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " - # f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" - # f"{int(rcsu):6d} {int(cont):6d}\n") - # f.writelines(msg) - - contacts = [] + return overlapcounter_2, contactcounter_2, stabilisercounter_2, destabilisercounter_2 + + +def get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, G): + contacts_list = [] for i1 in range(nresidues): for i2 in range(nresidues): - over = overlapcounter_2[i1, i2] - cont = contactcounter_2[i1, i2] - stab = stabilisercounter_2[i1, i2] - dest = destabilisercounter_2[i1, i2] - # ocsu = stab + over = overlaps[i1, i2] + cont = contacts[i1, i2] + stab = stabilisers[i1, i2] + dest = destabilisers[i1, i2] rcsu = 1 if (stab - dest) > 0 else 0 if (over > 0 or cont > 0) and (i1 != i2): @@ -546,10 +620,38 @@ def calculate_contact_map(vdw_list, atypes, coords, res_serial, b = np.where(nodes == i2)[0][0] if over == 1 or (over == 0 and rcsu == 1): # this is a OV or rCSU contact we take it - contacts.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], - int(G.nodes[b]['resid']), G.nodes[b]['chain'])) - - return contacts + contacts_list.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], + int(G.nodes[b]['resid']), G.nodes[b]['chain'])) + + return contacts_list + + +def write_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, ca_pos, G): + # this to write out the file if needed + with open('contact_map_vermouth.out', 'w') as f: + count = 0 + for i1 in range(nresidues): + for i2 in range(nresidues): + over = overlaps[i1, i2] + cont = contacts[i1, i2] + stab = stabilisers[i1, i2] + dest = destabilisers[i1, i2] + ocsu = stab + rcsu = stab - dest + + if (over > 0 or cont > 0) and (i1 != i2): + a = np.where(nodes == i1)[0][0] + b = np.where(nodes == i2)[0][0] + count += 1 + msg = (f"R {int(count):6d} " + f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s}" + f"{G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " + f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s}" + f"{G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " + f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " + f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" + f"{int(rcsu):6d} {int(cont):6d}\n") + f.writelines(msg) """ @@ -614,16 +716,18 @@ def run_system(self, system): if self.path is None: vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G = contact_info( system) - self.system.go_params["go_map"].append(calculate_contact_map(vdw_list, - atypes, - coords, - res_serial, - resids, - chains, - resnames, - nodes, - ca_pos, - nresidues, - G)) + + overlaps, contacts, stabilisers, destabilisers = calculate_contacts(vdw_list, + atypes, + coords, + res_serial, + nresidues) + + self.system.go_params["go_map"].append(get_contacts(nresidues, + overlaps, contacts, + stabilisers, + destabilisers, + nodes, + G)) else: self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) From 36781762921318e8658bedd6c222673fc8c0f263 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:08:46 +0000 Subject: [PATCH 08/29] addressed smaller comments. atom2res now significantly faster with prearranged dictionary --- bin/martinize2 | 16 ++- vermouth/rcsu/contact_map.py | 215 +++++++++++++++++------------------ 2 files changed, 111 insertions(+), 120 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 5b3d0a486..9c8f3dbdd 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -22,7 +22,6 @@ import argparse import functools import logging import itertools -import os.path from pathlib import Path import sys import networkx as nx @@ -831,9 +830,9 @@ def entry(): """ Sort out the use of the go model: - go = True : do the go model - go_file = None : calculate the contact map in martinize2 - go_file = some file : read in the contact map from elsewhere + go_file = True: calculate contact map + go_file = str: parse contact map + bool(go_file) = False: no go """ go = False go_file = None @@ -985,13 +984,15 @@ def entry(): elif args.cystein_bridge != "auto": vermouth.AddCysteinBridgesThreshold(args.cystein_bridge).run_system(system) - go_map = False if go: # need this here because have to get contact map at atomistic resolution if go_file is None: LOGGER.info("Generating Go model contact map.", type="step") GenerateContactMap().run_system(system) - go_map = True + else: + LOGGER.info("Reading Go model contact map.", type="step") + GenerateContactMap(path=go_file).run_system(system) + # Run martinize on the system. system = martinize( @@ -1016,9 +1017,6 @@ def entry(): # Generate the Go model if required if go: - if not system.go_params["go_map"]: - LOGGER.info("Reading Go model contact map.", type="step") - GenerateContactMap(path=go_file).run_system(system) go_name_prefix = args.molname LOGGER.info("Generating the Go model.", type="step") GoPipeline.run_system(system, diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 48231b32d..388c4e8ba 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -14,11 +14,11 @@ from ..processors.processor import Processor import numpy as np -from scipy.spatial.distance import euclidean, cdist +from scipy.spatial.distance import euclidean from scipy.spatial import cKDTree as KDTree from .. import MergeAllMolecules from ..graph_utils import make_residue_graph - +from itertools import product PROTEIN_MAP = { "ALA": { @@ -311,41 +311,35 @@ def make_surface(position, fiba, fibb, vrad): position: centre of sphere """ - x, y, z = position - phi_aux = 0 - surface = np.zeros((0, 3)) - for k in range(fibb): + x, y, z = position - phi_aux += fiba - if phi_aux > fibb: - phi_aux -= fibb + k = np.arange(fibb) + phi_aux = (np.arange(fibb) * fiba) % fibb + theta = np.arccos(1.0 - 2.0 * k / fibb) + phi = 2.0 * np.pi * phi_aux / fibb + surface_x = x + vrad * np.sin(theta) * np.cos(phi) + surface_y = y + vrad * np.sin(theta) * np.sin(phi) + surface_z = z + vrad * np.cos(theta) + surface = np.stack((surface_x, surface_y, surface_z), axis=-1) - theta = np.arccos(1.0 - 2.0 * k / fibb) - phi = 2.0 * np.pi * phi_aux / fibb - surface_x = x + vrad * np.sin(theta) * np.cos(phi) - surface_y = y + vrad * np.sin(theta) * np.sin(phi) - surface_z = z + vrad * np.cos(theta) - surface = np.vstack((surface, np.array([surface_x, surface_y, surface_z]))) return surface -def atom2res(arrin, residues, nresidues, norm=False): - """ +def atom2res(arrin, nresidues, atom_map, norm=False): + ''' take an array with atom level data and sum the entries over within the residue - arrin: np.ndarray - NxN array of entries for each atom - residues: np.array - array of length N indicating which residue an atom belongs to - nresidues: int - number of residues in the molecule - norm: bool - if True, then any entry > 0 in the summed array = 1 - """ - out = np.array([int(arrin[np.where(residues == i)[0], np.where(residues == j)[0][:, np.newaxis]].sum()) - for i in range(nresidues) - for j in range(nresidues)]).reshape((nresidues, nresidues)) + ''' + + out = np.zeros((nresidues, nresidues)) + for res_idx, res_jdx in product(np.arange(nresidues), np.arange(nresidues)): + atom_idxs = np.array(atom_map[res_idx]) + atom_jdxs = np.array(atom_map[res_jdx]) + value = arrin[atom_idxs, + atom_jdxs[:, np.newaxis]].sum() + out[res_idx, res_jdx] = value + if norm: out[out > 0] = 1 @@ -404,20 +398,22 @@ def contact_info(system): resids.append(G.nodes[residue]['resid']) chains.append(G.nodes[residue]['chain']) nodes.append(G.nodes[residue]['_res_serial']) + subgraph = G.nodes[residue]['graph'] for atom in sorted(G.nodes[residue]['graph'].nodes): - if 'position' in G.nodes[residue]['graph'].nodes[atom]: - res_serial.append(G.nodes[residue]['graph'].nodes[atom]['_res_serial']) + position = subgraph.nodes[atom].get('position', [np.nan]*3) + if np.isfinite(position).all(): + res_serial.append(subgraph.nodes[atom]['_res_serial']) - positions_all.append(G.nodes[residue]['graph'].nodes[atom]['position'] * 10) + positions_all.append(subgraph.nodes[atom]['position'] * 10) - vdw_list.append(get_vdw_radius(G.nodes[residue]['graph'].nodes[atom]['resname'], - G.nodes[residue]['graph'].nodes[atom]['atomname'])) - atypes.append(get_atype(G.nodes[residue]['graph'].nodes[atom]['resname'], - G.nodes[residue]['graph'].nodes[atom]['atomname'])) + vdw_list.append(get_vdw_radius(subgraph.nodes[atom]['resname'], + subgraph.nodes[atom]['atomname'])) + atypes.append(get_atype(subgraph.nodes[atom]['resname'], + subgraph.nodes[atom]['atomname'])) - if G.nodes[residue]['graph'].nodes[atom]['atomname'] == 'CA': - ca_pos.append(G.nodes[residue]['graph'].nodes[atom]['position']) + if subgraph.nodes[atom]['atomname'] == 'CA': + ca_pos.append(subgraph.nodes[atom]['position']) vdw_list = np.array(vdw_list) @@ -435,7 +431,7 @@ def contact_info(system): return vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G -def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max): +def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): """ Find enlarged (OV) overlap contacts @@ -447,8 +443,9 @@ def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max): number of atoms in the molecule vdw_max: float maximum possible vdw radius of atoms + alpha: float + Enlargement factor for attraction effects """ - alpha = 1.24 # Enlargement factor for attraction effects over = np.zeros((natoms, natoms)) over_sdm = coords_tree.sparse_distance_matrix(coords_tree, 2 * vdw_max * alpha) for (idx, jdx), distance_between in over_sdm.items(): @@ -457,7 +454,7 @@ def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max): over[idx, jdx] = 1 return over -def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max): +def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius): """ Calculate contacts of structural units (CSU) @@ -473,6 +470,8 @@ def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max): KDTree of the input coordinates vdw_max: float maximum possible vdw radius of atoms + water_radius: float + radius of water molecule in A Returns: hit_results: natoms x fibb np.array @@ -480,12 +479,7 @@ def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max): fibonacci sphere """ - water_radius = 2.80 # Radius of a water molecule in A - # generate fibonacci spheres for all atoms. - # can't decide whether quicker/better for memory to generate all in one go here or incorporate into the loop - spheres = np.stack([KDTree(make_surface(i, fiba, fibb, water_radius + j)) - for i, j in zip(coords, vdw_list)]) #setup arrays to keep track hit_results = np.full((natoms, fibb), -1) @@ -496,27 +490,28 @@ def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max): # n.b. this loop works because sparse_distance_matrix is sorted by (idx, jdx) pairs for (idx, jdx), distance_between in surface_sdm.items(): # don't take atoms which are identical - if idx != jdx: - # check that the distance between them is shorter than the vdw sum and the water radius - if distance_between < (vdw_list[idx] + vdw_list[jdx] + water_radius): - # get the KDTree corresponding to this base point - base_tree = spheres[idx] + if idx == jdx: + continue - # get the vdw distance of the target point - vdw = vdw_list[jdx] + water_radius + # check that the distance between them is shorter than the vdw sum and the water radius + if distance_between >= (vdw_list[idx] + vdw_list[jdx] + water_radius): + continue - # find points on the base point sphere which are within the vdw cutoff of the target point's coordinate - res = np.array(base_tree.query_ball_point(coords[jdx], vdw)) + # Generate the fibonacci sphere for this point and make a KDTree from it + base_tree = KDTree(make_surface(coords[idx], fiba, fibb, vdw_list[idx]+water_radius)) - # if we have any results - if len(res) > 0: - # find where the distance between the two points is smaller than the current recorded distance - # at the points which are within the cutoff - to_fill = np.where(distance_between < dists_counter[idx][res])[0] + # find points on the base point sphere which are within the vdw cutoff of the target point's coordinate + res = np.array(base_tree.query_ball_point(coords[jdx], vdw_list[jdx] + water_radius)) - # record the new distances and indices of the points - dists_counter[idx][res[to_fill]] = distance_between - hit_results[idx][res[to_fill]] = jdx + # if we have any results + if len(res) > 0: + # find where the distance between the two points is smaller than the current recorded distance + # at the points which are within the cutoff + to_fill = np.where(distance_between < dists_counter[idx][res])[0] + + # record the new distances and indices of the points + dists_counter[idx][res[to_fill]] = distance_between + hit_results[idx][res[to_fill]] = jdx return hit_results @@ -578,50 +573,50 @@ def calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): natoms = len(coords) - # all_vdw = np.array([x for xs in - # [[PROTEIN_MAP[i][j]['vrad'] for j in PROTEIN_MAP[i].keys()] - # for i in PROTEIN_MAP.keys()] - # for x in xs]) - vdw_max = 1.88 # all_vdw.max() + vdw_max = max(item['vmax'] for atoms in PROTEIN_MAP.values() for item in atoms.values()) # make the KDTree of the input coordinates coords_tree = KDTree(coords) # calculate the OV contacts of the molecule - over = calculate_overlap(coords_tree, vdw_list, natoms, vdw_max) + over = calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha=1.24) # Calculate the CSU contacts of the molecule - hit_results = calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max) + hit_results = calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius=2.80) # find the types of contacts we have contactcounter_1, stabilisercounter_1, destabilisercounter_1 = contact_types(hit_results, natoms, atypes) + atom_map = {} + for i in range(nresidues): + atom_map[i] = np.where(res_serial == i)[0] + # transform the resolution between atoms and residues - overlapcounter_2 = atom2res(over, res_serial, nresidues, norm=True) - contactcounter_2 = atom2res(contactcounter_1, res_serial, nresidues) - stabilisercounter_2 = atom2res(stabilisercounter_1, res_serial, nresidues) - destabilisercounter_2 = atom2res(destabilisercounter_1, res_serial, nresidues) + overlapcounter_2 = atom2res(over, nresidues, atom_map, norm=True) + contactcounter_2 = atom2res(contactcounter_1, nresidues, atom_map) + stabilisercounter_2 = atom2res(stabilisercounter_1, nresidues, atom_map) + destabilisercounter_2 = atom2res(destabilisercounter_1, nresidues, atom_map) return overlapcounter_2, contactcounter_2, stabilisercounter_2, destabilisercounter_2 def get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, G): contacts_list = [] - for i1 in range(nresidues): - for i2 in range(nresidues): - over = overlaps[i1, i2] - cont = contacts[i1, i2] - stab = stabilisers[i1, i2] - dest = destabilisers[i1, i2] - rcsu = 1 if (stab - dest) > 0 else 0 - - if (over > 0 or cont > 0) and (i1 != i2): - a = np.where(nodes == i1)[0][0] - b = np.where(nodes == i2)[0][0] - if over == 1 or (over == 0 and rcsu == 1): - # this is a OV or rCSU contact we take it - contacts_list.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], - int(G.nodes[b]['resid']), G.nodes[b]['chain'])) + for i1, i2 in product(np.arange(nresidues), np.arange(nresidues)): + if i1 == i2: continue + over = overlaps[i1, i2] + cont = contacts[i1, i2] + stab = stabilisers[i1, i2] + dest = destabilisers[i1, i2] + rcsu = (stab - dest) > 0 + + if (over > 0 or cont > 0): + a = np.where(nodes == i1)[0][0] + b = np.where(nodes == i2)[0][0] + if over == 1 or (over == 0 and rcsu): + # this is a OV or rCSU contact we take it + contacts_list.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], + int(G.nodes[b]['resid']), G.nodes[b]['chain'])) return contacts_list @@ -630,28 +625,26 @@ def write_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, no # this to write out the file if needed with open('contact_map_vermouth.out', 'w') as f: count = 0 - for i1 in range(nresidues): - for i2 in range(nresidues): - over = overlaps[i1, i2] - cont = contacts[i1, i2] - stab = stabilisers[i1, i2] - dest = destabilisers[i1, i2] - ocsu = stab - rcsu = stab - dest - - if (over > 0 or cont > 0) and (i1 != i2): - a = np.where(nodes == i1)[0][0] - b = np.where(nodes == i2)[0][0] - count += 1 - msg = (f"R {int(count):6d} " - f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s}" - f"{G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " - f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s}" - f"{G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " - f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " - f"{int(over):1d} {1 if cont != 0 else 0} {1 if ocsu != 0 else 0} {1 if rcsu > 0 else 0}" - f"{int(rcsu):6d} {int(cont):6d}\n") - f.writelines(msg) + for i1, i2 in product(np.arange(nresidues), np.arange(nresidues)): + over = overlaps[i1, i2] + cont = contacts[i1, i2] + stab = stabilisers[i1, i2] + dest = destabilisers[i1, i2] + rcsu = (stab - dest) > 0 + + if (over > 0 or cont > 0) and (i1 != i2): + a = np.where(nodes == i1)[0][0] + b = np.where(nodes == i2)[0][0] + count += 1 + msg = (f"R {int(count):6d} " + f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s}" + f"{G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " + f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s}" + f"{G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " + f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " + f"{int(over):1d} {1 if cont != 0 else 0} {1 if stab != 0 else 0} {1 if rcsu else 0}" + f"{int(rcsu):6d} {int(cont):6d}\n") + f.writelines(msg) """ From 2d1da843fb8763c9ea07156e44b2463f8bf237d0 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:01:04 +0000 Subject: [PATCH 09/29] changed to run the processor on molecule not system. changed file writer to deferred file writer added cli to write file if desired changed function names for internal use made bond_type a global variable and removed function corrected error in sphere generation moved system merging to martinize2 --- bin/martinize2 | 24 ++-- vermouth/rcsu/contact_map.py | 238 ++++++++++++++++++++--------------- 2 files changed, 152 insertions(+), 110 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 9c8f3dbdd..45029672d 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -48,7 +48,7 @@ from vermouth.map_input import ( generate_all_self_mappings, combine_mappings, ) -from vermouth.rcsu.contact_map import GenerateContactMap +from vermouth.rcsu.contact_map import GenerateContactMap, read_go_map from vermouth.rcsu.go_pipeline import GoPipeline from vermouth.gmx.topology import write_gmx_topology @@ -550,8 +550,7 @@ def entry(): const=None, type=Path, help="Use Martini Go model. Accepts either an input file from the server, " - "or just provide the flag to calculate as part of Martinize. Can be slow for large proteins " - "(> 1500 residues)" + "or just provide the flag to calculate as part of Martinize." ) go_group.add_argument( "-go-eps", @@ -582,6 +581,13 @@ def entry(): help=("Minimum graph distance (similar sequence distance) below which" "contacts are removed. "), ) + go_group.add_argument( + "-go-write-file", + dest="go_write_file", + action="store_false", + default=True, + help=("Write out contact map to file if calculating as part of Martinize2.") + ) water_group = parser.add_argument_group("Apply water bias.") water_group.add_argument( @@ -830,7 +836,7 @@ def entry(): """ Sort out the use of the go model: - go_file = True: calculate contact map + go = True: apply go model go_file = str: parse contact map bool(go_file) = False: no go """ @@ -839,9 +845,8 @@ def entry(): if args.go is None: go = True else: - if Path(args.go).is_file(): - go_file = args.go - go = True + go_file = args.go + go = True if args.to_ff.startswith("elnedyn"): # FIXME: This type of thing should be added to the FF itself. @@ -985,13 +990,14 @@ def entry(): vermouth.AddCysteinBridgesThreshold(args.cystein_bridge).run_system(system) if go: + system = vermouth.MergeAllMolecules().run_system(system) # need this here because have to get contact map at atomistic resolution if go_file is None: LOGGER.info("Generating Go model contact map.", type="step") - GenerateContactMap().run_system(system) + GenerateContactMap(write_file=args.go_write_file).run_system(system) else: LOGGER.info("Reading Go model contact map.", type="step") - GenerateContactMap(path=go_file).run_system(system) + read_go_map(system=system, path=go_file) # Run martinize on the system. diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 388c4e8ba..f4746f6c2 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -16,9 +16,31 @@ import numpy as np from scipy.spatial.distance import euclidean from scipy.spatial import cKDTree as KDTree -from .. import MergeAllMolecules from ..graph_utils import make_residue_graph from itertools import product +from vermouth.file_writer import DeferredFileWriter +from pathlib import Path + +# BOND TYPE +# Types of contacts: +# HB -- 1 -- hydrogen-bond +# PH -- 2 -- hydrophobic +# AR -- 3 -- aromatic - contacts between aromatic rings +# IB -- 4 -- ionic bridge - contacts created by two atoms with different charges +# DC -- 5 -- destabilizing contact - contacts which are in general repulsive +# OT -- 6 -- denotes negligible other contacts. +# 1-HB,2-PH,3-AR,4-IP,5-DC,6-OT +BOND_TYPE = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 1, 5, 5, 6, 6, 6, 1, 1], + [0, 1, 5, 1, 5, 5, 6, 6, 6, 1, 5], + [0, 1, 1, 5, 5, 5, 6, 6, 6, 5, 1], + [0, 5, 5, 5, 2, 2, 6, 6, 6, 5, 5], + [0, 5, 5, 5, 2, 3, 6, 6, 6, 5, 5], + [0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6], + [0, 1, 1, 5, 5, 5, 6, 6, 6, 5, 4], + [0, 1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) PROTEIN_MAP = { "ALA": { @@ -275,7 +297,7 @@ } -def get_vdw_radius(resname, atomname): +def _get_vdw_radius(resname, atomname): """ get the vdw radius of an atom indexed internally within a serially numbered residue """ @@ -287,7 +309,7 @@ def get_vdw_radius(resname, atomname): return atom_vdw['vrad'] -def get_atype(resname, atomname): +def _get_atype(resname, atomname): """ get the vdw radius of an atom indexed internally within a serially numbered residue """ @@ -315,7 +337,8 @@ def make_surface(position, fiba, fibb, vrad): x, y, z = position k = np.arange(fibb) - phi_aux = (np.arange(fibb) * fiba) % fibb + phi_aux = (np.arange(1, fibb+1) * fiba) % fibb + phi_aux[phi_aux == 0] = fibb theta = np.arccos(1.0 - 2.0 * k / fibb) phi = 2.0 * np.pi * phi_aux / fibb surface_x = x + vrad * np.sin(theta) * np.cos(phi) @@ -329,7 +352,6 @@ def make_surface(position, fiba, fibb, vrad): def atom2res(arrin, nresidues, atom_map, norm=False): ''' take an array with atom level data and sum the entries over within the residue - ''' out = np.zeros((nresidues, nresidues)) @@ -346,42 +368,12 @@ def atom2res(arrin, nresidues, atom_map, norm=False): return out -def bondtype(i, j): - maxatomtype = 10 - assert 1 <= i <= maxatomtype - assert 1 <= j <= maxatomtype - - i -= 1 - j -= 1 - # BOND TYPE - # Types of contacts: - # HB -- 1 -- hydrogen-bond - # PH -- 2 -- hydrophobic - # AR -- 3 -- aromatic - contacts between aromatic rings - # IB -- 4 -- ionic bridge - contacts created by two atoms with different charges - # DC -- 5 -- destabilizing contact - contacts which are in general repulsive - # OT -- 6 -- denotes negligible other contacts. - # 1-HB,2-PH,3-AR,4-IP,5-DC,6-OT - btype = np.array([[1, 1, 1, 5, 5, 6, 6, 6, 1, 1], - [1, 5, 1, 5, 5, 6, 6, 6, 1, 5], - [1, 1, 5, 5, 5, 6, 6, 6, 5, 1], - [5, 5, 5, 2, 2, 6, 6, 6, 5, 5], - [5, 5, 5, 2, 3, 6, 6, 6, 5, 5], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], - [1, 1, 5, 5, 5, 6, 6, 6, 5, 4], - [1, 5, 1, 5, 5, 6, 6, 6, 4, 5]]) - return btype[i][j] - - -def contact_info(system): +def _contact_info(molecule): """ get the atom attributes that we need to calculate the contacts """ - system = MergeAllMolecules().run_system(system) - G = make_residue_graph(system.molecules[0]) + G = make_residue_graph(molecule) resids = [] chains = [] @@ -407,10 +399,10 @@ def contact_info(system): positions_all.append(subgraph.nodes[atom]['position'] * 10) - vdw_list.append(get_vdw_radius(subgraph.nodes[atom]['resname'], - subgraph.nodes[atom]['atomname'])) - atypes.append(get_atype(subgraph.nodes[atom]['resname'], - subgraph.nodes[atom]['atomname'])) + vdw_list.append(_get_vdw_radius(subgraph.nodes[atom]['resname'], + subgraph.nodes[atom]['atomname'])) + atypes.append(_get_atype(subgraph.nodes[atom]['resname'], + subgraph.nodes[atom]['atomname'])) if subgraph.nodes[atom]['atomname'] == 'CA': ca_pos.append(subgraph.nodes[atom]['position']) @@ -431,7 +423,7 @@ def contact_info(system): return vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G -def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): +def _calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): """ Find enlarged (OV) overlap contacts @@ -454,7 +446,7 @@ def calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): over[idx, jdx] = 1 return over -def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius): +def _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius): """ Calculate contacts of structural units (CSU) @@ -516,7 +508,7 @@ def calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, wa return hit_results -def contact_types(hit_results, natoms, atypes): +def _contact_types(hit_results, natoms, atypes): """ From CSU contacts, establish contact types from atomtypes @@ -540,7 +532,7 @@ def contact_types(hit_results, natoms, atypes): at2 = atypes[k] if (at1 > 0) and (at2 > 0): contactcounter_1[i, k] += 1 - btype = bondtype(at1, at2) + btype = BOND_TYPE[at1, at2] if btype <= 4: stabilisercounter_1[i, k] += 1 if btype == 5: @@ -549,7 +541,7 @@ def contact_types(hit_results, natoms, atypes): return contactcounter_1, stabilisercounter_1, destabilisercounter_1 -def calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): +def _calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): """ run the contact calculation functions @@ -573,19 +565,19 @@ def calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): natoms = len(coords) - vdw_max = max(item['vmax'] for atoms in PROTEIN_MAP.values() for item in atoms.values()) + vdw_max = max(item['vrad'] for atoms in PROTEIN_MAP.values() for item in atoms.values()) # make the KDTree of the input coordinates coords_tree = KDTree(coords) # calculate the OV contacts of the molecule - over = calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha=1.24) + over = _calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha=1.24) # Calculate the CSU contacts of the molecule - hit_results = calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius=2.80) + hit_results = _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius=2.80) # find the types of contacts we have - contactcounter_1, stabilisercounter_1, destabilisercounter_1 = contact_types(hit_results, natoms, atypes) + contactcounter_1, stabilisercounter_1, destabilisercounter_1 = _contact_types(hit_results, natoms, atypes) atom_map = {} for i in range(nresidues): @@ -600,10 +592,30 @@ def calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): return overlapcounter_2, contactcounter_2, stabilisercounter_2, destabilisercounter_2 -def get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, G): +def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, G): + ''' + Generate contacts list from the contact arrays calculated + + nresidues: int + number of residues in the molecule + overlaps: ndarray + nresidues x nresidues array of OV contacts in the molecule + contacts: ndarray + nresidues x nresidues array of CSU contacts in the molecule + stabilisers: ndarray + nresidues x nresidues array of CSU stabilising contacts in the molecule + destabilisers: ndarray + nresidues x nresidues array of CSU destabilising contacts in the molecule + nodes: list + list of serial residue ids for each of the residues + G: nx.Graph + residue based graph of the molecule + ''' contacts_list = [] + all_contacts = [] for i1, i2 in product(np.arange(nresidues), np.arange(nresidues)): - if i1 == i2: continue + if i1 == i2: + continue over = overlaps[i1, i2] cont = contacts[i1, i2] stab = stabilisers[i1, i2] @@ -613,38 +625,41 @@ def get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, node if (over > 0 or cont > 0): a = np.where(nodes == i1)[0][0] b = np.where(nodes == i2)[0][0] + all_contacts.append([i1+1, i2+1, a, b, over, cont, stab, rcsu]) if over == 1 or (over == 0 and rcsu): # this is a OV or rCSU contact we take it contacts_list.append((int(G.nodes[a]['resid']), G.nodes[a]['chain'], int(G.nodes[b]['resid']), G.nodes[b]['chain'])) - return contacts_list + return contacts_list, all_contacts -def write_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, ca_pos, G): +def _write_contacts(all_contacts, ca_pos, G): + ''' + write the contacts calculated to file + + all_contacts: list + list of lists of every contact found + ca_pos: list + list of (3,) arrays with the position of the CA atom of each residue + G: nx.Graph + residue graph of the input molecule + ''' # this to write out the file if needed - with open('contact_map_vermouth.out', 'w') as f: + with DeferredFileWriter.open(Path('contact_map_vermouth.out'), 'w') as f: count = 0 - for i1, i2 in product(np.arange(nresidues), np.arange(nresidues)): - over = overlaps[i1, i2] - cont = contacts[i1, i2] - stab = stabilisers[i1, i2] - dest = destabilisers[i1, i2] - rcsu = (stab - dest) > 0 - - if (over > 0 or cont > 0) and (i1 != i2): - a = np.where(nodes == i1)[0][0] - b = np.where(nodes == i2)[0][0] - count += 1 - msg = (f"R {int(count):6d} " - f"{int(i1 + 1):5d} {G.nodes[a]['resname']:3s}" - f"{G.nodes[a]['chain']:1s} {int(G.nodes[a]['resid']):4d} " - f"{int(i2 + 1):5d} {G.nodes[b]['resname']:3s}" - f"{G.nodes[b]['chain']:1s} {int(G.nodes[b]['resid']):4d} " - f"{euclidean(ca_pos[a], ca_pos[b])*10:9.4f} " - f"{int(over):1d} {1 if cont != 0 else 0} {1 if stab != 0 else 0} {1 if rcsu else 0}" - f"{int(rcsu):6d} {int(cont):6d}\n") - f.writelines(msg) + for contact in all_contacts: + count += 1 + msg = (f"R {int(count): 6d} " + f"{int(contact[0]): 5d} {G.nodes[contact[2]]['resname']: 3s}" + f"{G.nodes[contact[2]]['chain']:1s} {int(G.nodes[contact[2]]['resid']): 4d} " + f"{int(contact[1]): 5d} {G.nodes[contact[3]]['resname']: 3s}" + f"{G.nodes[contact[3]]['chain']: 1s} {int(G.nodes[contact[3]]['resid']): 4d} " + f"{euclidean(ca_pos[contact[2]], ca_pos[contact[3]])*10: 9.4f} " + f"{int(contact[4]): 1d} {1 if contact[5] != 0 else 0} " + f"{1 if contact[6] != 0 else 0} {1 if contact[7] else 0}" + f"{int(contact[7]): 6d} {int(contact[5]): 6d}\n") + f.writelines(msg) """ @@ -652,15 +667,17 @@ def write_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, no """ -def read_go_map(file_path): +def read_go_map(system, file_path): """ Read a RCSU contact map from the c code as published in - doi:10.5281/zenodo.3817447. The format requires all - contacts to have 18 columns and the first column to be + doi:10.5281/zenodo.3817447. The format requires all + contacts to have 18 columns and the first column to be a capital R. Parameters ---------- + system: vermouth.system.System + The system to process. Is modified in-place. file_path: :class:`pathlib.Path` path to the contact map file @@ -685,6 +702,38 @@ def read_go_map(file_path): if len(contacts) == 0: raise IOError("You contact map is empty. Are you sure it has the right formatting?") + + system.go_params["go_map"].append(contacts) + + +def do_contacts(molecule, write_file): + ''' + master function to calculate Go contacts + + molecule: vermouth.Molecule + molecule to calculate contacts for + write_file: bool + write the file of the contacts out + ''' + vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, mol_graph = _contact_info( + molecule) + + overlaps, contacts, stabilisers, destabilisers = _calculate_contacts(vdw_list, + atypes, + coords, + res_serial, + nresidues) + + contacts, all_contacts = _get_contacts(nresidues, + overlaps, contacts, + stabilisers, + destabilisers, + nodes, + mol_graph) + + if write_file: + _write_contacts(all_contacts, ca_pos, mol_graph) + return contacts @@ -692,10 +741,10 @@ class GenerateContactMap(Processor): """ Processor to generate the contact rCSU contact map for a protein from an atomistic structure """ - def __init__(self, path=None): - self.path = path + def __init__(self, go_write_file): + self.write_file = go_write_file - def run_system(self, system): + def run_molecule(self, molecule): """ Process `system`. @@ -704,23 +753,10 @@ def run_system(self, system): system: vermouth.system.System The system to process. Is modified in-place. """ - self.system = system - - if self.path is None: - vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G = contact_info( - system) - - overlaps, contacts, stabilisers, destabilisers = calculate_contacts(vdw_list, - atypes, - coords, - res_serial, - nresidues) - - self.system.go_params["go_map"].append(get_contacts(nresidues, - overlaps, contacts, - stabilisers, - destabilisers, - nodes, - G)) - else: - self.system.go_params["go_map"].append(read_go_map(file_path=self.path)) + return do_contacts(molecule, self.write_file) + + def run_system(self, system): + for molecule in system.molecules: + contacts = self.run_molecule(molecule) + system.go_params["go_map"].append(contacts) + From 6c6f9351963f76c1fabca24c536286bb5a86903f Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:35:34 +0000 Subject: [PATCH 10/29] fixed deferred file writing and corrected associated cli --- bin/martinize2 | 4 ++-- vermouth/rcsu/contact_map.py | 37 +++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 45029672d..603b20aec 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -584,8 +584,8 @@ def entry(): go_group.add_argument( "-go-write-file", dest="go_write_file", - action="store_false", - default=True, + action="store_true", + default=False, help=("Write out contact map to file if calculating as part of Martinize2.") ) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index f4746f6c2..670ce2686 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -18,7 +18,7 @@ from scipy.spatial import cKDTree as KDTree from ..graph_utils import make_residue_graph from itertools import product -from vermouth.file_writer import DeferredFileWriter +from vermouth.file_writer import deferred_open from pathlib import Path # BOND TYPE @@ -646,20 +646,23 @@ def _write_contacts(all_contacts, ca_pos, G): residue graph of the input molecule ''' # this to write out the file if needed - with DeferredFileWriter.open(Path('contact_map_vermouth.out'), 'w') as f: - count = 0 - for contact in all_contacts: - count += 1 - msg = (f"R {int(count): 6d} " - f"{int(contact[0]): 5d} {G.nodes[contact[2]]['resname']: 3s}" - f"{G.nodes[contact[2]]['chain']:1s} {int(G.nodes[contact[2]]['resid']): 4d} " - f"{int(contact[1]): 5d} {G.nodes[contact[3]]['resname']: 3s}" - f"{G.nodes[contact[3]]['chain']: 1s} {int(G.nodes[contact[3]]['resid']): 4d} " - f"{euclidean(ca_pos[contact[2]], ca_pos[contact[3]])*10: 9.4f} " - f"{int(contact[4]): 1d} {1 if contact[5] != 0 else 0} " - f"{1 if contact[6] != 0 else 0} {1 if contact[7] else 0}" - f"{int(contact[7]): 6d} {int(contact[5]): 6d}\n") - f.writelines(msg) + msgs = [] + count = 0 + for contact in all_contacts: + count += 1 + msg = (f"R {int(count):6d} " + f"{int(contact[0]):5d} {G.nodes[contact[2]]['resname']:3s} " + f"{G.nodes[contact[2]]['chain']:1s} {int(G.nodes[contact[2]]['resid']):4d} " + f"{int(contact[1]):5d} {G.nodes[contact[3]]['resname']:3s} " + f"{G.nodes[contact[3]]['chain']:1s} {int(G.nodes[contact[3]]['resid']):4d} " + f"{euclidean(ca_pos[contact[2]], ca_pos[contact[3]])*10:9.4f} " + f"{int(contact[4]):1d} {1 if contact[5] != 0 else 0} " + f"{1 if contact[6] != 0 else 0} {1 if contact[7] else 0}" + f"{int(contact[7]): 6d} {int(contact[5]): 6d}\n") + msgs.append(msg) + message_out = ''.join(msgs) + with deferred_open('contact_map_vermouth.out', "w") as f: + f.write(message_out) """ @@ -741,8 +744,8 @@ class GenerateContactMap(Processor): """ Processor to generate the contact rCSU contact map for a protein from an atomistic structure """ - def __init__(self, go_write_file): - self.write_file = go_write_file + def __init__(self, write_file): + self.write_file = write_file def run_molecule(self, molecule): """ From 7880986a892c3d638fbe36de5d909c1495ea4812 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:59:07 +0000 Subject: [PATCH 11/29] made small corrections. - nodes -> res_idx - now specify name of contact map file to be written with changes to -go-file-write --- bin/martinize2 | 41 +++++++++--------------- vermouth/rcsu/contact_map.py | 61 ++++++++++++++++++------------------ 2 files changed, 46 insertions(+), 56 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 603b20aec..43031ecba 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -547,7 +547,7 @@ def entry(): "-go", dest="go", nargs='?', - const=None, + const=True, type=Path, help="Use Martini Go model. Accepts either an input file from the server, " "or just provide the flag to calculate as part of Martinize." @@ -584,8 +584,9 @@ def entry(): go_group.add_argument( "-go-write-file", dest="go_write_file", - action="store_true", - default=False, + nargs='?', + const=True, + type=Path, help=("Write out contact map to file if calculating as part of Martinize2.") ) @@ -833,21 +834,6 @@ def entry(): "be used together." ) - """ - Sort out the use of the go model: - - go = True: apply go model - go_file = str: parse contact map - bool(go_file) = False: no go - """ - go = False - go_file = None - if args.go is None: - go = True - else: - go_file = args.go - go = True - if args.to_ff.startswith("elnedyn"): # FIXME: This type of thing should be added to the FF itself. LOGGER.info( @@ -989,15 +975,19 @@ def entry(): elif args.cystein_bridge != "auto": vermouth.AddCysteinBridgesThreshold(args.cystein_bridge).run_system(system) - if go: + if args.go: system = vermouth.MergeAllMolecules().run_system(system) # need this here because have to get contact map at atomistic resolution - if go_file is None: - LOGGER.info("Generating Go model contact map.", type="step") - GenerateContactMap(write_file=args.go_write_file).run_system(system) - else: + if isinstance(args.go, str): LOGGER.info("Reading Go model contact map.", type="step") - read_go_map(system=system, path=go_file) + read_go_map(system=system, path=args.go) + else: + LOGGER.info("Generating Go model contact map.", type="step") + if isinstance(args.go_write_file, Path): + go_file_path = str(args.go_write_file) + else: + go_file_path = "contact_map_martinize.out" + GenerateContactMap(write_file=go_file_path).run_system(system) # Run martinize on the system. @@ -1021,8 +1011,7 @@ def entry(): vermouth.ApplyPosres(node_selector, args.posres_fc).run_system(system) # Generate the Go model if required - - if go: + if system.go_params["go_map"]: go_name_prefix = args.molname LOGGER.info("Generating the Go model.", type="step") GoPipeline.run_system(system, diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 670ce2686..19cabc58f 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -19,7 +19,7 @@ from ..graph_utils import make_residue_graph from itertools import product from vermouth.file_writer import deferred_open -from pathlib import Path +from collections import defaultdict # BOND TYPE # Types of contacts: @@ -355,11 +355,10 @@ def atom2res(arrin, nresidues, atom_map, norm=False): ''' out = np.zeros((nresidues, nresidues)) - for res_idx, res_jdx in product(np.arange(nresidues), np.arange(nresidues)): - atom_idxs = np.array(atom_map[res_idx]) - atom_jdxs = np.array(atom_map[res_jdx]) - value = arrin[atom_idxs, - atom_jdxs[:, np.newaxis]].sum() + for res_idx, res_jdx in product(atom_map.keys(), atom_map.keys()): + atom_idxs = atom_map[res_idx] + atom_jdxs = atom_map[res_jdx][:, np.newaxis] + value = arrin[atom_idxs, atom_jdxs].sum() out[res_idx, res_jdx] = value if norm: @@ -383,16 +382,16 @@ def _contact_info(molecule): vdw_list = [] atypes = [] res_serial = [] - nodes = [] + res_idx = [] for residue in G.nodes: # we only need these for writing at the end resnames.append(G.nodes[residue]['resname']) resids.append(G.nodes[residue]['resid']) chains.append(G.nodes[residue]['chain']) - nodes.append(G.nodes[residue]['_res_serial']) + res_idx.append(G.nodes[residue]['_res_serial']) subgraph = G.nodes[residue]['graph'] - for atom in sorted(G.nodes[residue]['graph'].nodes): + for atom in sorted(subgraph.nodes): position = subgraph.nodes[atom].get('position', [np.nan]*3) if np.isfinite(position).all(): res_serial.append(subgraph.nodes[atom]['_res_serial']) @@ -404,8 +403,8 @@ def _contact_info(molecule): atypes.append(_get_atype(subgraph.nodes[atom]['resname'], subgraph.nodes[atom]['atomname'])) - if subgraph.nodes[atom]['atomname'] == 'CA': - ca_pos.append(subgraph.nodes[atom]['position']) + if subgraph.nodes[atom]['atomname'] == 'CA': + ca_pos.append(subgraph.nodes[atom]['position']) vdw_list = np.array(vdw_list) @@ -416,14 +415,14 @@ def _contact_info(molecule): resids = np.array(resids) chains = np.array(chains) resnames = np.array(resnames) - nodes = np.array(nodes) + res_idx = np.array(res_idx) # 2) find the number of residues that we have nresidues = len(G) - return vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, G + return vdw_list, atypes, coords, res_serial, resids, chains, resnames, res_idx, ca_pos, nresidues, G -def _calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): +def _calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha=1.24): """ Find enlarged (OV) overlap contacts @@ -446,7 +445,7 @@ def _calculate_overlap(coords_tree, vdw_list, natoms, vdw_max, alpha): over[idx, jdx] = 1 return over -def _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius): +def _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, water_radius=2.80): """ Calculate contacts of structural units (CSU) @@ -579,9 +578,11 @@ def _calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): # find the types of contacts we have contactcounter_1, stabilisercounter_1, destabilisercounter_1 = _contact_types(hit_results, natoms, atypes) - atom_map = {} - for i in range(nresidues): - atom_map[i] = np.where(res_serial == i)[0] + atom_map = defaultdict(list) + for atom_idx, res_idx in enumerate(res_serial): + atom_map[res_idx].append(atom_idx) + for key, value in atom_map.items(): + atom_map[key] = np.array(value) # transform the resolution between atoms and residues overlapcounter_2 = atom2res(over, nresidues, atom_map, norm=True) @@ -592,7 +593,7 @@ def _calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): return overlapcounter_2, contactcounter_2, stabilisercounter_2, destabilisercounter_2 -def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nodes, G): +def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, res_idx, G): ''' Generate contacts list from the contact arrays calculated @@ -606,7 +607,7 @@ def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nod nresidues x nresidues array of CSU stabilising contacts in the molecule destabilisers: ndarray nresidues x nresidues array of CSU destabilising contacts in the molecule - nodes: list + res_idx: list list of serial residue ids for each of the residues G: nx.Graph residue based graph of the molecule @@ -623,8 +624,8 @@ def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nod rcsu = (stab - dest) > 0 if (over > 0 or cont > 0): - a = np.where(nodes == i1)[0][0] - b = np.where(nodes == i2)[0][0] + a = np.where(res_idx == i1)[0][0] + b = np.where(res_idx == i2)[0][0] all_contacts.append([i1+1, i2+1, a, b, over, cont, stab, rcsu]) if over == 1 or (over == 0 and rcsu): # this is a OV or rCSU contact we take it @@ -634,10 +635,11 @@ def _get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, nod return contacts_list, all_contacts -def _write_contacts(all_contacts, ca_pos, G): +def _write_contacts(fout, all_contacts, ca_pos, G): ''' write the contacts calculated to file - + fout: str + path to write file to all_contacts: list list of lists of every contact found ca_pos: list @@ -661,7 +663,7 @@ def _write_contacts(all_contacts, ca_pos, G): f"{int(contact[7]): 6d} {int(contact[5]): 6d}\n") msgs.append(msg) message_out = ''.join(msgs) - with deferred_open('contact_map_vermouth.out', "w") as f: + with deferred_open(fout, "w") as f: f.write(message_out) @@ -718,7 +720,7 @@ def do_contacts(molecule, write_file): write_file: bool write the file of the contacts out ''' - vdw_list, atypes, coords, res_serial, resids, chains, resnames, nodes, ca_pos, nresidues, mol_graph = _contact_info( + vdw_list, atypes, coords, res_serial, resids, chains, resnames, res_idx, ca_pos, nresidues, mol_graph = _contact_info( molecule) overlaps, contacts, stabilisers, destabilisers = _calculate_contacts(vdw_list, @@ -731,11 +733,11 @@ def do_contacts(molecule, write_file): overlaps, contacts, stabilisers, destabilisers, - nodes, + res_idx, mol_graph) - if write_file: - _write_contacts(all_contacts, ca_pos, mol_graph) + if isinstance(write_file, str): + _write_contacts(write_file, all_contacts, ca_pos, mol_graph) return contacts @@ -762,4 +764,3 @@ def run_system(self, system): for molecule in system.molecules: contacts = self.run_molecule(molecule) system.go_params["go_map"].append(contacts) - From af2eff251c62b831c36c7ecf61a341cb5ed43088 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 09:50:39 +0000 Subject: [PATCH 12/29] fix test_read_go_map.py --- vermouth/tests/rcsu/test_read_go_map.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/vermouth/tests/rcsu/test_read_go_map.py b/vermouth/tests/rcsu/test_read_go_map.py index 942c8eed4..ffafe2f53 100644 --- a/vermouth/tests/rcsu/test_read_go_map.py +++ b/vermouth/tests/rcsu/test_read_go_map.py @@ -18,6 +18,8 @@ """ import pytest from vermouth.rcsu.contact_map import read_go_map +import vermouth +from vermouth.tests.helper_functions import test_molecule @pytest.mark.parametrize('lines, contacts', # two sets of contacts same chain @@ -60,9 +62,12 @@ def test_go_map(tmp_path, lines, contacts): with open(tmp_path / "go_file.txt", "w") as in_file: in_file.write(lines) + system = vermouth.System() + system.add_molecule(test_molecule) + # read go map - contact_map = read_go_map(tmp_path / "go_file.txt") - assert contact_map == contacts + read_go_map(system, tmp_path / "go_file.txt") + assert system.go_params["go_map"][0] == contacts def test_go_error(tmp_path): lines=""" @@ -74,5 +79,8 @@ def test_go_error(tmp_path): with open(tmp_path / "go_file.txt", "w") as in_file: in_file.write(lines) + system = vermouth.System() + system.add_molecule(test_molecule) + with pytest.raises(IOError): - read_go_map(tmp_path / "go_file.txt") + read_go_map(system, tmp_path / "go_file.txt") From 4777f211c31182d37c67a4666e475dc9e6e46369 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 10:21:15 +0000 Subject: [PATCH 13/29] fix test_go_structure_bias.py --- vermouth/rcsu/go_structure_bias.py | 3 ++- vermouth/tests/rcsu/test_go_structure_bias.py | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index e509e709c..619706442 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -51,6 +51,7 @@ def __init__(self, go_eps, res_dist, moltype, + system=None, res_graph=None): """ Initialize the Processor with arguments required @@ -91,7 +92,7 @@ def __init__(self, self.moltype = moltype # don't modify self.res_graph = None - self.system = None + self.system = system self.__chain_id_to_resnode = {} self.conversion_factor = 2**(1/6) diff --git a/vermouth/tests/rcsu/test_go_structure_bias.py b/vermouth/tests/rcsu/test_go_structure_bias.py index 75f4bbead..bddcfe282 100644 --- a/vermouth/tests/rcsu/test_go_structure_bias.py +++ b/vermouth/tests/rcsu/test_go_structure_bias.py @@ -20,8 +20,7 @@ def test_compute_go_interaction(test_molecule): system = vermouth.System() system.add_molecule(test_molecule) - go_processor = ComputeStructuralGoBias(contact_map=None, - cutoff_short=None, + go_processor = ComputeStructuralGoBias(cutoff_short=None, cutoff_long=None, go_eps=2.1, res_dist=None, @@ -147,13 +146,15 @@ def test_contact_selector(test_molecule, # generate the virtual sites VirtualSiteCreator().run_system(system) + # add the contacts to the system + system.go_params["go_map"] = [cmap] # initialize the Go processor - go_processor = ComputeStructuralGoBias(contact_map=cmap, - cutoff_short=cshort, + go_processor = ComputeStructuralGoBias(cutoff_short=cshort, cutoff_long=clong, go_eps=2.1, res_dist=rdist, - moltype="mol_0") + moltype="mol_0", + system=system) go_processor.res_graph = vermouth.graph_utils.make_residue_graph(test_molecule) # run the contact map selector contact_matrix = go_processor.contact_selector(test_molecule) From 4053b669ae816cea630a72d8cc2ac80cad6ef62e Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 10:48:54 +0000 Subject: [PATCH 14/29] fixed the reading/generation check for go map --- bin/martinize2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index 43031ecba..cb52c612f 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -978,9 +978,9 @@ def entry(): if args.go: system = vermouth.MergeAllMolecules().run_system(system) # need this here because have to get contact map at atomistic resolution - if isinstance(args.go, str): + if isinstance(args.go, Path): LOGGER.info("Reading Go model contact map.", type="step") - read_go_map(system=system, path=args.go) + read_go_map(system=system, file_path=args.go) else: LOGGER.info("Generating Go model contact map.", type="step") if isinstance(args.go_write_file, Path): From 8c9585e4f440a6e68e4e15b79005a9e5f701a97e Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 10:53:50 +0000 Subject: [PATCH 15/29] changed make_surface to _make_surface, shouldn't need function externally --- vermouth/rcsu/contact_map.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 19cabc58f..082ccab59 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -321,7 +321,7 @@ def _get_atype(resname, atomname): return atom_vdw['atype'] -def make_surface(position, fiba, fibb, vrad): +def _make_surface(position, fiba, fibb, vrad): """ Generate points on a sphere using Fibonacci points @@ -489,7 +489,7 @@ def _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, w continue # Generate the fibonacci sphere for this point and make a KDTree from it - base_tree = KDTree(make_surface(coords[idx], fiba, fibb, vdw_list[idx]+water_radius)) + base_tree = KDTree(_make_surface(coords[idx], fiba, fibb, vdw_list[idx]+water_radius)) # find points on the base point sphere which are within the vdw cutoff of the target point's coordinate res = np.array(base_tree.query_ball_point(coords[jdx], vdw_list[jdx] + water_radius)) From cae3923878b38ef654b95986091022cb49572aae Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 11:14:07 +0000 Subject: [PATCH 16/29] first tests for contact map generation. Improved PROTEIN map handling to ensure test coverage --- vermouth/rcsu/contact_map.py | 13 +++++-- vermouth/tests/rcsu/test_contact_map.py | 46 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 vermouth/tests/rcsu/test_contact_map.py diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index 082ccab59..de4f2acb5 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -301,7 +301,11 @@ def _get_vdw_radius(resname, atomname): """ get the vdw radius of an atom indexed internally within a serially numbered residue """ - res_vdw = PROTEIN_MAP[resname] + try: + res_vdw = PROTEIN_MAP[resname] + except KeyError: + return 0.00 + try: atom_vdw = res_vdw[atomname] except KeyError: @@ -313,11 +317,16 @@ def _get_atype(resname, atomname): """ get the vdw radius of an atom indexed internally within a serially numbered residue """ - res_vdw = PROTEIN_MAP[resname] + try: + res_vdw = PROTEIN_MAP[resname] + except KeyError: + return 0 + try: atom_vdw = res_vdw[atomname] except KeyError: atom_vdw = res_vdw['default'] + return atom_vdw['atype'] diff --git a/vermouth/tests/rcsu/test_contact_map.py b/vermouth/tests/rcsu/test_contact_map.py new file mode 100644 index 000000000..16e60d22e --- /dev/null +++ b/vermouth/tests/rcsu/test_contact_map.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Copyright 2025 University of Groningen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Unit tests for the Go contact map generator. +""" +import pytest +from vermouth.rcsu import contact_map +from vermouth.rcsu.contact_map import GenerateContactMap +import vermouth +from vermouth.tests.helper_functions import test_molecule + +@pytest.mark.parametrize('resname, atomname, expected', + ( + ('TRP', 'N', 1.64), + ('TRP', 'NON', 0.00), + ('NON', 'N', 0.00), + ('NON', 'NON', 0.00) + )) +def test_get_vdw_radius(resname, atomname, expected): + result = contact_map._get_vdw_radius(resname, atomname) + assert result == expected + + +@pytest.mark.parametrize('resname, atomname, expected', + ( + ('TRP', 'N', 3), + ('TRP', 'NON', 0), + ('NON', 'N', 0), + ('NON', 'NON', 0) + )) +def test_get_atype(resname, atomname, expected): + result = contact_map._get_atype(resname, atomname) + assert result == expected \ No newline at end of file From ba24c49eb02db7e0ab905d344c4dbc4b1e414810 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:52:24 +0000 Subject: [PATCH 17/29] more tests for contact map generation. refactored some contact_map functions. added more information to test_molecule. - tests added for _make_surface, atom2res, make_atom_map (new function from reformatting), _contact_info --- vermouth/rcsu/contact_map.py | 16 ++-- vermouth/tests/helper_functions.py | 51 +++++++----- vermouth/tests/rcsu/test_contact_map.py | 104 +++++++++++++++++++++++- 3 files changed, 142 insertions(+), 29 deletions(-) diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index de4f2acb5..f8158cf1b 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -480,7 +480,6 @@ def _calculate_csu(coords, vdw_list, fiba, fibb, natoms, coords_tree, vdw_max, w """ - #setup arrays to keep track hit_results = np.full((natoms, fibb), -1) dists_counter = np.full((natoms, fibb), np.inf) @@ -548,6 +547,15 @@ def _contact_types(hit_results, natoms, atypes): return contactcounter_1, stabilisercounter_1, destabilisercounter_1 +def make_atom_map(res_serial): + + atom_map = defaultdict(list) + for atom_idx, res_idx in enumerate(res_serial): + atom_map[res_idx].append(atom_idx) + for key, value in atom_map.items(): + atom_map[key] = np.array(value) + + return atom_map def _calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): """ @@ -587,11 +595,7 @@ def _calculate_contacts(vdw_list, atypes, coords, res_serial, nresidues): # find the types of contacts we have contactcounter_1, stabilisercounter_1, destabilisercounter_1 = _contact_types(hit_results, natoms, atypes) - atom_map = defaultdict(list) - for atom_idx, res_idx in enumerate(res_serial): - atom_map[res_idx].append(atom_idx) - for key, value in atom_map.items(): - atom_map[key] = np.array(value) + atom_map = make_atom_map(res_serial) # transform the resolution between atoms and residues overlapcounter_2 = atom2res(over, nresidues, atom_map, norm=True) diff --git a/vermouth/tests/helper_functions.py b/vermouth/tests/helper_functions.py index 3e44c81d9..12a7ca5a7 100644 --- a/vermouth/tests/helper_functions.py +++ b/vermouth/tests/helper_functions.py @@ -190,27 +190,36 @@ def test_molecule(scope='function'): molecule.meta['test'] = True # The node keys should not be in a sorted order as it would mask any issue # due to the keys being accidentally sorted. - molecule.add_node(2, atomname='SC2', - position=np.array([0., 1.0, 0.0]), resid=1) - molecule.add_node(0, atomname='BB', - position=np.array([0., 0., 0.]), resid=1) - molecule.add_node(1, atomname='SC1', - position=np.array([0., 0.5, 0.0]), resid=1) - - molecule.add_node(3, atomname='BB', position=np.array( - [0.5, 0.0, 0.0]), resid=2) - molecule.add_node(4, atomname='SC1', position=np.array( - [0.5, 0.5, 0.0]), resid=2) - - molecule.add_node(5, atomname='BB', position=np.array( - [1.0, 0.0, 0.0]), resid=3) - - molecule.add_node(6, atomname='BB', position=np.array( - [1.5, 0.0, 0.0]), resid=4) - molecule.add_node(7, atomname='SC1', position=np.array( - [1.5, 0.5, 0.0]), resid=4) - molecule.add_node(8, atomname='SC2', position=np.array( - [1.5, 1.0, 0.0]), resid=4) + molecule.add_node(2, atomname='SC2', resname='res0', chain='A', + position=np.array([0., 1.0, 0.0]), resid=1, + _res_serial=0) + molecule.add_node(0, atomname='BB', resname='res0', chain='A', + position=np.array([0., 0., 0.]), resid=1, + _res_serial=0) + molecule.add_node(1, atomname='SC1', resname='res0', chain='A', + position=np.array([0., 0.5, 0.0]), resid=1, + _res_serial=0) + + molecule.add_node(3, atomname='BB', resname='res1', chain='A', + position=np.array([0.5, 0.0, 0.0]), resid=2, + _res_serial=1) + molecule.add_node(4, atomname='SC1', resname='res1', chain='A', + position=np.array([0.5, 0.5, 0.0]), resid=2, + _res_serial=1) + + molecule.add_node(5, atomname='BB', resname='res2', chain='A', + position=np.array([1.0, 0.0, 0.0]), resid=3, + _res_serial=2) + + molecule.add_node(6, atomname='BB', resname='res0', chain='A', + position=np.array([1.5, 0.0, 0.0]), resid=4, + _res_serial=3) + molecule.add_node(7, atomname='SC1', resname='res0', chain='A', + position=np.array([1.5, 0.5, 0.0]), resid=4, + _res_serial=3) + molecule.add_node(8, atomname='SC2', resname='res0', chain='A', + position=np.array([1.5, 1.0, 0.0]), resid=4, + _res_serial=3) molecule.add_edge(0, 1) molecule.add_edge(0, 2) diff --git a/vermouth/tests/rcsu/test_contact_map.py b/vermouth/tests/rcsu/test_contact_map.py index 16e60d22e..dc0b39b73 100644 --- a/vermouth/tests/rcsu/test_contact_map.py +++ b/vermouth/tests/rcsu/test_contact_map.py @@ -17,10 +17,13 @@ Unit tests for the Go contact map generator. """ import pytest +import numpy as np from vermouth.rcsu import contact_map +from collections import defaultdict +from vermouth.graph_utils import make_residue_graph from vermouth.rcsu.contact_map import GenerateContactMap import vermouth -from vermouth.tests.helper_functions import test_molecule +from vermouth.tests.helper_functions import test_molecule, equal_graphs @pytest.mark.parametrize('resname, atomname, expected', ( @@ -43,4 +46,101 @@ def test_get_vdw_radius(resname, atomname, expected): )) def test_get_atype(resname, atomname, expected): result = contact_map._get_atype(resname, atomname) - assert result == expected \ No newline at end of file + assert result == expected + +def test_surface_generation(): + + position = np.array([1, 1, 1]) + + surface = contact_map._make_surface(position, 13, 21, 1) + + assert len(surface) == 21 + + first_point = [1. , 1. , 2. ] + last_point = [1.42591771, 1. , 0.0952381 ] + + test_points = [first_point, last_point] + + for i, j in enumerate([surface[0], surface[-1]]): + assert j == pytest.approx(test_points[i]) + + +@pytest.mark.parametrize('norm, expected', ( + (False, + np.array([[1, 0, 0, 0, 0], + [0, 8, 0, 0, 0], + [0, 0, 27, 0, 0], + [0, 0, 0, 36, 0], + [0, 0, 0, 0, 80]] + ) + ), + (True, + np.array([[1, 0, 0, 0, 0], + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1]] + ) + ) + )) +def test_atom2res(norm, expected): + + arrin = np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5], + ]) + + nres = 5 + res_map = contact_map.make_atom_map([0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4]) + res_array = contact_map.atom2res(arrin, nres, res_map, norm) + + assert np.allclose(res_array, expected) + +def test_make_atom_map(): + + input = [0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4] + result = contact_map.make_atom_map(input) + + expected = defaultdict(list, {0: np.array([0]), + 1: np.array([1, 2]), + 2: np.array([3, 4, 5]), + 3: np.array([6, 7, 8]), + 4: np.array([9, 10, 11, 12])}) + + for key, value in result.items(): + assert key in expected.keys() + + +def test_contact_info(test_molecule): + result = contact_map._contact_info(test_molecule) + + vdw_list, atypes, coords, res_serial, resids, chains, resnames, res_idx, ca_pos, nresidues, G = result + + assert nresidues == 4 + + assert np.allclose(vdw_list, [0]*len(test_molecule)) + assert np.allclose(atypes, [0]*len(test_molecule)) + + assert np.allclose(coords, np.stack([test_molecule.nodes[node]['position']*10 for node in sorted(test_molecule.nodes)])) + + assert np.allclose(res_serial, np.array([0, 0, 0, 1, 1, 2, 3, 3, 3])) + assert np.allclose(resids, np.array([1, 2, 3, 4])) + assert np.allclose(res_idx, np.array([0, 1, 2, 3])) + + assert len(ca_pos) == 0 + + assert set(chains) & set(['A']*nresidues) + assert set(resnames) & set(['res0', 'res1', 'res2', 'res3']) + + assert equal_graphs(make_residue_graph(test_molecule), G) + From b7c8da77efc1b071d13580439313add9a67409fd Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 18:47:24 +0000 Subject: [PATCH 18/29] more contact map generation tests for main contact finding functions. add header to contact map file if written --- vermouth/rcsu/contact_map.py | 22 +- .../tests/data/test_molecule_contacts.out | 23 ++ vermouth/tests/datafiles.py | 2 + vermouth/tests/rcsu/test_contact_map.py | 263 +++++++++++++++++- 4 files changed, 301 insertions(+), 9 deletions(-) create mode 100644 vermouth/tests/data/test_molecule_contacts.out diff --git a/vermouth/rcsu/contact_map.py b/vermouth/rcsu/contact_map.py index f8158cf1b..ec1dfaa76 100644 --- a/vermouth/rcsu/contact_map.py +++ b/vermouth/rcsu/contact_map.py @@ -20,6 +20,7 @@ from itertools import product from vermouth.file_writer import deferred_open from collections import defaultdict +from vermouth import __version__ as VERSION # BOND TYPE # Types of contacts: @@ -660,7 +661,25 @@ def _write_contacts(fout, all_contacts, ca_pos, G): G: nx.Graph residue graph of the input molecule ''' - # this to write out the file if needed + + header = [f"Go contact map calculated with vermouth {VERSION}\n\n"] + + header.append("Residue-Residue Contacts\n" + "\n" + "ID - atom identification\n" + "I1,I2 - serial residue id\n" + "AA - 3-letter code of aminoacid\n" + "C - chain\n" + "I(PDB) - residue number in PDB file\n" + "DCA - distance between CA\n" + "CMs - OV , CSU , oCSU , rCSU\n" + " (CSU does not take into account chemical properties of atoms)\n" + "rCSU - net contact from rCSU\n" + "Count - number of contacts between residues\n" + "\n" + " ID I1 AA C I(PDB) I2 AA C I(PDB) DCA CMs rCSU Count \n" + "=======================================================================================\n") + msgs = [] count = 0 for contact in all_contacts: @@ -677,6 +696,7 @@ def _write_contacts(fout, all_contacts, ca_pos, G): msgs.append(msg) message_out = ''.join(msgs) with deferred_open(fout, "w") as f: + f.write(''.join(header)) f.write(message_out) diff --git a/vermouth/tests/data/test_molecule_contacts.out b/vermouth/tests/data/test_molecule_contacts.out new file mode 100644 index 000000000..de96ba2f3 --- /dev/null +++ b/vermouth/tests/data/test_molecule_contacts.out @@ -0,0 +1,23 @@ +Go contact map calculated with vermouth 0.12.1.dev27 + +Residue-Residue Contacts + +ID - atom identification +I1,I2 - serial residue id +AA - 3-letter code of aminoacid +C - chain +I(PDB) - residue number in PDB file +DCA - distance between CA +CMs - OV , CSU , oCSU , rCSU + (CSU does not take into account chemical properties of atoms) +rCSU - net contact from rCSU +Count - number of contacts between residues + + ID I1 AA C I(PDB) I2 AA C I(PDB) DCA CMs rCSU Count +======================================================================================= +R 1 1 res0 A 1 2 res1 A 2 55.9017 0 1 0 0 0 66 +R 2 2 res1 A 2 1 res0 A 1 55.9017 0 1 0 0 0 227 +R 3 2 res1 A 2 3 res2 A 3 55.9017 0 1 0 0 0 146 +R 4 3 res2 A 3 2 res1 A 2 55.9017 0 1 0 0 0 227 +R 5 3 res2 A 3 4 res0 A 4 70.7107 0 1 0 0 0 226 +R 6 4 res0 A 4 3 res2 A 3 70.7107 0 1 0 0 0 227 diff --git a/vermouth/tests/datafiles.py b/vermouth/tests/datafiles.py index 23e6eaf8f..002d0d53a 100644 --- a/vermouth/tests/datafiles.py +++ b/vermouth/tests/datafiles.py @@ -51,6 +51,8 @@ # Mappings MAP_UNIVERSAL_TEST_PEPPLANE = TEST_DATA / 'mappings' / 'universal-test' +# contact map +TEST_MOLECULE_CONTACT_MAP = TEST_DATA / 'test_molecule_contacts.out' # Clean the namespace so only the data file variables can be imported. # An other option would be to define __all__, but it is easy to forget to add diff --git a/vermouth/tests/rcsu/test_contact_map.py b/vermouth/tests/rcsu/test_contact_map.py index dc0b39b73..466d1f1a2 100644 --- a/vermouth/tests/rcsu/test_contact_map.py +++ b/vermouth/tests/rcsu/test_contact_map.py @@ -21,9 +21,12 @@ from vermouth.rcsu import contact_map from collections import defaultdict from vermouth.graph_utils import make_residue_graph +from scipy.spatial import cKDTree as KDTree from vermouth.rcsu.contact_map import GenerateContactMap import vermouth from vermouth.tests.helper_functions import test_molecule, equal_graphs +from vermouth.tests.datafiles import TEST_MOLECULE_CONTACT_MAP +from pathlib import Path @pytest.mark.parametrize('resname, atomname, expected', ( @@ -33,6 +36,7 @@ ('NON', 'NON', 0.00) )) def test_get_vdw_radius(resname, atomname, expected): + # test that we get the correct vdw radii and errors in resname/atomname are handled correctly result = contact_map._get_vdw_radius(resname, atomname) assert result == expected @@ -49,6 +53,7 @@ def test_get_atype(resname, atomname, expected): assert result == expected def test_surface_generation(): + # test that a surface is generated with the correct points position = np.array([1, 1, 1]) @@ -68,22 +73,23 @@ def test_surface_generation(): @pytest.mark.parametrize('norm, expected', ( (False, np.array([[1, 0, 0, 0, 0], - [0, 8, 0, 0, 0], - [0, 0, 27, 0, 0], - [0, 0, 0, 36, 0], - [0, 0, 0, 0, 80]] + [0, 8, 0, 0, 0], + [0, 0, 27, 0, 0], + [0, 0, 0, 36, 0], + [0, 0, 0, 0, 80]] ) ), (True, np.array([[1, 0, 0, 0, 0], - [0, 1, 0, 0, 0], - [0, 0, 1, 0, 0], - [0, 0, 0, 1, 0], - [0, 0, 0, 0, 1]] + [0, 1, 0, 0, 0], + [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], + [0, 0, 0, 0, 1]] ) ) )) def test_atom2res(norm, expected): + # test that atomic resolution arrays get mapped correctly to their residues and are normalised if required arrin = np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], @@ -107,6 +113,7 @@ def test_atom2res(norm, expected): assert np.allclose(res_array, expected) def test_make_atom_map(): + # test that the atom_map defaultdict is generated correctly input = [0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4] result = contact_map.make_atom_map(input) @@ -122,6 +129,8 @@ def test_make_atom_map(): def test_contact_info(test_molecule): + # test we get the expected input data from a molecule + result = contact_map._contact_info(test_molecule) vdw_list, atypes, coords, res_serial, resids, chains, resnames, res_idx, ca_pos, nresidues, G = result @@ -144,3 +153,241 @@ def test_contact_info(test_molecule): assert equal_graphs(make_residue_graph(test_molecule), G) + +def test_calculate_overlap(test_molecule): + # test the overlap is calculated correctly + + result = contact_map._contact_info(test_molecule) + points = result[2] + tree = KDTree(points) + vdw_list = [7] * len(points) + natoms = len(points) + vdw_max = 20 + alpha = 1 + + overlaps = contact_map._calculate_overlap(tree, vdw_list, natoms, vdw_max, alpha) + + expected = np.array([[0., 1., 1., 1., 1., 1., 0., 0., 0.], + [1., 0., 1., 1., 1., 1., 0., 0., 0.], + [1., 1., 0., 1., 1., 0., 0., 0., 0.], + [1., 1., 1., 0., 1., 1., 1., 1., 0.], + [1., 1., 1., 1., 0., 1., 1., 1., 1.], + [1., 1., 0., 1., 1., 0., 1., 1., 1.], + [0., 0., 0., 1., 1., 1., 0., 1., 1.], + [0., 0., 0., 1., 1., 1., 1., 0., 1.], + [0., 0., 0., 0., 1., 1., 1., 1., 0.]]) + + assert np.allclose(overlaps, expected) + + +def test_calculate_csu(test_molecule): + # test that the csu contacts are found correctly + + result = contact_map._contact_info(test_molecule) + points = result[2] + + vdw_list = [7] * len(points) + fiba, fibb = 13, 21 + natoms = len(points) + tree = KDTree(points) + vdw_max = 20 + water_radius = 1 + + csu_contacts = contact_map._calculate_csu(points, + vdw_list, + fiba, + fibb, + natoms, + tree, + vdw_max, + water_radius) + + # these are the values that sphere points might have contacts with for each point above. + expected = np.array([[-1, 1, 3, -1, 1, -1, 1, 3, -1, 1, 3, 1, 3, -1, 1, 3, -1, 1, -1, 1, 3], + [-1, 2, 0, -1, 2, 0, 2, 4, 0, 2, 0, 2, 4, 0, 2, 0, -1, 2, 0, 2, 4], + [-1, -1, 1, -1, -1, 1, -1, 4, 1, -1, 1, -1, 4, 1, -1, 1, -1, -1, 1, -1, -1], + [-1, 4, 5, 0, 4, -1, 0, 5, 0, 4, 5, 0, 5, 0, 4, 5, 0, 4, -1, 0, 5], + [-1, -1, 3, 1, 7, 3, 1, 5, 1, 8, 3, 1, 5, 1, 2, 3, 1, 8, 3, 1, -1], + [-1, -1, 6, 3, 6, -1, 3, 6, 3, 6, 6, 3, 6, 3, 4, 6, 3, 6, -1, 3, 6], + [-1, 7, -1, 5, 7, -1, 5, -1, 5, 7, -1, 5, -1, 5, 7, -1, 5, 7, -1, 5, -1], + [-1, 8, 6, 4, 8, 6, 8, -1, 6, 8, 6, 8, -1, 6, 8, 6, 5, 8, 6, 8, -1], + [-1, -1, 7, -1, -1, 7, -1, -1, 7, -1, 7, -1, -1, 7, -1, 7, 4, -1, 7, -1, -1]]) + + assert np.allclose(csu_contacts, expected) + +def test_contact_types(test_molecule): + + result = contact_map._contact_info(test_molecule) + points = result[2] + + vdw_list = [7] * len(points) + fiba, fibb = 13, 21 + natoms = len(points) + tree = KDTree(points) + vdw_max = 20 + water_radius = 1 + + hits = contact_map._calculate_csu(points, + vdw_list, + fiba, + fibb, + natoms, + tree, + vdw_max, + water_radius) + + + natoms = len(hits) + # this is slightly dodgy, but we get away with it because it's < 10. gives some variety at least + atypes = np.arange(natoms) + + expected = [np.array([[0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 8., 0., 3., 0., 0., 0., 0.], + [0., 7., 0., 0., 2., 0., 0., 0., 0.], + [0., 0., 0., 0., 5., 6., 0., 0., 0.], + [0., 7., 1., 5., 0., 2., 0., 1., 2.], + [0., 0., 0., 7., 1., 0., 9., 0., 0.], + [0., 0., 0., 0., 0., 7., 0., 5., 0.], + [0., 0., 0., 0., 1., 1., 7., 0., 8.], + [0., 0., 0., 0., 1., 0., 0., 7., 0.]]), + np.array([[0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 8., 0., 0., 0., 0., 0., 0.], + [0., 7., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 2., 0., 0., 0.], + [0., 0., 0., 0., 1., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.]]), + np.array([[0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 3., 0., 0., 0., 0.], + [0., 0., 0., 0., 2., 0., 0., 0., 0.], + [0., 0., 0., 0., 5., 6., 0., 0., 0.], + [0., 7., 1., 5., 0., 0., 0., 0., 0.], + [0., 0., 0., 7., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.], + [0., 0., 0., 0., 0., 0., 0., 0., 0.]])] + + contact_arrays = contact_map._contact_types(hits, natoms, atypes) + + for i, j in enumerate(contact_arrays): + assert np.allclose(j, expected[i]) + + +def test_calculate_contacts(test_molecule): + + result = contact_map._contact_info(test_molecule) + points = result[2] + res_serial = result[3] + nresidues = result[9] + + vdw_list = [7] * len(points) + atypes = np.arange(len(points)) + + expected = [np.array([[0., 0., 0., 0.], + [0., 0., 0., 0.], + [0., 0., 0., 0.], + [0., 0., 0., 0.]]), + np.array([[449., 66., 0., 0.], + [227., 287., 146., 0.], + [ 0., 227., 0., 226.], + [ 0., 0., 227., 817.]]), + np.array([[449., 0., 0., 0.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 0.]]), + np.array([[ 0., 66., 0., 0.], + [227., 287., 146., 0.], + [ 0., 227., 0., 0.], + [ 0., 0., 0., 0.]])] + + + contact_arrays = contact_map._calculate_contacts(vdw_list, atypes, points, res_serial, nresidues) + + for i, j in enumerate(contact_arrays): + assert np.allclose(j, expected[i]) + +def test_get_contacts(test_molecule): + + result = contact_map._contact_info(test_molecule) + nresidues = result[9] + res_idx = result[7] + molecule_graph = result[10] + + overlaps, contacts, stabilisers, destabilisers = [np.array([[0., 1., 0., 0.], + [0., 1., 1., 0.], + [0., 1., 1., 0.], + [0., 0., 1., 0.]]), + np.array([[449., 66., 0., 0.], + [227., 287., 146., 0.], + [ 0., 227., 0., 226.], + [ 0., 0., 227., 817.]]), + np.array([[449., 0., 0., 0.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 0.], + [ 0., 0., 0., 0.]]), + np.array([[ 0., 66., 0., 0.], + [227., 287., 146., 0.], + [ 0., 227., 0., 0.], + [ 0., 0., 0., 0.]])] + + contacts_list, all_contacts = contact_map._get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, + res_idx, molecule_graph) + + expected_all_contacts = [[1, 2, 0, 1, 1.0, 66.0, 0.0, False], + [2, 1, 1, 0, 0.0, 227.0, 0.0, False], + [2, 3, 1, 2, 1.0, 146.0, 0.0, False], + [3, 2, 2, 1, 1.0, 227.0, 0.0, False], + [3, 4, 2, 3, 0.0, 226.0, 0.0, False], + [4, 3, 3, 2, 1.0, 227.0, 0.0, False]] + + expected_contacts_list = [[1, "A", 2, "A"], + [2, "A", 3, "A"], + [3, "A", 2, "A"], + [4, "A", 3, "A"]] + for i, j in zip([contacts_list, all_contacts], [expected_contacts_list, expected_all_contacts]): + for k, l in zip(i, j): + assert list(k) == list(l) + +def test_write_contacts(test_molecule, tmp_path): + + result = contact_map._contact_info(test_molecule) + points = result[2] + res_serial = result[3] + res_idx = result[7] + nresidues = result[9] + molecule_graph = result[10] + vdw_list = [7] * len(points) + atypes = np.arange(len(points)) + + # make some fake ca positions from the COGs of the residues + ca_pos = [] + for residue in molecule_graph.nodes: + subgraph = molecule_graph.nodes[residue]['graph'] + pos = [] + for atom in sorted(subgraph.nodes): + pos.append(subgraph.nodes[atom]['position']*10) + ca_pos.append(np.mean(np.stack(pos), axis=0)) + + overlaps, contacts, stabilisers, destabilisers = contact_map._calculate_contacts(vdw_list, atypes, points, + res_serial, nresidues) + + _, all_contacts = contact_map._get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, + res_idx, molecule_graph) + + with open(TEST_MOLECULE_CONTACT_MAP) as expectedfile: + expected_lines = expectedfile.readlines() + + outpath = tmp_path / 'contacts.out' + + contact_map._write_contacts(str(outpath), + all_contacts, + ca_pos, + molecule_graph) + + with open(outpath) as infile: + # skip the first line here because it's the vermouth version + for line, expected_line in zip(infile[1:], expected_lines[1:]): + assert line == expected_line + From 4a36a8e2ca72c0e1f85c74e02486a0c0eb98a79a Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Fri, 3 Jan 2025 19:02:01 +0000 Subject: [PATCH 19/29] sorted out written contact map checking --- vermouth/tests/rcsu/test_contact_map.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/vermouth/tests/rcsu/test_contact_map.py b/vermouth/tests/rcsu/test_contact_map.py index 466d1f1a2..6eb5d2efe 100644 --- a/vermouth/tests/rcsu/test_contact_map.py +++ b/vermouth/tests/rcsu/test_contact_map.py @@ -16,6 +16,7 @@ """ Unit tests for the Go contact map generator. """ + import pytest import numpy as np from vermouth.rcsu import contact_map @@ -26,7 +27,7 @@ import vermouth from vermouth.tests.helper_functions import test_molecule, equal_graphs from vermouth.tests.datafiles import TEST_MOLECULE_CONTACT_MAP -from pathlib import Path +from vermouth.file_writer import DeferredFileWriter @pytest.mark.parametrize('resname, atomname, expected', ( @@ -381,13 +382,16 @@ def test_write_contacts(test_molecule, tmp_path): outpath = tmp_path / 'contacts.out' - contact_map._write_contacts(str(outpath), + contact_map._write_contacts(outpath, all_contacts, ca_pos, molecule_graph) + DeferredFileWriter().write() + + with open(str(outpath)) as infile: + written_lines = infile.readlines() - with open(outpath) as infile: - # skip the first line here because it's the vermouth version - for line, expected_line in zip(infile[1:], expected_lines[1:]): - assert line == expected_line + # skip the first line here because it's the vermouth version + for line, expected_line in zip(written_lines[1:], expected_lines[1:]): + assert line == expected_line From a705af3c5c95aafffb3fb6ba48de7e32bf49dca6 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:27:58 +0000 Subject: [PATCH 20/29] processor tests for contact map generation --- vermouth/tests/rcsu/test_contact_map.py | 86 +++++++++++++++++++------ 1 file changed, 67 insertions(+), 19 deletions(-) diff --git a/vermouth/tests/rcsu/test_contact_map.py b/vermouth/tests/rcsu/test_contact_map.py index 6eb5d2efe..a75fa8c45 100644 --- a/vermouth/tests/rcsu/test_contact_map.py +++ b/vermouth/tests/rcsu/test_contact_map.py @@ -24,8 +24,7 @@ from vermouth.graph_utils import make_residue_graph from scipy.spatial import cKDTree as KDTree from vermouth.rcsu.contact_map import GenerateContactMap -import vermouth -from vermouth.tests.helper_functions import test_molecule, equal_graphs +from vermouth.tests.helper_functions import test_molecule, equal_graphs, create_sys_all_attrs from vermouth.tests.datafiles import TEST_MOLECULE_CONTACT_MAP from vermouth.file_writer import DeferredFileWriter @@ -312,26 +311,23 @@ def test_calculate_contacts(test_molecule): def test_get_contacts(test_molecule): result = contact_map._contact_info(test_molecule) - nresidues = result[9] + points = result[2] + res_serial = result[3] res_idx = result[7] + nresidues = result[9] molecule_graph = result[10] - overlaps, contacts, stabilisers, destabilisers = [np.array([[0., 1., 0., 0.], - [0., 1., 1., 0.], - [0., 1., 1., 0.], - [0., 0., 1., 0.]]), - np.array([[449., 66., 0., 0.], - [227., 287., 146., 0.], - [ 0., 227., 0., 226.], - [ 0., 0., 227., 817.]]), - np.array([[449., 0., 0., 0.], - [ 0., 0., 0., 0.], - [ 0., 0., 0., 0.], - [ 0., 0., 0., 0.]]), - np.array([[ 0., 66., 0., 0.], - [227., 287., 146., 0.], - [ 0., 227., 0., 0.], - [ 0., 0., 0., 0.]])] + vdw_list = [7] * len(points) + atypes = np.arange(len(points)) + + overlaps, contacts, stabilisers, destabilisers = contact_map._calculate_contacts(vdw_list, atypes, points, + res_serial, nresidues) + + # add something interesting to overlaps otherwise we get nothing + overlaps = np.array([[0., 1., 0., 0.], + [0., 1., 1., 0.], + [0., 1., 1., 0.], + [0., 0., 1., 0.]]) contacts_list, all_contacts = contact_map._get_contacts(nresidues, overlaps, contacts, stabilisers, destabilisers, res_idx, molecule_graph) @@ -395,3 +391,55 @@ def test_write_contacts(test_molecule, tmp_path): for line, expected_line in zip(written_lines[1:], expected_lines[1:]): assert line == expected_line + +@pytest.mark.parametrize('write_out', + ((False), + (True)) + ) +def test_do_contacts(test_molecule, tmp_path, write_out): + + if write_out: + outpath = str(tmp_path / 'contacts.out') + else: + outpath = False + + contacts = contact_map.do_contacts(test_molecule, outpath) + + # because of the vdw radii we actually expect no contacts + assert len(contacts) == len([]) == 0 + + if write_out: + DeferredFileWriter().write() + + with open(TEST_MOLECULE_CONTACT_MAP) as expectedfile: + expected_lines = expectedfile.readlines() + + with open(str(outpath)) as infile: + written_lines = infile.readlines() + + # skip the first line here because it's the vermouth version + # this will actually just check that the header is written because no contacts are found + for line, expected_line in zip(written_lines[1:], expected_lines[1:]): + assert line == expected_line + +def test_processor(test_molecule): + # these don't actually matter because the processor only need coordinates + atypes = {0: "P1", 1: "SN4a", 2: "SN4a", + 3: "SP1", 4: "C1", + 5: "TP1", + 6: "P1", 7: "SN3a", 8: "SP4"} + secstruc = {1: "H", 2: "H", 3: "H", 4: "H"} + + system = create_sys_all_attrs(test_molecule, + moltype="molecule_0", + secstruc=secstruc, + defaults={"chain": "A"}, + attrs={"atype": atypes}) + assert len(system.go_params["go_map"]) == 0 + + processor = GenerateContactMap(write_file=False) + processor.run_system(system) + + # really just matters that after the processor has been run a list has been added to the dictionary + assert len(system.go_params["go_map"]) == 1 + From 17c00f67eed9a43938adcb36265bc15fa612058f Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:50:54 +0000 Subject: [PATCH 21/29] Update docs with new arguments --- doc/source/tutorials/go_models.rst | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/doc/source/tutorials/go_models.rst b/doc/source/tutorials/go_models.rst index e4a781075..6ad1c8967 100644 --- a/doc/source/tutorials/go_models.rst +++ b/doc/source/tutorials/go_models.rst @@ -15,7 +15,8 @@ the form of Lennard-Jones interactions, which are written as an extra file to be The Gō model is described in the help:: Virtual site based GoMartini: - -go GO Contact map to be used for the Martini Go model. Currently, only one format is supported. See docs. (default: None) + -go [GO] Use Martini Go model. Accepts either an input file from the server, or just provide the flag to + calculate as part of Martinize. (default: None) -go-eps GO_EPS The strength of the Go model structural bias in kJ/mol. (default: 9.414) -go-moltype GOVS_MOLTYPE Set the name of the molecule when using Virtual Sites GoMartini. (default: molecule_0) @@ -23,13 +24,30 @@ The Gō model is described in the help:: -go-up GO_UP Maximum distance (nm) above which contacts are removed. (default: 1.1) -go-res-dist GO_RES_DIST Minimum graph distance (similar sequence distance) below which contacts are removed. (default: 3) + -go-write-file [GO_WRITE_FILE] + Write out contact map to file if calculating as part of Martinize2. (default: None) + +To add a Gō model to your protein, the first step is to calculate the contact map of your protein. +The contact map can be obtained in two ways. Firstly, by uploading it +to the `web server `_, and downloading the associated ``contact_map.out`` file. +Alternatively, with a version of Martinize2 ≥ 0.13.0 the contact map can be calculated directly without the need for +any external processes. While the implementations of the contact algorithm are identical, the Martinize2 implementation +may be relatively slow for larger systems. Typically for proteins with fewer than 1000 residues, the calculation of the +contact map as part of Martinize2 will add up to a minute of extra calculation. Note that while the implementations of +the main algorithm are identical, there may be small differences in the resulting contact map files due to assumptions +the server makes about the format of input pdb files, which the implementation in Martinize2 overcomes. If you want +to check the contact map that Martinize2 has calculated, you can write it out using the ``-go-write-file`` argument. +While the contact map files may have small differences, it is likely that they will still result in the same non-bonded +file outputs, a result of how symmetrical contacts are further identified in the definition of the Gō model. + +The go model is then applied to the protein using the ``-go`` argument of martinize2. If you have used a contact map +from the server, give the path to the contact map file as the argument: -To add a Gō model to your protein, the first step is to calculate the contact map of your protein by uploading it -to the `web server `_. +``martinize2 -f protein.pdb -o topol.top -x cg_protein.pdb -ff martini3001 -dssp -go contact_map.out`` -The contact map is then used in your martinize2 command: +Otherwise the contact map is calculated as part of Martinize2 by just specifying the ``-go`` argument: -``martinize2 -f protein.pdb -o topol.top -x cg_protein.pdb -ff martini3001 -dssp -go contact_map.out`` +``martinize2 -f protein.pdb -o topol.top -x cg_protein.pdb -ff martini3001 -dssp -go`` Without any further additions, this will: From 89b2023790457bf99d15e90dd7fb7ae098922390 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:18:15 +0000 Subject: [PATCH 22/29] correct logic for go_write_file --- bin/martinize2 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index cb52c612f..c48197a9f 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -983,10 +983,13 @@ def entry(): read_go_map(system=system, file_path=args.go) else: LOGGER.info("Generating Go model contact map.", type="step") - if isinstance(args.go_write_file, Path): - go_file_path = str(args.go_write_file) + if args.go_write_file: + if isinstance(args.go_write_file, Path): + go_file_path = str(args.go_write_file) + else: + go_file_path = "contact_map_martinize.out" else: - go_file_path = "contact_map_martinize.out" + go_file_path = False GenerateContactMap(write_file=go_file_path).run_system(system) From 0e99a8ff6016d63a475eaf18ad4041cba4fb4e6c Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:40:28 +0000 Subject: [PATCH 23/29] add CLI for backbone and go atomnames as per #585 --- bin/martinize2 | 18 +++++++++++++++++- vermouth/rcsu/go_pipeline.py | 2 ++ vermouth/rcsu/go_vs_includes.py | 14 +++++++++----- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/bin/martinize2 b/bin/martinize2 index c48197a9f..0f61257eb 100755 --- a/bin/martinize2 +++ b/bin/martinize2 @@ -589,6 +589,20 @@ def entry(): type=Path, help=("Write out contact map to file if calculating as part of Martinize2.") ) + go_group.add_argument( + "-go-backbone", + dest="go_backbone", + default="BB", + type=str, + help=("Name of protein backbone bead on which to place a virtual interaction go site") + ) + go_group.add_argument( + "-go-atomname", + dest="go_atomname", + default="CA", + type=str, + help=("Name of the virtual interaction go site atom") + ) water_group = parser.add_argument_group("Apply water bias.") water_group.add_argument( @@ -1022,7 +1036,9 @@ def entry(): cutoff_short=args.go_low, cutoff_long=args.go_up, go_eps=args.go_eps, - res_dist=args.go_res_dist,) + res_dist=args.go_res_dist, + go_anchor_bead=args.go_backbone, + go_atomname=args.go_atomname) defines = ("GO_VIRT",) itp_paths = {"atomtypes": "go_atomtypes.itp", diff --git a/vermouth/rcsu/go_pipeline.py b/vermouth/rcsu/go_pipeline.py index 1917cb178..4312bd566 100644 --- a/vermouth/rcsu/go_pipeline.py +++ b/vermouth/rcsu/go_pipeline.py @@ -40,6 +40,8 @@ def prepare_run(self, system, moltype): vermouth.MergeAllMolecules().run_system(system) molecule = system.molecules[0] molecule.meta['moltype'] = moltype + # add citations for the go model here + molecule.citations.add('M3_GO') def run_system(self, system, **kwargs): self.kwargs = kwargs diff --git a/vermouth/rcsu/go_vs_includes.py b/vermouth/rcsu/go_vs_includes.py index a65920ab1..0aa622c60 100644 --- a/vermouth/rcsu/go_vs_includes.py +++ b/vermouth/rcsu/go_vs_includes.py @@ -40,8 +40,10 @@ class VirtualSiteCreator(Processor): Assign molecule type names to the molecules in a system. :func:`add_virtual_sites` """ - def __init__(self): + def __init__(self, go_anchor_bead, go_atomname): self.system = None + self.backbone = go_anchor_bead + self.atomname = go_atomname def run_molecule(self, molecule): moltype = molecule.meta.get('moltype') @@ -50,9 +52,11 @@ def run_molecule(self, molecule): if not self.system: raise ValueError('This processor requires a system.') - molecule.citations.add('M3_GO') - - self.add_virtual_sites(molecule, prefix=moltype) + print(self.backbone, self.atomname) + self.add_virtual_sites(molecule, + prefix=moltype, + backbone=self.backbone, + atomname=self.atomname) return molecule @@ -65,7 +69,7 @@ def add_virtual_sites(self, molecule, prefix, backbone='BB', atomname='CA', char """ Add the virtual sites for GoMartini in the molecule. - One virtual site is added per backbone bead of the the Martini protein. + One virtual site is added per backbone bead of the Martini protein. Each virtual site copies the resid, resname, and chain of the backbone bead. It also copies the *reference* to the position array, so the virtual site position follows if the backbone bead is translated. The virtual sites From c32d2dae45fc590482b949d0d5a569d0b1edde06 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:31:17 +0000 Subject: [PATCH 24/29] Hacked an error raise for #642 if chain-resid pair for go model not found in molecule --- vermouth/rcsu/go_structure_bias.py | 83 ++++++++++++++++++------------ vermouth/rcsu/go_vs_includes.py | 2 +- 2 files changed, 51 insertions(+), 34 deletions(-) diff --git a/vermouth/rcsu/go_structure_bias.py b/vermouth/rcsu/go_structure_bias.py index 619706442..d315b0fb0 100644 --- a/vermouth/rcsu/go_structure_bias.py +++ b/vermouth/rcsu/go_structure_bias.py @@ -22,6 +22,8 @@ from ..selectors import filter_minimal, select_backbone from ..gmx.topology import NonbondParam from .go_utils import get_go_type_from_attributes +from ..log_helpers import StyleAdapter, get_logger +LOGGER = StyleAdapter(get_logger(__name__)) class ComputeStructuralGoBias(Processor): """ @@ -115,8 +117,12 @@ def _chain_id_to_resnode(self, chain, resid): dict a dict matching the chain,resid to the self.res_graph node """ + if self.__chain_id_to_resnode: - return self.__chain_id_to_resnode[(chain, resid)] + if self.__chain_id_to_resnode.get((chain, resid), None) is not None: + return self.__chain_id_to_resnode[(chain, resid)] + else: + LOGGER.debug(stacklevel=5, msg='chain-resid pair not found in molecule') # for each residue collect the chain and residue in a dict # we use this later for identifying the residues from the @@ -130,7 +136,11 @@ def _chain_id_to_resnode(self, chain, resid): resid_key = self.res_graph.nodes[resnode].get('_old_resid') self.__chain_id_to_resnode[(chain_key, resid_key)] = resnode - return self.__chain_id_to_resnode[(chain, resid)] + if self.__chain_id_to_resnode.get((chain, resid), None) is not None: + return self.__chain_id_to_resnode[(chain, resid)] + else: + LOGGER.debug(stacklevel=5, msg='chain-resid pair not found in molecule') + def contact_selector(self, molecule): """ @@ -157,6 +167,7 @@ def contact_selector(self, molecule): # self.res_dist connected_pairs = dict(nx.all_pairs_shortest_path_length(self.res_graph, cutoff=self.res_dist)) + bad_chains_warning = False for contact in self.system.go_params["go_map"][0]: resIDA, chainA, resIDB, chainB = contact # identify the contact in the residue graph based on @@ -166,38 +177,44 @@ def contact_selector(self, molecule): # make sure that both residues are not connected # note: contacts should be symmetric so we only # check against one - if resB not in connected_pairs[resA]: - # now we lookup the backbone nodes within the residue contact - bb_node_A = next(filter_minimal(self.res_graph.nodes[resA]['graph'], select_backbone)) - bb_node_B = next(filter_minimal(self.res_graph.nodes[resB]['graph'], select_backbone)) - # compute the distance between bb-beads - dist = np.linalg.norm(molecule.nodes[bb_node_A]['position'] - - molecule.nodes[bb_node_B]['position']) - # verify that the distance between BB-beads satisfies the - # cut-off criteria - if self.cutoff_long > dist > self.cutoff_short: - atype_a = next(get_go_type_from_attributes(self.res_graph.nodes[resA]['graph'], - _old_resid=resIDA, - chain=chainA, - prefix=self.moltype)) - atype_b = next(get_go_type_from_attributes(self.res_graph.nodes[resB]['graph'], - _old_resid=resIDB, - chain=chainB, - prefix=self.moltype)) - # Check if symmetric contact has already been processed before - # and if so, we append the contact to the final symmetric contact matrix - # and add the exclusions. Else, we add to the full valid contact_matrix - # and continue searching. - if (atype_b, atype_a, dist) in contact_matrix: - # generate backbone-backbone exclusions - # perhaps one day can be its own function - excl = Interaction(atoms=(bb_node_A, bb_node_B), - parameters=[], meta={"group": "Go model exclusion"}) - molecule.interactions['exclusions'].append(excl) - symmetrical_matrix.append((atype_a, atype_b, dist)) - else: - contact_matrix.append((atype_a, atype_b, dist)) + if (resA is not None) and (resB is not None): + if resB not in connected_pairs[resA]: + # now we lookup the backbone nodes within the residue contact + bb_node_A = next(filter_minimal(self.res_graph.nodes[resA]['graph'], select_backbone)) + bb_node_B = next(filter_minimal(self.res_graph.nodes[resB]['graph'], select_backbone)) + # compute the distance between bb-beads + dist = np.linalg.norm(molecule.nodes[bb_node_A]['position'] - + molecule.nodes[bb_node_B]['position']) + # verify that the distance between BB-beads satisfies the + # cut-off criteria + if self.cutoff_long > dist > self.cutoff_short: + atype_a = next(get_go_type_from_attributes(self.res_graph.nodes[resA]['graph'], + _old_resid=resIDA, + chain=chainA, + prefix=self.moltype)) + atype_b = next(get_go_type_from_attributes(self.res_graph.nodes[resB]['graph'], + _old_resid=resIDB, + chain=chainB, + prefix=self.moltype)) + # Check if symmetric contact has already been processed before + # and if so, we append the contact to the final symmetric contact matrix + # and add the exclusions. Else, we add to the full valid contact_matrix + # and continue searching. + if (atype_b, atype_a, dist) in contact_matrix: + # generate backbone-backbone exclusions + # perhaps one day can be its own function + excl = Interaction(atoms=(bb_node_A, bb_node_B), + parameters=[], meta={"group": "Go model exclusion"}) + molecule.interactions['exclusions'].append(excl) + symmetrical_matrix.append((atype_a, atype_b, dist)) + else: + contact_matrix.append((atype_a, atype_b, dist)) + else: + if bad_chains_warning == False: + LOGGER.warning("Mismatch between chain IDs in pdb and contact map. This probably means the " + "chain IDs are missing in the pdb and the contact map has all chains = Z.") + bad_chains_warning = True return symmetrical_matrix def compute_go_interaction(self, contacts): diff --git a/vermouth/rcsu/go_vs_includes.py b/vermouth/rcsu/go_vs_includes.py index 0aa622c60..2e2249d92 100644 --- a/vermouth/rcsu/go_vs_includes.py +++ b/vermouth/rcsu/go_vs_includes.py @@ -52,7 +52,7 @@ def run_molecule(self, molecule): if not self.system: raise ValueError('This processor requires a system.') - print(self.backbone, self.atomname) + self.add_virtual_sites(molecule, prefix=moltype, backbone=self.backbone, From d393ff209bf72db99de856da4ffde38cc6ce5776 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:07:17 +0000 Subject: [PATCH 25/29] fixed tests --- vermouth/rcsu/go_pipeline.py | 2 -- vermouth/rcsu/go_vs_includes.py | 6 ++++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vermouth/rcsu/go_pipeline.py b/vermouth/rcsu/go_pipeline.py index 4312bd566..1917cb178 100644 --- a/vermouth/rcsu/go_pipeline.py +++ b/vermouth/rcsu/go_pipeline.py @@ -40,8 +40,6 @@ def prepare_run(self, system, moltype): vermouth.MergeAllMolecules().run_system(system) molecule = system.molecules[0] molecule.meta['moltype'] = moltype - # add citations for the go model here - molecule.citations.add('M3_GO') def run_system(self, system, **kwargs): self.kwargs = kwargs diff --git a/vermouth/rcsu/go_vs_includes.py b/vermouth/rcsu/go_vs_includes.py index 2e2249d92..1d1d44365 100644 --- a/vermouth/rcsu/go_vs_includes.py +++ b/vermouth/rcsu/go_vs_includes.py @@ -40,7 +40,7 @@ class VirtualSiteCreator(Processor): Assign molecule type names to the molecules in a system. :func:`add_virtual_sites` """ - def __init__(self, go_anchor_bead, go_atomname): + def __init__(self, go_anchor_bead='BB', go_atomname='CA'): self.system = None self.backbone = go_anchor_bead self.atomname = go_atomname @@ -52,6 +52,8 @@ def run_molecule(self, molecule): if not self.system: raise ValueError('This processor requires a system.') + # add citations for the go model here + molecule.citations.add('M3_GO') self.add_virtual_sites(molecule, prefix=moltype, @@ -65,7 +67,7 @@ def run_system(self, system): LOGGER.info("Adding Virtual Sites to backbone beads.", type="step") super().run_system(system) - def add_virtual_sites(self, molecule, prefix, backbone='BB', atomname='CA', charge=0): + def add_virtual_sites(self, molecule, prefix, backbone, atomname, charge=0): """ Add the virtual sites for GoMartini in the molecule. From b90f3a00e864cb73318b26ff0ff4d1c9fa80f305 Mon Sep 17 00:00:00 2001 From: Chris Brasnett <35073246+csbrasnett@users.noreply.github.com> Date: Mon, 6 Jan 2025 14:40:27 +0000 Subject: [PATCH 26/29] added integration test for internal contact map calculation --- .../tier-1/lysozyme_GO_internal/README | 10 + .../tier-1/lysozyme_GO_internal/aa.pdb | 1549 +++++++++++++ .../lysozyme_GO_internal/martinize2/cg.pdb | 620 +++++ .../lysozyme_GO_internal/martinize2/citation | 3 + .../lysozyme_GO_internal/martinize2/command | 9 + .../martinize2/go_atomtypes.itp | 130 ++ .../martinize2/go_nbparams.itp | 248 ++ .../martinize2/martinize_contact_map.out | 1257 ++++++++++ .../martinize2/molecule.itp | 2017 +++++++++++++++++ .../lysozyme_GO_internal/martinize2/topol.top | 9 + .../integration_tests/test_integration.py | 17 +- 11 files changed, 5867 insertions(+), 2 deletions(-) create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/README create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/aa.pdb create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/cg.pdb create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/citation create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/command create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_atomtypes.itp create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_nbparams.itp create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/martinize_contact_map.out create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/molecule.itp create mode 100644 vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/topol.top diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/README b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/README new file mode 100644 index 000000000..857376c76 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/README @@ -0,0 +1,10 @@ +### DETAILS: + +# Original PDB CODE: 3LZT +# Structure from X-ray crystallography experiment. +# Select atoms with occupancy higuer than 0.5 + +### TEST: + +# -ff martini 3001 +# internal go map calculation \ No newline at end of file diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/aa.pdb b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/aa.pdb new file mode 100644 index 000000000..39371e9a6 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/aa.pdb @@ -0,0 +1,1549 @@ +HEADER HYDROLASE(O-GLYCOSYL) 10-JAN-92 1HEL +TITLE STRUCTURAL AND THERMODYNAMIC ANALYSIS OF COMPENSATING MUTATIONS WITHIN +TITLE 2 THE CORE OF CHICKEN EGG WHITE LYSOZYME +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: HEN EGG WHITE LYSOZYME; +COMPND 3 CHAIN: A; +COMPND 4 EC: 3.2.1.17; +COMPND 5 ENGINEERED: YES +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: GALLUS GALLUS; +SOURCE 3 ORGANISM_COMMON: CHICKEN; +SOURCE 4 ORGANISM_TAXID: 9031; +SOURCE 5 ORGAN: EGG +KEYWDS HYDROLASE(O-GLYCOSYL) +EXPDTA X-RAY DIFFRACTION +AUTHOR K.P.WILSON,B.A.MALCOLM,B.W.MATTHEWS +REVDAT 3 16-NOV-11 1HEL 1 VERSN HETATM +REVDAT 2 24-FEB-09 1HEL 1 VERSN +REVDAT 1 31-OCT-93 1HEL 0 +JRNL AUTH K.P.WILSON,B.A.MALCOLM,B.W.MATTHEWS +JRNL TITL STRUCTURAL AND THERMODYNAMIC ANALYSIS OF COMPENSATING +JRNL TITL 2 MUTATIONS WITHIN THE CORE OF CHICKEN EGG WHITE LYSOZYME. +JRNL REF J.BIOL.CHEM. V. 267 10842 1992 +JRNL REFN ISSN 0021-9258 +JRNL PMID 1587860 +REMARK 1 +REMARK 1 REFERENCE 1 +REMARK 1 AUTH B.A.MALCOLM,K.P.WILSON,B.W.MATTHEWS,J.F.KIRSCH,A.C.WILSON +REMARK 1 TITL ANCESTRAL LYSOZYMES RECONSTRUCTED, NEUTRALITY TESTED, AND +REMARK 1 TITL 2 THERMOSTABILITY LINKED TO HYDROCARBON PACKING +REMARK 1 REF NATURE V. 344 86 1990 +REMARK 1 REFN ISSN 0028-0836 +REMARK 2 +REMARK 2 RESOLUTION. 1.70 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : TNT +REMARK 3 AUTHORS : TRONRUD,TEN EYCK,MATTHEWS +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.70 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : NULL +REMARK 3 DATA CUTOFF (SIGMA(F)) : NULL +REMARK 3 COMPLETENESS FOR RANGE (%) : NULL +REMARK 3 NUMBER OF REFLECTIONS : NULL +REMARK 3 +REMARK 3 USING DATA ABOVE SIGMA CUTOFF. +REMARK 3 CROSS-VALIDATION METHOD : NULL +REMARK 3 FREE R VALUE TEST SET SELECTION : NULL +REMARK 3 R VALUE (WORKING + TEST SET) : 0.152 +REMARK 3 R VALUE (WORKING SET) : NULL +REMARK 3 FREE R VALUE : NULL +REMARK 3 FREE R VALUE TEST SET SIZE (%) : NULL +REMARK 3 FREE R VALUE TEST SET COUNT : NULL +REMARK 3 +REMARK 3 USING ALL DATA, NO SIGMA CUTOFF. +REMARK 3 R VALUE (WORKING + TEST SET, NO CUTOFF) : NULL +REMARK 3 R VALUE (WORKING SET, NO CUTOFF) : NULL +REMARK 3 FREE R VALUE (NO CUTOFF) : NULL +REMARK 3 FREE R VALUE TEST SET SIZE (%, NO CUTOFF) : NULL +REMARK 3 FREE R VALUE TEST SET COUNT (NO CUTOFF) : NULL +REMARK 3 TOTAL NUMBER OF REFLECTIONS (NO CUTOFF) : NULL +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 1001 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 0 +REMARK 3 SOLVENT ATOMS : 185 +REMARK 3 +REMARK 3 WILSON B VALUE (FROM FCALC, A**2) : NULL +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. RMS WEIGHT COUNT +REMARK 3 BOND LENGTHS (A) : 0.019 ; NULL ; NULL +REMARK 3 BOND ANGLES (DEGREES) : 2.400 ; NULL ; NULL +REMARK 3 TORSION ANGLES (DEGREES) : NULL ; NULL ; NULL +REMARK 3 PSEUDOROTATION ANGLES (DEGREES) : NULL ; NULL ; NULL +REMARK 3 TRIGONAL CARBON PLANES (A) : NULL ; NULL ; NULL +REMARK 3 GENERAL PLANES (A) : NULL ; NULL ; NULL +REMARK 3 ISOTROPIC THERMAL FACTORS (A**2) : NULL ; NULL ; NULL +REMARK 3 NON-BONDED CONTACTS (A) : NULL ; NULL ; NULL +REMARK 3 +REMARK 3 INCORRECT CHIRAL-CENTERS (COUNT) : NULL +REMARK 3 +REMARK 3 BULK SOLVENT MODELING. +REMARK 3 METHOD USED : NULL +REMARK 3 KSOL : NULL +REMARK 3 BSOL : NULL +REMARK 3 +REMARK 3 RESTRAINT LIBRARIES. +REMARK 3 STEREOCHEMISTRY : NULL +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 1HEL COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : NULL +REMARK 200 TEMPERATURE (KELVIN) : NULL +REMARK 200 PH : NULL +REMARK 200 NUMBER OF CRYSTALS USED : NULL +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : NULL +REMARK 200 RADIATION SOURCE : NULL +REMARK 200 BEAMLINE : NULL +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : NULL +REMARK 200 WAVELENGTH OR RANGE (A) : NULL +REMARK 200 MONOCHROMATOR : NULL +REMARK 200 OPTICS : NULL +REMARK 200 +REMARK 200 DETECTOR TYPE : NULL +REMARK 200 DETECTOR MANUFACTURER : NULL +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : NULL +REMARK 200 DATA SCALING SOFTWARE : NULL +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : NULL +REMARK 200 RESOLUTION RANGE HIGH (A) : NULL +REMARK 200 RESOLUTION RANGE LOW (A) : NULL +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : NULL +REMARK 200 DATA REDUNDANCY : NULL +REMARK 200 R MERGE (I) : NULL +REMARK 200 R SYM (I) : NULL +REMARK 200 FOR THE DATA SET : NULL +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL +REMARK 200 COMPLETENESS FOR SHELL (%) : NULL +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : NULL +REMARK 200 R SYM FOR SHELL (I) : NULL +REMARK 200 FOR SHELL : NULL +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: NULL +REMARK 200 SOFTWARE USED: NULL +REMARK 200 STARTING MODEL: NULL +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 40.52 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.07 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: NULL +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 43 21 2 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X,-Y,Z+1/2 +REMARK 290 3555 -Y+1/2,X+1/2,Z+3/4 +REMARK 290 4555 Y+1/2,-X+1/2,Z+1/4 +REMARK 290 5555 -X+1/2,Y+1/2,-Z+3/4 +REMARK 290 6555 X+1/2,-Y+1/2,-Z+1/4 +REMARK 290 7555 Y,X,-Z +REMARK 290 8555 -Y,-X,-Z+1/2 +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 2 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 18.95000 +REMARK 290 SMTRY1 3 0.000000 -1.000000 0.000000 39.55000 +REMARK 290 SMTRY2 3 1.000000 0.000000 0.000000 39.55000 +REMARK 290 SMTRY3 3 0.000000 0.000000 1.000000 28.42500 +REMARK 290 SMTRY1 4 0.000000 1.000000 0.000000 39.55000 +REMARK 290 SMTRY2 4 -1.000000 0.000000 0.000000 39.55000 +REMARK 290 SMTRY3 4 0.000000 0.000000 1.000000 9.47500 +REMARK 290 SMTRY1 5 -1.000000 0.000000 0.000000 39.55000 +REMARK 290 SMTRY2 5 0.000000 1.000000 0.000000 39.55000 +REMARK 290 SMTRY3 5 0.000000 0.000000 -1.000000 28.42500 +REMARK 290 SMTRY1 6 1.000000 0.000000 0.000000 39.55000 +REMARK 290 SMTRY2 6 0.000000 -1.000000 0.000000 39.55000 +REMARK 290 SMTRY3 6 0.000000 0.000000 -1.000000 9.47500 +REMARK 290 SMTRY1 7 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY2 7 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY3 7 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY1 8 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY2 8 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY3 8 0.000000 0.000000 -1.000000 18.95000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: MONOMERIC +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 375 +REMARK 375 SPECIAL POSITION +REMARK 375 THE FOLLOWING ATOMS ARE FOUND TO BE WITHIN 0.15 ANGSTROMS +REMARK 375 OF A SYMMETRY RELATED ATOM AND ARE ASSUMED TO BE ON SPECIAL +REMARK 375 POSITIONS. +REMARK 375 +REMARK 375 ATOM RES CSSEQI +REMARK 375 HOH A 318 LIES ON A SPECIAL POSITION. +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: CLOSE CONTACTS +REMARK 500 +REMARK 500 THE FOLLOWING ATOMS THAT ARE RELATED BY CRYSTALLOGRAPHIC +REMARK 500 SYMMETRY ARE IN CLOSE CONTACT. AN ATOM LOCATED WITHIN 0.15 +REMARK 500 ANGSTROMS OF A SYMMETRY RELATED ATOM IS ASSUMED TO BE ON A +REMARK 500 SPECIAL POSITION AND IS, THEREFORE, LISTED IN REMARK 375 +REMARK 500 INSTEAD OF REMARK 500. ATOMS WITH NON-BLANK ALTERNATE +REMARK 500 LOCATION INDICATORS ARE NOT INCLUDED IN THE CALCULATIONS. +REMARK 500 +REMARK 500 DISTANCE CUTOFF: +REMARK 500 2.2 ANGSTROMS FOR CONTACTS NOT INVOLVING HYDROGEN ATOMS +REMARK 500 1.6 ANGSTROMS FOR CONTACTS INVOLVING HYDROGEN ATOMS +REMARK 500 +REMARK 500 ATM1 RES C SSEQI ATM2 RES C SSEQI SSYMOP DISTANCE +REMARK 500 O HOH A 275 O HOH A 275 8555 0.35 +REMARK 500 O HOH A 203 O HOH A 203 7556 1.38 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: COVALENT BOND ANGLES +REMARK 500 +REMARK 500 THE STEREOCHEMICAL PARAMETERS OF THE FOLLOWING RESIDUES +REMARK 500 HAVE VALUES WHICH DEVIATE FROM EXPECTED VALUES BY MORE +REMARK 500 THAN 6*RMSD (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 500 IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT: (10X,I3,1X,A3,1X,A1,I4,A1,3(1X,A4,2X),12X,F5.1) +REMARK 500 +REMARK 500 EXPECTED VALUES PROTEIN: ENGH AND HUBER, 1999 +REMARK 500 EXPECTED VALUES NUCLEIC ACID: CLOWNEY ET AL 1996 +REMARK 500 +REMARK 500 M RES CSSEQI ATM1 ATM2 ATM3 +REMARK 500 ARG A 5 NE - CZ - NH1 ANGL. DEV. = 4.8 DEGREES +REMARK 500 ARG A 14 NE - CZ - NH1 ANGL. DEV. = 3.3 DEGREES +REMARK 500 ASP A 18 CB - CG - OD1 ANGL. DEV. = 8.7 DEGREES +REMARK 500 ASP A 18 CB - CG - OD2 ANGL. DEV. = -8.1 DEGREES +REMARK 500 ARG A 45 NE - CZ - NH1 ANGL. DEV. = 3.3 DEGREES +REMARK 500 ASP A 52 CB - CG - OD1 ANGL. DEV. = 5.5 DEGREES +REMARK 500 ARG A 61 NE - CZ - NH1 ANGL. DEV. = 3.6 DEGREES +REMARK 500 ARG A 73 NE - CZ - NH1 ANGL. DEV. = 3.3 DEGREES +REMARK 500 ASP A 87 CB - CG - OD1 ANGL. DEV. = 5.6 DEGREES +REMARK 500 ASP A 119 CB - CG - OD2 ANGL. DEV. = -5.6 DEGREES +REMARK 500 ARG A 128 NE - CZ - NH1 ANGL. DEV. = 3.7 DEGREES +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 ARG A 68 19.50 -141.12 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 525 +REMARK 525 SOLVENT +REMARK 525 +REMARK 525 THE SOLVENT MOLECULES HAVE CHAIN IDENTIFIERS THAT +REMARK 525 INDICATE THE POLYMER CHAIN WITH WHICH THEY ARE MOST +REMARK 525 CLOSELY ASSOCIATED. THE REMARK LISTS ALL THE SOLVENT +REMARK 525 MOLECULES WHICH ARE MORE THAN 5A AWAY FROM THE +REMARK 525 NEAREST POLYMER CHAIN (M = MODEL NUMBER; +REMARK 525 RES=RESIDUE NAME; C=CHAIN IDENTIFIER; SSEQ=SEQUENCE +REMARK 525 NUMBER; I=INSERTION CODE): +REMARK 525 +REMARK 525 M RES CSSEQI +REMARK 525 HOH A 188 DISTANCE = 6.89 ANGSTROMS +REMARK 525 HOH A 189 DISTANCE = 6.32 ANGSTROMS +REMARK 525 HOH A 190 DISTANCE = 5.68 ANGSTROMS +REMARK 525 HOH A 228 DISTANCE = 6.51 ANGSTROMS +REMARK 525 HOH A 230 DISTANCE = 5.30 ANGSTROMS +REMARK 525 HOH A 243 DISTANCE = 5.19 ANGSTROMS +REMARK 525 HOH A 249 DISTANCE = 6.99 ANGSTROMS +REMARK 525 HOH A 258 DISTANCE = 6.92 ANGSTROMS +REMARK 525 HOH A 268 DISTANCE = 8.36 ANGSTROMS +REMARK 525 HOH A 278 DISTANCE = 6.81 ANGSTROMS +REMARK 525 HOH A 304 DISTANCE = 7.48 ANGSTROMS +REMARK 525 HOH A 305 DISTANCE = 6.21 ANGSTROMS +REMARK 525 HOH A 308 DISTANCE = 19.71 ANGSTROMS +DBREF 1HEL A 1 129 UNP P00698 LYSC_CHICK 19 147 +SEQRES 1 A 129 LYS VAL PHE GLY ARG CYS GLU LEU ALA ALA ALA MET LYS +SEQRES 2 A 129 ARG HIS GLY LEU ASP ASN TYR ARG GLY TYR SER LEU GLY +SEQRES 3 A 129 ASN TRP VAL CYS ALA ALA LYS PHE GLU SER ASN PHE ASN +SEQRES 4 A 129 THR GLN ALA THR ASN ARG ASN THR ASP GLY SER THR ASP +SEQRES 5 A 129 TYR GLY ILE LEU GLN ILE ASN SER ARG TRP TRP CYS ASN +SEQRES 6 A 129 ASP GLY ARG THR PRO GLY SER ARG ASN LEU CYS ASN ILE +SEQRES 7 A 129 PRO CYS SER ALA LEU LEU SER SER ASP ILE THR ALA SER +SEQRES 8 A 129 VAL ASN CYS ALA LYS LYS ILE VAL SER ASP GLY ASN GLY +SEQRES 9 A 129 MET ASN ALA TRP VAL ALA TRP ARG ASN ARG CYS LYS GLY +SEQRES 10 A 129 THR ASP VAL GLN ALA TRP ILE ARG GLY CYS ARG LEU +FORMUL 2 HOH *185(H2 O) +HELIX 1 H1 GLY A 4 GLY A 16 1 13 +HELIX 2 H2 LEU A 25 PHE A 34 1 10 +HELIX 3 H3 PRO A 79 LEU A 84 5 6 +HELIX 4 H4 ILE A 88 SER A 100 1 13 +HELIX 5 H5 GLY A 104 TRP A 108 5 5 +HELIX 6 H6 VAL A 109 ARG A 114 1 6 +HELIX 7 H7 VAL A 120 ILE A 124 5 5 +SHEET 1 S1 3 ALA A 42 ASN A 46 0 +SHEET 2 S1 3 GLY A 49 GLY A 54 -1 O SER A 50 N ASN A 46 +SHEET 3 S1 3 LEU A 56 SER A 60 -1 O SER A 60 N THR A 51 +SSBOND 1 CYS A 6 CYS A 127 1555 1555 1.99 +SSBOND 2 CYS A 30 CYS A 115 1555 1555 2.11 +SSBOND 3 CYS A 64 CYS A 80 1555 1555 2.00 +SSBOND 4 CYS A 76 CYS A 94 1555 1555 2.10 +CRYST1 79.100 79.100 37.900 90.00 90.00 90.00 P 43 21 2 8 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.012642 0.000000 0.000000 0.00000 +SCALE2 0.000000 0.012642 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.026385 0.00000 +ATOM 1 N LYS A 1 3.294 10.164 10.266 1.00 11.18 N +ATOM 2 CA LYS A 1 2.388 10.533 9.168 1.00 9.68 C +ATOM 3 C LYS A 1 2.438 12.049 8.889 1.00 14.00 C +ATOM 4 O LYS A 1 2.406 12.898 9.815 1.00 14.00 O +ATOM 5 CB LYS A 1 0.949 10.101 9.559 1.00 13.29 C +ATOM 6 CG LYS A 1 -0.050 10.621 8.573 1.00 13.52 C +ATOM 7 CD LYS A 1 -1.425 10.081 8.720 1.00 22.15 C +ATOM 8 CE LYS A 1 -2.370 10.773 7.722 1.00 20.23 C +ATOM 9 NZ LYS A 1 -3.776 10.439 7.933 1.00 68.72 N +ATOM 10 N VAL A 2 2.552 12.428 7.626 1.00 10.17 N +ATOM 11 CA VAL A 2 2.524 13.840 7.282 1.00 10.02 C +ATOM 12 C VAL A 2 1.120 14.180 6.770 1.00 27.84 C +ATOM 13 O VAL A 2 0.737 13.798 5.675 1.00 22.87 O +ATOM 14 CB VAL A 2 3.529 14.264 6.240 1.00 9.00 C +ATOM 15 CG1 VAL A 2 3.313 15.765 5.983 1.00 11.37 C +ATOM 16 CG2 VAL A 2 4.928 14.016 6.810 1.00 10.57 C +ATOM 17 N PHE A 3 0.333 14.851 7.573 1.00 16.35 N +ATOM 18 CA PHE A 3 -1.021 15.173 7.169 1.00 15.34 C +ATOM 19 C PHE A 3 -1.097 16.285 6.126 1.00 14.79 C +ATOM 20 O PHE A 3 -0.261 17.203 6.054 1.00 14.99 O +ATOM 21 CB PHE A 3 -1.867 15.710 8.361 1.00 14.03 C +ATOM 22 CG PHE A 3 -2.412 14.638 9.295 1.00 16.41 C +ATOM 23 CD1 PHE A 3 -1.575 14.049 10.240 1.00 14.44 C +ATOM 24 CD2 PHE A 3 -3.757 14.285 9.274 1.00 18.12 C +ATOM 25 CE1 PHE A 3 -2.065 13.116 11.135 1.00 11.11 C +ATOM 26 CE2 PHE A 3 -4.263 13.332 10.178 1.00 32.24 C +ATOM 27 CZ PHE A 3 -3.413 12.758 11.132 1.00 14.31 C +ATOM 28 N GLY A 4 -2.229 16.228 5.393 1.00 15.47 N +ATOM 29 CA GLY A 4 -2.645 17.273 4.511 1.00 13.97 C +ATOM 30 C GLY A 4 -3.456 18.261 5.350 1.00 10.95 C +ATOM 31 O GLY A 4 -4.070 17.876 6.282 1.00 16.45 O +ATOM 32 N ARG A 5 -3.414 19.518 5.009 1.00 14.28 N +ATOM 33 CA ARG A 5 -4.106 20.560 5.674 1.00 11.63 C +ATOM 34 C ARG A 5 -5.540 20.226 5.992 1.00 21.37 C +ATOM 35 O ARG A 5 -5.963 20.258 7.138 1.00 9.74 O +ATOM 36 CB ARG A 5 -3.952 21.857 4.900 1.00 13.31 C +ATOM 37 CG ARG A 5 -4.508 23.053 5.610 1.00 13.02 C +ATOM 38 CD ARG A 5 -4.414 24.335 4.775 1.00 19.72 C +ATOM 39 NE ARG A 5 -5.013 24.223 3.447 1.00 23.52 N +ATOM 40 CZ ARG A 5 -6.287 24.522 3.048 1.00 40.17 C +ATOM 41 NH1 ARG A 5 -7.248 25.009 3.841 1.00 17.54 N +ATOM 42 NH2 ARG A 5 -6.619 24.303 1.767 1.00 33.21 N +ATOM 43 N CYS A 6 -6.327 19.866 4.967 1.00 15.04 N +ATOM 44 CA CYS A 6 -7.767 19.572 5.189 1.00 12.93 C +ATOM 45 C CYS A 6 -7.997 18.269 5.916 1.00 5.10 C +ATOM 46 O CYS A 6 -8.992 18.125 6.630 1.00 13.60 O +ATOM 47 CB CYS A 6 -8.607 19.637 3.859 1.00 16.72 C +ATOM 48 SG CYS A 6 -8.669 21.273 3.104 1.00 16.68 S +ATOM 49 N GLU A 7 -7.142 17.274 5.653 1.00 7.34 N +ATOM 50 CA GLU A 7 -7.309 15.981 6.323 1.00 10.86 C +ATOM 51 C GLU A 7 -7.129 16.181 7.848 1.00 17.71 C +ATOM 52 O GLU A 7 -7.835 15.638 8.657 1.00 14.19 O +ATOM 53 CB GLU A 7 -6.187 15.048 5.880 1.00 16.19 C +ATOM 54 CG GLU A 7 -6.206 13.614 6.496 1.00 16.67 C +ATOM 55 CD GLU A 7 -4.952 12.864 6.030 1.00 32.91 C +ATOM 56 OE1 GLU A 7 -4.003 13.411 5.480 1.00 18.18 O +ATOM 57 OE2 GLU A 7 -4.992 11.578 6.219 1.00 28.07 O +ATOM 58 N LEU A 8 -6.148 16.987 8.221 1.00 14.04 N +ATOM 59 CA LEU A 8 -5.919 17.285 9.637 1.00 8.65 C +ATOM 60 C LEU A 8 -7.068 18.103 10.254 1.00 10.08 C +ATOM 61 O LEU A 8 -7.500 17.827 11.353 1.00 15.66 O +ATOM 62 CB LEU A 8 -4.607 18.084 9.809 1.00 14.88 C +ATOM 63 CG LEU A 8 -4.384 18.432 11.299 1.00 12.61 C +ATOM 64 CD1 LEU A 8 -4.110 17.104 12.053 1.00 12.51 C +ATOM 65 CD2 LEU A 8 -3.147 19.299 11.372 1.00 13.98 C +ATOM 66 N ALA A 9 -7.524 19.122 9.561 1.00 11.92 N +ATOM 67 CA ALA A 9 -8.664 19.896 9.982 1.00 10.97 C +ATOM 68 C ALA A 9 -9.841 18.971 10.304 1.00 15.73 C +ATOM 69 O ALA A 9 -10.469 19.046 11.359 1.00 13.41 O +ATOM 70 CB ALA A 9 -9.039 21.012 8.954 1.00 8.88 C +ATOM 71 N ALA A 10 -10.124 18.049 9.425 1.00 12.11 N +ATOM 72 CA ALA A 10 -11.262 17.129 9.595 1.00 12.19 C +ATOM 73 C ALA A 10 -11.034 16.206 10.780 1.00 18.02 C +ATOM 74 O ALA A 10 -11.932 15.902 11.522 1.00 17.70 O +ATOM 75 CB ALA A 10 -11.457 16.297 8.313 1.00 14.75 C +ATOM 76 N ALA A 11 -9.815 15.771 10.988 1.00 14.94 N +ATOM 77 CA ALA A 11 -9.544 14.908 12.136 1.00 12.19 C +ATOM 78 C ALA A 11 -9.651 15.641 13.494 1.00 7.51 C +ATOM 79 O ALA A 11 -10.088 15.066 14.457 1.00 12.99 O +ATOM 80 CB ALA A 11 -8.153 14.250 12.041 1.00 15.76 C +ATOM 81 N MET A 12 -9.107 16.884 13.529 1.00 10.71 N +ATOM 82 CA MET A 12 -9.160 17.683 14.710 1.00 12.27 C +ATOM 83 C MET A 12 -10.599 17.988 15.028 1.00 16.76 C +ATOM 84 O MET A 12 -10.964 17.966 16.195 1.00 17.43 O +ATOM 85 CB MET A 12 -8.385 18.996 14.563 1.00 6.96 C +ATOM 86 CG MET A 12 -6.872 18.717 14.593 1.00 7.53 C +ATOM 87 SD MET A 12 -5.971 20.286 14.351 1.00 16.25 S +ATOM 88 CE MET A 12 -4.392 19.972 15.137 1.00 11.48 C +ATOM 89 N LYS A 13 -11.421 18.239 13.985 1.00 11.66 N +ATOM 90 CA LYS A 13 -12.844 18.554 14.146 1.00 12.77 C +ATOM 91 C LYS A 13 -13.552 17.402 14.762 1.00 17.21 C +ATOM 92 O LYS A 13 -14.278 17.533 15.704 1.00 15.75 O +ATOM 93 CB LYS A 13 -13.505 18.908 12.852 1.00 14.38 C +ATOM 94 CG LYS A 13 -14.874 19.457 13.096 1.00 16.88 C +ATOM 95 CD LYS A 13 -15.519 20.062 11.867 1.00 19.73 C +ATOM 96 CE LYS A 13 -17.062 20.060 11.971 1.00 41.06 C +ATOM 97 NZ LYS A 13 -17.725 20.836 10.899 1.00 61.80 N +ATOM 98 N ARG A 14 -13.273 16.240 14.220 1.00 21.68 N +ATOM 99 CA ARG A 14 -13.878 15.021 14.667 1.00 17.17 C +ATOM 100 C ARG A 14 -13.480 14.746 16.099 1.00 27.88 C +ATOM 101 O ARG A 14 -14.217 14.129 16.823 1.00 17.70 O +ATOM 102 CB ARG A 14 -13.448 13.876 13.756 1.00 23.48 C +ATOM 103 CG ARG A 14 -14.102 12.553 14.162 1.00 51.76 C +ATOM 104 CD ARG A 14 -13.875 11.424 13.160 1.00 52.15 C +ATOM 105 NE ARG A 14 -12.616 10.730 13.354 1.00 61.79 N +ATOM 106 CZ ARG A 14 -12.406 9.681 14.156 1.00 47.00 C +ATOM 107 NH1 ARG A 14 -13.357 9.121 14.898 1.00 35.04 N +ATOM 108 NH2 ARG A 14 -11.177 9.169 14.196 1.00 55.70 N +ATOM 109 N HIS A 15 -12.300 15.219 16.498 1.00 20.13 N +ATOM 110 CA HIS A 15 -11.791 15.016 17.846 1.00 14.58 C +ATOM 111 C HIS A 15 -12.221 16.074 18.888 1.00 18.83 C +ATOM 112 O HIS A 15 -11.689 16.060 19.970 1.00 22.76 O +ATOM 113 CB HIS A 15 -10.268 14.799 17.851 1.00 23.09 C +ATOM 114 CG HIS A 15 -9.906 13.364 17.563 1.00 21.53 C +ATOM 115 ND1 HIS A 15 -9.721 12.896 16.256 1.00 28.28 N +ATOM 116 CD2 HIS A 15 -9.723 12.308 18.413 1.00 30.99 C +ATOM 117 CE1 HIS A 15 -9.422 11.580 16.350 1.00 20.50 C +ATOM 118 NE2 HIS A 15 -9.412 11.213 17.627 1.00 42.34 N +ATOM 119 N GLY A 16 -13.146 16.952 18.551 1.00 14.90 N +ATOM 120 CA GLY A 16 -13.687 17.956 19.401 1.00 16.84 C +ATOM 121 C GLY A 16 -12.871 19.227 19.554 1.00 23.06 C +ATOM 122 O GLY A 16 -13.121 20.016 20.460 1.00 19.24 O +ATOM 123 N LEU A 17 -11.922 19.491 18.685 1.00 14.25 N +ATOM 124 CA LEU A 17 -11.134 20.695 18.826 1.00 10.83 C +ATOM 125 C LEU A 17 -11.728 21.961 18.295 1.00 16.61 C +ATOM 126 O LEU A 17 -11.276 23.016 18.657 1.00 18.63 O +ATOM 127 CB LEU A 17 -9.749 20.538 18.218 1.00 14.80 C +ATOM 128 CG LEU A 17 -8.792 19.745 19.031 1.00 19.84 C +ATOM 129 CD1 LEU A 17 -7.483 19.876 18.293 1.00 22.16 C +ATOM 130 CD2 LEU A 17 -8.675 20.282 20.474 1.00 15.82 C +ATOM 131 N ASP A 18 -12.704 21.930 17.405 1.00 18.32 N +ATOM 132 CA ASP A 18 -13.261 23.178 16.884 1.00 18.68 C +ATOM 133 C ASP A 18 -13.986 23.912 17.979 1.00 19.05 C +ATOM 134 O ASP A 18 -14.952 23.375 18.512 1.00 21.74 O +ATOM 135 CB ASP A 18 -14.275 23.002 15.717 1.00 25.90 C +ATOM 136 CG ASP A 18 -14.712 24.288 15.010 1.00 37.66 C +ATOM 137 OD1 ASP A 18 -14.134 25.393 15.038 1.00 26.98 O +ATOM 138 OD2 ASP A 18 -15.751 24.055 14.248 1.00 63.41 O +ATOM 139 N ASN A 19 -13.542 25.130 18.229 1.00 12.22 N +ATOM 140 CA ASN A 19 -14.046 26.010 19.253 1.00 9.99 C +ATOM 141 C ASN A 19 -13.851 25.507 20.671 1.00 15.97 C +ATOM 142 O ASN A 19 -14.534 25.975 21.595 1.00 18.10 O +ATOM 143 CB ASN A 19 -15.518 26.259 19.032 1.00 20.32 C +ATOM 144 CG ASN A 19 -15.706 27.052 17.774 1.00 40.03 C +ATOM 145 OD1 ASN A 19 -15.227 28.183 17.693 1.00 57.25 O +ATOM 146 ND2 ASN A 19 -16.402 26.456 16.811 1.00 40.09 N +ATOM 147 N TYR A 20 -12.956 24.552 20.827 1.00 12.49 N +ATOM 148 CA TYR A 20 -12.652 24.027 22.106 1.00 8.91 C +ATOM 149 C TYR A 20 -12.037 25.159 22.929 1.00 19.06 C +ATOM 150 O TYR A 20 -10.978 25.687 22.602 1.00 16.99 O +ATOM 151 CB TYR A 20 -11.717 22.810 22.005 1.00 17.23 C +ATOM 152 CG TYR A 20 -11.532 22.151 23.355 1.00 13.76 C +ATOM 153 CD1 TYR A 20 -12.444 21.206 23.832 1.00 17.40 C +ATOM 154 CD2 TYR A 20 -10.475 22.556 24.184 1.00 24.53 C +ATOM 155 CE1 TYR A 20 -12.311 20.657 25.111 1.00 20.84 C +ATOM 156 CE2 TYR A 20 -10.331 22.023 25.461 1.00 16.26 C +ATOM 157 CZ TYR A 20 -11.259 21.078 25.922 1.00 35.41 C +ATOM 158 OH TYR A 20 -11.104 20.560 27.183 1.00 29.68 O +ATOM 159 N ARG A 21 -12.721 25.593 23.977 1.00 19.00 N +ATOM 160 CA ARG A 21 -12.250 26.715 24.791 1.00 15.05 C +ATOM 161 C ARG A 21 -12.264 27.987 24.017 1.00 8.63 C +ATOM 162 O ARG A 21 -11.450 28.877 24.295 1.00 13.69 O +ATOM 163 CB ARG A 21 -10.847 26.601 25.387 1.00 18.33 C +ATOM 164 CG ARG A 21 -10.694 25.514 26.442 1.00 27.37 C +ATOM 165 CD ARG A 21 -11.577 25.864 27.598 1.00 40.81 C +ATOM 166 NE ARG A 21 -11.597 24.902 28.676 1.00 57.85 N +ATOM 167 CZ ARG A 21 -11.253 25.330 29.884 1.00 97.15 C +ATOM 168 NH1 ARG A 21 -10.859 26.593 30.049 1.00 63.15 N +ATOM 169 NH2 ARG A 21 -11.283 24.508 30.937 1.00 68.08 N +ATOM 170 N GLY A 22 -13.173 28.076 23.045 1.00 11.97 N +ATOM 171 CA GLY A 22 -13.290 29.312 22.253 1.00 13.56 C +ATOM 172 C GLY A 22 -12.276 29.499 21.125 1.00 15.57 C +ATOM 173 O GLY A 22 -12.274 30.537 20.508 1.00 15.13 O +ATOM 174 N TYR A 23 -11.414 28.511 20.863 1.00 17.25 N +ATOM 175 CA TYR A 23 -10.419 28.584 19.787 1.00 12.17 C +ATOM 176 C TYR A 23 -10.964 27.832 18.564 1.00 7.69 C +ATOM 177 O TYR A 23 -11.097 26.573 18.581 1.00 8.57 O +ATOM 178 CB TYR A 23 -9.059 27.910 20.217 1.00 11.16 C +ATOM 179 CG TYR A 23 -8.358 28.702 21.299 1.00 14.01 C +ATOM 180 CD1 TYR A 23 -7.560 29.766 20.910 1.00 10.23 C +ATOM 181 CD2 TYR A 23 -8.534 28.427 22.652 1.00 6.77 C +ATOM 182 CE1 TYR A 23 -6.879 30.557 21.846 1.00 9.23 C +ATOM 183 CE2 TYR A 23 -7.907 29.219 23.612 1.00 10.96 C +ATOM 184 CZ TYR A 23 -7.061 30.276 23.207 1.00 12.99 C +ATOM 185 OH TYR A 23 -6.411 31.069 24.111 1.00 13.78 O +ATOM 186 N SER A 24 -11.219 28.590 17.517 1.00 12.88 N +ATOM 187 CA SER A 24 -11.730 28.032 16.253 1.00 14.99 C +ATOM 188 C SER A 24 -10.726 27.075 15.616 1.00 20.42 C +ATOM 189 O SER A 24 -9.487 27.191 15.841 1.00 9.73 O +ATOM 190 CB SER A 24 -12.060 29.179 15.305 1.00 9.90 C +ATOM 191 OG SER A 24 -10.830 29.750 14.853 1.00 17.68 O +ATOM 192 N LEU A 25 -11.267 26.110 14.822 1.00 16.10 N +ATOM 193 CA LEU A 25 -10.460 25.111 14.092 1.00 11.40 C +ATOM 194 C LEU A 25 -9.205 25.683 13.438 1.00 11.44 C +ATOM 195 O LEU A 25 -8.145 25.073 13.536 1.00 10.56 O +ATOM 196 CB LEU A 25 -11.293 24.412 12.993 1.00 13.62 C +ATOM 197 CG LEU A 25 -10.826 23.089 12.491 1.00 16.00 C +ATOM 198 CD1 LEU A 25 -10.359 22.212 13.644 1.00 15.17 C +ATOM 199 CD2 LEU A 25 -12.018 22.437 11.805 1.00 15.75 C +ATOM 200 N GLY A 26 -9.311 26.836 12.758 1.00 10.18 N +ATOM 201 CA GLY A 26 -8.169 27.388 12.084 1.00 7.13 C +ATOM 202 C GLY A 26 -6.984 27.643 12.997 1.00 9.12 C +ATOM 203 O GLY A 26 -5.854 27.610 12.555 1.00 12.61 O +ATOM 204 N ASN A 27 -7.232 27.928 14.280 1.00 10.01 N +ATOM 205 CA ASN A 27 -6.132 28.159 15.255 1.00 10.13 C +ATOM 206 C ASN A 27 -5.317 26.889 15.464 1.00 2.57 C +ATOM 207 O ASN A 27 -4.057 26.899 15.477 1.00 7.08 O +ATOM 208 CB ASN A 27 -6.688 28.636 16.631 1.00 9.13 C +ATOM 209 CG ASN A 27 -7.131 30.092 16.624 1.00 4.84 C +ATOM 210 OD1 ASN A 27 -6.292 30.979 16.582 1.00 9.37 O +ATOM 211 ND2 ASN A 27 -8.466 30.324 16.587 1.00 8.00 N +ATOM 212 N TRP A 28 -6.033 25.791 15.639 1.00 5.40 N +ATOM 213 CA TRP A 28 -5.402 24.497 15.879 1.00 5.45 C +ATOM 214 C TRP A 28 -4.584 24.047 14.657 1.00 6.38 C +ATOM 215 O TRP A 28 -3.510 23.501 14.767 1.00 7.31 O +ATOM 216 CB TRP A 28 -6.482 23.490 16.237 1.00 7.31 C +ATOM 217 CG TRP A 28 -7.149 23.849 17.539 1.00 7.66 C +ATOM 218 CD1 TRP A 28 -8.351 24.415 17.748 1.00 11.80 C +ATOM 219 CD2 TRP A 28 -6.540 23.691 18.841 1.00 9.47 C +ATOM 220 NE1 TRP A 28 -8.575 24.567 19.117 1.00 11.48 N +ATOM 221 CE2 TRP A 28 -7.475 24.139 19.807 1.00 9.56 C +ATOM 222 CE3 TRP A 28 -5.321 23.121 19.249 1.00 10.24 C +ATOM 223 CZ2 TRP A 28 -7.187 24.066 21.210 1.00 11.03 C +ATOM 224 CZ3 TRP A 28 -5.059 23.060 20.609 1.00 20.66 C +ATOM 225 CH2 TRP A 28 -5.985 23.551 21.560 1.00 9.06 C +ATOM 226 N VAL A 29 -5.166 24.262 13.469 1.00 3.89 N +ATOM 227 CA VAL A 29 -4.458 23.870 12.217 1.00 5.65 C +ATOM 228 C VAL A 29 -3.242 24.746 11.972 1.00 2.99 C +ATOM 229 O VAL A 29 -2.170 24.273 11.571 1.00 7.90 O +ATOM 230 CB VAL A 29 -5.456 23.881 11.020 1.00 7.66 C +ATOM 231 CG1 VAL A 29 -4.630 23.646 9.743 1.00 13.23 C +ATOM 232 CG2 VAL A 29 -6.516 22.751 11.149 1.00 6.73 C +ATOM 233 N CYS A 30 -3.372 26.060 12.262 1.00 2.63 N +ATOM 234 CA CYS A 30 -2.281 26.976 12.125 1.00 7.05 C +ATOM 235 C CYS A 30 -1.151 26.582 13.072 1.00 10.47 C +ATOM 236 O CYS A 30 0.054 26.552 12.766 1.00 4.93 O +ATOM 237 CB CYS A 30 -2.756 28.428 12.303 1.00 2.61 C +ATOM 238 SG CYS A 30 -1.467 29.667 12.134 1.00 10.20 S +ATOM 239 N ALA A 31 -1.521 26.283 14.306 1.00 9.82 N +ATOM 240 CA ALA A 31 -0.491 25.884 15.276 1.00 15.61 C +ATOM 241 C ALA A 31 0.235 24.607 14.849 1.00 5.07 C +ATOM 242 O ALA A 31 1.464 24.554 14.987 1.00 9.27 O +ATOM 243 CB ALA A 31 -1.089 25.781 16.704 1.00 7.85 C +ATOM 244 N ALA A 32 -0.483 23.609 14.315 1.00 7.79 N +ATOM 245 CA ALA A 32 0.162 22.357 13.855 1.00 8.61 C +ATOM 246 C ALA A 32 1.085 22.594 12.673 1.00 7.90 C +ATOM 247 O ALA A 32 2.197 22.050 12.585 1.00 9.35 O +ATOM 248 CB ALA A 32 -0.823 21.268 13.540 1.00 10.83 C +ATOM 249 N LYS A 33 0.653 23.463 11.786 1.00 7.35 N +ATOM 250 CA LYS A 33 1.542 23.795 10.635 1.00 6.50 C +ATOM 251 C LYS A 33 2.867 24.333 11.097 1.00 6.89 C +ATOM 252 O LYS A 33 3.936 23.889 10.727 1.00 10.45 O +ATOM 253 CB LYS A 33 0.863 24.886 9.776 1.00 10.32 C +ATOM 254 CG LYS A 33 1.793 25.437 8.676 1.00 13.52 C +ATOM 255 CD LYS A 33 1.927 24.485 7.491 1.00 19.87 C +ATOM 256 CE LYS A 33 3.138 24.764 6.621 1.00 27.04 C +ATOM 257 NZ LYS A 33 3.217 23.793 5.511 1.00 45.44 N +ATOM 258 N PHE A 34 2.807 25.345 11.961 1.00 9.24 N +ATOM 259 CA PHE A 34 4.029 25.958 12.436 1.00 8.96 C +ATOM 260 C PHE A 34 4.846 25.192 13.455 1.00 16.48 C +ATOM 261 O PHE A 34 6.039 25.360 13.540 1.00 14.96 O +ATOM 262 CB PHE A 34 3.856 27.469 12.721 1.00 9.21 C +ATOM 263 CG PHE A 34 3.417 28.201 11.426 1.00 11.78 C +ATOM 264 CD1 PHE A 34 4.231 28.189 10.282 1.00 11.49 C +ATOM 265 CD2 PHE A 34 2.212 28.933 11.385 1.00 12.86 C +ATOM 266 CE1 PHE A 34 3.830 28.854 9.136 1.00 12.74 C +ATOM 267 CE2 PHE A 34 1.803 29.618 10.224 1.00 13.38 C +ATOM 268 CZ PHE A 34 2.627 29.554 9.090 1.00 13.39 C +ATOM 269 N GLU A 35 4.201 24.324 14.225 1.00 9.90 N +ATOM 270 CA GLU A 35 4.889 23.543 15.263 1.00 11.92 C +ATOM 271 C GLU A 35 5.641 22.352 14.706 1.00 13.79 C +ATOM 272 O GLU A 35 6.781 22.129 15.054 1.00 8.23 O +ATOM 273 CB GLU A 35 3.839 23.026 16.259 1.00 6.00 C +ATOM 274 CG GLU A 35 3.409 24.107 17.322 1.00 11.89 C +ATOM 275 CD GLU A 35 4.516 24.690 18.200 1.00 12.03 C +ATOM 276 OE1 GLU A 35 5.640 24.296 18.226 1.00 12.97 O +ATOM 277 OE2 GLU A 35 4.167 25.730 18.876 1.00 13.03 O +ATOM 278 N SER A 36 4.983 21.591 13.819 1.00 8.49 N +ATOM 279 CA SER A 36 5.541 20.369 13.283 1.00 8.82 C +ATOM 280 C SER A 36 5.483 20.189 11.756 1.00 10.13 C +ATOM 281 O SER A 36 5.800 19.070 11.251 1.00 14.88 O +ATOM 282 CB SER A 36 4.684 19.256 13.831 1.00 7.77 C +ATOM 283 OG SER A 36 3.330 19.336 13.297 1.00 8.30 O +ATOM 284 N ASN A 37 4.975 21.223 11.050 1.00 11.55 N +ATOM 285 CA ASN A 37 4.752 21.103 9.605 1.00 8.89 C +ATOM 286 C ASN A 37 3.825 19.918 9.321 1.00 14.33 C +ATOM 287 O ASN A 37 3.972 19.215 8.320 1.00 14.19 O +ATOM 288 CB ASN A 37 6.061 21.002 8.788 1.00 20.93 C +ATOM 289 CG ASN A 37 5.851 21.458 7.334 1.00 25.83 C +ATOM 290 OD1 ASN A 37 5.061 22.365 7.057 1.00 26.84 O +ATOM 291 ND2 ASN A 37 6.474 20.759 6.397 1.00 52.87 N +ATOM 292 N PHE A 38 2.864 19.696 10.220 1.00 7.19 N +ATOM 293 CA PHE A 38 1.862 18.625 10.075 1.00 11.76 C +ATOM 294 C PHE A 38 2.411 17.214 10.168 1.00 10.63 C +ATOM 295 O PHE A 38 1.747 16.276 9.742 1.00 9.49 O +ATOM 296 CB PHE A 38 1.092 18.696 8.696 1.00 8.56 C +ATOM 297 CG PHE A 38 0.280 19.956 8.505 1.00 13.59 C +ATOM 298 CD1 PHE A 38 -0.367 20.558 9.597 1.00 8.45 C +ATOM 299 CD2 PHE A 38 0.112 20.532 7.255 1.00 17.61 C +ATOM 300 CE1 PHE A 38 -1.146 21.685 9.432 1.00 11.53 C +ATOM 301 CE2 PHE A 38 -0.664 21.687 7.081 1.00 17.65 C +ATOM 302 CZ PHE A 38 -1.316 22.268 8.162 1.00 13.17 C +ATOM 303 N ASN A 39 3.667 17.073 10.600 1.00 8.40 N +ATOM 304 CA ASN A 39 4.271 15.737 10.699 1.00 6.01 C +ATOM 305 C ASN A 39 4.101 15.211 12.158 1.00 6.81 C +ATOM 306 O ASN A 39 4.597 15.858 13.147 1.00 11.41 O +ATOM 307 CB ASN A 39 5.776 15.925 10.373 1.00 6.39 C +ATOM 308 CG ASN A 39 6.552 14.636 10.450 1.00 6.34 C +ATOM 309 OD1 ASN A 39 5.992 13.541 10.684 1.00 10.75 O +ATOM 310 ND2 ASN A 39 7.832 14.764 10.100 1.00 13.88 N +ATOM 311 N THR A 40 3.430 14.054 12.314 1.00 8.05 N +ATOM 312 CA THR A 40 3.222 13.509 13.676 1.00 10.13 C +ATOM 313 C THR A 40 4.525 13.041 14.358 1.00 8.64 C +ATOM 314 O THR A 40 4.546 12.831 15.542 1.00 12.11 O +ATOM 315 CB THR A 40 2.279 12.302 13.663 1.00 12.49 C +ATOM 316 OG1 THR A 40 2.862 11.250 12.880 1.00 10.89 O +ATOM 317 CG2 THR A 40 0.843 12.666 13.219 1.00 9.90 C +ATOM 318 N GLN A 41 5.594 12.819 13.559 1.00 6.61 N +ATOM 319 CA GLN A 41 6.860 12.308 14.019 1.00 3.67 C +ATOM 320 C GLN A 41 7.861 13.372 14.433 1.00 4.66 C +ATOM 321 O GLN A 41 8.986 13.051 14.864 1.00 8.80 O +ATOM 322 CB GLN A 41 7.463 11.344 12.979 1.00 9.30 C +ATOM 323 CG GLN A 41 6.598 10.100 12.797 1.00 12.21 C +ATOM 324 CD GLN A 41 7.402 8.999 12.104 1.00 22.47 C +ATOM 325 OE1 GLN A 41 8.254 8.393 12.763 1.00 16.54 O +ATOM 326 NE2 GLN A 41 7.257 8.847 10.744 1.00 13.11 N +ATOM 327 N ALA A 42 7.460 14.657 14.305 1.00 6.51 N +ATOM 328 CA ALA A 42 8.376 15.748 14.672 1.00 8.14 C +ATOM 329 C ALA A 42 8.824 15.710 16.237 1.00 11.70 C +ATOM 330 O ALA A 42 8.005 15.547 17.165 1.00 5.54 O +ATOM 331 CB ALA A 42 7.744 17.108 14.349 1.00 8.97 C +ATOM 332 N THR A 43 10.132 15.865 16.445 1.00 7.08 N +ATOM 333 CA THR A 43 10.705 15.992 17.773 1.00 10.42 C +ATOM 334 C THR A 43 11.694 17.112 17.692 1.00 11.09 C +ATOM 335 O THR A 43 12.280 17.411 16.646 1.00 12.80 O +ATOM 336 CB THR A 43 11.362 14.748 18.354 1.00 13.93 C +ATOM 337 OG1 THR A 43 12.360 14.429 17.435 1.00 11.09 O +ATOM 338 CG2 THR A 43 10.420 13.567 18.530 1.00 7.58 C +ATOM 339 N ASN A 44 11.894 17.801 18.808 1.00 10.77 N +ATOM 340 CA ASN A 44 12.828 18.909 18.863 1.00 6.02 C +ATOM 341 C ASN A 44 13.258 19.036 20.281 1.00 16.51 C +ATOM 342 O ASN A 44 12.426 19.127 21.185 1.00 11.61 O +ATOM 343 CB ASN A 44 12.171 20.225 18.473 1.00 13.37 C +ATOM 344 CG ASN A 44 11.932 20.272 16.966 1.00 55.95 C +ATOM 345 OD1 ASN A 44 12.883 20.299 16.146 1.00 30.16 O +ATOM 346 ND2 ASN A 44 10.659 20.233 16.594 1.00 20.67 N +ATOM 347 N ARG A 45 14.545 19.035 20.479 1.00 13.41 N +ATOM 348 CA ARG A 45 15.061 19.112 21.827 1.00 12.01 C +ATOM 349 C ARG A 45 15.250 20.555 22.252 1.00 20.93 C +ATOM 350 O ARG A 45 15.601 21.418 21.435 1.00 20.22 O +ATOM 351 CB ARG A 45 16.408 18.438 21.953 1.00 19.70 C +ATOM 352 CG ARG A 45 16.935 18.714 23.338 1.00 35.82 C +ATOM 353 CD ARG A 45 16.730 17.468 24.141 1.00 27.63 C +ATOM 354 NE ARG A 45 17.249 16.408 23.330 1.00 67.37 N +ATOM 355 CZ ARG A 45 18.249 15.588 23.641 1.00 91.84 C +ATOM 356 NH1 ARG A 45 18.868 15.589 24.830 1.00 36.08 N +ATOM 357 NH2 ARG A 45 18.624 14.698 22.716 1.00 64.26 N +ATOM 358 N ASN A 46 15.056 20.796 23.543 1.00 12.63 N +ATOM 359 CA ASN A 46 15.247 22.135 24.062 1.00 12.92 C +ATOM 360 C ASN A 46 16.508 22.245 24.900 1.00 8.11 C +ATOM 361 O ASN A 46 17.149 21.253 25.274 1.00 15.77 O +ATOM 362 CB ASN A 46 13.989 22.699 24.735 1.00 11.70 C +ATOM 363 CG ASN A 46 12.659 22.418 24.007 1.00 21.14 C +ATOM 364 OD1 ASN A 46 11.762 21.669 24.459 1.00 23.29 O +ATOM 365 ND2 ASN A 46 12.508 23.062 22.886 1.00 24.99 N +ATOM 366 N THR A 47 16.906 23.489 25.146 1.00 23.92 N +ATOM 367 CA THR A 47 18.108 23.768 25.931 1.00 39.90 C +ATOM 368 C THR A 47 17.996 23.269 27.358 1.00 25.44 C +ATOM 369 O THR A 47 18.958 22.798 27.923 1.00 34.24 O +ATOM 370 CB THR A 47 18.506 25.250 25.905 1.00 47.42 C +ATOM 371 OG1 THR A 47 17.376 26.053 26.142 1.00 38.53 O +ATOM 372 CG2 THR A 47 19.115 25.572 24.552 1.00 58.08 C +ATOM 373 N ASP A 48 16.797 23.339 27.935 1.00 20.62 N +ATOM 374 CA ASP A 48 16.626 22.832 29.261 1.00 9.90 C +ATOM 375 C ASP A 48 16.700 21.306 29.306 1.00 19.23 C +ATOM 376 O ASP A 48 16.586 20.723 30.361 1.00 22.36 O +ATOM 377 CB ASP A 48 15.349 23.377 29.887 1.00 14.78 C +ATOM 378 CG ASP A 48 14.119 22.821 29.267 1.00 19.04 C +ATOM 379 OD1 ASP A 48 14.160 21.981 28.422 1.00 28.31 O +ATOM 380 OD2 ASP A 48 13.002 23.315 29.717 1.00 28.61 O +ATOM 381 N GLY A 49 16.883 20.637 28.166 1.00 17.28 N +ATOM 382 CA GLY A 49 16.950 19.205 28.182 1.00 10.24 C +ATOM 383 C GLY A 49 15.608 18.534 27.977 1.00 14.24 C +ATOM 384 O GLY A 49 15.499 17.291 27.852 1.00 13.58 O +ATOM 385 N SER A 50 14.564 19.331 27.973 1.00 9.07 N +ATOM 386 CA SER A 50 13.311 18.716 27.712 1.00 7.32 C +ATOM 387 C SER A 50 13.217 18.531 26.131 1.00 11.52 C +ATOM 388 O SER A 50 14.085 19.016 25.374 1.00 13.96 O +ATOM 389 CB SER A 50 12.113 19.490 28.182 1.00 4.67 C +ATOM 390 OG SER A 50 12.074 20.716 27.461 1.00 9.76 O +ATOM 391 N THR A 51 12.150 17.857 25.646 1.00 11.43 N +ATOM 392 CA THR A 51 11.958 17.610 24.179 1.00 9.12 C +ATOM 393 C THR A 51 10.485 17.806 23.917 1.00 16.87 C +ATOM 394 O THR A 51 9.677 17.499 24.825 1.00 8.33 O +ATOM 395 CB THR A 51 12.363 16.177 23.757 1.00 5.49 C +ATOM 396 OG1 THR A 51 13.711 15.986 24.120 1.00 6.88 O +ATOM 397 CG2 THR A 51 12.234 15.930 22.227 1.00 7.94 C +ATOM 398 N ASP A 52 10.158 18.354 22.701 1.00 9.46 N +ATOM 399 CA ASP A 52 8.767 18.608 22.181 1.00 5.88 C +ATOM 400 C ASP A 52 8.451 17.463 21.198 1.00 5.87 C +ATOM 401 O ASP A 52 9.311 17.033 20.476 1.00 5.53 O +ATOM 402 CB ASP A 52 8.717 19.972 21.485 1.00 6.73 C +ATOM 403 CG ASP A 52 9.014 21.046 22.449 1.00 17.46 C +ATOM 404 OD1 ASP A 52 8.778 20.978 23.593 1.00 16.69 O +ATOM 405 OD2 ASP A 52 9.531 22.065 21.923 1.00 28.92 O +ATOM 406 N TYR A 53 7.279 16.908 21.280 1.00 7.33 N +ATOM 407 CA TYR A 53 6.899 15.745 20.548 1.00 9.37 C +ATOM 408 C TYR A 53 5.580 15.922 19.790 1.00 13.52 C +ATOM 409 O TYR A 53 4.554 16.399 20.326 1.00 7.94 O +ATOM 410 CB TYR A 53 6.630 14.562 21.517 1.00 7.91 C +ATOM 411 CG TYR A 53 7.865 14.099 22.242 1.00 6.82 C +ATOM 412 CD1 TYR A 53 8.335 14.742 23.399 1.00 8.88 C +ATOM 413 CD2 TYR A 53 8.618 13.027 21.749 1.00 6.30 C +ATOM 414 CE1 TYR A 53 9.548 14.382 24.006 1.00 1.83 C +ATOM 415 CE2 TYR A 53 9.846 12.646 22.351 1.00 10.07 C +ATOM 416 CZ TYR A 53 10.229 13.264 23.534 1.00 8.70 C +ATOM 417 OH TYR A 53 11.374 12.889 24.151 1.00 12.40 O +ATOM 418 N GLY A 54 5.598 15.446 18.516 1.00 11.04 N +ATOM 419 CA GLY A 54 4.390 15.347 17.710 1.00 7.71 C +ATOM 420 C GLY A 54 3.939 16.599 17.020 1.00 3.67 C +ATOM 421 O GLY A 54 4.535 17.621 17.017 1.00 8.49 O +ATOM 422 N ILE A 55 2.748 16.458 16.496 1.00 11.91 N +ATOM 423 CA ILE A 55 2.096 17.435 15.686 1.00 7.88 C +ATOM 424 C ILE A 55 1.893 18.749 16.386 1.00 10.21 C +ATOM 425 O ILE A 55 1.904 19.805 15.761 1.00 9.17 O +ATOM 426 CB ILE A 55 0.838 16.805 15.068 1.00 19.48 C +ATOM 427 CG1 ILE A 55 0.390 17.438 13.734 1.00 15.27 C +ATOM 428 CG2 ILE A 55 -0.262 16.528 16.106 1.00 16.63 C +ATOM 429 CD1 ILE A 55 -0.353 16.483 12.846 1.00 21.60 C +ATOM 430 N LEU A 56 1.765 18.677 17.706 1.00 9.90 N +ATOM 431 CA LEU A 56 1.584 19.877 18.488 1.00 7.23 C +ATOM 432 C LEU A 56 2.735 20.173 19.390 1.00 18.66 C +ATOM 433 O LEU A 56 2.660 21.074 20.200 1.00 10.73 O +ATOM 434 CB LEU A 56 0.216 19.957 19.205 1.00 11.28 C +ATOM 435 CG LEU A 56 -0.990 20.157 18.283 1.00 12.31 C +ATOM 436 CD1 LEU A 56 -2.255 19.795 19.036 1.00 11.09 C +ATOM 437 CD2 LEU A 56 -1.074 21.607 17.850 1.00 11.43 C +ATOM 438 N GLN A 57 3.804 19.441 19.202 1.00 7.01 N +ATOM 439 CA GLN A 57 5.029 19.733 19.898 1.00 9.13 C +ATOM 440 C GLN A 57 4.883 19.918 21.451 1.00 11.13 C +ATOM 441 O GLN A 57 5.272 20.968 22.020 1.00 12.02 O +ATOM 442 CB GLN A 57 5.767 20.937 19.263 1.00 10.29 C +ATOM 443 CG GLN A 57 6.362 20.658 17.863 1.00 6.27 C +ATOM 444 CD GLN A 57 7.544 19.747 17.936 1.00 2.25 C +ATOM 445 OE1 GLN A 57 8.676 20.257 18.147 1.00 7.47 O +ATOM 446 NE2 GLN A 57 7.279 18.413 17.746 1.00 7.69 N +ATOM 447 N ILE A 58 4.303 18.898 22.061 1.00 9.58 N +ATOM 448 CA ILE A 58 4.031 18.814 23.487 1.00 12.88 C +ATOM 449 C ILE A 58 5.301 18.482 24.282 1.00 14.09 C +ATOM 450 O ILE A 58 6.055 17.583 23.982 1.00 10.65 O +ATOM 451 CB ILE A 58 2.839 17.923 23.711 1.00 12.15 C +ATOM 452 CG1 ILE A 58 1.599 18.614 23.110 1.00 12.61 C +ATOM 453 CG2 ILE A 58 2.704 17.544 25.215 1.00 12.37 C +ATOM 454 CD1 ILE A 58 0.329 17.770 23.138 1.00 17.22 C +ATOM 455 N ASN A 59 5.556 19.297 25.282 1.00 11.07 N +ATOM 456 CA ASN A 59 6.797 19.305 26.034 1.00 6.68 C +ATOM 457 C ASN A 59 6.893 18.239 27.099 1.00 8.46 C +ATOM 458 O ASN A 59 5.904 18.002 27.761 1.00 12.15 O +ATOM 459 CB ASN A 59 7.045 20.721 26.565 1.00 7.94 C +ATOM 460 CG ASN A 59 8.434 20.839 27.178 1.00 12.92 C +ATOM 461 OD1 ASN A 59 8.578 20.809 28.411 1.00 30.15 O +ATOM 462 ND2 ASN A 59 9.469 20.939 26.342 1.00 15.71 N +ATOM 463 N SER A 60 8.096 17.590 27.218 1.00 8.63 N +ATOM 464 CA SER A 60 8.333 16.496 28.162 1.00 11.30 C +ATOM 465 C SER A 60 8.586 17.015 29.647 1.00 7.42 C +ATOM 466 O SER A 60 8.559 16.218 30.620 1.00 18.39 O +ATOM 467 CB SER A 60 9.448 15.619 27.698 1.00 9.31 C +ATOM 468 OG SER A 60 10.642 16.390 27.790 1.00 9.01 O +ATOM 469 N ARG A 61 8.806 18.347 29.787 1.00 11.96 N +ATOM 470 CA ARG A 61 8.981 18.933 31.125 1.00 18.58 C +ATOM 471 C ARG A 61 7.701 18.806 31.935 1.00 21.66 C +ATOM 472 O ARG A 61 7.730 18.363 33.063 1.00 24.43 O +ATOM 473 CB ARG A 61 9.507 20.347 31.068 1.00 19.81 C +ATOM 474 CG ARG A 61 9.259 21.125 32.338 1.00 40.52 C +ATOM 475 CD ARG A 61 10.511 21.648 33.063 1.00 30.90 C +ATOM 476 NE ARG A 61 11.777 21.523 32.353 1.00 58.97 N +ATOM 477 CZ ARG A 61 12.722 20.587 32.539 1.00 70.61 C +ATOM 478 NH1 ARG A 61 12.610 19.570 33.413 1.00 68.85 N +ATOM 479 NH2 ARG A 61 13.829 20.673 31.795 1.00 56.33 N +ATOM 480 N TRP A 62 6.542 19.071 31.329 1.00 12.69 N +ATOM 481 CA TRP A 62 5.279 18.955 32.026 1.00 10.92 C +ATOM 482 C TRP A 62 4.281 17.916 31.682 1.00 19.26 C +ATOM 483 O TRP A 62 3.526 17.478 32.563 1.00 19.01 O +ATOM 484 CB TRP A 62 4.455 20.234 31.875 1.00 14.48 C +ATOM 485 CG TRP A 62 5.346 21.376 31.920 1.00 34.77 C +ATOM 486 CD1 TRP A 62 5.937 21.965 30.857 1.00 48.56 C +ATOM 487 CD2 TRP A 62 5.859 21.980 33.091 1.00 34.03 C +ATOM 488 NE1 TRP A 62 6.753 22.970 31.303 1.00 60.61 N +ATOM 489 CE2 TRP A 62 6.730 22.995 32.671 1.00 37.59 C +ATOM 490 CE3 TRP A 62 5.619 21.790 34.443 1.00 44.85 C +ATOM 491 CZ2 TRP A 62 7.373 23.823 33.582 1.00 74.91 C +ATOM 492 CZ3 TRP A 62 6.254 22.606 35.347 1.00 49.52 C +ATOM 493 CH2 TRP A 62 7.122 23.609 34.923 1.00 52.73 C +ATOM 494 N TRP A 63 4.152 17.600 30.385 1.00 11.21 N +ATOM 495 CA TRP A 63 3.036 16.858 29.848 1.00 9.63 C +ATOM 496 C TRP A 63 3.155 15.396 29.592 1.00 4.89 C +ATOM 497 O TRP A 63 2.183 14.725 29.581 1.00 11.10 O +ATOM 498 CB TRP A 63 2.652 17.635 28.566 1.00 6.50 C +ATOM 499 CG TRP A 63 2.429 19.101 28.874 1.00 5.59 C +ATOM 500 CD1 TRP A 63 3.223 20.140 28.615 1.00 15.86 C +ATOM 501 CD2 TRP A 63 1.364 19.632 29.695 1.00 11.68 C +ATOM 502 NE1 TRP A 63 2.675 21.309 29.075 1.00 15.89 N +ATOM 503 CE2 TRP A 63 1.567 21.028 29.780 1.00 12.27 C +ATOM 504 CE3 TRP A 63 0.230 19.055 30.324 1.00 14.52 C +ATOM 505 CZ2 TRP A 63 0.682 21.862 30.488 1.00 10.75 C +ATOM 506 CZ3 TRP A 63 -0.678 19.891 30.985 1.00 10.21 C +ATOM 507 CH2 TRP A 63 -0.421 21.271 31.057 1.00 13.33 C +ATOM 508 N CYS A 64 4.324 14.905 29.353 1.00 8.53 N +ATOM 509 CA CYS A 64 4.448 13.469 29.032 1.00 14.18 C +ATOM 510 C CYS A 64 5.785 12.968 29.569 1.00 8.75 C +ATOM 511 O CYS A 64 6.694 13.742 29.793 1.00 11.88 O +ATOM 512 CB CYS A 64 4.366 13.241 27.432 1.00 12.87 C +ATOM 513 SG CYS A 64 5.695 14.086 26.427 1.00 9.81 S +ATOM 514 N ASN A 65 5.913 11.651 29.720 1.00 9.55 N +ATOM 515 CA ASN A 65 7.127 11.114 30.200 1.00 16.84 C +ATOM 516 C ASN A 65 7.999 10.547 29.073 1.00 4.97 C +ATOM 517 O ASN A 65 7.529 9.623 28.435 1.00 10.83 O +ATOM 518 CB ASN A 65 6.809 9.953 31.188 1.00 9.17 C +ATOM 519 CG ASN A 65 8.120 9.322 31.715 1.00 22.59 C +ATOM 520 OD1 ASN A 65 9.033 10.017 32.182 1.00 21.36 O +ATOM 521 ND2 ASN A 65 8.276 8.015 31.524 1.00 36.98 N +ATOM 522 N ASP A 66 9.254 10.993 28.982 1.00 7.66 N +ATOM 523 CA ASP A 66 10.153 10.434 27.995 1.00 14.97 C +ATOM 524 C ASP A 66 11.354 9.742 28.601 1.00 23.09 C +ATOM 525 O ASP A 66 12.237 9.341 27.867 1.00 9.43 O +ATOM 526 CB ASP A 66 10.641 11.448 26.948 1.00 13.58 C +ATOM 527 CG ASP A 66 11.480 12.554 27.535 1.00 11.41 C +ATOM 528 OD1 ASP A 66 11.787 12.613 28.717 1.00 18.43 O +ATOM 529 OD2 ASP A 66 11.850 13.432 26.659 1.00 10.72 O +ATOM 530 N GLY A 67 11.395 9.644 29.920 1.00 14.60 N +ATOM 531 CA GLY A 67 12.449 8.941 30.665 1.00 9.04 C +ATOM 532 C GLY A 67 13.738 9.677 30.697 1.00 13.04 C +ATOM 533 O GLY A 67 14.726 9.165 31.164 1.00 23.22 O +ATOM 534 N ARG A 68 13.787 10.891 30.194 1.00 8.50 N +ATOM 535 CA ARG A 68 15.089 11.512 30.237 1.00 11.50 C +ATOM 536 C ARG A 68 15.046 12.949 30.560 1.00 11.49 C +ATOM 537 O ARG A 68 15.995 13.645 30.281 1.00 17.90 O +ATOM 538 CB ARG A 68 15.872 11.277 28.959 1.00 18.67 C +ATOM 539 CG ARG A 68 15.218 11.867 27.707 1.00 21.19 C +ATOM 540 CD ARG A 68 16.251 12.103 26.592 1.00 19.51 C +ATOM 541 NE ARG A 68 15.790 12.984 25.527 1.00 20.38 N +ATOM 542 CZ ARG A 68 16.264 12.978 24.248 1.00 29.94 C +ATOM 543 NH1 ARG A 68 17.253 12.102 23.926 1.00 13.00 N +ATOM 544 NH2 ARG A 68 15.787 13.865 23.293 1.00 13.47 N +ATOM 545 N THR A 69 13.937 13.376 31.145 1.00 12.12 N +ATOM 546 CA THR A 69 13.674 14.782 31.586 1.00 17.22 C +ATOM 547 C THR A 69 13.372 14.770 33.144 1.00 15.41 C +ATOM 548 O THR A 69 12.260 14.526 33.618 1.00 19.26 O +ATOM 549 CB THR A 69 12.464 15.410 30.798 1.00 12.81 C +ATOM 550 OG1 THR A 69 12.589 15.107 29.412 1.00 17.25 O +ATOM 551 CG2 THR A 69 12.392 16.932 30.990 1.00 8.98 C +ATOM 552 N PRO A 70 14.431 14.960 33.874 1.00 30.00 N +ATOM 553 CA PRO A 70 14.563 14.964 35.315 1.00 31.13 C +ATOM 554 C PRO A 70 13.654 16.003 35.904 1.00 43.01 C +ATOM 555 O PRO A 70 13.699 17.188 35.594 1.00 37.19 O +ATOM 556 CB PRO A 70 16.056 15.221 35.541 1.00 43.11 C +ATOM 557 CG PRO A 70 16.728 15.203 34.148 1.00 49.23 C +ATOM 558 CD PRO A 70 15.635 15.319 33.119 1.00 44.60 C +ATOM 559 N GLY A 71 12.698 15.573 36.672 1.00 29.79 N +ATOM 560 CA GLY A 71 11.785 16.609 37.130 1.00 38.84 C +ATOM 561 C GLY A 71 10.547 16.728 36.220 1.00 34.52 C +ATOM 562 O GLY A 71 9.750 17.644 36.328 1.00 53.49 O +ATOM 563 N SER A 72 10.339 15.797 35.324 1.00 30.26 N +ATOM 564 CA SER A 72 9.157 15.860 34.502 1.00 32.28 C +ATOM 565 C SER A 72 7.906 15.615 35.374 1.00 22.29 C +ATOM 566 O SER A 72 7.914 14.715 36.197 1.00 26.48 O +ATOM 567 CB SER A 72 9.249 14.700 33.473 1.00 31.83 C +ATOM 568 OG SER A 72 8.038 14.552 32.612 1.00 33.11 O +ATOM 569 N ARG A 73 6.801 16.311 35.113 1.00 20.31 N +ATOM 570 CA ARG A 73 5.550 16.055 35.819 1.00 12.77 C +ATOM 571 C ARG A 73 4.564 15.081 35.174 1.00 35.87 C +ATOM 572 O ARG A 73 3.662 14.597 35.845 1.00 50.20 O +ATOM 573 CB ARG A 73 4.830 17.322 36.128 1.00 19.66 C +ATOM 574 CG ARG A 73 5.605 18.165 37.124 1.00 35.18 C +ATOM 575 CD ARG A 73 4.864 19.471 37.396 1.00 86.10 C +ATOM 576 NE ARG A 73 4.736 19.744 38.823 1.00 80.19 N +ATOM 577 CZ ARG A 73 4.227 20.854 39.398 1.00 81.09 C +ATOM 578 NH1 ARG A 73 3.742 21.891 38.705 1.00 81.15 N +ATOM 579 NH2 ARG A 73 4.215 20.930 40.739 1.00 71.03 N +ATOM 580 N ASN A 74 4.668 14.781 33.896 1.00 18.76 N +ATOM 581 CA ASN A 74 3.715 13.833 33.313 1.00 10.40 C +ATOM 582 C ASN A 74 2.194 14.147 33.501 1.00 8.97 C +ATOM 583 O ASN A 74 1.355 13.278 33.697 1.00 15.29 O +ATOM 584 CB ASN A 74 4.053 12.334 33.426 1.00 16.10 C +ATOM 585 CG ASN A 74 3.479 11.413 32.309 1.00 15.75 C +ATOM 586 OD1 ASN A 74 2.928 11.864 31.297 1.00 22.77 O +ATOM 587 ND2 ASN A 74 3.593 10.101 32.490 1.00 17.62 N +ATOM 588 N LEU A 75 1.851 15.405 33.334 1.00 13.92 N +ATOM 589 CA LEU A 75 0.471 15.774 33.458 1.00 16.58 C +ATOM 590 C LEU A 75 -0.505 15.089 32.565 1.00 21.84 C +ATOM 591 O LEU A 75 -1.654 14.976 32.957 1.00 22.99 O +ATOM 592 CB LEU A 75 0.245 17.277 33.466 1.00 17.10 C +ATOM 593 CG LEU A 75 0.919 17.845 34.715 1.00 30.53 C +ATOM 594 CD1 LEU A 75 0.889 19.358 34.725 1.00 35.25 C +ATOM 595 CD2 LEU A 75 0.238 17.306 35.969 1.00 21.06 C +ATOM 596 N CYS A 76 -0.146 14.663 31.359 1.00 18.42 N +ATOM 597 CA CYS A 76 -1.153 13.970 30.513 1.00 10.67 C +ATOM 598 C CYS A 76 -1.137 12.463 30.738 1.00 12.68 C +ATOM 599 O CYS A 76 -1.935 11.725 30.131 1.00 17.21 O +ATOM 600 CB CYS A 76 -1.094 14.295 28.984 1.00 9.97 C +ATOM 601 SG CYS A 76 -1.329 16.050 28.713 1.00 13.70 S +ATOM 602 N ASN A 77 -0.194 12.038 31.586 1.00 14.93 N +ATOM 603 CA ASN A 77 -0.117 10.607 31.926 1.00 19.18 C +ATOM 604 C ASN A 77 0.099 9.697 30.747 1.00 21.40 C +ATOM 605 O ASN A 77 -0.626 8.715 30.538 1.00 17.53 O +ATOM 606 CB ASN A 77 -1.421 10.174 32.620 1.00 36.06 C +ATOM 607 CG ASN A 77 -1.361 8.783 33.215 1.00 80.95 C +ATOM 608 OD1 ASN A 77 -2.358 8.042 33.188 1.00 78.33 O +ATOM 609 ND2 ASN A 77 -0.186 8.412 33.715 1.00 38.97 N +ATOM 610 N ILE A 78 1.114 10.006 29.979 1.00 14.33 N +ATOM 611 CA ILE A 78 1.373 9.191 28.838 1.00 11.33 C +ATOM 612 C ILE A 78 2.873 9.258 28.499 1.00 13.41 C +ATOM 613 O ILE A 78 3.568 10.265 28.718 1.00 12.78 O +ATOM 614 CB ILE A 78 0.764 9.855 27.598 1.00 15.98 C +ATOM 615 CG1 ILE A 78 0.764 11.376 27.743 1.00 20.19 C +ATOM 616 CG2 ILE A 78 -0.461 9.195 26.985 1.00 25.51 C +ATOM 617 CD1 ILE A 78 0.735 12.094 26.406 1.00 31.88 C +ATOM 618 N PRO A 79 3.343 8.210 27.843 1.00 14.97 N +ATOM 619 CA PRO A 79 4.715 8.229 27.362 1.00 12.65 C +ATOM 620 C PRO A 79 4.738 9.234 26.187 1.00 10.18 C +ATOM 621 O PRO A 79 3.762 9.304 25.359 1.00 11.71 O +ATOM 622 CB PRO A 79 4.962 6.830 26.843 1.00 11.25 C +ATOM 623 CG PRO A 79 3.631 6.096 26.844 1.00 17.21 C +ATOM 624 CD PRO A 79 2.621 6.951 27.581 1.00 9.85 C +ATOM 625 N CYS A 80 5.798 10.020 26.078 1.00 11.09 N +ATOM 626 CA CYS A 80 5.870 11.003 24.969 1.00 5.24 C +ATOM 627 C CYS A 80 5.782 10.359 23.546 1.00 8.89 C +ATOM 628 O CYS A 80 5.284 10.950 22.568 1.00 11.52 O +ATOM 629 CB CYS A 80 7.126 11.894 25.061 1.00 7.40 C +ATOM 630 SG CYS A 80 7.251 12.847 26.592 1.00 9.47 S +ATOM 631 N SER A 81 6.259 9.115 23.442 1.00 9.85 N +ATOM 632 CA SER A 81 6.242 8.432 22.154 1.00 7.67 C +ATOM 633 C SER A 81 4.815 8.223 21.687 1.00 15.55 C +ATOM 634 O SER A 81 4.554 8.156 20.510 1.00 15.82 O +ATOM 635 CB SER A 81 6.995 7.111 22.234 1.00 15.31 C +ATOM 636 OG SER A 81 6.295 6.245 23.119 1.00 17.97 O +ATOM 637 N ALA A 82 3.857 8.169 22.598 1.00 11.39 N +ATOM 638 CA ALA A 82 2.452 8.033 22.185 1.00 14.65 C +ATOM 639 C ALA A 82 2.000 9.216 21.325 1.00 20.26 C +ATOM 640 O ALA A 82 1.033 9.113 20.571 1.00 22.13 O +ATOM 641 CB ALA A 82 1.481 8.009 23.384 1.00 17.51 C +ATOM 642 N LEU A 83 2.659 10.349 21.528 1.00 9.56 N +ATOM 643 CA LEU A 83 2.329 11.589 20.867 1.00 12.01 C +ATOM 644 C LEU A 83 2.834 11.627 19.385 1.00 18.14 C +ATOM 645 O LEU A 83 2.626 12.620 18.685 1.00 12.31 O +ATOM 646 CB LEU A 83 2.986 12.761 21.651 1.00 15.90 C +ATOM 647 CG LEU A 83 2.370 12.966 23.055 1.00 9.43 C +ATOM 648 CD1 LEU A 83 3.076 14.069 23.849 1.00 12.61 C +ATOM 649 CD2 LEU A 83 0.843 13.174 22.965 1.00 15.37 C +ATOM 650 N LEU A 84 3.542 10.556 18.940 1.00 13.34 N +ATOM 651 CA LEU A 84 4.131 10.512 17.618 1.00 11.55 C +ATOM 652 C LEU A 84 3.361 9.657 16.630 1.00 16.60 C +ATOM 653 O LEU A 84 3.704 9.570 15.475 1.00 22.63 O +ATOM 654 CB LEU A 84 5.630 10.044 17.645 1.00 7.92 C +ATOM 655 CG LEU A 84 6.546 10.859 18.552 1.00 18.00 C +ATOM 656 CD1 LEU A 84 7.978 10.414 18.359 1.00 17.76 C +ATOM 657 CD2 LEU A 84 6.513 12.306 18.116 1.00 8.41 C +ATOM 658 N SER A 85 2.332 9.023 17.096 1.00 15.68 N +ATOM 659 CA SER A 85 1.485 8.148 16.333 1.00 22.63 C +ATOM 660 C SER A 85 0.792 8.827 15.194 1.00 14.76 C +ATOM 661 O SER A 85 0.519 10.007 15.280 1.00 16.99 O +ATOM 662 CB SER A 85 0.376 7.776 17.295 1.00 16.59 C +ATOM 663 OG SER A 85 -0.373 6.761 16.741 1.00 23.89 O +ATOM 664 N SER A 86 0.371 8.039 14.186 1.00 19.04 N +ATOM 665 CA SER A 86 -0.430 8.505 13.025 1.00 17.09 C +ATOM 666 C SER A 86 -1.827 8.884 13.487 1.00 21.77 C +ATOM 667 O SER A 86 -2.481 9.696 12.857 1.00 24.42 O +ATOM 668 CB SER A 86 -0.584 7.358 12.026 1.00 21.75 C +ATOM 669 OG SER A 86 0.687 7.146 11.467 1.00 50.53 O +ATOM 670 N ASP A 87 -2.288 8.227 14.575 1.00 13.55 N +ATOM 671 CA ASP A 87 -3.611 8.483 15.195 1.00 14.83 C +ATOM 672 C ASP A 87 -3.426 9.673 16.162 1.00 16.43 C +ATOM 673 O ASP A 87 -2.640 9.585 17.147 1.00 17.32 O +ATOM 674 CB ASP A 87 -4.025 7.244 15.987 1.00 17.38 C +ATOM 675 CG ASP A 87 -5.365 7.435 16.676 1.00 36.42 C +ATOM 676 OD1 ASP A 87 -5.875 8.512 16.868 1.00 21.05 O +ATOM 677 OD2 ASP A 87 -5.952 6.315 17.005 1.00 56.25 O +ATOM 678 N ILE A 88 -4.037 10.803 15.879 1.00 12.05 N +ATOM 679 CA ILE A 88 -3.749 11.974 16.722 1.00 17.85 C +ATOM 680 C ILE A 88 -4.490 12.067 18.055 1.00 12.40 C +ATOM 681 O ILE A 88 -4.393 13.081 18.780 1.00 11.64 O +ATOM 682 CB ILE A 88 -4.014 13.293 15.954 1.00 16.92 C +ATOM 683 CG1 ILE A 88 -5.565 13.392 15.634 1.00 15.36 C +ATOM 684 CG2 ILE A 88 -3.104 13.384 14.694 1.00 18.11 C +ATOM 685 CD1 ILE A 88 -6.065 14.738 15.196 1.00 20.80 C +ATOM 686 N THR A 89 -5.257 11.069 18.381 1.00 13.72 N +ATOM 687 CA THR A 89 -6.058 11.103 19.584 1.00 12.45 C +ATOM 688 C THR A 89 -5.326 11.520 20.907 1.00 8.02 C +ATOM 689 O THR A 89 -5.777 12.403 21.614 1.00 14.43 O +ATOM 690 CB THR A 89 -6.717 9.735 19.716 1.00 18.11 C +ATOM 691 OG1 THR A 89 -7.492 9.539 18.564 1.00 18.36 O +ATOM 692 CG2 THR A 89 -7.642 9.724 20.953 1.00 16.37 C +ATOM 693 N ALA A 90 -4.186 10.900 21.216 1.00 10.40 N +ATOM 694 CA ALA A 90 -3.483 11.250 22.444 1.00 14.23 C +ATOM 695 C ALA A 90 -2.971 12.685 22.412 1.00 17.47 C +ATOM 696 O ALA A 90 -2.981 13.344 23.413 1.00 10.92 O +ATOM 697 CB ALA A 90 -2.331 10.290 22.751 1.00 15.55 C +ATOM 698 N SER A 91 -2.504 13.185 21.257 1.00 8.67 N +ATOM 699 CA SER A 91 -2.032 14.567 21.163 1.00 7.03 C +ATOM 700 C SER A 91 -3.155 15.522 21.418 1.00 6.83 C +ATOM 701 O SER A 91 -3.033 16.547 22.059 1.00 13.20 O +ATOM 702 CB SER A 91 -1.445 14.870 19.783 1.00 7.71 C +ATOM 703 OG SER A 91 -0.111 14.402 19.670 1.00 11.50 O +ATOM 704 N VAL A 92 -4.289 15.234 20.839 1.00 9.57 N +ATOM 705 CA VAL A 92 -5.449 16.101 21.004 1.00 7.79 C +ATOM 706 C VAL A 92 -5.938 16.148 22.488 1.00 10.65 C +ATOM 707 O VAL A 92 -6.254 17.195 23.018 1.00 12.26 O +ATOM 708 CB VAL A 92 -6.523 15.597 19.994 1.00 23.58 C +ATOM 709 CG1 VAL A 92 -7.936 16.117 20.303 1.00 19.93 C +ATOM 710 CG2 VAL A 92 -6.110 15.987 18.555 1.00 17.17 C +ATOM 711 N ASN A 93 -6.047 14.973 23.140 1.00 10.03 N +ATOM 712 CA ASN A 93 -6.511 14.862 24.536 1.00 24.44 C +ATOM 713 C ASN A 93 -5.602 15.647 25.472 1.00 10.79 C +ATOM 714 O ASN A 93 -6.049 16.390 26.310 1.00 15.54 O +ATOM 715 CB ASN A 93 -6.580 13.395 24.989 1.00 13.16 C +ATOM 716 CG ASN A 93 -7.781 12.668 24.406 1.00 15.37 C +ATOM 717 OD1 ASN A 93 -7.842 11.422 24.426 1.00 35.75 O +ATOM 718 ND2 ASN A 93 -8.682 13.436 23.835 1.00 16.65 N +ATOM 719 N CYS A 94 -4.284 15.477 25.249 1.00 10.49 N +ATOM 720 CA CYS A 94 -3.267 16.178 25.984 1.00 7.62 C +ATOM 721 C CYS A 94 -3.353 17.649 25.690 1.00 17.58 C +ATOM 722 O CYS A 94 -3.298 18.462 26.598 1.00 9.76 O +ATOM 723 CB CYS A 94 -1.875 15.620 25.709 1.00 5.33 C +ATOM 724 SG CYS A 94 -0.613 16.312 26.762 1.00 13.87 S +ATOM 725 N ALA A 95 -3.546 18.041 24.407 1.00 7.01 N +ATOM 726 CA ALA A 95 -3.656 19.481 24.142 1.00 8.80 C +ATOM 727 C ALA A 95 -4.864 20.156 24.849 1.00 8.68 C +ATOM 728 O ALA A 95 -4.867 21.353 25.215 1.00 11.44 O +ATOM 729 CB ALA A 95 -3.774 19.698 22.627 1.00 6.34 C +ATOM 730 N LYS A 96 -5.932 19.405 24.966 1.00 9.62 N +ATOM 731 CA LYS A 96 -7.108 19.927 25.596 1.00 9.41 C +ATOM 732 C LYS A 96 -6.804 20.229 27.091 1.00 11.43 C +ATOM 733 O LYS A 96 -7.271 21.199 27.627 1.00 15.34 O +ATOM 734 CB LYS A 96 -8.195 18.868 25.472 1.00 12.74 C +ATOM 735 CG LYS A 96 -8.927 18.820 24.137 1.00 9.62 C +ATOM 736 CD LYS A 96 -9.976 17.699 24.147 1.00 14.08 C +ATOM 737 CE LYS A 96 -10.973 17.784 22.960 1.00 16.34 C +ATOM 738 NZ LYS A 96 -11.641 16.485 22.720 1.00 20.55 N +ATOM 739 N LYS A 97 -5.944 19.447 27.750 1.00 13.54 N +ATOM 740 CA LYS A 97 -5.538 19.706 29.158 1.00 14.41 C +ATOM 741 C LYS A 97 -4.672 20.981 29.209 1.00 13.37 C +ATOM 742 O LYS A 97 -4.809 21.878 30.014 1.00 13.38 O +ATOM 743 CB LYS A 97 -4.710 18.544 29.689 1.00 10.77 C +ATOM 744 CG LYS A 97 -5.493 17.342 30.140 1.00 32.04 C +ATOM 745 CD LYS A 97 -6.434 17.637 31.297 1.00 45.76 C +ATOM 746 CE LYS A 97 -7.073 16.369 31.886 1.00 70.47 C +ATOM 747 NZ LYS A 97 -8.523 16.232 31.620 1.00 59.21 N +ATOM 748 N ILE A 98 -3.760 21.072 28.264 1.00 12.65 N +ATOM 749 CA ILE A 98 -2.856 22.204 28.161 1.00 10.78 C +ATOM 750 C ILE A 98 -3.607 23.536 27.991 1.00 8.94 C +ATOM 751 O ILE A 98 -3.322 24.532 28.701 1.00 12.98 O +ATOM 752 CB ILE A 98 -1.778 22.026 27.022 1.00 17.91 C +ATOM 753 CG1 ILE A 98 -0.899 20.798 27.234 1.00 15.21 C +ATOM 754 CG2 ILE A 98 -0.932 23.292 26.811 1.00 10.73 C +ATOM 755 CD1 ILE A 98 -0.035 20.440 26.059 1.00 5.59 C +ATOM 756 N VAL A 99 -4.497 23.570 26.973 1.00 12.61 N +ATOM 757 CA VAL A 99 -5.194 24.822 26.643 1.00 14.92 C +ATOM 758 C VAL A 99 -6.158 25.244 27.757 1.00 17.60 C +ATOM 759 O VAL A 99 -6.529 26.431 27.844 1.00 21.46 O +ATOM 760 CB VAL A 99 -5.863 24.788 25.223 1.00 7.93 C +ATOM 761 CG1 VAL A 99 -7.102 23.930 25.230 1.00 13.13 C +ATOM 762 CG2 VAL A 99 -6.203 26.159 24.648 1.00 14.05 C +ATOM 763 N SER A 100 -6.529 24.274 28.623 1.00 14.94 N +ATOM 764 CA SER A 100 -7.469 24.559 29.728 1.00 23.99 C +ATOM 765 C SER A 100 -6.810 25.233 30.952 1.00 23.57 C +ATOM 766 O SER A 100 -7.460 25.872 31.759 1.00 30.51 O +ATOM 767 CB SER A 100 -8.109 23.250 30.148 1.00 15.96 C +ATOM 768 OG SER A 100 -9.019 22.837 29.120 1.00 33.46 O +ATOM 769 N ASP A 101 -5.495 25.061 30.981 1.00 27.50 N +ATOM 770 CA ASP A 101 -4.485 25.414 31.955 1.00 38.61 C +ATOM 771 C ASP A 101 -4.239 26.879 32.265 1.00 31.46 C +ATOM 772 O ASP A 101 -3.422 27.194 33.137 1.00 49.53 O +ATOM 773 CB ASP A 101 -3.173 24.648 31.624 1.00 32.62 C +ATOM 774 CG ASP A 101 -2.133 24.566 32.715 1.00 66.21 C +ATOM 775 OD1 ASP A 101 -2.482 23.821 33.747 1.00 53.53 O +ATOM 776 OD2 ASP A 101 -1.045 25.095 32.609 1.00 62.33 O +ATOM 777 N GLY A 102 -4.876 27.820 31.617 1.00 31.57 N +ATOM 778 CA GLY A 102 -4.525 29.170 32.093 1.00 42.83 C +ATOM 779 C GLY A 102 -4.082 30.192 31.049 1.00 56.99 C +ATOM 780 O GLY A 102 -4.713 31.264 30.990 1.00 31.68 O +ATOM 781 N ASN A 103 -2.979 29.915 30.284 1.00 23.55 N +ATOM 782 CA ASN A 103 -2.573 30.864 29.246 1.00 11.97 C +ATOM 783 C ASN A 103 -3.176 30.497 27.876 1.00 9.86 C +ATOM 784 O ASN A 103 -2.905 31.106 26.860 1.00 13.84 O +ATOM 785 CB ASN A 103 -1.070 31.114 29.177 1.00 17.92 C +ATOM 786 CG ASN A 103 -0.638 31.476 30.587 1.00 65.73 C +ATOM 787 OD1 ASN A 103 0.384 30.993 31.105 1.00 74.71 O +ATOM 788 ND2 ASN A 103 -1.509 32.224 31.271 1.00 54.30 N +ATOM 789 N GLY A 104 -4.070 29.522 27.865 1.00 10.94 N +ATOM 790 CA GLY A 104 -4.733 29.138 26.601 1.00 18.78 C +ATOM 791 C GLY A 104 -3.725 28.668 25.570 1.00 8.28 C +ATOM 792 O GLY A 104 -2.766 27.947 25.892 1.00 12.01 O +ATOM 793 N MET A 105 -3.906 29.119 24.313 1.00 13.56 N +ATOM 794 CA MET A 105 -3.014 28.684 23.198 1.00 9.18 C +ATOM 795 C MET A 105 -1.637 29.372 23.232 1.00 8.69 C +ATOM 796 O MET A 105 -0.727 29.013 22.506 1.00 9.67 O +ATOM 797 CB MET A 105 -3.739 28.882 21.838 1.00 3.51 C +ATOM 798 CG MET A 105 -4.790 27.788 21.646 1.00 9.82 C +ATOM 799 SD MET A 105 -5.184 27.455 19.852 1.00 12.90 S +ATOM 800 CE MET A 105 -3.617 26.757 19.326 1.00 6.80 C +ATOM 801 N ASN A 106 -1.509 30.373 24.105 1.00 7.08 N +ATOM 802 CA ASN A 106 -0.270 31.037 24.269 1.00 4.32 C +ATOM 803 C ASN A 106 0.809 30.046 24.765 1.00 8.04 C +ATOM 804 O ASN A 106 2.030 30.336 24.608 1.00 11.37 O +ATOM 805 CB ASN A 106 -0.396 32.190 25.241 1.00 12.62 C +ATOM 806 CG ASN A 106 -1.239 33.309 24.682 1.00 16.51 C +ATOM 807 OD1 ASN A 106 -0.864 33.972 23.658 1.00 9.88 O +ATOM 808 ND2 ASN A 106 -2.372 33.492 25.355 1.00 15.30 N +ATOM 809 N ALA A 107 0.360 28.870 25.250 1.00 8.10 N +ATOM 810 CA ALA A 107 1.308 27.840 25.625 1.00 10.48 C +ATOM 811 C ALA A 107 2.113 27.450 24.395 1.00 16.77 C +ATOM 812 O ALA A 107 3.191 26.948 24.511 1.00 16.10 O +ATOM 813 CB ALA A 107 0.585 26.599 26.143 1.00 11.40 C +ATOM 814 N TRP A 108 1.577 27.639 23.205 1.00 10.51 N +ATOM 815 CA TRP A 108 2.303 27.285 21.966 1.00 9.27 C +ATOM 816 C TRP A 108 2.970 28.504 21.404 1.00 9.11 C +ATOM 817 O TRP A 108 2.312 29.428 20.865 1.00 9.30 O +ATOM 818 CB TRP A 108 1.398 26.569 20.912 1.00 4.39 C +ATOM 819 CG TRP A 108 1.005 25.176 21.256 1.00 2.06 C +ATOM 820 CD1 TRP A 108 1.760 24.069 21.021 1.00 10.56 C +ATOM 821 CD2 TRP A 108 -0.146 24.722 21.926 1.00 4.61 C +ATOM 822 NE1 TRP A 108 1.131 22.972 21.471 1.00 11.23 N +ATOM 823 CE2 TRP A 108 -0.048 23.321 22.045 1.00 11.25 C +ATOM 824 CE3 TRP A 108 -1.256 25.348 22.436 1.00 8.16 C +ATOM 825 CZ2 TRP A 108 -1.038 22.520 22.626 1.00 7.13 C +ATOM 826 CZ3 TRP A 108 -2.220 24.549 23.074 1.00 13.29 C +ATOM 827 CH2 TRP A 108 -2.156 23.123 23.101 1.00 8.74 C +ATOM 828 N VAL A 109 4.320 28.523 21.508 1.00 10.59 N +ATOM 829 CA VAL A 109 5.046 29.672 21.044 1.00 10.72 C +ATOM 830 C VAL A 109 4.800 30.025 19.545 1.00 7.07 C +ATOM 831 O VAL A 109 4.617 31.199 19.228 1.00 12.32 O +ATOM 832 CB VAL A 109 6.549 29.491 21.342 1.00 15.75 C +ATOM 833 CG1 VAL A 109 7.068 28.242 20.605 1.00 38.18 C +ATOM 834 CG2 VAL A 109 7.327 30.751 20.898 1.00 17.01 C +ATOM 835 N ALA A 110 4.761 28.998 18.662 1.00 7.28 N +ATOM 836 CA ALA A 110 4.506 29.281 17.232 1.00 14.92 C +ATOM 837 C ALA A 110 3.122 29.845 17.031 1.00 12.74 C +ATOM 838 O ALA A 110 2.902 30.659 16.125 1.00 13.19 O +ATOM 839 CB ALA A 110 4.783 28.117 16.262 1.00 12.16 C +ATOM 840 N TRP A 111 2.190 29.398 17.892 1.00 7.58 N +ATOM 841 CA TRP A 111 0.821 29.901 17.789 1.00 5.91 C +ATOM 842 C TRP A 111 0.815 31.399 18.100 1.00 9.06 C +ATOM 843 O TRP A 111 0.249 32.308 17.369 1.00 6.22 O +ATOM 844 CB TRP A 111 -0.240 29.136 18.618 1.00 6.54 C +ATOM 845 CG TRP A 111 -1.589 29.763 18.461 1.00 9.13 C +ATOM 846 CD1 TRP A 111 -2.510 29.517 17.447 1.00 5.89 C +ATOM 847 CD2 TRP A 111 -2.190 30.781 19.295 1.00 10.48 C +ATOM 848 NE1 TRP A 111 -3.642 30.322 17.597 1.00 5.88 N +ATOM 849 CE2 TRP A 111 -3.471 31.090 18.728 1.00 5.72 C +ATOM 850 CE3 TRP A 111 -1.805 31.432 20.511 1.00 4.95 C +ATOM 851 CZ2 TRP A 111 -4.306 32.057 19.314 1.00 13.37 C +ATOM 852 CZ3 TRP A 111 -2.658 32.382 21.061 1.00 6.90 C +ATOM 853 CH2 TRP A 111 -3.906 32.666 20.489 1.00 4.12 C +ATOM 854 N ARG A 112 1.497 31.701 19.218 1.00 7.90 N +ATOM 855 CA ARG A 112 1.527 33.107 19.659 1.00 11.81 C +ATOM 856 C ARG A 112 2.221 34.013 18.630 1.00 9.34 C +ATOM 857 O ARG A 112 1.746 35.118 18.330 1.00 9.72 O +ATOM 858 CB ARG A 112 2.215 33.175 21.040 1.00 18.21 C +ATOM 859 CG ARG A 112 2.053 34.513 21.722 1.00 52.15 C +ATOM 860 CD ARG A 112 2.813 34.593 23.056 1.00 27.12 C +ATOM 861 NE ARG A 112 3.479 33.351 23.413 1.00 52.40 N +ATOM 862 CZ ARG A 112 4.785 33.247 23.639 1.00 49.41 C +ATOM 863 NH1 ARG A 112 5.612 34.286 23.535 1.00 53.98 N +ATOM 864 NH2 ARG A 112 5.274 32.058 23.981 1.00 51.24 N +ATOM 865 N ASN A 113 3.331 33.501 18.078 1.00 8.96 N +ATOM 866 CA ASN A 113 4.132 34.283 17.152 1.00 15.60 C +ATOM 867 C ASN A 113 3.657 34.303 15.695 1.00 17.72 C +ATOM 868 O ASN A 113 3.919 35.261 14.974 1.00 16.73 O +ATOM 869 CB ASN A 113 5.657 33.938 17.244 1.00 8.06 C +ATOM 870 CG ASN A 113 6.192 34.297 18.636 1.00 11.97 C +ATOM 871 OD1 ASN A 113 5.714 35.228 19.278 1.00 19.44 O +ATOM 872 ND2 ASN A 113 7.179 33.595 19.091 1.00 9.04 N +ATOM 873 N ARG A 114 2.964 33.273 15.287 1.00 7.06 N +ATOM 874 CA ARG A 114 2.604 33.129 13.873 1.00 11.57 C +ATOM 875 C ARG A 114 1.171 33.002 13.552 1.00 19.78 C +ATOM 876 O ARG A 114 0.827 33.118 12.375 1.00 14.27 O +ATOM 877 CB ARG A 114 3.309 31.830 13.395 1.00 8.51 C +ATOM 878 CG ARG A 114 4.766 31.877 13.898 1.00 21.43 C +ATOM 879 CD ARG A 114 5.833 31.132 13.125 1.00 27.54 C +ATOM 880 NE ARG A 114 5.898 31.278 11.660 1.00 16.59 N +ATOM 881 CZ ARG A 114 6.631 30.413 10.970 1.00 12.23 C +ATOM 882 NH1 ARG A 114 7.271 29.439 11.649 1.00 11.43 N +ATOM 883 NH2 ARG A 114 6.744 30.477 9.659 1.00 12.83 N +ATOM 884 N CYS A 115 0.351 32.723 14.572 1.00 5.86 N +ATOM 885 CA CYS A 115 -1.055 32.487 14.333 1.00 8.05 C +ATOM 886 C CYS A 115 -1.937 33.541 14.914 1.00 18.18 C +ATOM 887 O CYS A 115 -2.914 34.024 14.264 1.00 11.36 O +ATOM 888 CB CYS A 115 -1.488 31.114 14.872 1.00 7.31 C +ATOM 889 SG CYS A 115 -0.553 29.849 14.022 1.00 10.81 S +ATOM 890 N LYS A 116 -1.630 33.796 16.196 1.00 10.46 N +ATOM 891 CA LYS A 116 -2.372 34.723 16.976 1.00 9.75 C +ATOM 892 C LYS A 116 -2.562 36.032 16.228 1.00 9.63 C +ATOM 893 O LYS A 116 -1.583 36.599 15.729 1.00 13.85 O +ATOM 894 CB LYS A 116 -1.716 34.948 18.335 1.00 12.72 C +ATOM 895 CG LYS A 116 -2.557 35.791 19.284 1.00 7.87 C +ATOM 896 CD LYS A 116 -1.809 35.938 20.635 1.00 15.62 C +ATOM 897 CE LYS A 116 -2.607 36.597 21.773 1.00 17.04 C +ATOM 898 NZ LYS A 116 -1.889 36.524 23.073 1.00 11.32 N +ATOM 899 N GLY A 117 -3.862 36.462 16.131 1.00 9.19 N +ATOM 900 CA GLY A 117 -4.213 37.737 15.493 1.00 22.87 C +ATOM 901 C GLY A 117 -4.091 37.759 13.972 1.00 33.97 C +ATOM 902 O GLY A 117 -4.044 38.799 13.371 1.00 28.79 O +ATOM 903 N THR A 118 -4.019 36.612 13.340 1.00 15.57 N +ATOM 904 CA THR A 118 -3.940 36.537 11.885 1.00 20.24 C +ATOM 905 C THR A 118 -5.285 35.977 11.407 1.00 18.25 C +ATOM 906 O THR A 118 -6.080 35.563 12.249 1.00 18.09 O +ATOM 907 CB THR A 118 -2.747 35.680 11.439 1.00 13.62 C +ATOM 908 OG1 THR A 118 -3.060 34.321 11.639 1.00 12.88 O +ATOM 909 CG2 THR A 118 -1.455 36.072 12.193 1.00 12.89 C +ATOM 910 N ASP A 119 -5.573 35.973 10.102 1.00 20.97 N +ATOM 911 CA ASP A 119 -6.848 35.408 9.620 1.00 17.43 C +ATOM 912 C ASP A 119 -6.693 33.892 9.567 1.00 19.50 C +ATOM 913 O ASP A 119 -6.430 33.280 8.509 1.00 24.87 O +ATOM 914 CB ASP A 119 -7.228 35.933 8.234 1.00 27.62 C +ATOM 915 CG ASP A 119 -8.359 35.154 7.625 1.00 57.62 C +ATOM 916 OD1 ASP A 119 -9.168 34.529 8.288 1.00 36.72 O +ATOM 917 OD2 ASP A 119 -8.349 35.190 6.315 1.00 41.26 O +ATOM 918 N VAL A 120 -6.836 33.291 10.750 1.00 20.10 N +ATOM 919 CA VAL A 120 -6.637 31.835 10.895 1.00 24.77 C +ATOM 920 C VAL A 120 -7.664 31.011 10.149 1.00 16.15 C +ATOM 921 O VAL A 120 -7.486 29.777 9.914 1.00 13.85 O +ATOM 922 CB VAL A 120 -6.476 31.372 12.367 1.00 15.61 C +ATOM 923 CG1 VAL A 120 -5.271 32.055 13.060 1.00 17.17 C +ATOM 924 CG2 VAL A 120 -7.761 31.691 13.097 1.00 18.96 C +ATOM 925 N GLN A 121 -8.761 31.679 9.776 1.00 18.05 N +ATOM 926 CA GLN A 121 -9.808 30.981 9.039 1.00 20.34 C +ATOM 927 C GLN A 121 -9.285 30.499 7.694 1.00 14.19 C +ATOM 928 O GLN A 121 -9.831 29.566 7.093 1.00 15.61 O +ATOM 929 CB GLN A 121 -10.896 31.993 8.746 1.00 39.58 C +ATOM 930 CG GLN A 121 -12.076 31.743 9.628 1.00 39.30 C +ATOM 931 CD GLN A 121 -13.286 31.887 8.785 1.00 58.93 C +ATOM 932 OE1 GLN A 121 -13.734 30.908 8.174 1.00 64.91 O +ATOM 933 NE2 GLN A 121 -13.757 33.131 8.683 1.00 55.29 N +ATOM 934 N ALA A 122 -8.222 31.161 7.229 1.00 14.53 N +ATOM 935 CA ALA A 122 -7.588 30.777 5.964 1.00 13.31 C +ATOM 936 C ALA A 122 -7.152 29.312 5.955 1.00 18.32 C +ATOM 937 O ALA A 122 -7.123 28.622 4.924 1.00 14.96 O +ATOM 938 CB ALA A 122 -6.378 31.657 5.724 1.00 18.92 C +ATOM 939 N TRP A 123 -6.792 28.829 7.138 1.00 14.16 N +ATOM 940 CA TRP A 123 -6.304 27.460 7.305 1.00 21.27 C +ATOM 941 C TRP A 123 -7.326 26.369 7.031 1.00 12.05 C +ATOM 942 O TRP A 123 -6.976 25.209 6.736 1.00 15.94 O +ATOM 943 CB TRP A 123 -5.545 27.274 8.649 1.00 14.43 C +ATOM 944 CG TRP A 123 -4.302 28.098 8.663 1.00 16.32 C +ATOM 945 CD1 TRP A 123 -4.115 29.310 9.238 1.00 16.23 C +ATOM 946 CD2 TRP A 123 -3.066 27.733 8.045 1.00 6.26 C +ATOM 947 NE1 TRP A 123 -2.826 29.737 8.996 1.00 13.70 N +ATOM 948 CE2 TRP A 123 -2.184 28.799 8.248 1.00 10.20 C +ATOM 949 CE3 TRP A 123 -2.680 26.618 7.323 1.00 14.76 C +ATOM 950 CZ2 TRP A 123 -0.873 28.742 7.761 1.00 21.80 C +ATOM 951 CZ3 TRP A 123 -1.413 26.574 6.804 1.00 21.47 C +ATOM 952 CH2 TRP A 123 -0.520 27.623 7.023 1.00 22.40 C +ATOM 953 N ILE A 124 -8.590 26.696 7.126 1.00 10.36 N +ATOM 954 CA ILE A 124 -9.573 25.659 6.831 1.00 14.89 C +ATOM 955 C ILE A 124 -10.353 25.927 5.530 1.00 16.52 C +ATOM 956 O ILE A 124 -11.277 25.213 5.172 1.00 16.40 O +ATOM 957 CB ILE A 124 -10.480 25.421 8.019 1.00 15.33 C +ATOM 958 CG1 ILE A 124 -11.016 26.778 8.456 1.00 15.55 C +ATOM 959 CG2 ILE A 124 -9.624 24.846 9.164 1.00 15.50 C +ATOM 960 CD1 ILE A 124 -12.489 26.742 8.908 1.00 32.95 C +ATOM 961 N ARG A 125 -9.977 27.003 4.848 1.00 17.59 N +ATOM 962 CA ARG A 125 -10.598 27.366 3.586 1.00 26.87 C +ATOM 963 C ARG A 125 -10.424 26.259 2.569 1.00 18.05 C +ATOM 964 O ARG A 125 -9.339 25.658 2.433 1.00 24.03 O +ATOM 965 CB ARG A 125 -10.123 28.708 3.068 1.00 29.23 C +ATOM 966 CG ARG A 125 -10.586 29.089 1.669 1.00 46.98 C +ATOM 967 CD ARG A 125 -10.321 30.571 1.370 1.00 51.79 C +ATOM 968 NE ARG A 125 -8.921 30.857 1.669 1.00 80.40 N +ATOM 969 CZ ARG A 125 -7.924 30.424 0.892 1.00 80.57 C +ATOM 970 NH1 ARG A 125 -8.167 29.752 -0.234 1.00 50.97 N +ATOM 971 NH2 ARG A 125 -6.657 30.677 1.239 1.00 73.99 N +ATOM 972 N GLY A 126 -11.581 25.957 1.917 1.00 23.54 N +ATOM 973 CA GLY A 126 -11.741 24.959 0.858 1.00 15.85 C +ATOM 974 C GLY A 126 -11.903 23.570 1.356 1.00 22.07 C +ATOM 975 O GLY A 126 -11.988 22.638 0.564 1.00 33.97 O +ATOM 976 N CYS A 127 -11.912 23.409 2.685 1.00 12.41 N +ATOM 977 CA CYS A 127 -12.009 22.059 3.164 1.00 10.52 C +ATOM 978 C CYS A 127 -13.442 21.578 3.291 1.00 13.96 C +ATOM 979 O CYS A 127 -14.383 22.316 3.676 1.00 19.22 O +ATOM 980 CB CYS A 127 -11.259 21.795 4.516 1.00 16.08 C +ATOM 981 SG CYS A 127 -9.562 22.365 4.503 1.00 17.92 S +ATOM 982 N ARG A 128 -13.609 20.299 3.023 1.00 19.23 N +ATOM 983 CA ARG A 128 -14.929 19.757 3.200 1.00 29.52 C +ATOM 984 C ARG A 128 -15.116 19.387 4.645 1.00 19.23 C +ATOM 985 O ARG A 128 -14.626 18.345 5.078 1.00 29.24 O +ATOM 986 CB ARG A 128 -15.159 18.511 2.363 1.00 35.15 C +ATOM 987 CG ARG A 128 -16.602 18.043 2.481 1.00 32.92 C +ATOM 988 CD ARG A 128 -16.961 17.187 1.277 1.00 38.70 C +ATOM 989 NE ARG A 128 -15.779 16.498 0.721 1.00 50.55 N +ATOM 990 CZ ARG A 128 -15.503 16.208 -0.581 1.00 55.70 C +ATOM 991 NH1 ARG A 128 -16.293 16.551 -1.610 1.00 46.94 N +ATOM 992 NH2 ARG A 128 -14.377 15.541 -0.856 1.00 48.25 N +ATOM 993 N LEU A 129 -15.775 20.226 5.404 1.00 22.75 N +ATOM 994 CA LEU A 129 -15.976 19.869 6.811 1.00 33.38 C +ATOM 995 C LEU A 129 -17.449 19.906 7.141 1.00 72.70 C +ATOM 996 O LEU A 129 -18.191 20.465 6.277 1.00 49.87 O +ATOM 997 CB LEU A 129 -15.235 20.742 7.845 1.00 23.67 C +ATOM 998 CG LEU A 129 -13.711 20.917 7.641 1.00 28.34 C +ATOM 999 CD1 LEU A 129 -13.308 22.315 8.150 1.00 36.38 C +ATOM 1000 CD2 LEU A 129 -12.970 19.868 8.434 1.00 43.93 C +ATOM 1001 OXT LEU A 129 -17.769 19.416 8.251 1.00 70.56 O +TER 1002 LEU A 129 +HETATM 1003 O HOH A 131 10.467 23.310 29.307 1.00 39.80 O +HETATM 1004 O HOH A 132 -1.176 15.339 1.263 1.00 49.26 O +HETATM 1005 O HOH A 133 -2.951 23.272 0.888 1.00 44.65 O +HETATM 1006 O HOH A 134 1.217 11.752 36.245 1.00 47.43 O +HETATM 1007 O HOH A 135 -5.565 19.565 2.145 1.00 30.47 O +HETATM 1008 O HOH A 136 -8.561 15.857 2.186 1.00 67.45 O +HETATM 1009 O HOH A 137 -11.371 18.534 1.797 1.00 29.55 O +HETATM 1010 O HOH A 138 -5.769 17.371 2.752 1.00 20.51 O +HETATM 1011 O HOH A 139 -1.154 20.600 3.261 1.00 38.26 O +HETATM 1012 O HOH A 140 -14.391 27.317 2.971 1.00 41.99 O +HETATM 1013 O HOH A 141 9.925 21.314 4.349 1.00 72.67 O +HETATM 1014 O HOH A 142 -3.255 29.381 4.245 1.00 58.91 O +HETATM 1015 O HOH A 143 -1.469 12.396 4.494 1.00 45.35 O +HETATM 1016 O HOH A 144 1.369 18.410 4.770 1.00 33.99 O +HETATM 1017 O HOH A 145 -13.995 24.766 5.080 1.00 22.81 O +HETATM 1018 O HOH A 146 -11.877 17.908 5.201 1.00 33.63 O +HETATM 1019 O HOH A 147 3.579 19.755 5.269 1.00 28.71 O +HETATM 1020 O HOH A 148 -0.938 23.757 3.720 1.00 71.21 O +HETATM 1021 O HOH A 149 2.851 10.418 5.675 1.00 22.01 O +HETATM 1022 O HOH A 150 6.153 10.387 6.792 1.00 23.16 O +HETATM 1023 O HOH A 151 -4.154 33.433 7.551 1.00 36.56 O +HETATM 1024 O HOH A 152 -2.892 31.523 5.422 1.00 70.64 O +HETATM 1025 O HOH A 153 8.184 17.799 8.234 1.00 52.27 O +HETATM 1026 O HOH A 154 7.851 28.286 8.261 1.00 20.33 O +HETATM 1027 O HOH A 155 -0.327 32.726 8.576 1.00 42.08 O +HETATM 1028 O HOH A 156 -7.096 11.131 8.405 1.00 40.02 O +HETATM 1029 O HOH A 157 -3.462 37.549 8.393 1.00 46.77 O +HETATM 1030 O HOH A 158 -8.809 13.307 8.142 1.00 30.47 O +HETATM 1031 O HOH A 159 -0.082 35.568 8.883 1.00 34.44 O +HETATM 1032 O HOH A 160 5.759 11.110 9.448 1.00 12.55 O +HETATM 1033 O HOH A 161 1.655 33.826 9.694 1.00 24.07 O +HETATM 1034 O HOH A 162 -2.547 32.477 9.746 1.00 26.29 O +HETATM 1035 O HOH A 163 4.474 33.152 9.881 1.00 17.58 O +HETATM 1036 O HOH A 164 3.338 7.494 10.654 1.00 33.32 O +HETATM 1037 O HOH A 165 8.193 18.034 10.710 1.00 21.87 O +HETATM 1038 O HOH A 166 7.329 25.034 11.046 1.00 35.50 O +HETATM 1039 O HOH A 167 -14.609 15.459 10.822 1.00 40.68 O +HETATM 1040 O HOH A 168 -10.475 34.131 10.612 1.00 52.70 O +HETATM 1041 O HOH A 169 2.254 4.105 11.205 1.00 64.88 O +HETATM 1042 O HOH A 170 8.719 22.583 10.964 1.00 48.95 O +HETATM 1043 O HOH A 171 -11.115 29.055 11.946 1.00 14.76 O +HETATM 1044 O HOH A 172 -13.874 27.050 11.990 1.00 53.84 O +HETATM 1045 O HOH A 173 -5.674 10.727 13.313 1.00 39.68 O +HETATM 1046 O HOH A 174 -11.999 31.072 12.630 1.00 63.32 O +HETATM 1047 O HOH A 175 -17.134 26.536 21.794 1.00 62.44 O +HETATM 1048 O HOH A 176 10.318 19.087 12.648 1.00 26.21 O +HETATM 1049 O HOH A 177 -6.214 5.635 13.140 1.00 68.62 O +HETATM 1050 O HOH A 178 4.038 7.633 13.524 1.00 23.33 O +HETATM 1051 O HOH A 179 -3.450 4.975 13.407 1.00 49.46 O +HETATM 1052 O HOH A 180 -7.339 10.569 14.831 1.00 42.40 O +HETATM 1053 O HOH A 181 7.627 28.588 14.215 1.00 19.60 O +HETATM 1054 O HOH A 182 1.193 5.002 14.601 1.00 41.13 O +HETATM 1055 O HOH A 183 -8.623 6.412 17.116 1.00 59.00 O +HETATM 1056 O HOH A 184 9.260 21.322 13.868 1.00 48.09 O +HETATM 1057 O HOH A 185 -16.033 21.080 23.763 1.00 60.47 O +HETATM 1058 O HOH A 186 11.590 13.479 14.940 1.00 13.69 O +HETATM 1059 O HOH A 187 -6.668 35.428 15.178 1.00 31.78 O +HETATM 1060 O HOH A 188 -4.892 -0.201 15.033 1.00 72.09 O +HETATM 1061 O HOH A 189 1.858 30.674 4.862 1.00 56.21 O +HETATM 1062 O HOH A 190 -10.895 36.814 14.982 1.00 35.20 O +HETATM 1063 O HOH A 191 0.992 36.275 15.433 1.00 18.46 O +HETATM 1064 O HOH A 192 4.392 4.463 15.873 1.00 37.98 O +HETATM 1065 O HOH A 193 -9.880 33.178 15.826 1.00 28.17 O +HETATM 1066 O HOH A 194 9.025 23.955 15.613 1.00 37.22 O +HETATM 1067 O HOH A 195 -7.206 38.395 16.256 1.00 55.89 O +HETATM 1068 O HOH A 196 -0.377 36.589 25.905 1.00 34.65 O +HETATM 1069 O HOH A 197 -14.982 19.034 22.737 1.00 64.15 O +HETATM 1070 O HOH A 198 -0.223 12.099 16.607 1.00 28.04 O +HETATM 1071 O HOH A 199 -6.317 33.838 16.796 1.00 22.79 O +HETATM 1072 O HOH A 200 8.078 31.375 16.915 1.00 10.01 O +HETATM 1073 O HOH A 201 1.489 13.820 17.020 1.00 21.39 O +HETATM 1074 O HOH A 202 9.131 28.844 17.354 1.00 52.49 O +HETATM 1075 O HOH A 203 14.994 15.102 18.263 1.00 53.36 O +HETATM 1076 O HOH A 204 15.333 22.227 18.703 1.00 50.97 O +HETATM 1077 O HOH A 205 16.093 18.390 18.034 1.00 33.35 O +HETATM 1078 O HOH A 206 3.768 6.469 18.636 1.00 38.13 O +HETATM 1079 O HOH A 207 -13.347 18.342 27.796 1.00 58.07 O +HETATM 1080 O HOH A 208 -14.200 9.443 18.914 1.00 81.98 O +HETATM 1081 O HOH A 209 9.257 22.574 18.988 1.00 22.39 O +HETATM 1082 O HOH A 210 4.907 37.823 19.024 1.00 41.16 O +HETATM 1083 O HOH A 211 -1.433 4.723 19.249 1.00 62.14 O +HETATM 1084 O HOH A 212 -1.071 11.315 19.089 1.00 15.91 O +HETATM 1085 O HOH A 213 -3.235 8.498 19.677 1.00 21.40 O +HETATM 1086 O HOH A 214 7.620 25.081 19.861 1.00 35.14 O +HETATM 1087 O HOH A 215 1.711 16.542 19.779 1.00 9.12 O +HETATM 1088 O HOH A 216 11.204 23.310 20.531 1.00 44.08 O +HETATM 1089 O HOH A 217 -0.792 7.051 20.523 1.00 25.44 O +HETATM 1090 O HOH A 219 -11.306 12.254 20.909 1.00 58.87 O +HETATM 1091 O HOH A 220 -15.497 22.071 20.968 1.00 42.59 O +HETATM 1092 O HOH A 221 -14.046 13.904 22.148 1.00 59.61 O +HETATM 1093 O HOH A 222 5.919 23.529 21.973 1.00 36.31 O +HETATM 1094 O HOH A 223 5.611 26.207 22.382 1.00 26.89 O +HETATM 1095 O HOH A 224 8.793 23.775 23.737 1.00 53.46 O +HETATM 1096 O HOH A 225 -14.958 24.195 25.086 1.00 26.18 O +HETATM 1097 O HOH A 226 -14.258 17.077 24.576 1.00 42.15 O +HETATM 1098 O HOH A 227 3.901 21.949 25.503 1.00 15.15 O +HETATM 1099 O HOH A 228 -17.138 15.370 26.017 1.00 64.87 O +HETATM 1100 O HOH A 229 1.041 39.543 25.118 1.00 75.63 O +HETATM 1101 O HOH A 230 -18.171 19.097 19.147 1.00 58.24 O +HETATM 1102 O HOH A 231 19.800 18.720 25.766 1.00 41.96 O +HETATM 1103 O HOH A 232 13.910 14.986 26.681 1.00 11.69 O +HETATM 1104 O HOH A 233 4.284 26.127 26.885 1.00 44.36 O +HETATM 1105 O HOH A 234 14.969 25.124 27.122 1.00 37.22 O +HETATM 1106 O HOH A 235 19.235 28.375 27.869 1.00 51.94 O +HETATM 1107 O HOH A 236 -8.227 15.787 27.736 1.00 28.71 O +HETATM 1108 O HOH A 237 11.129 29.398 26.784 1.00 53.97 O +HETATM 1109 O HOH A 238 -2.152 26.984 28.613 1.00 25.16 O +HETATM 1110 O HOH A 239 -12.126 14.584 29.332 1.00 70.39 O +HETATM 1111 O HOH A 240 -6.410 28.639 29.739 1.00 33.78 O +HETATM 1112 O HOH A 241 -9.363 18.929 29.236 1.00 54.93 O +HETATM 1113 O HOH A 242 7.290 6.035 29.744 1.00 44.70 O +HETATM 1114 O HOH A 243 0.532 4.323 25.856 1.00 66.97 O +HETATM 1115 O HOH A 244 -5.527 11.769 31.278 1.00 52.96 O +HETATM 1116 O HOH A 245 9.709 13.211 30.865 1.00 15.87 O +HETATM 1117 O HOH A 246 -5.539 14.098 29.938 1.00 63.37 O +HETATM 1118 O HOH A 247 2.285 7.164 31.744 1.00 42.72 O +HETATM 1119 O HOH A 249 2.557 37.778 32.502 1.00 60.66 O +HETATM 1120 O HOH A 250 11.653 11.933 32.683 1.00 24.19 O +HETATM 1121 O HOH A 251 -2.007 6.140 23.286 1.00 48.50 O +HETATM 1122 O HOH A 252 7.578 12.160 33.759 1.00 39.59 O +HETATM 1123 O HOH A 253 14.454 7.531 33.771 1.00 35.83 O +HETATM 1124 O HOH A 254 -3.513 31.619 34.652 1.00 56.09 O +HETATM 1125 O HOH A 255 13.552 10.709 34.982 1.00 58.90 O +HETATM 1126 O HOH A 256 -0.456 24.995 36.970 1.00 68.09 O +HETATM 1127 O HOH A 257 -2.238 9.934 2.797 1.00 67.44 O +HETATM 1128 O HOH A 258 -7.483 20.739 37.397 1.00 68.20 O +HETATM 1129 O HOH A 259 16.885 30.334 28.147 1.00 50.66 O +HETATM 1130 O HOH A 260 -2.189 19.144 1.123 1.00 56.23 O +HETATM 1131 O HOH A 263 5.554 35.805 21.621 1.00 47.47 O +HETATM 1132 O HOH A 264 0.167 38.321 22.074 1.00 63.57 O +HETATM 1133 O HOH A 265 2.643 23.311 24.222 1.00 37.06 O +HETATM 1134 O HOH A 266 -3.261 12.368 26.079 1.00 36.01 O +HETATM 1135 O HOH A 267 -8.163 28.523 28.227 1.00 31.53 O +HETATM 1136 O HOH A 268 11.314 34.308 29.649 1.00 69.35 O +HETATM 1137 O HOH A 269 -8.925 18.710 -0.425 1.00 67.80 O +HETATM 1138 O HOH A 270 1.106 7.975 2.503 1.00 57.87 O +HETATM 1139 O HOH A 271 3.658 14.557 2.346 1.00 58.10 O +HETATM 1140 O HOH A 272 5.462 18.910 4.058 1.00 56.45 O +HETATM 1141 O HOH A 273 -12.194 34.778 7.299 1.00 56.09 O +HETATM 1142 O HOH A 274 -1.696 6.065 8.495 1.00 68.76 O +HETATM 1143 O HOH A 275 -12.182 12.057 9.624 1.00 89.37 O +HETATM 1144 O HOH A 276 -17.165 32.342 9.988 1.00 67.99 O +HETATM 1145 O HOH A 277 -0.310 4.774 9.964 1.00 51.58 O +HETATM 1146 O HOH A 278 -18.106 6.723 19.155 1.00 64.11 O +HETATM 1147 O HOH A 279 -10.523 7.855 18.757 1.00 55.12 O +HETATM 1148 O HOH A 280 -5.786 9.627 24.788 1.00 56.60 O +HETATM 1149 O HOH A 281 4.973 30.366 26.631 1.00 56.27 O +HETATM 1150 O HOH A 282 -14.163 23.294 27.041 1.00 80.21 O +HETATM 1151 O HOH A 283 4.190 23.920 28.202 1.00 47.07 O +HETATM 1152 O HOH A 284 1.927 24.235 28.261 1.00 53.05 O +HETATM 1153 O HOH A 285 8.469 24.914 28.323 1.00 76.29 O +HETATM 1154 O HOH A 286 0.504 26.234 30.223 1.00 48.47 O +HETATM 1155 O HOH A 287 4.961 6.376 30.326 1.00 57.17 O +HETATM 1156 O HOH A 288 -9.395 28.233 30.605 1.00 55.86 O +HETATM 1157 O HOH A 289 -7.403 29.010 31.768 1.00 58.13 O +HETATM 1158 O HOH A 290 17.262 22.252 32.977 1.00 32.13 O +HETATM 1159 O HOH A 291 -13.958 24.749 32.936 1.00 40.16 O +HETATM 1160 O HOH A 292 11.050 6.576 33.893 1.00 53.38 O +HETATM 1161 O HOH A 293 -6.940 30.679 34.967 1.00 57.95 O +HETATM 1162 O HOH A 294 -7.751 19.631 32.932 1.00 55.95 O +HETATM 1163 O HOH A 295 -11.917 25.473 35.232 1.00 70.62 O +HETATM 1164 O HOH A 296 -0.614 22.162 37.001 1.00 49.79 O +HETATM 1165 O HOH A 297 -5.763 25.243 36.097 1.00 78.09 O +HETATM 1166 O HOH A 298 -0.024 14.493 36.828 1.00 63.91 O +HETATM 1167 O HOH A 299 0.443 17.296 2.028 1.00 52.55 O +HETATM 1168 O HOH A 300 1.738 27.507 3.463 1.00 74.82 O +HETATM 1169 O HOH A 301 3.836 11.760 3.259 1.00 57.42 O +HETATM 1170 O HOH A 302 -9.211 4.115 14.687 1.00 48.13 O +HETATM 1171 O HOH A 303 16.205 21.210 16.009 1.00 69.59 O +HETATM 1172 O HOH A 304 -14.845 6.428 21.717 1.00 61.77 O +HETATM 1173 O HOH A 305 -13.311 8.488 24.665 1.00 62.09 O +HETATM 1174 O HOH A 306 8.880 27.820 26.816 1.00 71.28 O +HETATM 1175 O HOH A 307 0.932 10.327 2.387 1.00 62.28 O +HETATM 1176 O HOH A 308 -32.793 6.518 16.878 1.00 55.27 O +HETATM 1177 O HOH A 309 -10.109 33.422 4.951 1.00 51.37 O +HETATM 1178 O HOH A 310 -6.930 35.720 3.927 1.00 68.08 O +HETATM 1179 O HOH A 311 -1.458 29.021 31.741 1.00 71.39 O +HETATM 1180 O HOH A 312 -7.776 27.408 33.976 1.00 51.50 O +HETATM 1181 O HOH A 313 2.002 13.196 3.708 1.00 54.99 O +HETATM 1182 O HOH A 314 7.005 28.792 27.719 1.00 69.52 O +HETATM 1183 O HOH A 315 -14.736 20.042 16.788 1.00 37.49 O +HETATM 1184 O HOH A 316 17.457 15.414 26.607 1.00 36.58 O +HETATM 1185 O HOH A 317 1.388 37.676 19.438 1.00 42.27 O +HETATM 1186 O HOH A 318 12.884 12.733 37.805 0.50 65.31 O +HETATM 1187 O HOH A 319 7.795 26.278 15.645 1.00 44.16 O +CONECT 48 981 +CONECT 238 889 +CONECT 513 630 +CONECT 601 724 +CONECT 630 513 +CONECT 724 601 +CONECT 889 238 +CONECT 981 48 +MASTER 294 0 0 7 3 0 0 6 1186 1 8 10 +END diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/cg.pdb b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/cg.pdb new file mode 100644 index 000000000..a02588630 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/cg.pdb @@ -0,0 +1,620 @@ +ATOM 1 BB LYS A 1 2.639 11.475 9.582 1.00 0.00 +ATOM 2 SC1 LYS A 1 -0.175 10.268 8.951 1.00 0.00 +ATOM 3 SC2 LYS A 1 -3.127 10.593 7.836 1.00 0.00 +ATOM 4 BB VAL A 2 1.690 13.537 6.781 1.00 0.00 +ATOM 5 SC1 VAL A 2 3.923 14.682 6.344 1.00 0.00 +ATOM 6 BB PHE A 3 -0.462 15.938 6.712 1.00 0.00 +ATOM 7 SC1 PHE A 3 -2.271 14.922 9.060 1.00 0.00 +ATOM 8 SC2 PHE A 3 -2.225 13.320 10.859 1.00 0.00 +ATOM 9 SC3 PHE A 3 -3.911 13.493 10.120 1.00 0.00 +ATOM 10 BB GLY A 4 -3.140 17.400 5.451 1.00 0.00 +ATOM 11 BB ARG A 5 -4.795 20.126 6.006 1.00 0.00 +ATOM 12 SC1 ARG A 5 -4.291 23.082 5.095 1.00 0.00 +ATOM 13 SC2 ARG A 5 -6.292 24.514 3.025 1.00 0.00 +ATOM 14 BB CYS A 6 -7.808 18.930 5.720 1.00 0.00 +ATOM 15 SC1 CYS A 6 -8.652 20.827 3.310 1.00 0.00 +ATOM 16 BB GLU A 7 -7.382 16.259 7.180 1.00 0.00 +ATOM 17 SC1 GLU A 7 -5.177 13.208 6.001 1.00 0.00 +ATOM 18 BB LEU A 8 -6.702 17.550 9.915 1.00 0.00 +ATOM 19 SC1 LEU A 8 -4.062 18.230 11.133 1.00 0.00 +ATOM 20 BB ALA A 9 -9.165 19.238 10.352 1.00 0.00 +ATOM 21 SC1 ALA A 9 -9.039 21.012 8.954 1.00 0.00 +ATOM 22 BB ALA A 10 -11.115 16.799 10.385 1.00 0.00 +ATOM 23 SC1 ALA A 10 -11.457 16.297 8.313 1.00 0.00 +ATOM 24 BB ALA A 11 -9.799 15.341 12.828 1.00 0.00 +ATOM 25 SC1 ALA A 11 -8.153 14.250 12.041 1.00 0.00 +ATOM 26 BB MET A 12 -10.001 17.627 14.914 1.00 0.00 +ATOM 27 SC1 MET A 12 -6.277 19.726 14.570 1.00 0.00 +ATOM 28 BB LYS A 13 -13.057 17.914 14.703 1.00 0.00 +ATOM 29 SC1 LYS A 13 -14.633 19.476 12.605 1.00 0.00 +ATOM 30 SC2 LYS A 13 -17.419 20.478 11.394 1.00 0.00 +ATOM 31 BB ARG A 14 -13.733 15.012 15.508 1.00 0.00 +ATOM 32 SC1 ARG A 14 -13.808 12.618 13.693 1.00 0.00 +ATOM 33 SC2 ARG A 14 -12.388 9.675 14.151 1.00 0.00 +ATOM 34 BB HIS A 15 -11.988 15.613 18.357 1.00 0.00 +ATOM 35 SC1 HIS A 15 -10.087 14.082 17.707 1.00 0.00 +ATOM 36 SC2 HIS A 15 -9.556 11.718 17.990 1.00 0.00 +ATOM 37 SC3 HIS A 15 -9.583 12.289 16.299 1.00 0.00 +ATOM 38 BB GLY A 16 -13.198 18.589 19.528 1.00 0.00 +ATOM 39 BB LEU A 17 -11.512 21.352 18.621 1.00 0.00 +ATOM 40 SC1 LEU A 17 -8.675 20.110 19.004 1.00 0.00 +ATOM 41 BB ASP A 18 -13.779 23.076 17.745 1.00 0.00 +ATOM 42 SC1 ASP A 18 -14.750 24.262 14.952 1.00 0.00 +ATOM 43 BB ASN A 19 -14.017 25.660 19.997 1.00 0.00 +ATOM 44 SC1 ASN A 19 -15.703 27.056 17.780 1.00 0.00 +ATOM 45 BB TYR A 20 -12.098 24.907 22.104 1.00 0.00 +ATOM 46 SC1 TYR A 20 -11.624 22.480 22.680 1.00 0.00 +ATOM 47 SC2 TYR A 20 -12.378 20.931 24.472 1.00 0.00 +ATOM 48 SC3 TYR A 20 -10.403 22.290 24.823 1.00 0.00 +ATOM 49 SC4 TYR A 20 -11.170 20.782 26.643 1.00 0.00 +ATOM 50 BB ARG A 21 -12.138 27.347 24.261 1.00 0.00 +ATOM 51 SC1 ARG A 21 -11.039 25.993 26.476 1.00 0.00 +ATOM 52 SC2 ARG A 21 -11.248 25.333 29.887 1.00 0.00 +ATOM 53 BB GLY A 22 -12.733 29.396 21.691 1.00 0.00 +ATOM 54 BB TYR A 23 -10.999 27.802 19.437 1.00 0.00 +ATOM 55 SC1 TYR A 23 -8.709 28.306 20.758 1.00 0.00 +ATOM 56 SC2 TYR A 23 -7.220 30.161 21.378 1.00 0.00 +ATOM 57 SC3 TYR A 23 -8.220 28.823 23.132 1.00 0.00 +ATOM 58 SC4 TYR A 23 -6.690 30.729 23.724 1.00 0.00 +ATOM 59 BB SER A 24 -10.710 27.715 16.317 1.00 0.00 +ATOM 60 SC1 SER A 24 -11.357 29.505 15.047 1.00 0.00 +ATOM 61 BB LEU A 25 -9.704 25.486 13.971 1.00 0.00 +ATOM 62 SC1 LEU A 25 -11.124 23.037 12.733 1.00 0.00 +ATOM 63 BB GLY A 26 -7.516 27.367 12.601 1.00 0.00 +ATOM 64 BB ASN A 27 -5.621 27.444 15.114 1.00 0.00 +ATOM 65 SC1 ASN A 27 -7.130 30.091 16.604 1.00 0.00 +ATOM 66 BB TRP A 28 -4.823 24.437 15.216 1.00 0.00 +ATOM 67 SC1 TRP A 28 -6.816 23.669 16.888 1.00 0.00 +ATOM 68 SC2 TRP A 28 -8.472 24.497 18.485 1.00 0.00 +ATOM 69 SC3 TRP A 28 -7.007 23.915 19.324 1.00 0.00 +ATOM 70 SC4 TRP A 28 -5.190 23.090 19.929 1.00 0.00 +ATOM 71 SC5 TRP A 28 -6.586 23.809 21.385 1.00 0.00 +ATOM 72 BB VAL A 29 -3.693 24.286 12.296 1.00 0.00 +ATOM 73 SC1 VAL A 29 -5.534 23.426 10.637 1.00 0.00 +ATOM 74 BB CYS A 30 -1.621 26.525 12.561 1.00 0.00 +ATOM 75 SC1 CYS A 30 -1.819 29.329 12.180 1.00 0.00 +ATOM 76 BB ALA A 31 -0.017 25.310 14.844 1.00 0.00 +ATOM 77 SC1 ALA A 31 -1.089 25.781 16.704 1.00 0.00 +ATOM 78 BB ALA A 32 0.803 22.643 13.335 1.00 0.00 +ATOM 79 SC1 ALA A 32 -0.823 21.268 13.540 1.00 0.00 +ATOM 80 BB LYS A 33 2.315 23.856 11.063 1.00 0.00 +ATOM 81 SC1 LYS A 33 1.528 24.936 8.648 1.00 0.00 +ATOM 82 SC2 LYS A 33 3.181 24.241 6.023 1.00 0.00 +ATOM 83 BB PHE A 34 4.489 25.452 12.866 1.00 0.00 +ATOM 84 SC1 PHE A 34 3.533 28.017 11.764 1.00 0.00 +ATOM 85 SC2 PHE A 34 3.676 28.811 9.478 1.00 0.00 +ATOM 86 SC3 PHE A 34 2.119 29.392 10.320 1.00 0.00 +ATOM 87 BB GLU A 35 5.438 23.062 14.808 1.00 0.00 +ATOM 88 SC1 GLU A 35 4.384 24.445 17.868 1.00 0.00 +ATOM 89 BB SER A 36 5.460 20.261 12.481 1.00 0.00 +ATOM 90 SC1 SER A 36 3.910 19.302 13.526 1.00 0.00 +ATOM 91 BB ASN A 37 4.373 20.311 9.536 1.00 0.00 +ATOM 92 SC1 ASN A 37 5.825 21.444 7.332 1.00 0.00 +ATOM 93 BB PHE A 38 2.210 17.893 10.035 1.00 0.00 +ATOM 94 SC1 PHE A 38 0.483 19.631 8.557 1.00 0.00 +ATOM 95 SC2 PHE A 38 -0.946 21.473 9.190 1.00 0.00 +ATOM 96 SC3 PHE A 38 -0.576 21.466 7.384 1.00 0.00 +ATOM 97 BB ASN A 39 4.173 16.002 11.723 1.00 0.00 +ATOM 98 SC1 ASN A 39 6.545 14.631 10.411 1.00 0.00 +ATOM 99 BB THR A 40 3.958 13.345 14.027 1.00 0.00 +ATOM 100 SC1 THR A 40 2.081 11.990 13.217 1.00 0.00 +ATOM 101 BB GLN A 41 7.384 12.897 14.242 1.00 0.00 +ATOM 102 SC1 GLN A 41 7.443 9.446 12.260 1.00 0.00 +ATOM 103 BB ALA A 42 8.128 15.397 15.663 1.00 0.00 +ATOM 104 SC1 ALA A 42 7.744 17.108 14.349 1.00 0.00 +ATOM 105 BB THR A 43 11.243 16.628 17.077 1.00 0.00 +ATOM 106 SC1 THR A 43 11.479 14.266 18.039 1.00 0.00 +ATOM 107 BB ASN A 44 12.562 18.715 19.852 1.00 0.00 +ATOM 108 SC1 ASN A 44 11.937 20.259 16.961 1.00 0.00 +ATOM 109 BB ARG A 45 15.129 20.096 21.456 1.00 0.00 +ATOM 110 SC1 ARG A 45 16.691 18.207 23.144 1.00 0.00 +ATOM 111 SC2 ARG A 45 18.247 15.570 23.629 1.00 0.00 +ATOM 112 BB ASN A 46 16.041 21.551 24.473 1.00 0.00 +ATOM 113 SC1 ASN A 46 12.650 22.425 24.012 1.00 0.00 +ATOM 114 BB THR A 47 18.023 23.297 26.635 1.00 0.00 +ATOM 115 SC1 THR A 47 18.237 25.668 25.594 1.00 0.00 +ATOM 116 BB ASP A 48 16.675 21.999 29.253 1.00 0.00 +ATOM 117 SC1 ASP A 48 14.075 22.841 29.287 1.00 0.00 +ATOM 118 BB GLY A 49 16.204 18.860 28.035 1.00 0.00 +ATOM 119 BB SER A 50 13.844 18.923 26.736 1.00 0.00 +ATOM 120 SC1 SER A 50 12.091 20.191 27.770 1.00 0.00 +ATOM 121 BB THR A 51 11.005 17.685 24.693 1.00 0.00 +ATOM 122 SC1 THR A 51 12.864 16.026 23.443 1.00 0.00 +ATOM 123 BB ASP A 52 9.219 17.821 21.592 1.00 0.00 +ATOM 124 SC1 ASP A 52 9.031 21.088 22.419 1.00 0.00 +ATOM 125 BB TYR A 53 6.010 16.280 20.504 1.00 0.00 +ATOM 126 SC1 TYR A 53 7.247 14.330 21.880 1.00 0.00 +ATOM 127 SC2 TYR A 53 8.942 14.562 23.703 1.00 0.00 +ATOM 128 SC3 TYR A 53 9.232 12.836 22.050 1.00 0.00 +ATOM 129 SC4 TYR A 53 10.883 13.050 23.887 1.00 0.00 +ATOM 130 BB GLY A 54 4.646 16.325 17.560 1.00 0.00 +ATOM 131 BB ILE A 55 2.163 18.176 16.074 1.00 0.00 +ATOM 132 SC1 ILE A 55 0.153 16.813 14.439 1.00 0.00 +ATOM 133 BB LEU A 56 2.206 19.986 18.993 1.00 0.00 +ATOM 134 SC1 LEU A 56 -1.026 20.379 18.593 1.00 0.00 +ATOM 135 BB GLN A 57 4.751 20.064 20.691 1.00 0.00 +ATOM 136 SC1 GLN A 57 7.224 19.970 18.175 1.00 0.00 +ATOM 137 BB ILE A 58 4.983 18.397 23.441 1.00 0.00 +ATOM 138 SC1 ILE A 58 1.868 17.963 23.794 1.00 0.00 +ATOM 139 BB ASN A 59 6.232 18.680 26.587 1.00 0.00 +ATOM 140 SC1 ASN A 59 8.436 20.830 27.190 1.00 0.00 +ATOM 141 BB SER A 60 8.395 16.813 28.976 1.00 0.00 +ATOM 142 SC1 SER A 60 10.130 16.060 27.751 1.00 0.00 +ATOM 143 BB ARG A 61 8.281 18.584 31.532 1.00 0.00 +ATOM 144 SC1 ARG A 61 9.759 21.040 32.156 1.00 0.00 +ATOM 145 SC2 ARG A 61 12.735 20.588 32.524 1.00 0.00 +ATOM 146 BB TRP A 62 4.865 18.317 31.928 1.00 0.00 +ATOM 147 SC1 TRP A 62 4.900 20.805 31.898 1.00 0.00 +ATOM 148 SC2 TRP A 62 6.376 22.506 31.097 1.00 0.00 +ATOM 149 SC3 TRP A 62 6.294 22.487 32.881 1.00 0.00 +ATOM 150 SC4 TRP A 62 5.936 22.198 34.895 1.00 0.00 +ATOM 151 SC5 TRP A 62 7.247 23.716 34.252 1.00 0.00 +ATOM 152 BB TRP A 63 3.099 16.093 29.851 1.00 0.00 +ATOM 153 SC1 TRP A 63 2.540 18.368 28.720 1.00 0.00 +ATOM 154 SC2 TRP A 63 2.928 20.769 28.863 1.00 0.00 +ATOM 155 SC3 TRP A 63 1.466 20.330 29.738 1.00 0.00 +ATOM 156 SC4 TRP A 63 -0.224 19.473 30.655 1.00 0.00 +ATOM 157 SC5 TRP A 63 0.131 21.566 30.772 1.00 0.00 +ATOM 158 BB CYS A 64 5.378 13.811 29.460 1.00 0.00 +ATOM 159 SC1 CYS A 64 5.333 13.856 26.701 1.00 0.00 +ATOM 160 BB ASN A 65 7.125 10.685 29.302 1.00 0.00 +ATOM 161 SC1 ASN A 65 8.140 9.329 31.687 1.00 0.00 +ATOM 162 BB ASP A 66 10.804 10.101 28.348 1.00 0.00 +ATOM 163 SC1 ASP A 66 11.494 12.585 27.497 1.00 0.00 +ATOM 164 BB GLY A 67 13.137 9.353 30.627 1.00 0.00 +ATOM 165 BB ARG A 68 15.010 12.302 30.311 1.00 0.00 +ATOM 166 SC1 ARG A 68 15.780 11.749 27.753 1.00 0.00 +ATOM 167 SC2 ARG A 68 16.274 12.982 24.249 1.00 0.00 +ATOM 168 BB THR A 69 13.256 14.339 32.420 1.00 0.00 +ATOM 169 SC1 THR A 69 12.492 15.745 30.301 1.00 0.00 +ATOM 170 BB PRO A 70 14.071 15.853 35.155 1.00 0.00 +ATOM 171 SC1 PRO A 70 16.140 15.248 34.269 1.00 0.00 +ATOM 172 BB GLY A 71 11.144 16.674 36.571 1.00 0.00 +ATOM 173 BB SER A 72 8.817 15.450 35.411 1.00 0.00 +ATOM 174 SC1 SER A 72 8.557 14.615 32.981 1.00 0.00 +ATOM 175 BB ARG A 73 5.096 15.473 35.500 1.00 0.00 +ATOM 176 SC1 ARG A 73 5.100 18.319 36.883 1.00 0.00 +ATOM 177 SC2 ARG A 73 4.230 20.855 39.417 1.00 0.00 +ATOM 178 BB ASN A 74 2.925 13.984 33.620 1.00 0.00 +ATOM 179 SC1 ASN A 74 3.473 11.411 32.304 1.00 0.00 +ATOM 180 BB LEU A 75 -0.018 15.290 33.079 1.00 0.00 +ATOM 181 SC1 LEU A 75 0.573 17.947 34.719 1.00 0.00 +ATOM 182 BB CYS A 76 -1.120 13.150 30.669 1.00 0.00 +ATOM 183 SC1 CYS A 76 -1.265 15.571 28.787 1.00 0.00 +ATOM 184 BB ASN A 77 -0.240 10.215 31.165 1.00 0.00 +ATOM 185 SC1 ASN A 77 -1.365 8.776 33.204 1.00 0.00 +ATOM 186 BB ILE A 78 2.290 9.735 29.023 1.00 0.00 +ATOM 187 SC1 ILE A 78 0.451 10.630 27.183 1.00 0.00 +ATOM 188 BB PRO A 79 4.082 8.766 26.632 1.00 0.00 +ATOM 189 SC1 PRO A 79 3.738 6.626 27.089 1.00 0.00 +ATOM 190 BB CYS A 80 5.658 10.589 24.229 1.00 0.00 +ATOM 191 SC1 CYS A 80 7.217 12.587 26.174 1.00 0.00 +ATOM 192 BB SER A 81 5.429 8.481 21.897 1.00 0.00 +ATOM 193 SC1 SER A 81 6.595 6.616 22.740 1.00 0.00 +ATOM 194 BB ALA A 82 2.295 8.651 21.623 1.00 0.00 +ATOM 195 SC1 ALA A 82 1.481 8.009 23.384 1.00 0.00 +ATOM 196 BB LEU A 83 2.615 11.581 20.063 1.00 0.00 +ATOM 197 SC1 LEU A 83 2.319 13.242 22.880 1.00 0.00 +ATOM 198 BB LEU A 84 3.681 10.054 17.106 1.00 0.00 +ATOM 199 SC1 LEU A 84 6.667 10.906 18.168 1.00 0.00 +ATOM 200 BB SER A 85 1.264 9.077 15.966 1.00 0.00 +ATOM 201 SC1 SER A 85 -0.052 7.196 16.978 1.00 0.00 +ATOM 202 BB SER A 86 -1.140 8.821 13.379 1.00 0.00 +ATOM 203 SC1 SER A 86 0.142 7.237 11.707 1.00 0.00 +ATOM 204 BB ASP A 87 -2.939 9.008 15.828 1.00 0.00 +ATOM 205 SC1 ASP A 87 -5.391 7.382 16.677 1.00 0.00 +ATOM 206 BB ILE A 88 -4.179 12.019 17.409 1.00 0.00 +ATOM 207 SC1 ILE A 88 -4.687 13.702 15.370 1.00 0.00 +ATOM 208 BB THR A 89 -5.604 11.572 20.168 1.00 0.00 +ATOM 209 SC1 THR A 89 -7.305 9.653 19.626 1.00 0.00 +ATOM 210 BB ALA A 90 -3.403 12.099 22.406 1.00 0.00 +ATOM 211 SC1 ALA A 90 -2.331 10.290 22.751 1.00 0.00 +ATOM 212 BB SER A 91 -2.701 15.008 21.510 1.00 0.00 +ATOM 213 SC1 SER A 91 -0.683 14.603 19.718 1.00 0.00 +ATOM 214 BB VAL A 92 -5.495 16.211 21.888 1.00 0.00 +ATOM 215 SC1 VAL A 92 -6.856 15.900 19.617 1.00 0.00 +ATOM 216 BB ASN A 93 -6.052 15.518 24.908 1.00 0.00 +ATOM 217 SC1 ASN A 93 -7.766 12.659 24.393 1.00 0.00 +ATOM 218 BB CYS A 94 -3.559 17.000 25.910 1.00 0.00 +ATOM 219 SC1 CYS A 94 -0.957 16.123 26.475 1.00 0.00 +ATOM 220 BB ALA A 95 -4.255 19.812 24.686 1.00 0.00 +ATOM 221 SC1 ALA A 95 -3.774 19.698 22.627 1.00 0.00 +ATOM 222 BB LYS A 96 -6.784 20.236 26.367 1.00 0.00 +ATOM 223 SC1 LYS A 96 -9.033 18.462 24.585 1.00 0.00 +ATOM 224 SC2 LYS A 96 -11.333 17.085 22.831 1.00 0.00 +ATOM 225 BB LYS A 97 -5.235 20.566 29.058 1.00 0.00 +ATOM 226 SC1 LYS A 97 -5.546 17.841 30.375 1.00 0.00 +ATOM 227 SC2 LYS A 97 -7.854 16.295 31.743 1.00 0.00 +ATOM 228 BB ILE A 98 -3.395 22.896 28.310 1.00 0.00 +ATOM 229 SC1 ILE A 98 -0.911 21.639 26.782 1.00 0.00 +ATOM 230 BB VAL A 99 -5.623 25.068 27.332 1.00 0.00 +ATOM 231 SC1 VAL A 99 -6.389 24.959 25.034 1.00 0.00 +ATOM 232 BB SER A 100 -7.076 25.024 30.315 1.00 0.00 +ATOM 233 SC1 SER A 100 -8.629 23.014 29.561 1.00 0.00 +ATOM 234 BB ASP A 101 -4.377 26.175 32.122 1.00 0.00 +ATOM 235 SC1 ASP A 101 -2.145 24.522 32.746 1.00 0.00 +ATOM 236 BB GLY A 102 -4.573 29.668 31.411 1.00 0.00 +ATOM 237 BB ASN A 103 -2.911 30.608 28.504 1.00 0.00 +ATOM 238 SC1 ASN A 103 -0.657 31.446 30.604 1.00 0.00 +ATOM 239 BB GLY A 104 -3.754 28.780 26.490 1.00 0.00 +ATOM 240 BB MET A 105 -2.262 29.047 23.290 1.00 0.00 +ATOM 241 SC1 MET A 105 -4.583 27.642 20.426 1.00 0.00 +ATOM 242 BB ASN A 106 0.330 30.437 24.437 1.00 0.00 +ATOM 243 SC1 ASN A 106 -1.234 33.304 24.677 1.00 0.00 +ATOM 244 BB ALA A 107 1.799 27.756 24.924 1.00 0.00 +ATOM 245 SC1 ALA A 107 0.585 26.599 26.143 1.00 0.00 +ATOM 246 BB TRP A 108 2.266 28.283 21.836 1.00 0.00 +ATOM 247 SC1 TRP A 108 1.201 25.872 21.084 1.00 0.00 +ATOM 248 SC2 TRP A 108 1.421 23.478 21.263 1.00 0.00 +ATOM 249 SC3 TRP A 108 -0.097 24.022 21.986 1.00 0.00 +ATOM 250 SC4 TRP A 108 -1.738 24.948 22.755 1.00 0.00 +ATOM 251 SC5 TRP A 108 -1.597 22.821 22.864 1.00 0.00 +ATOM 252 BB VAL A 109 4.676 29.905 20.293 1.00 0.00 +ATOM 253 SC1 VAL A 109 6.981 29.495 20.948 1.00 0.00 +ATOM 254 BB ALA A 110 3.789 29.741 17.230 1.00 0.00 +ATOM 255 SC1 ALA A 110 4.783 28.117 16.262 1.00 0.00 +ATOM 256 BB TRP A 111 1.005 30.817 17.760 1.00 0.00 +ATOM 257 SC1 TRP A 111 -0.914 29.450 18.540 1.00 0.00 +ATOM 258 SC2 TRP A 111 -3.120 29.950 17.528 1.00 0.00 +ATOM 259 SC3 TRP A 111 -2.831 30.936 19.012 1.00 0.00 +ATOM 260 SC4 TRP A 111 -2.231 31.907 20.786 1.00 0.00 +ATOM 261 SC5 TRP A 111 -4.106 32.361 19.902 1.00 0.00 +ATOM 262 BB ARG A 112 1.738 33.540 18.922 1.00 0.00 +ATOM 263 SC1 ARG A 112 2.360 34.094 21.939 1.00 0.00 +ATOM 264 SC2 ARG A 112 4.788 33.235 23.642 1.00 0.00 +ATOM 265 BB ASN A 113 3.756 34.374 16.423 1.00 0.00 +ATOM 266 SC1 ASN A 113 6.187 34.311 18.635 1.00 0.00 +ATOM 267 BB ARG A 114 1.852 33.135 13.724 1.00 0.00 +ATOM 268 SC1 ARG A 114 4.636 31.613 13.473 1.00 0.00 +ATOM 269 SC2 ARG A 114 6.636 30.401 10.985 1.00 0.00 +ATOM 270 BB CYS A 115 -1.437 33.238 14.504 1.00 0.00 +ATOM 271 SC1 CYS A 115 -0.808 30.194 14.254 1.00 0.00 +ATOM 272 BB LYS A 116 -1.988 35.329 16.238 1.00 0.00 +ATOM 273 SC1 LYS A 116 -2.027 35.559 19.418 1.00 0.00 +ATOM 274 SC2 LYS A 116 -2.220 36.558 22.473 1.00 0.00 +ATOM 275 BB GLY A 117 -4.045 37.726 14.692 1.00 0.00 +ATOM 276 BB THR A 118 -4.893 36.143 12.264 1.00 0.00 +ATOM 277 SC1 THR A 118 -2.485 35.254 11.745 1.00 0.00 +ATOM 278 BB ASP A 119 -6.359 34.587 9.404 1.00 0.00 +ATOM 279 SC1 ASP A 119 -8.345 35.153 7.571 1.00 0.00 +ATOM 280 BB VAL A 120 -7.168 31.420 10.401 1.00 0.00 +ATOM 281 SC1 VAL A 120 -6.503 31.706 12.841 1.00 0.00 +ATOM 282 BB GLN A 121 -9.427 30.636 8.355 1.00 0.00 +ATOM 283 SC1 GLN A 121 -12.840 31.907 8.761 1.00 0.00 +ATOM 284 BB ALA A 122 -7.518 29.912 5.982 1.00 0.00 +ATOM 285 SC1 ALA A 122 -6.378 31.657 5.724 1.00 0.00 +ATOM 286 BB TRP A 123 -6.857 26.906 7.032 1.00 0.00 +ATOM 287 SC1 TRP A 123 -4.923 27.686 8.656 1.00 0.00 +ATOM 288 SC2 TRP A 123 -3.421 29.540 9.108 1.00 0.00 +ATOM 289 SC3 TRP A 123 -2.625 28.266 8.146 1.00 0.00 +ATOM 290 SC4 TRP A 123 -2.046 26.596 7.064 1.00 0.00 +ATOM 291 SC5 TRP A 123 -0.697 28.183 7.392 1.00 0.00 +ATOM 292 BB ILE A 124 -9.996 25.855 6.127 1.00 0.00 +ATOM 293 SC1 ILE A 124 -10.902 25.947 8.637 1.00 0.00 +ATOM 294 BB ARG A 125 -10.025 26.520 3.346 1.00 0.00 +ATOM 295 SC1 ARG A 125 -10.343 29.456 2.036 1.00 0.00 +ATOM 296 SC2 ARG A 125 -7.917 30.428 0.891 1.00 0.00 +ATOM 297 BB GLY A 126 -11.809 24.221 1.156 1.00 0.00 +ATOM 298 BB CYS A 127 -13.006 22.378 3.220 1.00 0.00 +ATOM 299 SC1 CYS A 127 -10.025 22.210 4.507 1.00 0.00 +ATOM 300 BB ARG A 128 -14.539 19.397 4.032 1.00 0.00 +ATOM 301 SC1 ARG A 128 -16.241 17.914 2.040 1.00 0.00 +ATOM 302 SC2 ARG A 128 -15.487 16.199 -0.582 1.00 0.00 +ATOM 303 BB LEU A 129 -17.104 19.979 6.793 1.00 0.00 +ATOM 304 SC1 LEU A 129 -13.806 20.960 8.017 1.00 0.00 +ATOM 305 CA LYS A 1 2.639 11.475 9.582 1.00 0.00 +ATOM 306 CA VAL A 2 1.690 13.537 6.781 1.00 0.00 +ATOM 307 CA PHE A 3 -0.462 15.938 6.712 1.00 0.00 +ATOM 308 CA GLY A 4 -3.140 17.400 5.451 1.00 0.00 +ATOM 309 CA ARG A 5 -4.795 20.126 6.006 1.00 0.00 +ATOM 310 CA CYS A 6 -7.808 18.930 5.720 1.00 0.00 +ATOM 311 CA GLU A 7 -7.382 16.259 7.180 1.00 0.00 +ATOM 312 CA LEU A 8 -6.702 17.550 9.915 1.00 0.00 +ATOM 313 CA ALA A 9 -9.165 19.238 10.352 1.00 0.00 +ATOM 314 CA ALA A 10 -11.115 16.799 10.385 1.00 0.00 +ATOM 315 CA ALA A 11 -9.799 15.341 12.828 1.00 0.00 +ATOM 316 CA MET A 12 -10.001 17.627 14.914 1.00 0.00 +ATOM 317 CA LYS A 13 -13.057 17.914 14.703 1.00 0.00 +ATOM 318 CA ARG A 14 -13.733 15.012 15.508 1.00 0.00 +ATOM 319 CA HIS A 15 -11.988 15.613 18.357 1.00 0.00 +ATOM 320 CA GLY A 16 -13.198 18.589 19.528 1.00 0.00 +ATOM 321 CA LEU A 17 -11.512 21.352 18.621 1.00 0.00 +ATOM 322 CA ASP A 18 -13.779 23.076 17.745 1.00 0.00 +ATOM 323 CA ASN A 19 -14.017 25.660 19.997 1.00 0.00 +ATOM 324 CA TYR A 20 -12.098 24.907 22.104 1.00 0.00 +ATOM 325 CA ARG A 21 -12.138 27.347 24.261 1.00 0.00 +ATOM 326 CA GLY A 22 -12.733 29.396 21.691 1.00 0.00 +ATOM 327 CA TYR A 23 -10.999 27.802 19.437 1.00 0.00 +ATOM 328 CA SER A 24 -10.710 27.715 16.317 1.00 0.00 +ATOM 329 CA LEU A 25 -9.704 25.486 13.971 1.00 0.00 +ATOM 330 CA GLY A 26 -7.516 27.367 12.601 1.00 0.00 +ATOM 331 CA ASN A 27 -5.621 27.444 15.114 1.00 0.00 +ATOM 332 CA TRP A 28 -4.823 24.437 15.216 1.00 0.00 +ATOM 333 CA VAL A 29 -3.693 24.286 12.296 1.00 0.00 +ATOM 334 CA CYS A 30 -1.621 26.525 12.561 1.00 0.00 +ATOM 335 CA ALA A 31 -0.017 25.310 14.844 1.00 0.00 +ATOM 336 CA ALA A 32 0.803 22.643 13.335 1.00 0.00 +ATOM 337 CA LYS A 33 2.315 23.856 11.063 1.00 0.00 +ATOM 338 CA PHE A 34 4.489 25.452 12.866 1.00 0.00 +ATOM 339 CA GLU A 35 5.438 23.062 14.808 1.00 0.00 +ATOM 340 CA SER A 36 5.460 20.261 12.481 1.00 0.00 +ATOM 341 CA ASN A 37 4.373 20.311 9.536 1.00 0.00 +ATOM 342 CA PHE A 38 2.210 17.893 10.035 1.00 0.00 +ATOM 343 CA ASN A 39 4.173 16.002 11.723 1.00 0.00 +ATOM 344 CA THR A 40 3.958 13.345 14.027 1.00 0.00 +ATOM 345 CA GLN A 41 7.384 12.897 14.242 1.00 0.00 +ATOM 346 CA ALA A 42 8.128 15.397 15.663 1.00 0.00 +ATOM 347 CA THR A 43 11.243 16.628 17.077 1.00 0.00 +ATOM 348 CA ASN A 44 12.562 18.715 19.852 1.00 0.00 +ATOM 349 CA ARG A 45 15.129 20.096 21.456 1.00 0.00 +ATOM 350 CA ASN A 46 16.041 21.551 24.473 1.00 0.00 +ATOM 351 CA THR A 47 18.023 23.297 26.635 1.00 0.00 +ATOM 352 CA ASP A 48 16.675 21.999 29.253 1.00 0.00 +ATOM 353 CA GLY A 49 16.204 18.860 28.035 1.00 0.00 +ATOM 354 CA SER A 50 13.844 18.923 26.736 1.00 0.00 +ATOM 355 CA THR A 51 11.005 17.685 24.693 1.00 0.00 +ATOM 356 CA ASP A 52 9.219 17.821 21.592 1.00 0.00 +ATOM 357 CA TYR A 53 6.010 16.280 20.504 1.00 0.00 +ATOM 358 CA GLY A 54 4.646 16.325 17.560 1.00 0.00 +ATOM 359 CA ILE A 55 2.163 18.176 16.074 1.00 0.00 +ATOM 360 CA LEU A 56 2.206 19.986 18.993 1.00 0.00 +ATOM 361 CA GLN A 57 4.751 20.064 20.691 1.00 0.00 +ATOM 362 CA ILE A 58 4.983 18.397 23.441 1.00 0.00 +ATOM 363 CA ASN A 59 6.232 18.680 26.587 1.00 0.00 +ATOM 364 CA SER A 60 8.395 16.813 28.976 1.00 0.00 +ATOM 365 CA ARG A 61 8.281 18.584 31.532 1.00 0.00 +ATOM 366 CA TRP A 62 4.865 18.317 31.928 1.00 0.00 +ATOM 367 CA TRP A 63 3.099 16.093 29.851 1.00 0.00 +ATOM 368 CA CYS A 64 5.378 13.811 29.460 1.00 0.00 +ATOM 369 CA ASN A 65 7.125 10.685 29.302 1.00 0.00 +ATOM 370 CA ASP A 66 10.804 10.101 28.348 1.00 0.00 +ATOM 371 CA GLY A 67 13.137 9.353 30.627 1.00 0.00 +ATOM 372 CA ARG A 68 15.010 12.302 30.311 1.00 0.00 +ATOM 373 CA THR A 69 13.256 14.339 32.420 1.00 0.00 +ATOM 374 CA PRO A 70 14.071 15.853 35.155 1.00 0.00 +ATOM 375 CA GLY A 71 11.144 16.674 36.571 1.00 0.00 +ATOM 376 CA SER A 72 8.817 15.450 35.411 1.00 0.00 +ATOM 377 CA ARG A 73 5.096 15.473 35.500 1.00 0.00 +ATOM 378 CA ASN A 74 2.925 13.984 33.620 1.00 0.00 +ATOM 379 CA LEU A 75 -0.018 15.290 33.079 1.00 0.00 +ATOM 380 CA CYS A 76 -1.120 13.150 30.669 1.00 0.00 +ATOM 381 CA ASN A 77 -0.240 10.215 31.165 1.00 0.00 +ATOM 382 CA ILE A 78 2.290 9.735 29.023 1.00 0.00 +ATOM 383 CA PRO A 79 4.082 8.766 26.632 1.00 0.00 +ATOM 384 CA CYS A 80 5.658 10.589 24.229 1.00 0.00 +ATOM 385 CA SER A 81 5.429 8.481 21.897 1.00 0.00 +ATOM 386 CA ALA A 82 2.295 8.651 21.623 1.00 0.00 +ATOM 387 CA LEU A 83 2.615 11.581 20.063 1.00 0.00 +ATOM 388 CA LEU A 84 3.681 10.054 17.106 1.00 0.00 +ATOM 389 CA SER A 85 1.264 9.077 15.966 1.00 0.00 +ATOM 390 CA SER A 86 -1.140 8.821 13.379 1.00 0.00 +ATOM 391 CA ASP A 87 -2.939 9.008 15.828 1.00 0.00 +ATOM 392 CA ILE A 88 -4.179 12.019 17.409 1.00 0.00 +ATOM 393 CA THR A 89 -5.604 11.572 20.168 1.00 0.00 +ATOM 394 CA ALA A 90 -3.403 12.099 22.406 1.00 0.00 +ATOM 395 CA SER A 91 -2.701 15.008 21.510 1.00 0.00 +ATOM 396 CA VAL A 92 -5.495 16.211 21.888 1.00 0.00 +ATOM 397 CA ASN A 93 -6.052 15.518 24.908 1.00 0.00 +ATOM 398 CA CYS A 94 -3.559 17.000 25.910 1.00 0.00 +ATOM 399 CA ALA A 95 -4.255 19.812 24.686 1.00 0.00 +ATOM 400 CA LYS A 96 -6.784 20.236 26.367 1.00 0.00 +ATOM 401 CA LYS A 97 -5.235 20.566 29.058 1.00 0.00 +ATOM 402 CA ILE A 98 -3.395 22.896 28.310 1.00 0.00 +ATOM 403 CA VAL A 99 -5.623 25.068 27.332 1.00 0.00 +ATOM 404 CA SER A 100 -7.076 25.024 30.315 1.00 0.00 +ATOM 405 CA ASP A 101 -4.377 26.175 32.122 1.00 0.00 +ATOM 406 CA GLY A 102 -4.573 29.668 31.411 1.00 0.00 +ATOM 407 CA ASN A 103 -2.911 30.608 28.504 1.00 0.00 +ATOM 408 CA GLY A 104 -3.754 28.780 26.490 1.00 0.00 +ATOM 409 CA MET A 105 -2.262 29.047 23.290 1.00 0.00 +ATOM 410 CA ASN A 106 0.330 30.437 24.437 1.00 0.00 +ATOM 411 CA ALA A 107 1.799 27.756 24.924 1.00 0.00 +ATOM 412 CA TRP A 108 2.266 28.283 21.836 1.00 0.00 +ATOM 413 CA VAL A 109 4.676 29.905 20.293 1.00 0.00 +ATOM 414 CA ALA A 110 3.789 29.741 17.230 1.00 0.00 +ATOM 415 CA TRP A 111 1.005 30.817 17.760 1.00 0.00 +ATOM 416 CA ARG A 112 1.738 33.540 18.922 1.00 0.00 +ATOM 417 CA ASN A 113 3.756 34.374 16.423 1.00 0.00 +ATOM 418 CA ARG A 114 1.852 33.135 13.724 1.00 0.00 +ATOM 419 CA CYS A 115 -1.437 33.238 14.504 1.00 0.00 +ATOM 420 CA LYS A 116 -1.988 35.329 16.238 1.00 0.00 +ATOM 421 CA GLY A 117 -4.045 37.726 14.692 1.00 0.00 +ATOM 422 CA THR A 118 -4.893 36.143 12.264 1.00 0.00 +ATOM 423 CA ASP A 119 -6.359 34.587 9.404 1.00 0.00 +ATOM 424 CA VAL A 120 -7.168 31.420 10.401 1.00 0.00 +ATOM 425 CA GLN A 121 -9.427 30.636 8.355 1.00 0.00 +ATOM 426 CA ALA A 122 -7.518 29.912 5.982 1.00 0.00 +ATOM 427 CA TRP A 123 -6.857 26.906 7.032 1.00 0.00 +ATOM 428 CA ILE A 124 -9.996 25.855 6.127 1.00 0.00 +ATOM 429 CA ARG A 125 -10.025 26.520 3.346 1.00 0.00 +ATOM 430 CA GLY A 126 -11.809 24.221 1.156 1.00 0.00 +ATOM 431 CA CYS A 127 -13.006 22.378 3.220 1.00 0.00 +ATOM 432 CA ARG A 128 -14.539 19.397 4.032 1.00 0.00 +ATOM 433 CA LEU A 129 -17.104 19.979 6.793 1.00 0.00 +TER 434 LEU A 129 +CONECT 1 2 4 +CONECT 2 3 +CONECT 4 5 6 +CONECT 6 7 10 +CONECT 7 8 9 +CONECT 8 9 +CONECT 10 11 +CONECT 11 12 14 +CONECT 12 13 +CONECT 14 15 16 +CONECT 15 299 +CONECT 16 17 18 +CONECT 18 19 20 +CONECT 20 21 22 +CONECT 22 23 24 +CONECT 24 25 26 +CONECT 26 27 28 +CONECT 28 29 31 +CONECT 29 30 +CONECT 31 32 34 +CONECT 32 33 +CONECT 34 35 38 +CONECT 35 36 37 +CONECT 36 37 +CONECT 38 39 +CONECT 39 40 41 +CONECT 41 42 43 +CONECT 43 44 45 +CONECT 45 46 50 +CONECT 46 47 48 +CONECT 47 48 49 +CONECT 48 49 +CONECT 50 51 53 +CONECT 51 52 +CONECT 53 54 +CONECT 54 55 59 +CONECT 55 56 57 +CONECT 56 57 58 +CONECT 57 58 +CONECT 59 60 61 +CONECT 61 62 63 +CONECT 63 64 +CONECT 64 65 66 +CONECT 66 67 72 +CONECT 67 68 70 +CONECT 68 70 71 +CONECT 70 71 +CONECT 72 73 74 +CONECT 74 75 76 +CONECT 75 271 +CONECT 76 77 78 +CONECT 78 79 80 +CONECT 80 81 83 +CONECT 81 82 +CONECT 83 84 87 +CONECT 84 85 86 +CONECT 85 86 +CONECT 87 88 89 +CONECT 89 90 91 +CONECT 91 92 93 +CONECT 93 94 97 +CONECT 94 95 96 +CONECT 95 96 +CONECT 97 98 99 +CONECT 99 100 101 +CONECT 101 102 103 +CONECT 103 104 105 +CONECT 105 106 107 +CONECT 107 108 109 +CONECT 109 110 112 +CONECT 110 111 +CONECT 112 113 114 +CONECT 114 115 116 +CONECT 116 117 118 +CONECT 118 119 +CONECT 119 120 121 +CONECT 121 122 123 +CONECT 123 124 125 +CONECT 125 126 130 +CONECT 126 127 128 +CONECT 127 128 129 +CONECT 128 129 +CONECT 130 131 +CONECT 131 132 133 +CONECT 133 134 135 +CONECT 135 136 137 +CONECT 137 138 139 +CONECT 139 140 141 +CONECT 141 142 143 +CONECT 143 144 146 +CONECT 144 145 +CONECT 146 147 152 +CONECT 147 148 150 +CONECT 148 150 151 +CONECT 150 151 +CONECT 152 153 158 +CONECT 153 154 156 +CONECT 154 156 157 +CONECT 156 157 +CONECT 158 159 160 +CONECT 159 191 +CONECT 160 161 162 +CONECT 162 163 164 +CONECT 164 165 +CONECT 165 166 168 +CONECT 166 167 +CONECT 168 169 170 +CONECT 170 171 172 +CONECT 172 173 +CONECT 173 174 175 +CONECT 175 176 178 +CONECT 176 177 +CONECT 178 179 180 +CONECT 180 181 182 +CONECT 182 183 184 +CONECT 183 219 +CONECT 184 185 186 +CONECT 186 187 188 +CONECT 188 189 190 +CONECT 190 191 192 +CONECT 192 193 194 +CONECT 194 195 196 +CONECT 196 197 198 +CONECT 198 199 200 +CONECT 200 201 202 +CONECT 202 203 204 +CONECT 204 205 206 +CONECT 206 207 208 +CONECT 208 209 210 +CONECT 210 211 212 +CONECT 212 213 214 +CONECT 214 215 216 +CONECT 216 217 218 +CONECT 218 219 220 +CONECT 220 221 222 +CONECT 222 223 225 +CONECT 223 224 +CONECT 225 226 228 +CONECT 226 227 +CONECT 228 229 230 +CONECT 230 231 232 +CONECT 232 233 234 +CONECT 234 235 236 +CONECT 236 237 +CONECT 237 238 239 +CONECT 239 240 +CONECT 240 241 242 +CONECT 242 243 244 +CONECT 244 245 246 +CONECT 246 247 252 +CONECT 247 248 250 +CONECT 248 250 251 +CONECT 250 251 +CONECT 252 253 254 +CONECT 254 255 256 +CONECT 256 257 262 +CONECT 257 258 260 +CONECT 258 260 261 +CONECT 260 261 +CONECT 262 263 265 +CONECT 263 264 +CONECT 265 266 267 +CONECT 267 268 270 +CONECT 268 269 +CONECT 270 271 272 +CONECT 272 273 275 +CONECT 273 274 +CONECT 275 276 +CONECT 276 277 278 +CONECT 278 279 280 +CONECT 280 281 282 +CONECT 282 283 284 +CONECT 284 285 286 +CONECT 286 287 292 +CONECT 287 288 290 +CONECT 288 290 291 +CONECT 290 291 +CONECT 292 293 294 +CONECT 294 295 297 +CONECT 295 296 +CONECT 297 298 +CONECT 298 299 300 +CONECT 300 301 303 +CONECT 301 302 +CONECT 303 304 +END \ No newline at end of file diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/citation b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/citation new file mode 100644 index 000000000..283c541f2 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/citation @@ -0,0 +1,3 @@ +Souza, P C T; Alessandri, R; Barnoud, J; Thallmair, S; Faustino, I; Grünewald, F; Patmanidis, I; Abdizadeh, H; Bruininks, B M H; Wassenaar, T A; Kroon, P C; Melcr, J; Nieto, V; Corradi, V; Khan, H M; Domański, J; Javanainen, M; Martinez-Seara, H; Reuter, N; Best, R B; Vattulainen, I; Monticelli, L; Periole, X; Tieleman, D P; de Vries, A H; Marrink, S J; Nature Methods 2021; 10.1038/s41592-021-01098-3 +Souza, P C T; Araujo, L P B; Brasnett, C; Moreira, R A; Grunewald, F; Park, P; Wang, L; Razmazma, H; Borges-Araujo, A C; Cofas-Vargas, L F; Monticelli, L; Mera-Adasme, R; Melo, M N; Wu, S; Marrink, S J; Poma, A B; Thallmair, S; 2024; 10.1101/2024.04.15.589479 +McGibbon, R T; Beauchamp, K A; Harrigan, M P; Klein, C; Swails, J M; Hernández, C X; Schwantes, C R; Wang, L; Lane, T J; Pande, V S; Biophysical Journal 2015; 10.1016/j.bpj.2015.08.015 diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/command b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/command new file mode 100644 index 000000000..5e8046d54 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/command @@ -0,0 +1,9 @@ +martinize2 +-f ../aa.pdb +-ff martini3001 +-x cg.pdb +-o topol.top +-ignore HOH +-dssp +-go +-go-write-file martinize_contact_map.out diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_atomtypes.itp b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_atomtypes.itp new file mode 100644 index 000000000..3b028c477 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_atomtypes.itp @@ -0,0 +1,130 @@ +[ atomtypes ] +molecule_1 0.0 0 A 0.00000000 0.00000000 +molecule_2 0.0 0 A 0.00000000 0.00000000 +molecule_3 0.0 0 A 0.00000000 0.00000000 +molecule_4 0.0 0 A 0.00000000 0.00000000 +molecule_5 0.0 0 A 0.00000000 0.00000000 +molecule_6 0.0 0 A 0.00000000 0.00000000 +molecule_7 0.0 0 A 0.00000000 0.00000000 +molecule_8 0.0 0 A 0.00000000 0.00000000 +molecule_9 0.0 0 A 0.00000000 0.00000000 +molecule_10 0.0 0 A 0.00000000 0.00000000 +molecule_11 0.0 0 A 0.00000000 0.00000000 +molecule_12 0.0 0 A 0.00000000 0.00000000 +molecule_13 0.0 0 A 0.00000000 0.00000000 +molecule_14 0.0 0 A 0.00000000 0.00000000 +molecule_15 0.0 0 A 0.00000000 0.00000000 +molecule_16 0.0 0 A 0.00000000 0.00000000 +molecule_17 0.0 0 A 0.00000000 0.00000000 +molecule_18 0.0 0 A 0.00000000 0.00000000 +molecule_19 0.0 0 A 0.00000000 0.00000000 +molecule_20 0.0 0 A 0.00000000 0.00000000 +molecule_21 0.0 0 A 0.00000000 0.00000000 +molecule_22 0.0 0 A 0.00000000 0.00000000 +molecule_23 0.0 0 A 0.00000000 0.00000000 +molecule_24 0.0 0 A 0.00000000 0.00000000 +molecule_25 0.0 0 A 0.00000000 0.00000000 +molecule_26 0.0 0 A 0.00000000 0.00000000 +molecule_27 0.0 0 A 0.00000000 0.00000000 +molecule_28 0.0 0 A 0.00000000 0.00000000 +molecule_29 0.0 0 A 0.00000000 0.00000000 +molecule_30 0.0 0 A 0.00000000 0.00000000 +molecule_31 0.0 0 A 0.00000000 0.00000000 +molecule_32 0.0 0 A 0.00000000 0.00000000 +molecule_33 0.0 0 A 0.00000000 0.00000000 +molecule_34 0.0 0 A 0.00000000 0.00000000 +molecule_35 0.0 0 A 0.00000000 0.00000000 +molecule_36 0.0 0 A 0.00000000 0.00000000 +molecule_37 0.0 0 A 0.00000000 0.00000000 +molecule_38 0.0 0 A 0.00000000 0.00000000 +molecule_39 0.0 0 A 0.00000000 0.00000000 +molecule_40 0.0 0 A 0.00000000 0.00000000 +molecule_41 0.0 0 A 0.00000000 0.00000000 +molecule_42 0.0 0 A 0.00000000 0.00000000 +molecule_43 0.0 0 A 0.00000000 0.00000000 +molecule_44 0.0 0 A 0.00000000 0.00000000 +molecule_45 0.0 0 A 0.00000000 0.00000000 +molecule_46 0.0 0 A 0.00000000 0.00000000 +molecule_47 0.0 0 A 0.00000000 0.00000000 +molecule_48 0.0 0 A 0.00000000 0.00000000 +molecule_49 0.0 0 A 0.00000000 0.00000000 +molecule_50 0.0 0 A 0.00000000 0.00000000 +molecule_51 0.0 0 A 0.00000000 0.00000000 +molecule_52 0.0 0 A 0.00000000 0.00000000 +molecule_53 0.0 0 A 0.00000000 0.00000000 +molecule_54 0.0 0 A 0.00000000 0.00000000 +molecule_55 0.0 0 A 0.00000000 0.00000000 +molecule_56 0.0 0 A 0.00000000 0.00000000 +molecule_57 0.0 0 A 0.00000000 0.00000000 +molecule_58 0.0 0 A 0.00000000 0.00000000 +molecule_59 0.0 0 A 0.00000000 0.00000000 +molecule_60 0.0 0 A 0.00000000 0.00000000 +molecule_61 0.0 0 A 0.00000000 0.00000000 +molecule_62 0.0 0 A 0.00000000 0.00000000 +molecule_63 0.0 0 A 0.00000000 0.00000000 +molecule_64 0.0 0 A 0.00000000 0.00000000 +molecule_65 0.0 0 A 0.00000000 0.00000000 +molecule_66 0.0 0 A 0.00000000 0.00000000 +molecule_67 0.0 0 A 0.00000000 0.00000000 +molecule_68 0.0 0 A 0.00000000 0.00000000 +molecule_69 0.0 0 A 0.00000000 0.00000000 +molecule_70 0.0 0 A 0.00000000 0.00000000 +molecule_71 0.0 0 A 0.00000000 0.00000000 +molecule_72 0.0 0 A 0.00000000 0.00000000 +molecule_73 0.0 0 A 0.00000000 0.00000000 +molecule_74 0.0 0 A 0.00000000 0.00000000 +molecule_75 0.0 0 A 0.00000000 0.00000000 +molecule_76 0.0 0 A 0.00000000 0.00000000 +molecule_77 0.0 0 A 0.00000000 0.00000000 +molecule_78 0.0 0 A 0.00000000 0.00000000 +molecule_79 0.0 0 A 0.00000000 0.00000000 +molecule_80 0.0 0 A 0.00000000 0.00000000 +molecule_81 0.0 0 A 0.00000000 0.00000000 +molecule_82 0.0 0 A 0.00000000 0.00000000 +molecule_83 0.0 0 A 0.00000000 0.00000000 +molecule_84 0.0 0 A 0.00000000 0.00000000 +molecule_85 0.0 0 A 0.00000000 0.00000000 +molecule_86 0.0 0 A 0.00000000 0.00000000 +molecule_87 0.0 0 A 0.00000000 0.00000000 +molecule_88 0.0 0 A 0.00000000 0.00000000 +molecule_89 0.0 0 A 0.00000000 0.00000000 +molecule_90 0.0 0 A 0.00000000 0.00000000 +molecule_91 0.0 0 A 0.00000000 0.00000000 +molecule_92 0.0 0 A 0.00000000 0.00000000 +molecule_93 0.0 0 A 0.00000000 0.00000000 +molecule_94 0.0 0 A 0.00000000 0.00000000 +molecule_95 0.0 0 A 0.00000000 0.00000000 +molecule_96 0.0 0 A 0.00000000 0.00000000 +molecule_97 0.0 0 A 0.00000000 0.00000000 +molecule_98 0.0 0 A 0.00000000 0.00000000 +molecule_99 0.0 0 A 0.00000000 0.00000000 +molecule_100 0.0 0 A 0.00000000 0.00000000 +molecule_101 0.0 0 A 0.00000000 0.00000000 +molecule_102 0.0 0 A 0.00000000 0.00000000 +molecule_103 0.0 0 A 0.00000000 0.00000000 +molecule_104 0.0 0 A 0.00000000 0.00000000 +molecule_105 0.0 0 A 0.00000000 0.00000000 +molecule_106 0.0 0 A 0.00000000 0.00000000 +molecule_107 0.0 0 A 0.00000000 0.00000000 +molecule_108 0.0 0 A 0.00000000 0.00000000 +molecule_109 0.0 0 A 0.00000000 0.00000000 +molecule_110 0.0 0 A 0.00000000 0.00000000 +molecule_111 0.0 0 A 0.00000000 0.00000000 +molecule_112 0.0 0 A 0.00000000 0.00000000 +molecule_113 0.0 0 A 0.00000000 0.00000000 +molecule_114 0.0 0 A 0.00000000 0.00000000 +molecule_115 0.0 0 A 0.00000000 0.00000000 +molecule_116 0.0 0 A 0.00000000 0.00000000 +molecule_117 0.0 0 A 0.00000000 0.00000000 +molecule_118 0.0 0 A 0.00000000 0.00000000 +molecule_119 0.0 0 A 0.00000000 0.00000000 +molecule_120 0.0 0 A 0.00000000 0.00000000 +molecule_121 0.0 0 A 0.00000000 0.00000000 +molecule_122 0.0 0 A 0.00000000 0.00000000 +molecule_123 0.0 0 A 0.00000000 0.00000000 +molecule_124 0.0 0 A 0.00000000 0.00000000 +molecule_125 0.0 0 A 0.00000000 0.00000000 +molecule_126 0.0 0 A 0.00000000 0.00000000 +molecule_127 0.0 0 A 0.00000000 0.00000000 +molecule_128 0.0 0 A 0.00000000 0.00000000 +molecule_129 0.0 0 A 0.00000000 0.00000000 diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_nbparams.itp b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_nbparams.itp new file mode 100644 index 000000000..67437d171 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/go_nbparams.itp @@ -0,0 +1,248 @@ +[ nonbond_params ] +molecule_7 molecule_3 1 0.61856233 9.41400000 ;go bond 0.6943127420198613 +molecule_8 molecule_3 1 0.64124177 9.41400000 ;go bond 0.7197695451276599 +molecule_8 molecule_4 1 0.50903643 9.41400000 ;go bond 0.5713740769670111 +molecule_9 molecule_5 1 0.55472986 9.41400000 ;go bond 0.6226632146695402 +molecule_10 molecule_6 1 0.54368812 9.41400000 ;go bond 0.6102692815201157 +molecule_11 molecule_7 1 0.55342129 9.41400000 ;go bond 0.6211943930892219 +molecule_12 molecule_8 1 0.53361672 9.41400000 ;go bond 0.5989645139498613 +molecule_13 molecule_9 1 0.53327864 9.41400000 ;go bond 0.5985850372139336 +molecule_14 molecule_10 1 0.53671899 9.41400000 ;go bond 0.6024467010331567 +molecule_15 molecule_11 1 0.53037897 9.41400000 ;go bond 0.595330266318212 +molecule_16 molecule_12 1 0.50737179 9.41400000 ;go bond 0.5695055830955082 +molecule_17 molecule_12 1 0.48713361 9.41400000 ;go bond 0.5467889885980936 +molecule_18 molecule_13 1 0.53766042 9.41400000 ;go bond 0.6035034151508717 +molecule_20 molecule_16 1 0.61569519 9.41400000 ;go bond 0.69109448834759 +molecule_23 molecule_19 1 0.33345408 9.41400000 ;go bond 0.37428954456239344 +molecule_24 molecule_18 1 0.51159570 9.41400000 ;go bond 0.5742467616612773 +molecule_24 molecule_19 1 0.47724942 9.41400000 ;go bond 0.5356943617696797 +molecule_25 molecule_9 1 0.64504569 9.41400000 ;go bond 0.7240393024330681 +molecule_25 molecule_12 1 0.70562045 9.41400000 ;go bond 0.7920321742591826 +molecule_25 molecule_13 1 0.74064090 9.41400000 ;go bond 0.8313413048383407 +molecule_25 molecule_18 1 0.53932816 9.41400000 ;go bond 0.6053753887831144 +molecule_27 molecule_22 1 0.88032159 9.41400000 ;go bond 0.9881275776497356 +molecule_27 molecule_23 1 0.61550377 9.41400000 ;go bond 0.6908796205335538 +molecule_28 molecule_12 1 0.76259122 9.41400000 ;go bond 0.8559796975673322 +molecule_28 molecule_17 1 0.72301913 9.41400000 ;go bond 0.8115615324462473 +molecule_28 molecule_23 1 0.73074896 9.41400000 ;go bond 0.820237971332657 +molecule_28 molecule_24 1 0.60820755 9.41400000 ;go bond 0.6826898970154524 +molecule_29 molecule_5 1 0.67893755 9.41400000 ;go bond 0.7620816384409441 +molecule_29 molecule_9 1 0.68543008 9.41400000 ;go bond 0.7693692478654459 +molecule_29 molecule_12 1 0.84972238 9.41400000 ;go bond 0.9537811278820616 +molecule_29 molecule_25 1 0.56612103 9.41400000 ;go bond 0.6354493737814462 +molecule_30 molecule_26 1 0.53052057 9.41400000 ;go bond 0.5954892061460799 +molecule_31 molecule_27 1 0.53475952 9.41400000 ;go bond 0.6002472707440369 +molecule_32 molecule_8 1 0.86357891 9.41400000 ;go bond 0.9693345501899973 +molecule_32 molecule_28 1 0.55212353 9.41400000 ;go bond 0.6197377072510204 +molecule_33 molecule_29 1 0.54779556 9.41400000 ;go bond 0.6148797210161288 +molecule_34 molecule_30 1 0.55336548 9.41400000 ;go bond 0.6211317466812124 +molecule_35 molecule_31 1 0.52569919 9.41400000 ;go bond 0.590077387289496 +molecule_36 molecule_32 1 0.47223535 9.41400000 ;go bond 0.5300662608889427 +molecule_37 molecule_32 1 0.50881207 9.41400000 ;go bond 0.5711222438387489 +molecule_37 molecule_33 1 0.38969170 9.41400000 ;go bond 0.4374141472808427 +molecule_38 molecule_1 1 0.57448609 9.41400000 ;go bond 0.6448388341942877 +molecule_38 molecule_2 1 0.48657983 9.41400000 ;go bond 0.546167392701615 +molecule_38 molecule_3 1 0.41787399 9.41400000 ;go bond 0.4690476911327112 +molecule_38 molecule_5 1 0.74691290 9.41400000 ;go bond 0.8383813795148045 +molecule_38 molecule_8 1 0.79461448 9.41400000 ;go bond 0.8919245972085443 +molecule_38 molecule_29 1 0.80094100 9.41400000 ;go bond 0.8990258716681456 +molecule_38 molecule_32 1 0.53035146 9.41400000 ;go bond 0.595299389939677 +molecule_38 molecule_33 1 0.53919231 9.41400000 ;go bond 0.6052229058691948 +molecule_39 molecule_1 1 0.46661085 9.41400000 ;go bond 0.5237529677441939 +molecule_39 molecule_2 1 0.53945286 9.41400000 ;go bond 0.6055153634186972 +molecule_40 molecule_1 1 0.44540084 9.41400000 ;go bond 0.4999455361832126 +molecule_40 molecule_3 1 0.79571603 9.41400000 ;go bond 0.893161039670135 +molecule_41 molecule_1 1 0.60586911 9.41400000 ;go bond 0.6800650807838239 +molecule_42 molecule_36 1 0.56978667 9.41400000 ;go bond 0.6395639081914954 +molecule_44 molecule_35 1 0.86874460 9.41400000 ;go bond 0.9751328464876157 +molecule_49 molecule_45 1 0.60399410 9.41400000 ;go bond 0.6779604545260989 +molecule_50 molecule_45 1 0.49525002 9.41400000 ;go bond 0.5558993511673289 +molecule_50 molecule_46 1 0.36572449 9.41400000 ;go bond 0.41051185789603073 +molecule_51 molecule_43 1 0.68530935 9.41400000 ;go bond 0.7692337357434095 +molecule_51 molecule_44 1 0.46223041 9.41400000 ;go bond 0.5188360959211756 +molecule_51 molecule_45 1 0.51412646 9.41400000 ;go bond 0.5770874427896645 +molecule_51 molecule_46 1 0.56601354 9.41400000 ;go bond 0.6353287162096511 +molecule_52 molecule_43 1 0.45347572 9.41400000 ;go bond 0.5090092826613196 +molecule_52 molecule_44 1 0.34512972 9.41400000 ;go bond 0.3873950169040449 +molecule_52 molecule_46 1 0.73874223 9.41400000 ;go bond 0.8292101153618309 +molecule_53 molecule_42 1 0.47723542 9.41400000 ;go bond 0.5356786434419246 +molecule_53 molecule_43 1 0.55815954 9.41400000 ;go bond 0.6265129049059701 +molecule_54 molecule_36 1 0.57709969 9.41400000 ;go bond 0.6477724993432106 +molecule_54 molecule_40 1 0.41626389 9.41400000 ;go bond 0.46724041889962603 +molecule_54 molecule_42 1 0.36281320 9.41400000 ;go bond 0.40724404485680404 +molecule_55 molecule_3 1 0.88888031 9.41400000 ;go bond 0.9977344141571017 +molecule_55 molecule_8 1 0.96327627 9.41400000 ;go bond 1.0812410554289593 +molecule_55 molecule_32 1 0.48229461 9.41400000 ;go bond 0.5413573920108359 +molecule_55 molecule_35 1 0.53603357 9.41400000 ;go bond 0.6016773437033557 +molecule_55 molecule_36 1 0.47250951 9.41400000 ;go bond 0.5303739892670865 +molecule_55 molecule_38 1 0.53863592 9.41400000 ;go bond 0.6045983765957093 +molecule_55 molecule_39 1 0.46884965 9.41400000 ;go bond 0.5262659343028784 +molecule_55 molecule_40 1 0.49397051 9.41400000 ;go bond 0.5544631488965023 +molecule_56 molecule_31 1 0.63305577 9.41400000 ;go bond 0.7105810801311345 +molecule_56 molecule_32 1 0.57070473 9.41400000 ;go bond 0.640594396443224 +molecule_56 molecule_35 1 0.54499611 9.41400000 ;go bond 0.6117374504966917 +molecule_57 molecule_35 1 0.59142457 9.41400000 ;go bond 0.6638516326030536 +molecule_57 molecule_36 1 0.73443635 9.41400000 ;go bond 0.8243769340599911 +molecule_57 molecule_42 1 0.68123116 9.41400000 ;go bond 0.7646561231921536 +molecule_57 molecule_43 1 0.72932038 9.41400000 ;go bond 0.8186344517277264 +molecule_57 molecule_44 1 0.71017360 9.41400000 ;go bond 0.7971429108051539 +molecule_57 molecule_52 1 0.45255106 9.41400000 ;go bond 0.5079713907835711 +molecule_57 molecule_53 1 0.35572883 9.41400000 ;go bond 0.3992921109620664 +molecule_58 molecule_52 1 0.41486867 9.41400000 ;go bond 0.4656743363160884 +molecule_58 molecule_53 1 0.33528745 9.41400000 ;go bond 0.37634743770658646 +molecule_59 molecule_46 1 0.92985190 9.41400000 ;go bond 1.0437234628284975 +molecule_59 molecule_50 1 0.67865311 9.41400000 ;go bond 0.7617623567683692 +molecule_59 molecule_51 1 0.46599015 9.41400000 ;go bond 0.5230562584392384 +molecule_59 molecule_52 1 0.52411606 9.41400000 ;go bond 0.5883003833904864 +molecule_60 molecule_50 1 0.55757626 9.41400000 ;go bond 0.6258581889054639 +molecule_60 molecule_51 1 0.45353930 9.41400000 ;go bond 0.5090806492037284 +molecule_60 molecule_53 1 0.78554721 9.41400000 ;go bond 0.8817469319963909 +molecule_61 molecule_48 1 0.83253174 9.41400000 ;go bond 0.9344852838875899 +molecule_61 molecule_50 1 0.65515556 9.41400000 ;go bond 0.7353872567523113 +molecule_63 molecule_58 1 0.62967119 9.41400000 ;go bond 0.7067820082223201 +molecule_63 molecule_59 1 0.46427561 9.41400000 ;go bond 0.521131754230626 +molecule_64 molecule_53 1 0.82959737 9.41400000 ;go bond 0.9311915604701376 +molecule_64 molecule_60 1 0.38156281 9.41400000 ;go bond 0.4282897748904594 +molecule_66 molecule_51 1 0.75019821 9.41400000 ;go bond 0.8420690218004665 +molecule_66 molecule_60 1 0.63773507 9.41400000 ;go bond 0.7158334088350374 +molecule_68 molecule_51 1 0.77962271 9.41400000 ;go bond 0.8750968992083761 +molecule_69 molecule_49 1 0.61957584 9.41400000 ;go bond 0.6954503691813763 +molecule_69 molecule_50 1 0.65269177 9.41400000 ;go bond 0.732621739205985 +molecule_69 molecule_60 1 0.57472088 9.41400000 ;go bond 0.6451023780044498 +molecule_69 molecule_61 1 0.58802307 9.41400000 ;go bond 0.6600335825309095 +molecule_70 molecule_61 1 0.65533893 9.41400000 ;go bond 0.7355930799704493 +molecule_72 molecule_60 1 0.58726083 9.41400000 ;go bond 0.6591779944295714 +molecule_72 molecule_61 1 0.44682674 9.41400000 ;go bond 0.5015460538054222 +molecule_72 molecule_64 1 0.62949829 9.41400000 ;go bond 0.7065879353028186 +molecule_73 molecule_61 1 0.53130673 9.41400000 ;go bond 0.5963716385459682 +molecule_73 molecule_62 1 0.40729971 9.41400000 ;go bond 0.4571784705977002 +molecule_74 molecule_62 1 0.44897571 9.41400000 ;go bond 0.5039581950921611 +molecule_74 molecule_63 1 0.38506256 9.41400000 ;go bond 0.4322181095046963 +molecule_74 molecule_64 1 0.43052761 9.41400000 ;go bond 0.4832509069633833 +molecule_74 molecule_65 1 0.61184241 9.41400000 ;go bond 0.6867698876930867 +molecule_75 molecule_62 1 0.52199782 9.41400000 ;go bond 0.5859227452973559 +molecule_75 molecule_63 1 0.40610455 9.41400000 ;go bond 0.45583694740556885 +molecule_76 molecule_63 1 0.46409225 9.41400000 ;go bond 0.5209259369461889 +molecule_78 molecule_63 1 0.57576077 9.41400000 ;go bond 0.6462696105707937 +molecule_78 molecule_65 1 0.43974215 9.41400000 ;go bond 0.4935938729629976 +molecule_78 molecule_74 1 0.56052614 9.41400000 ;go bond 0.6291693208239874 +molecule_80 molecule_53 1 0.60673469 9.41400000 ;go bond 0.6810366626079589 +molecule_80 molecule_60 1 0.73868742 9.41400000 ;go bond 0.8291485950674535 +molecule_82 molecule_78 1 0.66632073 9.41400000 ;go bond 0.7479197331826131 +molecule_83 molecule_53 1 0.51788905 9.41400000 ;go bond 0.581310806103053 +molecule_83 molecule_54 1 0.51088855 9.41400000 ;go bond 0.5734530137551908 +molecule_83 molecule_58 1 0.70980394 9.41400000 ;go bond 0.7967279839859979 +molecule_83 molecule_64 1 0.89499397 9.41400000 ;go bond 1.0045967605887745 +molecule_83 molecule_78 1 0.81556181 9.41400000 ;go bond 0.9154371804917103 +molecule_84 molecule_40 1 0.40226578 9.41400000 ;go bond 0.45152806893595954 +molecule_84 molecule_41 1 0.48796771 9.41400000 ;go bond 0.5477252325235119 +molecule_84 molecule_42 1 0.63252675 9.41400000 ;go bond 0.7099872721863868 +molecule_84 molecule_43 1 0.89270990 9.41400000 ;go bond 1.0020329775751635 +molecule_84 molecule_53 1 0.66502200 9.41400000 ;go bond 0.7464619538686407 +molecule_84 molecule_54 1 0.56665258 9.41400000 ;go bond 0.6360460147186728 +molecule_85 molecule_40 1 0.48170210 9.41400000 ;go bond 0.5406923273735796 +molecule_85 molecule_81 1 0.64785523 9.41400000 ;go bond 0.7271929039256984 +molecule_86 molecule_1 1 0.53262408 9.41400000 ;go bond 0.5978503129841565 +molecule_86 molecule_3 1 0.87090844 9.41400000 ;go bond 0.9775616735724965 +molecule_86 molecule_40 1 0.60999120 9.41400000 ;go bond 0.6846919673680466 +molecule_88 molecule_8 1 0.85969619 9.41400000 ;go bond 0.9649763505137078 +molecule_88 molecule_11 1 0.71056849 9.41400000 ;go bond 0.7975861593614437 +molecule_88 molecule_12 1 0.75368061 9.41400000 ;go bond 0.8459778840905772 +molecule_88 molecule_15 1 0.77050258 9.41400000 ;go bond 0.864859899514801 +molecule_88 molecule_40 1 0.79388724 9.41400000 ;go bond 0.8911082942214028 +molecule_88 molecule_55 1 0.79641633 9.41400000 ;go bond 0.8939471074581451 +molecule_89 molecule_14 1 0.88919389 9.41400000 ;go bond 0.998086397883772 +molecule_89 molecule_15 1 0.69215886 9.41400000 ;go bond 0.7769220558398894 +molecule_90 molecule_78 1 0.80563795 9.41400000 ;go bond 0.9042980239792854 +molecule_90 molecule_82 1 0.59740893 9.41400000 ;go bond 0.6705688513824994 +molecule_90 molecule_83 1 0.57714934 9.41400000 ;go bond 0.6478282257424317 +molecule_91 molecule_55 1 0.70847337 9.41400000 ;go bond 0.7952344695348353 +molecule_91 molecule_58 1 0.76773720 9.41400000 ;go bond 0.8617558647944001 +molecule_91 molecule_83 1 0.57795007 9.41400000 ;go bond 0.6487270215620753 +molecule_92 molecule_15 1 0.66057405 9.41400000 ;go bond 0.741469302181026 +molecule_92 molecule_17 1 0.76276340 9.41400000 ;go bond 0.8561729710147923 +molecule_92 molecule_88 1 0.55891711 9.41400000 ;go bond 0.6273632448163519 +molecule_93 molecule_89 1 0.55091233 9.41400000 ;go bond 0.6183781864423776 +molecule_94 molecule_58 1 0.80192436 9.41400000 ;go bond 0.9001296640477776 +molecule_94 molecule_63 1 0.69400655 9.41400000 ;go bond 0.7789960144450432 +molecule_94 molecule_83 1 0.89829847 9.41400000 ;go bond 1.0083059444227724 +molecule_94 molecule_90 1 0.53696870 9.41400000 ;go bond 0.6027269866522963 +molecule_95 molecule_28 1 0.94028879 9.41400000 ;go bond 1.0554384813372668 +molecule_95 molecule_56 1 0.76727508 9.41400000 ;go bond 0.8612371596953154 +molecule_95 molecule_58 1 0.83998475 9.41400000 ;go bond 0.9428510053550558 +molecule_95 molecule_91 1 0.53148309 9.41400000 ;go bond 0.5965695928114466 +molecule_96 molecule_15 1 0.94537258 9.41400000 ;go bond 1.0611448446580265 +molecule_96 molecule_16 1 0.84805127 9.41400000 ;go bond 0.9519053644995195 +molecule_96 molecule_17 1 0.81454872 9.41400000 ;go bond 0.9143000281459933 +molecule_96 molecule_20 1 0.73587759 9.41400000 ;go bond 0.8259946673768416 +molecule_96 molecule_92 1 0.54860993 9.41400000 ;go bond 0.6157938252917854 +molecule_97 molecule_63 1 0.84557275 9.41400000 ;go bond 0.9491233248865086 +molecule_97 molecule_76 1 0.76910096 9.41400000 ;go bond 0.8632866370341634 +molecule_97 molecule_93 1 0.58672221 9.41400000 ;go bond 0.6585734126705566 +molecule_98 molecule_58 1 0.95186722 9.41400000 ;go bond 1.0684348259540144 +molecule_98 molecule_63 1 0.84907243 9.41400000 ;go bond 0.9530515735530009 +molecule_98 molecule_94 1 0.56734136 9.41400000 ;go bond 0.6368191395430418 +molecule_99 molecule_20 1 0.74154421 9.41400000 ;go bond 0.8323552284309241 +molecule_99 molecule_21 1 0.67304644 9.41400000 ;go bond 0.7554690813350494 +molecule_99 molecule_23 1 0.88512807 9.41400000 ;go bond 0.9935226692398884 +molecule_99 molecule_95 1 0.53820962 9.41400000 ;go bond 0.604119869395205 +molecule_100 molecule_20 1 0.85755666 9.41400000 ;go bond 0.9625748060503135 +molecule_100 molecule_21 1 0.73290562 9.41400000 ;go bond 0.8226587489947875 +molecule_100 molecule_96 1 0.55353826 9.41400000 ;go bond 0.6213256912734973 +molecule_101 molecule_97 1 0.57454537 9.41400000 ;go bond 0.6449053740097164 +molecule_104 molecule_23 1 0.90496194 9.41400000 ;go bond 1.015785427971386 +molecule_104 molecule_99 1 0.37779975 9.41400000 ;go bond 0.42406587714866395 +molecule_105 molecule_23 1 0.85792539 9.41400000 ;go bond 0.9629886926477136 +molecule_105 molecule_27 1 0.80028132 9.41400000 ;go bond 0.8982854095190085 +molecule_105 molecule_28 1 0.85914649 9.41400000 ;go bond 0.9643593287596212 +molecule_105 molecule_31 1 0.84674626 9.41400000 ;go bond 0.950440544780807 +molecule_105 molecule_99 1 0.58741430 9.41400000 ;go bond 0.6593502594081683 +molecule_107 molecule_98 1 0.70183885 9.41400000 ;go bond 0.7877874714268905 +molecule_108 molecule_28 1 0.92956079 9.41400000 ;go bond 1.0433967044744268 +molecule_108 molecule_35 1 0.82960839 9.41400000 ;go bond 0.9312039368635526 +molecule_108 molecule_56 1 0.78133210 9.41400000 ;go bond 0.8770156294387439 +molecule_108 molecule_57 1 0.77168204 9.41400000 ;go bond 0.8661838041857776 +molecule_108 molecule_98 1 0.90403083 9.41400000 ;go bond 1.014740292066367 +molecule_108 molecule_99 1 0.90315750 9.41400000 ;go bond 1.0137600206889819 +molecule_110 molecule_34 1 0.54869664 9.41400000 ;go bond 0.6158911542488904 +molecule_110 molecule_35 1 0.64980269 9.41400000 ;go bond 0.7293788607697123 +molecule_111 molecule_27 1 0.70311941 9.41400000 ;go bond 0.7892248529963473 +molecule_111 molecule_31 1 0.56259884 9.41400000 ;go bond 0.6314958500157425 +molecule_111 molecule_105 1 0.59346888 9.41400000 ;go bond 0.6661462995266982 +molecule_111 molecule_106 1 0.59882239 9.41400000 ;go bond 0.6721554100763635 +molecule_112 molecule_106 1 0.57753815 9.41400000 ;go bond 0.6482646568405853 +molecule_112 molecule_107 1 0.74260248 9.41400000 ;go bond 0.833543103918769 +molecule_112 molecule_108 1 0.53753958 9.41400000 ;go bond 0.603367775987529 +molecule_113 molecule_109 1 0.53306219 9.41400000 ;go bond 0.5983420831461288 +molecule_114 molecule_34 1 0.72771145 9.41400000 ;go bond 0.8168284821715603 +molecule_114 molecule_110 1 0.46768238 9.41400000 ;go bond 0.5249557267503717 +molecule_115 molecule_34 1 0.88387345 9.41400000 ;go bond 0.992114405441341 +molecule_115 molecule_110 1 0.61061778 9.41400000 ;go bond 0.6853952887981661 +molecule_115 molecule_111 1 0.42196703 9.41400000 ;go bond 0.47364198031256005 +molecule_116 molecule_106 1 0.87532705 9.41400000 ;go bond 0.9825213984552683 +molecule_116 molecule_111 1 0.50113645 9.41400000 ;go bond 0.5625066449356023 +molecule_116 molecule_112 1 0.43911399 9.41400000 ;go bond 0.49288878427344174 +molecule_118 molecule_114 1 0.67078608 9.41400000 ;go bond 0.7529319131070445 +molecule_120 molecule_24 1 0.69733857 9.41400000 ;go bond 0.7827360846084381 +molecule_120 molecule_26 1 0.41196240 9.41400000 ;go bond 0.46241216001948066 +molecule_120 molecule_27 1 0.56639954 9.41400000 ;go bond 0.635761991521061 +molecule_120 molecule_30 1 0.68659111 9.41400000 ;go bond 0.7706724627863119 +molecule_120 molecule_115 1 0.64848013 9.41400000 ;go bond 0.7278943320955625 +molecule_122 molecule_5 1 0.90496806 9.41400000 ;go bond 1.0157923048257507 +molecule_123 molecule_5 1 0.63785927 9.41400000 ;go bond 0.7159728234146279 +molecule_123 molecule_26 1 0.50129185 9.41400000 ;go bond 0.5626810823295224 +molecule_123 molecule_29 1 0.59480241 9.41400000 ;go bond 0.6676431279994454 +molecule_123 molecule_30 1 0.67921805 9.41400000 ;go bond 0.7623964880604177 +molecule_123 molecule_33 1 0.93299536 9.41400000 ;go bond 1.0472518822731016 +molecule_123 molecule_118 1 0.96185327 9.41400000 ;go bond 1.0796437933509648 +molecule_124 molecule_5 1 0.68943443 9.41400000 ;go bond 0.7738639843643694 +molecule_124 molecule_9 1 0.70339384 9.41400000 ;go bond 0.7895328862371291 +molecule_124 molecule_25 1 0.70011179 9.41400000 ;go bond 0.7858489085818862 +molecule_124 molecule_26 1 0.63220546 9.41400000 ;go bond 0.7096266311407307 +molecule_124 molecule_29 1 0.79807070 9.41400000 ;go bond 0.8958040736345152 +molecule_125 molecule_5 1 0.77312403 9.41400000 ;go bond 0.867802386232067 +molecule_125 molecule_121 1 0.58002816 9.41400000 ;go bond 0.6510595975914277 +molecule_129 molecule_9 1 0.77796857 9.41400000 ;go bond 0.8732401925194813 +molecule_129 molecule_10 1 0.68369587 9.41400000 ;go bond 0.7674226629042717 +molecule_129 molecule_13 1 0.81265668 9.41400000 ;go bond 0.912176279663995 +molecule_129 molecule_124 1 0.82375149 9.41400000 ;go bond 0.9246297801730708 diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/martinize_contact_map.out b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/martinize_contact_map.out new file mode 100644 index 000000000..a87ef4fc3 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/martinize_contact_map.out @@ -0,0 +1,1257 @@ +Go contact map calculated with vermouth 0.12.1.dev36 + +Residue-Residue Contacts + +ID - atom identification +I1,I2 - serial residue id +AA - 3-letter code of aminoacid +C - chain +I(PDB) - residue number in PDB file +DCA - distance between CA +CMs - OV , CSU , oCSU , rCSU + (CSU does not take into account chemical properties of atoms) +rCSU - net contact from rCSU +Count - number of contacts between residues + + ID I1 AA C I(PDB) I2 AA C I(PDB) DCA CMs rCSU Count +======================================================================================= +R 1 1 LYS A 1 2 VAL A 2 3.8094 1 1 1 1 1 369 +R 2 1 LYS A 1 3 PHE A 3 6.0948 1 1 1 0 0 106 +R 3 1 LYS A 1 7 GLU A 7 11.4807 1 1 1 1 1 225 +R 4 1 LYS A 1 38 PHE A 38 8.1596 1 1 0 0 0 12 +R 5 1 LYS A 1 39 ASN A 39 5.7421 1 0 0 0 0 0 +R 6 1 LYS A 1 40 THR A 40 5.4657 1 1 1 1 1 238 +R 7 1 LYS A 1 41 GLN A 41 6.8324 1 1 0 0 0 118 +R 8 1 LYS A 1 86 SER A 86 5.1894 1 1 1 0 0 161 +R 9 2 VAL A 2 1 LYS A 1 3.8094 1 1 0 0 0 386 +R 10 2 VAL A 2 3 PHE A 3 3.7890 1 1 1 0 0 413 +R 11 2 VAL A 2 4 GLY A 4 6.7958 0 1 1 1 1 14 +R 12 2 VAL A 2 7 GLU A 7 10.1090 0 1 0 0 0 12 +R 13 2 VAL A 2 37 ASN A 37 7.9443 0 1 0 0 0 75 +R 14 2 VAL A 2 38 PHE A 38 5.5799 1 1 1 0 0 27 +R 15 2 VAL A 2 39 ASN A 39 4.2809 1 1 1 0 0 121 +R 16 3 PHE A 3 1 LYS A 1 6.0948 1 1 1 0 0 77 +R 17 3 PHE A 3 2 VAL A 2 3.7890 1 1 0 0 0 380 +R 18 3 PHE A 3 4 GLY A 4 3.7566 1 1 1 0 0 362 +R 19 3 PHE A 3 7 GLU A 7 6.3959 1 1 1 1 1 66 +R 20 3 PHE A 3 8 LEU A 8 5.8772 1 1 1 1 1 144 +R 21 3 PHE A 3 11 ALA A 11 9.8683 1 1 1 1 1 35 +R 22 3 PHE A 3 38 PHE A 38 5.3547 1 1 1 0 0 144 +R 23 3 PHE A 3 40 THR A 40 7.9444 1 1 1 1 1 133 +R 24 3 PHE A 3 55 ILE A 55 9.3473 1 1 1 1 1 35 +R 25 3 PHE A 3 86 SER A 86 8.8941 1 1 0 0 0 65 +R 26 3 PHE A 3 88 ILE A 88 10.4372 1 1 1 1 1 102 +R 27 4 GLY A 4 2 VAL A 2 6.7958 0 1 1 1 1 11 +R 28 4 GLY A 4 3 PHE A 3 3.7566 1 1 0 0 0 353 +R 29 4 GLY A 4 5 ARG A 5 3.7804 1 1 1 1 1 382 +R 30 4 GLY A 4 6 CYS A 6 5.6551 1 1 0 0 0 9 +R 31 4 GLY A 4 7 GLU A 7 5.1677 1 1 1 1 1 78 +R 32 4 GLY A 4 8 LEU A 8 6.0824 1 1 1 1 1 105 +R 33 4 GLY A 4 38 PHE A 38 7.2869 0 1 0 0 0 2 +R 34 5 ARG A 5 3 PHE A 3 6.3853 0 1 1 1 1 10 +R 35 5 ARG A 5 4 GLY A 4 3.7804 1 1 0 0 0 324 +R 36 5 ARG A 5 6 CYS A 6 3.8229 1 1 1 1 1 405 +R 37 5 ARG A 5 7 GLU A 7 5.6256 1 0 0 0 0 0 +R 38 5 ARG A 5 8 LEU A 8 5.4514 1 1 0 0 0 5 +R 39 5 ARG A 5 9 ALA A 9 6.3068 1 1 1 1 1 121 +R 40 5 ARG A 5 29 VAL A 29 7.3410 1 0 0 0 0 0 +R 41 5 ARG A 5 38 PHE A 38 7.6636 1 1 1 1 1 111 +R 42 5 ARG A 5 122 ALA A 122 10.7979 1 1 1 1 1 21 +R 43 5 ARG A 5 123 TRP A 123 7.4230 1 1 1 1 1 312 +R 44 5 ARG A 5 124 ILE A 124 7.5648 1 0 0 0 0 0 +R 45 5 ARG A 5 125 ARG A 125 9.6347 1 1 1 1 1 211 +R 46 5 ARG A 5 126 GLY A 126 10.0418 0 1 0 0 0 13 +R 47 5 ARG A 5 127 CYS A 127 8.4264 1 1 0 0 0 21 +R 48 6 CYS A 6 4 GLY A 4 5.6551 1 1 0 0 0 2 +R 49 6 CYS A 6 5 ARG A 5 3.8229 1 1 0 0 0 442 +R 50 6 CYS A 6 7 GLU A 7 3.7935 1 1 1 0 0 369 +R 51 6 CYS A 6 8 LEU A 8 5.3320 1 0 0 0 0 0 +R 52 6 CYS A 6 9 ALA A 9 4.8870 1 0 0 0 0 0 +R 53 6 CYS A 6 10 ALA A 10 6.1316 1 1 1 1 1 131 +R 54 6 CYS A 6 126 GLY A 126 7.9731 0 1 0 0 0 12 +R 55 6 CYS A 6 127 CYS A 127 5.3179 1 1 1 1 1 264 +R 56 6 CYS A 6 128 ARG A 128 7.4354 0 1 0 0 0 14 +R 57 7 GLU A 7 1 LYS A 1 11.4807 1 1 1 1 1 207 +R 58 7 GLU A 7 2 VAL A 2 10.1090 0 1 0 0 0 7 +R 59 7 GLU A 7 3 PHE A 3 6.3959 1 1 1 1 1 30 +R 60 7 GLU A 7 4 GLY A 4 5.1677 1 1 1 1 1 139 +R 61 7 GLU A 7 5 ARG A 5 5.6256 1 0 0 0 0 0 +R 62 7 GLU A 7 6 CYS A 6 3.7935 1 1 1 0 0 363 +R 63 7 GLU A 7 8 LEU A 8 3.8230 1 1 1 1 1 347 +R 64 7 GLU A 7 9 ALA A 9 5.5273 1 0 0 0 0 0 +R 65 7 GLU A 7 10 ALA A 10 5.2583 1 1 1 1 1 28 +R 66 7 GLU A 7 11 ALA A 11 6.3196 1 1 1 1 1 119 +R 67 8 LEU A 8 3 PHE A 3 5.8772 1 1 1 1 1 64 +R 68 8 LEU A 8 4 GLY A 4 6.0824 1 1 1 0 0 63 +R 69 8 LEU A 8 5 ARG A 5 5.4514 1 1 0 0 0 5 +R 70 8 LEU A 8 6 CYS A 6 5.3320 1 0 0 0 0 0 +R 71 8 LEU A 8 7 GLU A 7 3.8230 1 1 0 0 0 356 +R 72 8 LEU A 8 9 ALA A 9 3.8041 1 1 1 1 1 355 +R 73 8 LEU A 8 10 ALA A 10 5.3454 1 0 0 0 0 0 +R 74 8 LEU A 8 11 ALA A 11 5.0036 1 0 0 0 0 0 +R 75 8 LEU A 8 12 MET A 12 6.0331 1 1 1 1 1 211 +R 76 8 LEU A 8 29 VAL A 29 7.2217 0 1 1 1 1 1 +R 77 8 LEU A 8 32 ALA A 32 8.9719 1 1 1 1 1 78 +R 78 8 LEU A 8 38 PHE A 38 7.9077 1 1 1 1 1 168 +R 79 8 LEU A 8 55 ILE A 55 10.0426 1 1 1 1 1 102 +R 80 8 LEU A 8 88 ILE A 88 9.1166 1 1 1 1 1 16 +R 81 9 ALA A 9 5 ARG A 5 6.3068 1 1 1 0 0 77 +R 82 9 ALA A 9 6 CYS A 6 4.8870 1 1 0 0 0 30 +R 83 9 ALA A 9 7 GLU A 7 5.5273 1 0 0 0 0 0 +R 84 9 ALA A 9 8 LEU A 8 3.8041 1 1 0 0 0 342 +R 85 9 ALA A 9 10 ALA A 10 3.8152 1 1 1 1 1 325 +R 86 9 ALA A 9 11 ALA A 11 5.5040 1 0 0 0 0 0 +R 87 9 ALA A 9 12 MET A 12 5.2438 1 0 0 0 0 0 +R 88 9 ALA A 9 13 LYS A 13 6.0508 1 1 1 1 1 177 +R 89 9 ALA A 9 25 LEU A 25 6.8785 1 1 0 0 0 1 +R 90 9 ALA A 9 29 VAL A 29 6.2031 1 1 1 1 1 103 +R 91 9 ALA A 9 124 ILE A 124 6.6308 1 1 1 1 1 91 +R 92 9 ALA A 9 129 LEU A 129 7.9700 1 1 1 1 1 31 +R 93 10 ALA A 10 6 CYS A 6 6.1316 1 1 1 0 0 71 +R 94 10 ALA A 10 7 GLU A 7 5.2583 1 1 1 0 0 35 +R 95 10 ALA A 10 8 LEU A 8 5.3454 1 0 0 0 0 0 +R 96 10 ALA A 10 9 ALA A 9 3.8152 1 1 0 0 0 348 +R 97 10 ALA A 10 11 ALA A 11 3.7870 1 1 1 1 1 363 +R 98 10 ALA A 10 12 MET A 12 5.5577 1 0 0 0 0 0 +R 99 10 ALA A 10 13 LYS A 13 5.0244 1 1 0 0 0 3 +R 100 10 ALA A 10 14 ARG A 14 6.0838 1 1 1 1 1 143 +R 101 10 ALA A 10 128 ARG A 128 7.8262 0 1 0 0 0 37 +R 102 10 ALA A 10 129 LEU A 129 6.1221 1 1 1 1 1 83 +R 103 11 ALA A 11 3 PHE A 3 9.8683 1 1 1 1 1 49 +R 104 11 ALA A 11 7 GLU A 7 6.3196 1 1 1 0 0 76 +R 105 11 ALA A 11 8 LEU A 8 5.0036 1 1 0 0 0 13 +R 106 11 ALA A 11 9 ALA A 9 5.5040 1 0 0 0 0 0 +R 107 11 ALA A 11 10 ALA A 10 3.7870 1 1 0 0 0 362 +R 108 11 ALA A 11 12 MET A 12 3.8044 1 1 1 1 1 329 +R 109 11 ALA A 11 13 LYS A 13 5.3126 1 0 0 0 0 0 +R 110 11 ALA A 11 14 ARG A 14 5.0202 1 1 0 0 0 41 +R 111 11 ALA A 11 15 HIS A 15 6.1372 1 1 1 1 1 196 +R 112 11 ALA A 11 88 ILE A 88 7.9512 1 1 1 1 1 91 +R 113 12 MET A 12 8 LEU A 8 6.0331 1 1 1 1 1 189 +R 114 12 MET A 12 9 ALA A 9 5.2438 1 1 0 0 0 12 +R 115 12 MET A 12 10 ALA A 10 5.5577 1 0 0 0 0 0 +R 116 12 MET A 12 11 ALA A 11 3.8044 1 1 0 0 0 337 +R 117 12 MET A 12 13 LYS A 13 3.8273 1 1 1 0 0 351 +R 118 12 MET A 12 14 ARG A 14 5.4173 1 0 0 0 0 0 +R 119 12 MET A 12 15 HIS A 15 4.8856 1 1 1 1 1 59 +R 120 12 MET A 12 16 GLY A 16 6.5249 1 1 1 1 1 1 +R 121 12 MET A 12 17 LEU A 17 5.4690 1 1 1 1 1 162 +R 122 12 MET A 12 25 LEU A 25 7.5662 1 1 1 1 1 34 +R 123 12 MET A 12 28 TRP A 28 7.8689 1 1 1 0 0 205 +R 124 12 MET A 12 29 VAL A 29 8.1611 1 1 0 0 0 12 +R 125 12 MET A 12 32 ALA A 32 10.4631 1 1 1 1 1 31 +R 126 12 MET A 12 55 ILE A 55 11.3010 0 1 1 1 1 3 +R 127 12 MET A 12 56 LEU A 56 11.5983 1 1 1 1 1 52 +R 128 12 MET A 12 88 ILE A 88 8.1191 1 1 1 1 1 26 +R 129 13 LYS A 13 9 ALA A 9 6.0508 1 1 1 0 0 63 +R 130 13 LYS A 13 10 ALA A 10 5.0244 1 1 0 0 0 13 +R 131 13 LYS A 13 11 ALA A 11 5.3126 1 0 0 0 0 0 +R 132 13 LYS A 13 12 MET A 12 3.8273 1 1 0 0 0 349 +R 133 13 LYS A 13 14 ARG A 14 3.7179 1 1 1 1 1 358 +R 134 13 LYS A 13 15 HIS A 15 5.2265 1 0 0 0 0 0 +R 135 13 LYS A 13 16 GLY A 16 5.3557 1 1 1 1 1 90 +R 136 13 LYS A 13 18 ASP A 18 5.3900 1 1 1 1 1 92 +R 137 13 LYS A 13 25 LEU A 25 6.9771 1 1 1 1 1 74 +R 138 13 LYS A 13 129 LEU A 129 8.0834 1 1 1 1 1 239 +R 139 14 ARG A 14 10 ALA A 10 6.0838 1 1 1 0 0 66 +R 140 14 ARG A 14 11 ALA A 11 5.0202 1 1 1 0 0 33 +R 141 14 ARG A 14 12 MET A 12 5.4173 1 0 0 0 0 0 +R 142 14 ARG A 14 13 LYS A 13 3.7179 1 1 1 0 0 374 +R 143 14 ARG A 14 15 HIS A 15 3.8028 1 1 1 0 0 484 +R 144 14 ARG A 14 16 GLY A 16 5.5733 1 1 1 1 1 16 +R 145 14 ARG A 14 89 THR A 89 10.0339 0 1 1 1 1 12 +R 146 15 HIS A 15 11 ALA A 11 6.1372 1 1 1 1 1 117 +R 147 15 HIS A 15 12 MET A 12 4.8856 1 1 0 0 0 6 +R 148 15 HIS A 15 13 LYS A 13 5.2265 1 0 0 0 0 0 +R 149 15 HIS A 15 14 ARG A 14 3.8028 1 1 1 0 0 524 +R 150 15 HIS A 15 16 GLY A 16 3.8284 1 1 1 1 1 263 +R 151 15 HIS A 15 17 LEU A 17 5.8003 1 0 0 0 0 0 +R 152 15 HIS A 15 87 ASP A 87 10.7991 0 1 0 0 0 1 +R 153 15 HIS A 15 88 ILE A 88 8.6713 1 1 1 1 1 53 +R 154 15 HIS A 15 89 THR A 89 7.1554 1 1 1 1 1 244 +R 155 15 HIS A 15 92 VAL A 92 7.1674 1 1 1 1 1 71 +R 156 15 HIS A 15 93 ASN A 93 8.5240 0 1 0 0 0 5 +R 157 15 HIS A 15 96 LYS A 96 10.3010 1 1 1 1 1 193 +R 158 16 GLY A 16 12 MET A 12 6.5249 1 0 0 0 0 0 +R 159 16 GLY A 16 13 LYS A 13 5.3557 1 1 1 1 1 44 +R 160 16 GLY A 16 14 ARG A 14 5.5733 1 1 1 1 1 14 +R 161 16 GLY A 16 15 HIS A 15 3.8284 1 1 0 0 0 379 +R 162 16 GLY A 16 17 LEU A 17 3.7882 1 1 1 1 1 340 +R 163 16 GLY A 16 18 ASP A 18 5.8126 1 1 1 0 0 32 +R 164 16 GLY A 16 20 TYR A 20 6.7265 1 1 0 0 0 130 +R 165 16 GLY A 16 96 LYS A 96 9.2491 1 1 0 0 0 24 +R 166 17 LEU A 17 12 MET A 12 5.4690 1 1 1 1 1 161 +R 167 17 LEU A 17 15 HIS A 15 5.8003 1 0 0 0 0 0 +R 168 17 LEU A 17 16 GLY A 16 3.7882 1 1 0 0 0 366 +R 169 17 LEU A 17 18 ASP A 18 3.8027 1 1 1 1 1 357 +R 170 17 LEU A 17 19 ASN A 19 6.0755 1 1 1 1 1 30 +R 171 17 LEU A 17 20 TYR A 20 4.9158 1 1 1 1 1 43 +R 172 17 LEU A 17 28 TRP A 28 7.4830 1 1 1 1 1 217 +R 173 17 LEU A 17 92 VAL A 92 7.6268 1 1 1 1 1 89 +R 174 17 LEU A 17 96 LYS A 96 7.9140 1 1 1 1 1 155 +R 175 18 ASP A 18 13 LYS A 13 5.3900 1 1 1 1 1 165 +R 176 18 ASP A 18 16 GLY A 16 5.8126 1 1 0 0 0 33 +R 177 18 ASP A 18 17 LEU A 17 3.8027 1 1 0 0 0 354 +R 178 18 ASP A 18 19 ASN A 19 3.7747 1 1 1 1 1 510 +R 179 18 ASP A 18 20 TYR A 20 5.3255 1 1 1 1 1 6 +R 180 18 ASP A 18 24 SER A 24 5.1287 1 1 0 0 0 12 +R 181 18 ASP A 18 25 LEU A 25 4.4020 1 1 1 1 1 244 +R 182 19 ASN A 19 17 LEU A 17 6.0755 1 0 0 0 0 0 +R 183 19 ASN A 19 18 ASP A 18 3.7747 1 1 1 1 1 498 +R 184 19 ASN A 19 20 TYR A 20 3.7437 1 1 1 1 1 326 +R 185 19 ASN A 19 21 ARG A 21 5.8645 1 1 1 1 1 9 +R 186 19 ASN A 19 22 GLY A 22 4.5249 1 1 1 1 1 129 +R 187 19 ASN A 19 23 TYR A 23 4.4795 1 1 1 1 1 73 +R 188 19 ASN A 19 24 SER A 24 4.2956 1 1 1 1 1 109 +R 189 20 TYR A 20 16 GLY A 16 6.7265 1 1 0 0 0 87 +R 190 20 TYR A 20 17 LEU A 17 4.9158 1 1 1 0 0 84 +R 191 20 TYR A 20 18 ASP A 18 5.3255 1 1 0 0 0 9 +R 192 20 TYR A 20 19 ASN A 19 3.7437 1 1 0 0 0 347 +R 193 20 TYR A 20 21 ARG A 21 3.8205 1 1 1 1 1 506 +R 194 20 TYR A 20 22 GLY A 22 5.3254 1 1 1 1 1 3 +R 195 20 TYR A 20 23 TYR A 23 5.5795 1 1 1 1 1 68 +R 196 20 TYR A 20 96 LYS A 96 7.7283 1 1 1 0 0 186 +R 197 20 TYR A 20 97 LYS A 97 10.9092 0 1 1 1 1 2 +R 198 20 TYR A 20 99 VAL A 99 8.7657 1 1 1 1 1 64 +R 199 20 TYR A 20 100 SER A 100 9.2326 1 1 1 1 1 87 +R 200 21 ARG A 21 19 ASN A 19 5.8645 1 1 1 1 1 10 +R 201 21 ARG A 21 20 TYR A 20 3.8205 1 1 1 1 1 461 +R 202 21 ARG A 21 22 GLY A 22 3.7772 1 1 1 1 1 344 +R 203 21 ARG A 21 23 TYR A 23 5.6467 1 1 1 0 0 110 +R 204 21 ARG A 21 99 VAL A 99 7.5366 1 1 1 1 1 39 +R 205 21 ARG A 21 100 SER A 100 7.2028 1 1 1 1 1 220 +R 206 22 GLY A 22 19 ASN A 19 4.5249 1 1 1 1 1 85 +R 207 22 GLY A 22 20 TYR A 20 5.3254 1 0 0 0 0 0 +R 208 22 GLY A 22 21 ARG A 21 3.7772 1 1 0 0 0 385 +R 209 22 GLY A 22 23 TYR A 23 3.8541 1 1 1 1 1 337 +R 210 22 GLY A 22 24 SER A 24 6.3302 1 1 1 1 1 31 +R 211 22 GLY A 22 27 ASN A 27 10.0766 0 1 1 1 1 5 +R 212 23 TYR A 23 19 ASN A 19 4.4795 1 1 1 1 1 110 +R 213 23 TYR A 23 20 TYR A 20 5.5795 1 1 0 0 0 29 +R 214 23 TYR A 23 21 ARG A 21 5.6467 1 1 1 0 0 126 +R 215 23 TYR A 23 22 GLY A 22 3.8541 1 1 0 0 0 365 +R 216 23 TYR A 23 24 SER A 24 3.8095 1 1 1 1 1 358 +R 217 23 TYR A 23 25 LEU A 25 6.6706 1 0 0 0 0 0 +R 218 23 TYR A 23 27 ASN A 27 6.2528 1 1 0 0 0 10 +R 219 23 TYR A 23 28 TRP A 28 7.5595 1 1 1 0 0 94 +R 220 23 TYR A 23 99 VAL A 99 9.4052 1 1 1 1 1 96 +R 221 23 TYR A 23 103 ASN A 103 12.4992 0 1 1 1 1 16 +R 222 23 TYR A 23 104 GLY A 104 8.8920 1 1 0 0 0 47 +R 223 23 TYR A 23 105 MET A 105 8.1535 1 1 1 1 1 217 +R 224 23 TYR A 23 106 ASN A 106 11.3626 0 1 1 1 1 16 +R 225 23 TYR A 23 111 TRP A 111 11.4919 1 1 1 1 1 94 +R 226 24 SER A 24 18 ASP A 18 5.1287 1 1 0 0 0 35 +R 227 24 SER A 24 19 ASN A 19 4.2956 1 1 0 0 0 57 +R 228 24 SER A 24 22 GLY A 22 6.3302 1 1 1 1 1 14 +R 229 24 SER A 24 23 TYR A 23 3.8095 1 1 0 0 0 366 +R 230 24 SER A 24 25 LEU A 25 3.8490 1 1 1 1 1 309 +R 231 24 SER A 24 26 GLY A 26 5.5205 1 1 1 1 1 37 +R 232 24 SER A 24 27 ASN A 27 5.6877 1 1 1 1 1 265 +R 233 24 SER A 24 28 TRP A 28 7.2581 1 1 0 0 0 1 +R 234 24 SER A 24 120 VAL A 120 8.3132 1 1 0 0 0 53 +R 235 24 SER A 24 121 GLN A 121 8.0270 0 1 0 0 0 47 +R 236 25 LEU A 25 9 ALA A 9 6.8785 1 1 0 0 0 75 +R 237 25 LEU A 25 12 MET A 12 7.5662 1 1 1 1 1 156 +R 238 25 LEU A 25 13 LYS A 13 6.9771 1 1 1 1 1 80 +R 239 25 LEU A 25 18 ASP A 18 4.4020 1 1 1 0 0 86 +R 240 25 LEU A 25 23 TYR A 23 6.6706 1 1 1 1 1 3 +R 241 25 LEU A 25 24 SER A 24 3.8490 1 1 0 0 0 326 +R 242 25 LEU A 25 26 GLY A 26 3.8034 1 1 1 1 1 356 +R 243 25 LEU A 25 27 ASN A 27 5.4198 1 0 0 0 0 0 +R 244 25 LEU A 25 28 TRP A 28 5.3994 1 1 1 1 1 86 +R 245 25 LEU A 25 29 VAL A 29 6.4093 1 1 1 1 1 54 +R 246 25 LEU A 25 124 ILE A 124 7.3355 1 1 1 1 1 57 +R 247 25 LEU A 25 129 LEU A 129 10.5318 1 1 1 1 1 126 +R 248 26 GLY A 26 24 SER A 24 5.5205 1 1 1 1 1 16 +R 249 26 GLY A 26 25 LEU A 25 3.8034 1 1 0 0 0 364 +R 250 26 GLY A 26 27 ASN A 27 3.8470 1 1 1 1 1 323 +R 251 26 GLY A 26 28 TRP A 28 5.5151 1 0 0 0 0 0 +R 252 26 GLY A 26 29 VAL A 29 5.1152 1 0 0 0 0 0 +R 253 26 GLY A 26 30 CYS A 30 5.9025 1 1 1 1 1 175 +R 254 26 GLY A 26 120 VAL A 120 4.8514 1 1 0 0 0 120 +R 255 26 GLY A 26 123 TRP A 123 5.1305 1 0 0 0 0 0 +R 256 26 GLY A 26 124 ILE A 124 5.7057 1 1 0 0 0 65 +R 257 27 ASN A 27 22 GLY A 22 10.0766 0 1 1 1 1 5 +R 258 27 ASN A 27 23 TYR A 23 6.2528 1 1 0 0 0 33 +R 259 27 ASN A 27 24 SER A 24 5.6877 1 1 1 1 1 219 +R 260 27 ASN A 27 25 LEU A 25 5.4198 1 0 0 0 0 0 +R 261 27 ASN A 27 26 GLY A 26 3.8470 1 1 0 0 0 351 +R 262 27 ASN A 27 28 TRP A 28 3.7858 1 1 1 1 1 333 +R 263 27 ASN A 27 29 VAL A 29 5.5161 1 0 0 0 0 0 +R 264 27 ASN A 27 30 CYS A 30 5.1016 1 0 0 0 0 0 +R 265 27 ASN A 27 31 ALA A 31 6.0825 1 1 1 1 1 171 +R 266 27 ASN A 27 105 MET A 105 8.5492 1 1 0 0 0 46 +R 267 27 ASN A 27 111 TRP A 111 7.6026 1 1 1 1 1 192 +R 268 27 ASN A 27 116 LYS A 116 7.7579 0 1 0 0 0 1 +R 269 27 ASN A 27 120 VAL A 120 5.7252 1 1 0 0 0 87 +R 270 28 TRP A 28 12 MET A 12 7.8689 1 1 0 0 0 95 +R 271 28 TRP A 28 17 LEU A 17 7.4830 1 1 1 1 1 218 +R 272 28 TRP A 28 20 TYR A 20 9.5686 0 1 0 0 0 7 +R 273 28 TRP A 28 23 TYR A 23 7.5595 1 1 1 1 1 60 +R 274 28 TRP A 28 24 SER A 24 7.2581 1 1 0 0 0 49 +R 275 28 TRP A 28 25 LEU A 25 5.3994 1 1 0 0 0 19 +R 276 28 TRP A 28 26 GLY A 26 5.5151 1 0 0 0 0 0 +R 277 28 TRP A 28 27 ASN A 27 3.7858 1 1 0 0 0 345 +R 278 28 TRP A 28 29 VAL A 29 3.8333 1 1 1 1 1 334 +R 279 28 TRP A 28 30 CYS A 30 5.4753 1 0 0 0 0 0 +R 280 28 TRP A 28 31 ALA A 31 5.1386 1 1 0 0 0 1 +R 281 28 TRP A 28 32 ALA A 32 6.2956 1 1 1 1 1 132 +R 282 28 TRP A 28 56 LEU A 56 8.7724 0 1 1 1 1 25 +R 283 28 TRP A 28 95 ALA A 95 9.8227 1 1 1 1 1 35 +R 284 28 TRP A 28 99 VAL A 99 10.7709 1 1 1 1 1 240 +R 285 28 TRP A 28 105 MET A 105 8.7636 1 1 1 1 1 21 +R 286 28 TRP A 28 108 TRP A 108 10.2074 1 1 1 1 1 113 +R 287 29 VAL A 29 5 ARG A 5 7.3410 1 1 1 1 1 12 +R 288 29 VAL A 29 9 ALA A 9 6.2031 1 1 1 1 1 175 +R 289 29 VAL A 29 12 MET A 12 8.1611 1 1 0 0 0 34 +R 290 29 VAL A 29 25 LEU A 25 6.4093 1 1 0 0 0 65 +R 291 29 VAL A 29 26 GLY A 26 5.1152 1 1 0 0 0 10 +R 292 29 VAL A 29 27 ASN A 27 5.5161 1 0 0 0 0 0 +R 293 29 VAL A 29 28 TRP A 28 3.8333 1 1 0 0 0 358 +R 294 29 VAL A 29 30 CYS A 30 3.7941 1 1 1 1 1 357 +R 295 29 VAL A 29 31 ALA A 31 5.3991 1 0 0 0 0 0 +R 296 29 VAL A 29 32 ALA A 32 5.1300 1 1 0 0 0 3 +R 297 29 VAL A 29 33 LYS A 33 6.2055 1 1 1 1 1 115 +R 298 29 VAL A 29 38 PHE A 38 8.4877 1 1 1 1 1 98 +R 299 29 VAL A 29 123 TRP A 123 6.3580 1 1 1 1 1 107 +R 300 29 VAL A 29 124 ILE A 124 7.6402 1 1 1 1 1 1 +R 301 30 CYS A 30 26 GLY A 26 5.9025 1 1 1 0 0 79 +R 302 30 CYS A 30 27 ASN A 27 5.1016 1 1 0 0 0 6 +R 303 30 CYS A 30 28 TRP A 28 5.4753 1 0 0 0 0 0 +R 304 30 CYS A 30 29 VAL A 29 3.7941 1 1 0 0 0 343 +R 305 30 CYS A 30 31 ALA A 31 3.7849 1 1 1 1 1 355 +R 306 30 CYS A 30 32 ALA A 32 5.5042 1 0 0 0 0 0 +R 307 30 CYS A 30 33 LYS A 33 5.1917 1 0 0 0 0 0 +R 308 30 CYS A 30 34 PHE A 34 6.3992 1 1 1 1 1 170 +R 309 30 CYS A 30 115 CYS A 115 6.0621 1 1 1 1 1 238 +R 310 30 CYS A 30 120 VAL A 120 6.6406 1 0 0 0 0 0 +R 311 30 CYS A 30 123 TRP A 123 6.2969 1 1 1 1 1 144 +R 312 31 ALA A 31 27 ASN A 27 6.0825 1 1 1 0 0 76 +R 313 31 ALA A 31 28 TRP A 28 5.1386 1 1 0 0 0 10 +R 314 31 ALA A 31 29 VAL A 29 5.3991 1 0 0 0 0 0 +R 315 31 ALA A 31 30 CYS A 30 3.7849 1 1 0 0 0 359 +R 316 31 ALA A 31 32 ALA A 32 3.8582 1 1 1 1 1 328 +R 317 31 ALA A 31 33 LYS A 33 5.4805 1 0 0 0 0 0 +R 318 31 ALA A 31 34 PHE A 34 5.3387 1 0 0 0 0 0 +R 319 31 ALA A 31 35 GLU A 35 5.8673 1 1 1 1 1 185 +R 320 31 ALA A 31 56 LEU A 56 7.1209 1 1 1 1 1 34 +R 321 31 ALA A 31 105 MET A 105 8.7729 1 1 1 1 1 112 +R 322 31 ALA A 31 111 TRP A 111 4.9166 1 1 1 1 1 56 +R 323 31 ALA A 31 115 CYS A 115 6.6938 1 1 0 0 0 26 +R 324 32 ALA A 32 8 LEU A 8 8.9719 1 1 1 1 1 134 +R 325 32 ALA A 32 12 MET A 12 10.4631 1 1 1 1 1 13 +R 326 32 ALA A 32 28 TRP A 28 6.2956 1 1 1 0 0 72 +R 327 32 ALA A 32 29 VAL A 29 5.1300 1 0 0 0 0 0 +R 328 32 ALA A 32 30 CYS A 30 5.5042 1 0 0 0 0 0 +R 329 32 ALA A 32 31 ALA A 31 3.8582 1 1 0 0 0 344 +R 330 32 ALA A 32 33 LYS A 33 3.7869 1 1 1 1 1 369 +R 331 32 ALA A 32 34 PHE A 34 5.4712 1 0 0 0 0 0 +R 332 32 ALA A 32 35 GLU A 35 5.0728 1 0 0 0 0 0 +R 333 32 ALA A 32 36 SER A 36 5.7631 1 1 1 1 1 146 +R 334 32 ALA A 32 37 ASN A 37 6.3799 1 0 0 0 0 0 +R 335 32 ALA A 32 38 PHE A 38 5.5773 1 0 0 0 0 0 +R 336 32 ALA A 32 55 ILE A 55 5.5963 1 1 1 0 0 95 +R 337 32 ALA A 32 56 LEU A 56 5.4440 1 1 0 0 0 1 +R 338 33 LYS A 33 29 VAL A 29 6.2055 1 1 1 0 0 53 +R 339 33 LYS A 33 30 CYS A 30 5.1917 1 1 0 0 0 38 +R 340 33 LYS A 33 31 ALA A 31 5.4805 1 0 0 0 0 0 +R 341 33 LYS A 33 32 ALA A 32 3.7869 1 1 0 0 0 351 +R 342 33 LYS A 33 34 PHE A 34 3.7560 1 1 1 1 1 393 +R 343 33 LYS A 33 35 GLU A 35 5.7170 1 0 0 0 0 0 +R 344 33 LYS A 33 37 ASN A 37 4.3141 1 1 1 1 1 307 +R 345 33 LYS A 33 38 PHE A 38 5.2101 1 1 1 1 1 126 +R 346 33 LYS A 33 123 TRP A 123 9.2780 1 1 1 1 1 121 +R 347 34 PHE A 34 30 CYS A 30 6.3992 1 1 1 0 0 103 +R 348 34 PHE A 34 31 ALA A 31 5.3387 1 0 0 0 0 0 +R 349 34 PHE A 34 32 ALA A 32 5.4712 1 0 0 0 0 0 +R 350 34 PHE A 34 33 LYS A 33 3.7560 1 1 1 1 1 445 +R 351 34 PHE A 34 35 GLU A 35 3.8162 1 1 1 0 0 355 +R 352 34 PHE A 34 36 SER A 36 5.8515 1 0 0 0 0 0 +R 353 34 PHE A 34 37 ASN A 37 5.6664 0 1 1 1 1 4 +R 354 34 PHE A 34 110 ALA A 110 5.8542 1 1 1 1 1 120 +R 355 34 PHE A 34 114 ARG A 114 7.4511 1 1 1 0 0 291 +R 356 34 PHE A 34 115 CYS A 115 8.4896 1 0 0 0 0 0 +R 357 34 PHE A 34 123 TRP A 123 11.6342 1 1 1 1 1 156 +R 358 35 GLU A 35 31 ALA A 31 5.8673 1 1 1 0 0 95 +R 359 35 GLU A 35 32 ALA A 32 5.0728 1 0 0 0 0 0 +R 360 35 GLU A 35 33 LYS A 33 5.7170 1 0 0 0 0 0 +R 361 35 GLU A 35 34 PHE A 34 3.8162 1 1 0 0 0 384 +R 362 35 GLU A 35 36 SER A 36 3.7973 1 1 1 0 0 326 +R 363 35 GLU A 35 37 ASN A 37 6.1632 1 0 0 0 0 0 +R 364 35 GLU A 35 44 ASN A 44 9.8723 0 1 1 1 1 31 +R 365 35 GLU A 35 55 ILE A 55 6.7296 1 1 0 0 0 54 +R 366 35 GLU A 35 56 LEU A 56 5.8960 1 0 0 0 0 0 +R 367 35 GLU A 35 57 GLN A 57 6.0016 1 1 1 0 0 219 +R 368 35 GLU A 35 108 TRP A 108 8.1006 1 1 1 0 0 162 +R 369 35 GLU A 35 109 VAL A 109 8.4267 0 1 1 0 0 49 +R 370 35 GLU A 35 110 ALA A 110 6.0785 1 1 1 1 1 176 +R 371 36 SER A 36 32 ALA A 32 5.7631 1 1 1 1 1 38 +R 372 36 SER A 36 34 PHE A 34 5.8515 1 0 0 0 0 0 +R 373 36 SER A 36 35 GLU A 35 3.7973 1 1 0 0 0 362 +R 374 36 SER A 36 37 ASN A 37 3.8326 1 1 1 0 0 382 +R 375 36 SER A 36 38 PHE A 38 5.1834 1 1 1 1 1 48 +R 376 36 SER A 36 39 ASN A 39 5.4539 1 1 1 1 1 162 +R 377 36 SER A 36 42 ALA A 42 5.5964 1 1 0 0 0 33 +R 378 36 SER A 36 44 ASN A 44 9.2935 0 1 0 0 0 1 +R 379 36 SER A 36 54 GLY A 54 6.7929 1 1 0 0 0 40 +R 380 36 SER A 36 55 ILE A 55 5.1236 1 1 1 1 1 149 +R 381 36 SER A 36 57 GLN A 57 6.6652 1 0 0 0 0 0 +R 382 37 ASN A 37 2 VAL A 2 7.9443 0 1 0 0 0 59 +R 383 37 ASN A 37 32 ALA A 32 6.3799 1 0 0 0 0 0 +R 384 37 ASN A 37 33 LYS A 33 4.3141 1 1 1 1 1 288 +R 385 37 ASN A 37 34 PHE A 34 5.6664 0 1 0 0 0 1 +R 386 37 ASN A 37 35 GLU A 35 6.1632 1 1 0 0 0 1 +R 387 37 ASN A 37 36 SER A 36 3.8326 1 1 0 0 0 379 +R 388 37 ASN A 37 38 PHE A 38 3.8358 1 1 1 0 0 388 +R 389 37 ASN A 37 39 ASN A 39 5.4975 1 1 1 1 1 18 +R 390 38 PHE A 38 1 LYS A 1 8.1596 1 1 0 0 0 12 +R 391 38 PHE A 38 2 VAL A 2 5.5799 1 1 1 1 1 1 +R 392 38 PHE A 38 3 PHE A 3 5.3547 1 1 1 0 0 210 +R 393 38 PHE A 38 5 ARG A 5 7.6636 1 1 1 1 1 94 +R 394 38 PHE A 38 8 LEU A 8 7.9077 1 1 1 1 1 78 +R 395 38 PHE A 38 29 VAL A 29 8.4877 1 1 1 1 1 117 +R 396 38 PHE A 38 32 ALA A 32 5.5773 1 0 0 0 0 0 +R 397 38 PHE A 38 33 LYS A 33 5.2101 1 1 1 1 1 242 +R 398 38 PHE A 38 36 SER A 36 5.1834 1 1 1 1 1 38 +R 399 38 PHE A 38 37 ASN A 37 3.8358 1 1 0 0 0 379 +R 400 38 PHE A 38 39 ASN A 39 3.8122 1 1 1 1 1 317 +R 401 38 PHE A 38 40 THR A 40 6.4024 1 0 0 0 0 0 +R 402 38 PHE A 38 55 ILE A 55 5.7406 1 1 0 0 0 31 +R 403 39 ASN A 39 1 LYS A 1 5.7421 1 1 0 0 0 40 +R 404 39 ASN A 39 2 VAL A 2 4.2809 1 1 1 0 0 96 +R 405 39 ASN A 39 36 SER A 36 5.4539 1 1 1 0 0 115 +R 406 39 ASN A 39 37 ASN A 37 5.4975 1 1 1 0 0 11 +R 407 39 ASN A 39 38 PHE A 38 3.8122 1 1 0 0 0 363 +R 408 39 ASN A 39 40 THR A 40 3.8635 1 1 1 1 1 366 +R 409 39 ASN A 39 41 GLN A 41 5.4299 1 1 1 1 1 147 +R 410 39 ASN A 39 42 ALA A 42 5.7128 1 1 1 0 0 110 +R 411 39 ASN A 39 55 ILE A 55 5.6995 1 0 0 0 0 0 +R 412 40 THR A 40 1 LYS A 1 5.4657 1 1 1 1 1 157 +R 413 40 THR A 40 3 PHE A 3 7.9444 1 1 1 1 1 154 +R 414 40 THR A 40 38 PHE A 38 6.4024 1 0 0 0 0 0 +R 415 40 THR A 40 39 ASN A 39 3.8635 1 1 0 0 0 339 +R 416 40 THR A 40 41 GLN A 41 3.8464 1 1 1 1 1 306 +R 417 40 THR A 40 42 ALA A 42 5.7069 1 0 0 0 0 0 +R 418 40 THR A 40 54 GLY A 54 4.5843 1 1 0 0 0 16 +R 419 40 THR A 40 55 ILE A 55 4.5521 1 1 1 1 1 54 +R 420 40 THR A 40 84 LEU A 84 5.0346 1 1 1 1 1 184 +R 421 40 THR A 40 85 SER A 85 6.2303 1 1 1 0 0 109 +R 422 40 THR A 40 86 SER A 86 6.2290 1 1 0 0 0 2 +R 423 40 THR A 40 88 ILE A 88 7.7607 1 1 1 1 1 13 +R 424 41 GLN A 41 1 LYS A 1 6.8324 1 1 0 0 0 76 +R 425 41 GLN A 41 39 ASN A 39 5.4299 1 1 1 0 0 58 +R 426 41 GLN A 41 40 THR A 40 3.8464 1 1 0 0 0 409 +R 427 41 GLN A 41 42 ALA A 42 3.8155 1 1 1 1 1 356 +R 428 41 GLN A 41 43 THR A 43 6.5152 1 1 1 0 0 80 +R 429 41 GLN A 41 84 LEU A 84 4.8606 1 1 1 0 0 95 +R 430 42 ALA A 42 36 SER A 36 5.5964 1 1 0 0 0 94 +R 431 42 ALA A 42 39 ASN A 39 5.7128 1 1 1 0 0 103 +R 432 42 ALA A 42 40 THR A 40 5.7069 1 0 0 0 0 0 +R 433 42 ALA A 42 41 GLN A 41 3.8155 1 1 0 0 0 359 +R 434 42 ALA A 42 43 THR A 43 3.8859 1 1 1 1 1 326 +R 435 42 ALA A 42 44 ASN A 44 6.8831 0 1 0 0 0 17 +R 436 42 ALA A 42 53 TYR A 53 6.0588 1 0 0 0 0 0 +R 437 42 ALA A 42 54 GLY A 54 5.0278 1 1 1 1 1 192 +R 438 42 ALA A 42 57 GLN A 57 7.3752 1 1 1 0 0 69 +R 439 42 ALA A 42 84 LEU A 84 7.3563 1 0 0 0 0 0 +R 440 43 THR A 43 41 GLN A 41 6.5152 1 1 1 0 0 55 +R 441 43 THR A 43 42 ALA A 42 3.8859 1 1 0 0 0 391 +R 442 43 THR A 43 44 ASN A 44 3.7688 1 1 1 1 1 431 +R 443 43 THR A 43 51 THR A 51 6.7249 1 1 0 0 0 34 +R 444 43 THR A 43 52 ASP A 52 5.4799 1 1 0 0 0 18 +R 445 43 THR A 43 53 TYR A 53 4.7167 1 1 1 1 1 138 +R 446 43 THR A 43 57 GLN A 57 7.1223 1 0 0 0 0 0 +R 447 43 THR A 43 84 LEU A 84 8.5599 1 1 1 1 1 36 +R 448 44 ASN A 44 35 GLU A 35 9.8723 0 1 1 1 1 45 +R 449 44 ASN A 44 42 ALA A 42 6.8831 0 1 0 0 0 12 +R 450 44 ASN A 44 43 THR A 43 3.7688 1 1 1 0 0 451 +R 451 44 ASN A 44 45 ARG A 45 3.7166 1 1 1 0 0 387 +R 452 44 ASN A 44 46 ASN A 46 6.5794 0 1 0 0 0 6 +R 453 44 ASN A 44 51 THR A 51 5.5411 1 0 0 0 0 0 +R 454 44 ASN A 44 52 ASP A 52 5.2528 1 1 1 1 1 156 +R 455 44 ASN A 44 57 GLN A 57 7.9104 1 1 1 1 1 172 +R 456 45 ARG A 45 44 ASN A 44 3.7166 1 1 1 0 0 381 +R 457 45 ARG A 45 46 ASN A 46 3.7641 1 1 1 0 0 425 +R 458 45 ARG A 45 47 THR A 47 6.9141 0 1 1 1 1 4 +R 459 45 ARG A 45 49 GLY A 49 6.6305 1 1 1 1 1 60 +R 460 45 ARG A 45 50 SER A 50 6.1524 1 1 0 0 0 71 +R 461 45 ARG A 45 51 THR A 51 4.1733 1 1 0 0 0 23 +R 462 45 ARG A 45 68 ARG A 68 11.3353 1 1 0 0 0 229 +R 463 46 ASN A 46 44 ASN A 44 6.5794 0 1 1 0 0 12 +R 464 46 ASN A 46 45 ARG A 45 3.7641 1 1 1 0 0 445 +R 465 46 ASN A 46 47 THR A 47 3.7875 1 1 1 0 0 376 +R 466 46 ASN A 46 48 ASP A 48 5.4237 1 1 0 0 0 57 +R 467 46 ASN A 46 49 GLY A 49 5.3347 1 1 1 1 1 87 +R 468 46 ASN A 46 50 SER A 50 5.3628 1 1 1 1 1 51 +R 469 46 ASN A 46 51 THR A 51 5.5953 1 0 0 0 0 0 +R 470 46 ASN A 46 52 ASP A 52 7.6137 1 1 1 1 1 130 +R 471 46 ASN A 46 59 ASN A 59 9.1269 1 1 1 1 1 188 +R 472 47 THR A 47 46 ASN A 46 3.7875 1 1 1 0 0 361 +R 473 47 THR A 47 48 ASP A 48 3.7632 1 1 1 1 1 353 +R 474 47 THR A 47 49 GLY A 49 5.2181 1 1 1 1 1 47 +R 475 48 ASP A 48 46 ASN A 46 5.4237 1 1 0 0 0 25 +R 476 48 ASP A 48 47 THR A 47 3.7632 1 1 0 0 0 389 +R 477 48 ASP A 48 49 GLY A 49 3.7979 1 1 1 1 1 317 +R 478 48 ASP A 48 50 SER A 50 5.5073 1 1 1 1 1 235 +R 479 48 ASP A 48 59 ASN A 59 10.9299 0 1 1 0 0 6 +R 480 48 ASP A 48 61 ARG A 61 8.7820 1 1 1 1 1 237 +R 481 48 ASP A 48 69 THR A 69 8.8838 0 1 0 0 0 1 +R 482 49 GLY A 49 45 ARG A 45 6.6305 1 1 0 0 0 89 +R 483 49 GLY A 49 46 ASN A 46 5.3347 1 1 1 1 1 57 +R 484 49 GLY A 49 47 THR A 47 5.2181 1 1 0 0 0 17 +R 485 49 GLY A 49 48 ASP A 48 3.7979 1 1 0 0 0 387 +R 486 49 GLY A 49 50 SER A 50 3.7017 1 1 1 1 1 349 +R 487 49 GLY A 49 51 THR A 51 6.5946 0 1 1 1 1 2 +R 488 49 GLY A 49 68 ARG A 68 8.1773 0 1 0 0 0 53 +R 489 49 GLY A 49 69 THR A 69 6.4717 0 1 1 1 1 70 +R 490 49 GLY A 49 70 PRO A 70 8.6350 0 1 0 0 0 6 +R 491 50 SER A 50 45 ARG A 45 6.1524 1 0 0 0 0 0 +R 492 50 SER A 50 46 ASN A 46 5.3628 1 1 1 1 1 179 +R 493 50 SER A 50 48 ASP A 48 5.5073 1 1 1 1 1 116 +R 494 50 SER A 50 49 GLY A 49 3.7017 1 1 0 0 0 393 +R 495 50 SER A 50 51 THR A 51 3.9416 1 1 1 1 1 307 +R 496 50 SER A 50 59 ASN A 59 6.7524 1 1 1 1 1 162 +R 497 50 SER A 50 60 SER A 60 5.4691 1 1 0 0 0 67 +R 498 50 SER A 50 61 ARG A 61 5.5177 1 1 0 0 0 6 +R 499 50 SER A 50 69 THR A 69 5.5332 1 1 0 0 0 50 +R 500 51 THR A 51 43 THR A 43 6.7249 1 1 0 0 0 19 +R 501 51 THR A 51 44 ASN A 44 5.5411 1 1 0 0 0 88 +R 502 51 THR A 51 45 ARG A 45 4.1733 1 1 0 0 0 2 +R 503 51 THR A 51 46 ASN A 46 5.5953 1 0 0 0 0 0 +R 504 51 THR A 51 50 SER A 50 3.9416 1 1 1 1 1 379 +R 505 51 THR A 51 52 ASP A 52 3.8949 1 1 1 0 0 355 +R 506 51 THR A 51 53 TYR A 53 6.5005 1 1 1 1 1 146 +R 507 51 THR A 51 59 ASN A 59 5.7402 1 0 0 0 0 0 +R 508 51 THR A 51 60 SER A 60 5.4996 1 1 1 1 1 168 +R 509 51 THR A 51 66 ASP A 66 8.3256 1 0 0 0 0 0 +R 510 51 THR A 51 68 ARG A 68 9.1481 1 1 1 1 1 157 +R 511 52 ASP A 52 43 THR A 43 5.4799 1 1 0 0 0 12 +R 512 52 ASP A 52 44 ASN A 44 5.2528 1 1 1 1 1 126 +R 513 52 ASP A 52 46 ASN A 46 7.6137 1 1 1 1 1 134 +R 514 52 ASP A 52 51 THR A 51 3.8949 1 1 0 0 0 337 +R 515 52 ASP A 52 53 TYR A 53 3.7885 1 1 1 1 1 345 +R 516 52 ASP A 52 57 GLN A 57 4.5222 1 1 0 0 0 164 +R 517 52 ASP A 52 58 ILE A 58 4.9171 1 1 0 0 0 5 +R 518 52 ASP A 52 59 ASN A 59 4.3832 1 1 1 1 1 202 +R 519 53 TYR A 53 42 ALA A 42 6.0588 1 1 0 0 0 1 +R 520 53 TYR A 53 43 THR A 43 4.7167 1 1 1 1 1 111 +R 521 53 TYR A 53 51 THR A 51 6.5005 1 1 1 0 0 172 +R 522 53 TYR A 53 52 ASP A 52 3.7885 1 1 0 0 0 354 +R 523 53 TYR A 53 54 GLY A 54 3.8089 1 1 1 1 1 350 +R 524 53 TYR A 53 57 GLN A 57 4.4524 1 1 1 1 1 4 +R 525 53 TYR A 53 58 ILE A 58 5.1266 1 1 1 1 1 153 +R 526 53 TYR A 53 60 SER A 60 7.7842 1 0 0 0 0 0 +R 527 53 TYR A 53 64 CYS A 64 9.1195 1 0 0 0 0 0 +R 528 53 TYR A 53 66 ASP A 66 9.7084 1 1 1 1 1 176 +R 529 53 TYR A 53 68 ARG A 68 13.3743 0 1 1 1 1 30 +R 530 53 TYR A 53 80 CYS A 80 6.5643 1 1 1 1 1 211 +R 531 53 TYR A 53 81 SER A 81 7.5160 0 1 0 0 0 10 +R 532 53 TYR A 53 83 LEU A 83 6.1854 1 1 1 0 0 11 +R 533 53 TYR A 53 84 LEU A 84 6.6054 1 1 1 1 1 22 +R 534 54 GLY A 54 36 SER A 36 6.7929 1 1 0 0 0 9 +R 535 54 GLY A 54 39 ASN A 39 7.0228 0 1 0 0 0 5 +R 536 54 GLY A 54 40 THR A 40 4.5843 1 1 0 0 0 102 +R 537 54 GLY A 54 42 ALA A 42 5.0278 1 1 1 1 1 51 +R 538 54 GLY A 54 53 TYR A 53 3.8089 1 1 0 0 0 353 +R 539 54 GLY A 54 55 ILE A 55 3.7039 1 1 1 1 1 356 +R 540 54 GLY A 54 56 LEU A 56 5.3851 1 1 0 0 0 1 +R 541 54 GLY A 54 57 GLN A 57 4.9429 1 1 1 1 1 146 +R 542 54 GLY A 54 83 LEU A 83 5.3232 1 1 0 0 0 41 +R 543 54 GLY A 54 84 LEU A 84 4.8428 1 1 0 0 0 4 +R 544 55 ILE A 55 3 PHE A 3 9.3473 1 1 1 1 1 98 +R 545 55 ILE A 55 8 LEU A 8 10.0426 1 1 1 1 1 62 +R 546 55 ILE A 55 12 MET A 12 11.3010 0 1 1 1 1 2 +R 547 55 ILE A 55 32 ALA A 32 5.5963 1 1 1 1 1 91 +R 548 55 ILE A 55 35 GLU A 35 6.7296 1 1 0 0 0 1 +R 549 55 ILE A 55 36 SER A 36 5.1236 1 1 1 1 1 166 +R 550 55 ILE A 55 38 PHE A 38 5.7406 1 1 0 0 0 112 +R 551 55 ILE A 55 39 ASN A 39 5.6995 1 1 1 1 1 2 +R 552 55 ILE A 55 40 THR A 40 4.5521 1 1 1 1 1 24 +R 553 55 ILE A 55 54 GLY A 54 3.7039 1 1 0 0 0 341 +R 554 55 ILE A 55 56 LEU A 56 3.7519 1 1 1 1 1 367 +R 555 55 ILE A 55 57 GLN A 57 5.6235 1 0 0 0 0 0 +R 556 55 ILE A 55 88 ILE A 88 8.0660 1 1 1 1 1 37 +R 557 55 ILE A 55 91 SER A 91 7.4339 1 1 0 0 0 118 +R 558 56 LEU A 56 12 MET A 12 11.5983 1 1 1 1 1 79 +R 559 56 LEU A 56 28 TRP A 28 8.7724 0 1 1 0 0 19 +R 560 56 LEU A 56 31 ALA A 31 7.1209 1 1 1 1 1 70 +R 561 56 LEU A 56 32 ALA A 32 5.4440 1 1 1 0 0 114 +R 562 56 LEU A 56 35 GLU A 35 5.8960 1 1 0 0 0 1 +R 563 56 LEU A 56 54 GLY A 54 5.3851 1 1 0 0 0 3 +R 564 56 LEU A 56 55 ILE A 55 3.7519 1 1 1 0 0 429 +R 565 56 LEU A 56 57 GLN A 57 3.7252 1 1 1 1 1 337 +R 566 56 LEU A 56 58 ILE A 58 5.6664 1 1 1 1 1 37 +R 567 56 LEU A 56 91 SER A 91 6.9590 0 1 0 0 0 32 +R 568 56 LEU A 56 92 VAL A 92 8.3697 0 1 0 0 0 1 +R 569 56 LEU A 56 95 ALA A 95 7.7189 1 1 1 1 1 140 +R 570 56 LEU A 56 108 TRP A 108 8.2153 1 1 1 1 1 203 +R 571 57 GLN A 57 35 GLU A 35 6.0016 1 1 0 0 0 175 +R 572 57 GLN A 57 36 SER A 36 6.6652 1 0 0 0 0 0 +R 573 57 GLN A 57 42 ALA A 42 7.3752 1 1 1 1 1 142 +R 574 57 GLN A 57 43 THR A 43 7.1223 1 0 0 0 0 0 +R 575 57 GLN A 57 44 ASN A 44 7.9104 1 1 1 1 1 163 +R 576 57 GLN A 57 52 ASP A 52 4.5222 1 1 1 0 0 120 +R 577 57 GLN A 57 53 TYR A 53 4.4524 1 1 0 0 0 5 +R 578 57 GLN A 57 54 GLY A 54 4.9429 1 1 1 1 1 124 +R 579 57 GLN A 57 55 ILE A 55 5.6235 1 0 0 0 0 0 +R 580 57 GLN A 57 56 LEU A 56 3.7252 1 1 0 0 0 391 +R 581 57 GLN A 57 58 ILE A 58 3.8369 1 1 1 1 1 351 +R 582 57 GLN A 57 59 ASN A 59 6.4000 1 1 1 1 1 19 +R 583 57 GLN A 57 108 TRP A 108 8.2910 0 1 1 1 1 33 +R 584 58 ILE A 58 52 ASP A 52 4.9171 1 1 0 0 0 1 +R 585 58 ILE A 58 53 TYR A 53 5.1266 1 1 1 1 1 125 +R 586 58 ILE A 58 56 LEU A 56 5.6664 1 1 1 0 0 50 +R 587 58 ILE A 58 57 GLN A 57 3.8369 1 1 0 0 0 340 +R 588 58 ILE A 58 59 ASN A 59 3.7920 1 1 1 1 1 375 +R 589 58 ILE A 58 63 TRP A 63 6.7289 1 1 1 1 1 142 +R 590 58 ILE A 58 83 LEU A 83 7.8716 1 1 1 1 1 62 +R 591 58 ILE A 58 91 SER A 91 7.7587 1 1 0 0 0 183 +R 592 58 ILE A 58 94 CYS A 94 8.1513 1 1 1 1 1 28 +R 593 58 ILE A 58 95 ALA A 95 7.7436 1 1 0 0 0 9 +R 594 58 ILE A 58 98 ILE A 98 8.9872 1 1 1 1 1 96 +R 595 59 ASN A 59 46 ASN A 46 9.1269 1 1 1 1 1 18 +R 596 59 ASN A 59 48 ASP A 48 10.9299 0 1 1 1 1 7 +R 597 59 ASN A 59 50 SER A 50 6.7524 1 1 1 1 1 134 +R 598 59 ASN A 59 51 THR A 51 5.7402 1 0 0 0 0 0 +R 599 59 ASN A 59 52 ASP A 52 4.3832 1 1 1 1 1 125 +R 600 59 ASN A 59 57 GLN A 57 6.4000 1 1 0 0 0 7 +R 601 59 ASN A 59 58 ILE A 58 3.7920 1 1 0 0 0 353 +R 602 59 ASN A 59 60 SER A 60 3.8442 1 1 1 1 1 327 +R 603 59 ASN A 59 61 ARG A 61 5.5522 1 1 1 1 1 218 +R 604 59 ASN A 59 62 TRP A 62 6.1912 1 1 1 1 1 30 +R 605 59 ASN A 59 63 TRP A 63 5.8889 1 1 1 1 1 200 +R 606 60 SER A 60 50 SER A 50 5.4691 1 0 0 0 0 0 +R 607 60 SER A 60 51 THR A 51 5.4996 1 1 1 1 1 120 +R 608 60 SER A 60 53 TYR A 53 7.7842 1 0 0 0 0 0 +R 609 60 SER A 60 59 ASN A 59 3.8442 1 1 0 0 0 339 +R 610 60 SER A 60 61 ARG A 61 3.8908 1 1 1 1 1 283 +R 611 60 SER A 60 62 TRP A 62 5.5049 1 0 0 0 0 0 +R 612 60 SER A 60 64 CYS A 64 5.0013 1 1 0 0 0 31 +R 613 60 SER A 60 66 ASP A 66 6.3315 1 1 0 0 0 125 +R 614 60 SER A 60 69 THR A 69 6.5717 1 1 1 1 1 105 +R 615 60 SER A 60 72 SER A 72 6.4249 1 1 1 1 1 206 +R 616 60 SER A 60 80 CYS A 80 6.8143 1 1 0 0 0 32 +R 617 61 ARG A 61 48 ASP A 48 8.7820 1 1 1 1 1 281 +R 618 61 ARG A 61 50 SER A 50 5.5177 1 1 0 0 0 4 +R 619 61 ARG A 61 59 ASN A 59 5.5522 1 1 1 0 0 70 +R 620 61 ARG A 61 60 SER A 60 3.8908 1 1 1 0 0 362 +R 621 61 ARG A 61 62 TRP A 62 3.8101 1 1 1 1 1 481 +R 622 61 ARG A 61 69 THR A 69 6.2823 1 1 0 0 0 92 +R 623 61 ARG A 61 70 PRO A 70 8.0292 1 1 1 1 1 167 +R 624 61 ARG A 61 71 GLY A 71 7.0231 0 1 0 0 0 17 +R 625 61 ARG A 61 72 SER A 72 4.5693 1 1 0 0 0 14 +R 626 61 ARG A 61 73 ARG A 73 6.4875 1 1 1 1 1 130 +R 627 62 TRP A 62 59 ASN A 59 6.1912 1 1 1 0 0 51 +R 628 62 TRP A 62 60 SER A 60 5.5049 1 0 0 0 0 0 +R 629 62 TRP A 62 61 ARG A 61 3.8101 1 1 1 1 1 531 +R 630 62 TRP A 62 63 TRP A 63 3.7646 1 1 1 0 0 426 +R 631 62 TRP A 62 64 CYS A 64 6.3048 1 1 0 0 0 3 +R 632 62 TRP A 62 73 ARG A 73 4.7823 1 1 1 0 0 187 +R 633 62 TRP A 62 74 ASN A 74 5.5079 1 1 1 1 1 11 +R 634 62 TRP A 62 75 LEU A 75 5.9402 1 1 1 1 1 204 +R 635 63 TRP A 63 58 ILE A 58 6.7289 1 1 1 1 1 89 +R 636 63 TRP A 63 59 ASN A 59 5.8889 1 1 0 0 0 69 +R 637 63 TRP A 63 62 TRP A 62 3.7646 1 1 1 0 0 481 +R 638 63 TRP A 63 64 CYS A 64 3.7610 1 1 1 0 0 343 +R 639 63 TRP A 63 74 ASN A 74 4.6495 1 0 0 0 0 0 +R 640 63 TRP A 63 75 LEU A 75 4.5592 1 1 1 1 1 117 +R 641 63 TRP A 63 76 CYS A 76 5.1313 1 1 1 1 1 169 +R 642 63 TRP A 63 78 ILE A 78 7.9100 1 0 0 0 0 0 +R 643 63 TRP A 63 94 CYS A 94 7.4243 1 1 0 0 0 1 +R 644 63 TRP A 63 97 LYS A 97 9.0609 1 1 1 1 1 24 +R 645 63 TRP A 63 98 ILE A 98 8.1327 1 1 1 1 1 261 +R 646 63 TRP A 63 101 ASP A 101 11.5849 1 1 0 0 0 144 +R 647 63 TRP A 63 107 ALA A 107 11.8922 0 1 1 1 1 4 +R 648 64 CYS A 64 53 TYR A 53 9.1195 1 1 0 0 0 10 +R 649 64 CYS A 64 59 ASN A 59 6.9688 0 1 0 0 0 4 +R 650 64 CYS A 64 60 SER A 60 5.0013 1 1 0 0 0 167 +R 651 64 CYS A 64 62 TRP A 62 6.3048 1 1 0 0 0 3 +R 652 64 CYS A 64 63 TRP A 63 3.7610 1 1 0 0 0 385 +R 653 64 CYS A 64 65 ASN A 65 3.7533 1 1 1 1 1 339 +R 654 64 CYS A 64 72 SER A 72 7.6035 1 1 1 1 1 5 +R 655 64 CYS A 64 74 ASN A 74 4.3585 1 1 0 0 0 24 +R 656 64 CYS A 64 78 ILE A 78 5.2721 1 1 1 0 0 52 +R 657 64 CYS A 64 79 PRO A 79 5.5062 1 0 0 0 0 0 +R 658 64 CYS A 64 80 CYS A 80 4.9610 1 1 0 0 0 244 +R 659 64 CYS A 64 83 LEU A 83 8.6424 1 1 1 1 1 94 +R 660 65 ASN A 65 64 CYS A 64 3.7533 1 1 0 0 0 356 +R 661 65 ASN A 65 66 ASP A 66 3.8054 1 1 1 1 1 333 +R 662 65 ASN A 65 67 GLY A 67 5.7673 1 1 1 1 1 159 +R 663 65 ASN A 65 72 SER A 72 6.7196 0 1 1 1 1 61 +R 664 65 ASN A 65 74 ASN A 74 5.3596 1 1 1 0 0 121 +R 665 65 ASN A 65 78 ILE A 78 6.2178 1 1 1 1 1 14 +R 666 65 ASN A 65 79 PRO A 79 4.7112 1 1 1 0 0 57 +R 667 65 ASN A 65 80 CYS A 80 5.3811 1 1 1 1 1 88 +R 668 66 ASP A 66 51 THR A 51 8.3256 1 1 0 0 0 7 +R 669 66 ASP A 66 53 TYR A 53 9.7084 1 1 1 1 1 176 +R 670 66 ASP A 66 60 SER A 60 6.3315 1 1 1 1 1 36 +R 671 66 ASP A 66 65 ASN A 65 3.8054 1 1 0 0 0 362 +R 672 66 ASP A 66 67 GLY A 67 3.8249 1 1 1 1 1 319 +R 673 66 ASP A 66 68 ARG A 68 5.5275 1 1 1 0 0 127 +R 674 66 ASP A 66 69 THR A 69 6.6481 1 1 1 1 1 194 +R 675 66 ASP A 66 79 PRO A 79 5.9021 0 1 0 0 0 3 +R 676 66 ASP A 66 80 CYS A 80 5.2749 1 1 1 1 1 42 +R 677 66 ASP A 66 81 SER A 81 7.3090 0 1 0 0 0 5 +R 678 67 GLY A 67 65 ASN A 65 5.7673 1 1 1 1 1 97 +R 679 67 GLY A 67 66 ASP A 66 3.8249 1 1 1 0 0 376 +R 680 67 GLY A 67 68 ARG A 68 3.7098 1 1 1 1 1 349 +R 681 67 GLY A 67 69 THR A 69 6.0387 1 1 0 0 0 3 +R 682 68 ARG A 68 45 ARG A 45 11.3353 1 1 0 0 0 270 +R 683 68 ARG A 68 49 GLY A 49 8.1773 0 1 0 0 0 24 +R 684 68 ARG A 68 51 THR A 51 9.1481 1 1 1 1 1 136 +R 685 68 ARG A 68 53 TYR A 53 13.3743 0 1 1 1 1 18 +R 686 68 ARG A 68 66 ASP A 66 5.5275 1 1 1 0 0 78 +R 687 68 ARG A 68 67 GLY A 67 3.7098 1 1 0 0 0 397 +R 688 68 ARG A 68 69 THR A 69 3.8098 1 1 1 1 1 345 +R 689 68 ARG A 68 70 PRO A 70 6.1627 1 1 0 0 0 79 +R 690 69 THR A 69 49 GLY A 49 6.4717 0 1 1 1 1 9 +R 691 69 THR A 69 50 SER A 50 5.5332 1 1 0 0 0 60 +R 692 69 THR A 69 60 SER A 60 6.5717 1 1 1 0 0 149 +R 693 69 THR A 69 61 ARG A 61 6.2823 1 1 0 0 0 127 +R 694 69 THR A 69 66 ASP A 66 6.6481 1 1 1 1 1 149 +R 695 69 THR A 69 67 GLY A 67 6.0387 1 0 0 0 0 0 +R 696 69 THR A 69 68 ARG A 68 3.8098 1 1 1 0 0 357 +R 697 69 THR A 69 70 PRO A 70 3.8378 1 1 0 0 0 323 +R 698 69 THR A 69 71 GLY A 71 6.1353 1 1 1 1 1 1 +R 699 69 THR A 69 72 SER A 72 5.4835 1 1 1 1 1 196 +R 700 70 PRO A 70 49 GLY A 49 8.6350 0 1 0 0 0 17 +R 701 70 PRO A 70 61 ARG A 61 8.0292 1 1 1 1 1 96 +R 702 70 PRO A 70 68 ARG A 68 6.1627 1 1 0 0 0 50 +R 703 70 PRO A 70 69 THR A 69 3.8378 1 1 1 0 0 416 +R 704 70 PRO A 70 71 GLY A 71 3.7037 1 1 1 0 0 364 +R 705 70 PRO A 70 72 SER A 72 5.5397 1 0 0 0 0 0 +R 706 71 GLY A 71 61 ARG A 61 7.0231 0 1 1 0 0 65 +R 707 71 GLY A 71 69 THR A 69 6.1353 1 1 1 1 1 1 +R 708 71 GLY A 71 70 PRO A 70 3.7037 1 1 0 0 0 367 +R 709 71 GLY A 71 72 SER A 72 3.7913 1 1 1 1 1 371 +R 710 71 GLY A 71 73 ARG A 73 6.3954 1 1 1 0 0 70 +R 711 72 SER A 72 60 SER A 60 6.4249 1 1 1 1 1 125 +R 712 72 SER A 72 61 ARG A 61 4.5693 1 1 0 0 0 31 +R 713 72 SER A 72 64 CYS A 64 7.6035 1 1 1 1 1 93 +R 714 72 SER A 72 65 ASN A 65 6.7196 0 1 0 0 0 44 +R 715 72 SER A 72 69 THR A 69 5.4835 1 1 1 1 1 95 +R 716 72 SER A 72 70 PRO A 70 5.5397 1 0 0 0 0 0 +R 717 72 SER A 72 71 GLY A 71 3.7913 1 1 1 0 0 376 +R 718 72 SER A 72 73 ARG A 73 3.8449 1 1 1 1 1 355 +R 719 72 SER A 72 74 ASN A 74 5.9277 1 1 1 1 1 24 +R 720 73 ARG A 73 61 ARG A 61 6.4875 1 1 1 1 1 13 +R 721 73 ARG A 73 62 TRP A 62 4.7823 1 1 1 0 0 187 +R 722 73 ARG A 73 71 GLY A 71 6.3954 1 1 0 0 0 43 +R 723 73 ARG A 73 72 SER A 72 3.8449 1 1 0 0 0 357 +R 724 73 ARG A 73 74 ASN A 74 3.8190 1 1 1 0 0 388 +R 725 73 ARG A 73 75 LEU A 75 5.6080 1 1 1 0 0 102 +R 726 74 ASN A 74 62 TRP A 62 5.5079 1 1 1 1 1 21 +R 727 74 ASN A 74 63 TRP A 63 4.6495 1 1 0 0 0 12 +R 728 74 ASN A 74 64 CYS A 64 4.3585 1 1 0 0 0 15 +R 729 74 ASN A 74 65 ASN A 65 5.3596 1 1 1 0 0 159 +R 730 74 ASN A 74 72 SER A 72 5.9277 1 1 1 0 0 24 +R 731 74 ASN A 74 73 ARG A 73 3.8190 1 1 0 0 0 374 +R 732 74 ASN A 74 75 LEU A 75 3.7831 1 1 1 1 1 371 +R 733 74 ASN A 74 76 CYS A 76 5.6175 1 0 0 0 0 0 +R 734 74 ASN A 74 77 ASN A 77 5.1976 1 1 1 1 1 156 +R 735 74 ASN A 74 78 ILE A 78 6.8599 1 1 1 1 1 235 +R 736 74 ASN A 74 79 PRO A 79 8.2352 0 1 0 0 0 3 +R 737 75 LEU A 75 62 TRP A 62 5.9402 1 1 1 0 0 128 +R 738 75 LEU A 75 63 TRP A 63 4.5592 1 1 1 1 1 134 +R 739 75 LEU A 75 73 ARG A 73 5.6080 1 1 1 0 0 144 +R 740 75 LEU A 75 74 ASN A 74 3.7831 1 1 0 0 0 349 +R 741 75 LEU A 75 76 CYS A 76 3.8164 1 1 1 1 1 338 +R 742 75 LEU A 75 77 ASN A 77 5.4213 1 1 1 0 0 21 +R 743 75 LEU A 75 97 LYS A 97 8.3701 0 1 1 0 0 65 +R 744 75 LEU A 75 101 ASP A 101 10.9431 0 1 0 0 0 36 +R 745 76 CYS A 76 63 TRP A 63 5.1313 1 1 1 0 0 99 +R 746 76 CYS A 76 74 ASN A 74 5.6175 1 0 0 0 0 0 +R 747 76 CYS A 76 75 LEU A 75 3.8164 1 1 0 0 0 369 +R 748 76 CYS A 76 77 ASN A 77 3.7920 1 1 1 0 0 391 +R 749 76 CYS A 76 78 ILE A 78 5.6591 1 1 1 0 0 45 +R 750 76 CYS A 76 94 CYS A 94 5.4641 1 1 1 1 1 297 +R 751 76 CYS A 76 97 LYS A 97 7.3462 1 1 1 1 1 27 +R 752 77 ASN A 77 74 ASN A 74 5.1976 1 1 1 0 0 102 +R 753 77 ASN A 77 75 LEU A 75 5.4213 1 1 0 0 0 13 +R 754 77 ASN A 77 76 CYS A 76 3.7920 1 1 0 0 0 407 +R 755 77 ASN A 77 78 ILE A 78 3.7096 1 1 1 0 0 368 +R 756 77 ASN A 77 79 PRO A 79 7.0593 0 1 0 0 0 8 +R 757 78 ILE A 78 63 TRP A 63 7.9100 1 0 0 0 0 0 +R 758 78 ILE A 78 64 CYS A 64 5.2721 1 1 1 1 1 22 +R 759 78 ILE A 78 65 ASN A 65 6.2178 1 1 1 1 1 126 +R 760 78 ILE A 78 74 ASN A 74 6.8599 1 1 1 0 0 12 +R 761 78 ILE A 78 76 CYS A 76 5.6591 1 1 1 1 1 132 +R 762 78 ILE A 78 77 ASN A 77 3.7096 1 1 0 0 0 394 +R 763 78 ILE A 78 79 PRO A 79 3.7780 1 1 1 0 0 412 +R 764 78 ILE A 78 80 CYS A 80 6.2029 1 0 0 0 0 0 +R 765 78 ILE A 78 82 ALA A 82 6.8387 1 1 1 1 1 55 +R 766 78 ILE A 78 83 LEU A 83 8.3786 1 1 1 1 1 191 +R 767 78 ILE A 78 90 ALA A 90 8.2888 0 1 1 1 1 47 +R 768 78 ILE A 78 94 CYS A 94 8.8596 1 1 1 1 1 5 +R 769 79 PRO A 79 64 CYS A 64 5.5062 1 0 0 0 0 0 +R 770 79 PRO A 79 65 ASN A 65 4.7112 1 1 1 0 0 79 +R 771 79 PRO A 79 66 ASP A 66 5.9021 0 1 0 0 0 2 +R 772 79 PRO A 79 74 ASN A 74 8.2352 0 1 0 0 0 5 +R 773 79 PRO A 79 77 ASN A 77 7.0593 0 1 0 0 0 8 +R 774 79 PRO A 79 78 ILE A 78 3.7780 1 1 1 1 1 426 +R 775 79 PRO A 79 80 CYS A 80 3.8413 1 1 1 0 0 376 +R 776 79 PRO A 79 81 SER A 81 5.4310 1 1 0 0 0 74 +R 777 79 PRO A 79 82 ALA A 82 5.6534 1 1 1 1 1 143 +R 778 80 CYS A 80 53 TYR A 53 6.5643 1 1 1 1 1 104 +R 779 80 CYS A 80 60 SER A 60 6.8143 1 1 0 0 0 16 +R 780 80 CYS A 80 64 CYS A 64 4.9610 1 1 0 0 0 284 +R 781 80 CYS A 80 65 ASN A 65 5.3811 1 1 1 1 1 52 +R 782 80 CYS A 80 66 ASP A 66 5.2749 1 1 1 1 1 49 +R 783 80 CYS A 80 78 ILE A 78 6.2029 1 0 0 0 0 0 +R 784 80 CYS A 80 79 PRO A 79 3.8413 1 1 0 0 0 340 +R 785 80 CYS A 80 81 SER A 81 3.8305 1 1 1 1 1 326 +R 786 80 CYS A 80 82 ALA A 82 5.3155 1 0 0 0 0 0 +R 787 80 CYS A 80 83 LEU A 83 5.4505 1 1 1 1 1 153 +R 788 81 SER A 81 53 TYR A 53 7.5160 0 1 0 0 0 9 +R 789 81 SER A 81 79 PRO A 79 5.4310 1 1 0 0 0 87 +R 790 81 SER A 81 80 CYS A 80 3.8305 1 1 0 0 0 371 +R 791 81 SER A 81 82 ALA A 82 3.8111 1 1 1 1 1 373 +R 792 81 SER A 81 83 LEU A 83 5.1899 1 0 0 0 0 0 +R 793 81 SER A 81 84 LEU A 84 5.4183 1 1 1 1 1 165 +R 794 81 SER A 81 85 SER A 85 7.5229 0 1 1 1 1 14 +R 795 82 ALA A 82 78 ILE A 78 6.8387 1 1 1 1 1 107 +R 796 82 ALA A 82 79 PRO A 79 5.6534 1 1 1 0 0 101 +R 797 82 ALA A 82 80 CYS A 80 5.3155 1 0 0 0 0 0 +R 798 82 ALA A 82 81 SER A 81 3.8111 1 1 1 0 0 378 +R 799 82 ALA A 82 83 LEU A 83 3.7944 1 1 1 1 1 341 +R 800 82 ALA A 82 84 LEU A 84 5.4609 1 1 1 1 1 13 +R 801 82 ALA A 82 85 SER A 85 5.9325 1 1 0 0 0 115 +R 802 82 ALA A 82 90 ALA A 90 6.7558 1 1 1 0 0 50 +R 803 83 LEU A 83 40 THR A 40 7.4963 0 1 0 0 0 3 +R 804 83 LEU A 83 53 TYR A 53 6.1854 1 1 1 1 1 30 +R 805 83 LEU A 83 54 GLY A 54 5.3232 1 1 0 0 0 93 +R 806 83 LEU A 83 55 ILE A 55 7.8149 0 1 1 1 1 1 +R 807 83 LEU A 83 58 ILE A 58 7.8716 1 1 1 1 1 103 +R 808 83 LEU A 83 64 CYS A 64 8.6424 1 1 1 1 1 170 +R 809 83 LEU A 83 78 ILE A 78 8.3786 1 1 1 1 1 102 +R 810 83 LEU A 83 80 CYS A 80 5.4505 1 1 0 0 0 36 +R 811 83 LEU A 83 81 SER A 81 5.1899 1 0 0 0 0 0 +R 812 83 LEU A 83 82 ALA A 82 3.7944 1 1 0 0 0 371 +R 813 83 LEU A 83 84 LEU A 84 3.8682 1 1 1 1 1 309 +R 814 83 LEU A 83 85 SER A 85 5.7541 1 1 1 1 1 4 +R 815 83 LEU A 83 90 ALA A 90 6.0317 1 1 0 0 0 2 +R 816 83 LEU A 83 91 SER A 91 5.2891 1 1 1 0 0 193 +R 817 83 LEU A 83 94 CYS A 94 8.8633 1 1 1 1 1 3 +R 818 84 LEU A 84 40 THR A 40 5.0346 1 1 1 1 1 152 +R 819 84 LEU A 84 41 GLN A 41 4.8606 1 1 1 0 0 101 +R 820 84 LEU A 84 42 ALA A 42 7.3563 1 1 0 0 0 30 +R 821 84 LEU A 84 43 THR A 43 8.5599 1 1 1 1 1 95 +R 822 84 LEU A 84 53 TYR A 53 6.6054 1 1 1 1 1 40 +R 823 84 LEU A 84 54 GLY A 54 4.8428 1 1 0 0 0 115 +R 824 84 LEU A 84 80 CYS A 80 7.5698 0 1 0 0 0 15 +R 825 84 LEU A 84 81 SER A 81 5.4183 1 1 0 0 0 91 +R 826 84 LEU A 84 82 ALA A 82 5.4609 1 0 0 0 0 0 +R 827 84 LEU A 84 83 LEU A 83 3.8682 1 1 0 0 0 366 +R 828 84 LEU A 84 85 SER A 85 3.7737 1 1 1 1 1 356 +R 829 84 LEU A 84 86 SER A 86 6.7769 0 1 1 1 1 3 +R 830 85 SER A 85 40 THR A 40 6.2303 1 1 0 0 0 75 +R 831 85 SER A 85 81 SER A 81 7.5229 0 1 1 1 1 13 +R 832 85 SER A 85 82 ALA A 82 5.9325 1 1 0 0 0 73 +R 833 85 SER A 85 83 LEU A 83 5.7541 1 1 0 0 0 1 +R 834 85 SER A 85 84 LEU A 84 3.7737 1 1 0 0 0 376 +R 835 85 SER A 85 86 SER A 86 3.8390 1 1 1 1 1 381 +R 836 85 SER A 85 87 ASP A 87 5.2323 1 1 1 1 1 169 +R 837 86 SER A 86 1 LYS A 1 5.1894 1 1 1 0 0 208 +R 838 86 SER A 86 3 PHE A 3 8.8941 1 1 0 0 0 115 +R 839 86 SER A 86 40 THR A 40 6.2290 1 0 0 0 0 0 +R 840 86 SER A 86 84 LEU A 84 6.7769 0 1 1 1 1 2 +R 841 86 SER A 86 85 SER A 85 3.8390 1 1 1 1 1 348 +R 842 86 SER A 86 87 ASP A 87 3.8507 1 1 1 1 1 342 +R 843 86 SER A 86 88 ILE A 88 6.0595 1 1 1 1 1 25 +R 844 87 ASP A 87 3 PHE A 3 10.7648 0 1 0 0 0 1 +R 845 87 ASP A 87 15 HIS A 15 10.7991 0 1 1 1 1 22 +R 846 87 ASP A 87 85 SER A 85 5.2323 1 1 0 0 0 134 +R 847 87 ASP A 87 86 SER A 86 3.8507 1 1 0 0 0 361 +R 848 87 ASP A 87 88 ILE A 88 3.8129 1 1 1 1 1 371 +R 849 87 ASP A 87 89 THR A 89 5.6671 1 1 1 1 1 234 +R 850 87 ASP A 87 90 ALA A 90 7.7602 0 1 1 1 1 9 +R 851 88 ILE A 88 3 PHE A 3 10.4372 1 1 1 1 1 143 +R 852 88 ILE A 88 8 LEU A 8 9.1166 1 0 0 0 0 0 +R 853 88 ILE A 88 11 ALA A 11 7.9512 1 1 1 1 1 162 +R 854 88 ILE A 88 12 MET A 12 8.1191 1 1 1 1 1 35 +R 855 88 ILE A 88 15 HIS A 15 8.6713 1 1 1 0 0 35 +R 856 88 ILE A 88 40 THR A 40 7.7607 1 1 1 1 1 47 +R 857 88 ILE A 88 55 ILE A 55 8.0660 1 1 1 1 1 35 +R 858 88 ILE A 88 86 SER A 86 6.0595 1 1 0 0 0 4 +R 859 88 ILE A 88 87 ASP A 87 3.8129 1 1 1 1 1 353 +R 860 88 ILE A 88 89 THR A 89 3.7790 1 1 1 1 1 372 +R 861 88 ILE A 88 90 ALA A 90 5.7738 1 1 0 0 0 1 +R 862 88 ILE A 88 91 SER A 91 5.4216 1 1 1 1 1 23 +R 863 88 ILE A 88 92 VAL A 92 6.1853 1 1 1 1 1 212 +R 864 89 THR A 89 14 ARG A 14 10.0339 0 1 1 1 1 3 +R 865 89 THR A 89 15 HIS A 15 7.1554 1 1 1 1 1 149 +R 866 89 THR A 89 87 ASP A 87 5.6671 1 1 1 1 1 158 +R 867 89 THR A 89 88 ILE A 88 3.7790 1 1 0 0 0 335 +R 868 89 THR A 89 90 ALA A 90 3.8512 1 1 1 1 1 372 +R 869 89 THR A 89 91 SER A 91 5.5409 1 0 0 0 0 0 +R 870 89 THR A 89 92 VAL A 92 5.2314 1 0 0 0 0 0 +R 871 89 THR A 89 93 ASN A 93 6.2336 1 1 1 1 1 199 +R 872 90 ALA A 90 78 ILE A 78 8.2888 0 1 1 1 1 45 +R 873 90 ALA A 90 82 ALA A 82 6.7558 1 1 1 0 0 158 +R 874 90 ALA A 90 83 LEU A 83 6.0317 1 1 1 1 1 27 +R 875 90 ALA A 90 87 ASP A 87 7.7602 0 1 1 0 0 4 +R 876 90 ALA A 90 88 ILE A 88 5.7738 1 0 0 0 0 0 +R 877 90 ALA A 90 89 THR A 89 3.8512 1 1 1 0 0 373 +R 878 90 ALA A 90 91 SER A 91 3.8404 1 1 1 1 1 356 +R 879 90 ALA A 90 92 VAL A 92 5.4287 1 0 0 0 0 0 +R 880 90 ALA A 90 93 ASN A 93 5.1567 1 1 0 0 0 28 +R 881 90 ALA A 90 94 CYS A 94 6.0715 1 1 1 1 1 133 +R 882 91 SER A 91 55 ILE A 55 7.4339 1 1 1 0 0 119 +R 883 91 SER A 91 58 ILE A 58 7.7587 1 1 0 0 0 14 +R 884 91 SER A 91 83 LEU A 83 5.2891 1 1 1 1 1 220 +R 885 91 SER A 91 88 ILE A 88 5.4216 1 1 0 0 0 37 +R 886 91 SER A 91 89 THR A 89 5.5409 1 0 0 0 0 0 +R 887 91 SER A 91 90 ALA A 90 3.8404 1 1 0 0 0 349 +R 888 91 SER A 91 92 VAL A 92 3.7489 1 1 1 1 1 342 +R 889 91 SER A 91 93 ASN A 93 5.6148 1 0 0 0 0 0 +R 890 91 SER A 91 94 CYS A 94 5.2309 1 0 0 0 0 0 +R 891 91 SER A 91 95 ALA A 95 5.9715 1 1 1 1 1 161 +R 892 92 VAL A 92 12 MET A 12 7.4759 0 1 1 1 1 3 +R 893 92 VAL A 92 15 HIS A 15 7.1674 1 1 1 1 1 167 +R 894 92 VAL A 92 17 LEU A 17 7.6268 1 1 1 1 1 98 +R 895 92 VAL A 92 56 LEU A 56 8.3697 0 1 1 1 1 3 +R 896 92 VAL A 92 88 ILE A 88 6.1853 1 1 1 1 1 201 +R 897 92 VAL A 92 89 THR A 89 5.2314 1 1 0 0 0 9 +R 898 92 VAL A 92 90 ALA A 90 5.4287 1 0 0 0 0 0 +R 899 92 VAL A 92 91 SER A 91 3.7489 1 1 0 0 0 368 +R 900 92 VAL A 92 93 ASN A 93 3.8908 1 1 1 0 0 322 +R 901 92 VAL A 92 94 CYS A 94 5.4376 1 0 0 0 0 0 +R 902 92 VAL A 92 95 ALA A 95 4.9484 1 1 0 0 0 11 +R 903 92 VAL A 92 96 LYS A 96 6.2030 1 1 1 1 1 187 +R 904 93 ASN A 93 15 HIS A 15 8.5240 0 1 1 0 0 4 +R 905 93 ASN A 93 89 THR A 89 6.2336 1 1 1 0 0 178 +R 906 93 ASN A 93 90 ALA A 90 5.1567 1 1 1 0 0 29 +R 907 93 ASN A 93 91 SER A 91 5.6148 1 0 0 0 0 0 +R 908 93 ASN A 93 92 VAL A 92 3.8908 1 1 0 0 0 349 +R 909 93 ASN A 93 94 CYS A 94 3.7884 1 1 1 0 0 357 +R 910 93 ASN A 93 95 ALA A 95 5.4444 1 0 0 0 0 0 +R 911 93 ASN A 93 96 LYS A 96 5.2091 1 1 1 0 0 183 +R 912 93 ASN A 93 97 LYS A 97 6.7656 1 1 1 1 1 82 +R 913 94 CYS A 94 58 ILE A 58 8.1513 1 1 1 1 1 144 +R 914 94 CYS A 94 63 TRP A 63 7.4243 1 1 0 0 0 1 +R 915 94 CYS A 94 76 CYS A 76 5.4641 1 1 1 1 1 234 +R 916 94 CYS A 94 78 ILE A 78 8.8596 1 1 1 1 1 9 +R 917 94 CYS A 94 83 LEU A 83 8.8633 1 0 0 0 0 0 +R 918 94 CYS A 94 90 ALA A 90 6.0715 1 1 1 0 0 76 +R 919 94 CYS A 94 91 SER A 91 5.2309 1 1 0 0 0 11 +R 920 94 CYS A 94 92 VAL A 92 5.4376 1 0 0 0 0 0 +R 921 94 CYS A 94 93 ASN A 93 3.7884 1 1 0 0 0 346 +R 922 94 CYS A 94 95 ALA A 95 3.8019 1 1 1 1 1 349 +R 923 94 CYS A 94 96 LYS A 96 5.3813 1 0 0 0 0 0 +R 924 94 CYS A 94 97 LYS A 97 5.2610 1 1 1 1 1 70 +R 925 94 CYS A 94 98 ILE A 98 6.4204 1 1 1 1 1 63 +R 926 95 ALA A 95 28 TRP A 28 9.8227 1 1 1 1 1 23 +R 927 95 ALA A 95 56 LEU A 56 7.7189 1 1 1 1 1 73 +R 928 95 ALA A 95 58 ILE A 58 7.7436 1 0 0 0 0 0 +R 929 95 ALA A 95 91 SER A 91 5.9715 1 1 1 0 0 81 +R 930 95 ALA A 95 92 VAL A 92 4.9484 1 1 0 0 0 18 +R 931 95 ALA A 95 93 ASN A 93 5.4444 1 0 0 0 0 0 +R 932 95 ALA A 95 94 CYS A 94 3.8019 1 1 0 0 0 362 +R 933 95 ALA A 95 96 LYS A 96 3.7722 1 1 1 1 1 324 +R 934 95 ALA A 95 97 LYS A 97 5.3622 1 0 0 0 0 0 +R 935 95 ALA A 95 98 ILE A 98 4.9201 1 1 0 0 0 11 +R 936 95 ALA A 95 99 VAL A 99 6.0948 1 1 1 1 1 164 +R 937 95 ALA A 95 108 TRP A 108 10.0572 1 1 1 1 1 115 +R 938 96 LYS A 96 15 HIS A 15 10.3010 1 1 1 1 1 172 +R 939 96 LYS A 96 16 GLY A 16 9.2491 1 1 0 0 0 33 +R 940 96 LYS A 96 17 LEU A 17 7.9140 1 1 1 1 1 25 +R 941 96 LYS A 96 20 TYR A 20 7.7283 1 1 1 1 1 198 +R 942 96 LYS A 96 92 VAL A 92 6.2030 1 1 1 0 0 54 +R 943 96 LYS A 96 93 ASN A 93 5.2091 1 1 0 0 0 108 +R 944 96 LYS A 96 94 CYS A 94 5.3813 1 0 0 0 0 0 +R 945 96 LYS A 96 95 ALA A 95 3.7722 1 1 0 0 0 346 +R 946 96 LYS A 96 97 LYS A 97 3.8989 1 1 1 1 1 346 +R 947 96 LYS A 96 98 ILE A 98 5.4629 1 0 0 0 0 0 +R 948 96 LYS A 96 99 VAL A 99 5.3592 1 1 0 0 0 2 +R 949 96 LYS A 96 100 SER A 100 6.2176 1 1 1 1 1 160 +R 950 97 LYS A 97 63 TRP A 63 9.0609 1 1 1 1 1 21 +R 951 97 LYS A 97 75 LEU A 75 8.3701 0 1 0 0 0 51 +R 952 97 LYS A 97 76 CYS A 76 7.3462 1 1 1 1 1 83 +R 953 97 LYS A 97 93 ASN A 93 6.7656 1 1 0 0 0 44 +R 954 97 LYS A 97 94 CYS A 94 5.2610 1 1 0 0 0 31 +R 955 97 LYS A 97 95 ALA A 95 5.3622 1 0 0 0 0 0 +R 956 97 LYS A 97 96 LYS A 96 3.8989 1 1 0 0 0 339 +R 957 97 LYS A 97 98 ILE A 98 3.7983 1 1 1 0 0 374 +R 958 97 LYS A 97 99 VAL A 99 5.7111 1 0 0 0 0 0 +R 959 97 LYS A 97 100 SER A 100 5.2541 1 1 1 1 1 84 +R 960 97 LYS A 97 101 ASP A 101 6.4431 1 1 1 1 1 69 +R 961 98 ILE A 98 58 ILE A 58 8.9872 1 1 1 1 1 184 +R 962 98 ILE A 98 63 TRP A 63 8.1327 1 1 1 1 1 169 +R 963 98 ILE A 98 94 CYS A 94 6.4204 1 1 0 0 0 44 +R 964 98 ILE A 98 95 ALA A 95 4.9201 1 1 0 0 0 12 +R 965 98 ILE A 98 96 LYS A 96 5.4629 1 0 0 0 0 0 +R 966 98 ILE A 98 97 LYS A 97 3.7983 1 1 0 0 0 354 +R 967 98 ILE A 98 99 VAL A 99 3.8242 1 1 1 1 1 332 +R 968 98 ILE A 98 100 SER A 100 5.4112 1 0 0 0 0 0 +R 969 98 ILE A 98 101 ASP A 101 5.2299 1 1 0 0 0 143 +R 970 98 ILE A 98 104 GLY A 104 7.3510 0 1 0 0 0 10 +R 971 98 ILE A 98 107 ALA A 107 7.4522 1 1 1 1 1 145 +R 972 98 ILE A 98 108 TRP A 108 9.5294 1 1 1 1 1 25 +R 973 99 VAL A 99 20 TYR A 20 8.7657 1 1 1 1 1 115 +R 974 99 VAL A 99 21 ARG A 21 7.5366 1 1 1 0 0 25 +R 975 99 VAL A 99 23 TYR A 23 9.4052 1 1 1 1 1 105 +R 976 99 VAL A 99 28 TRP A 28 10.7709 1 1 1 1 1 28 +R 977 99 VAL A 99 95 ALA A 95 6.0948 1 1 1 0 0 86 +R 978 99 VAL A 99 96 LYS A 96 5.3592 1 1 0 0 0 29 +R 979 99 VAL A 99 97 LYS A 97 5.7111 1 0 0 0 0 0 +R 980 99 VAL A 99 98 ILE A 98 3.8242 1 1 0 0 0 345 +R 981 99 VAL A 99 100 SER A 100 3.8421 1 1 1 0 0 356 +R 982 99 VAL A 99 101 ASP A 101 5.3917 1 0 0 0 0 0 +R 983 99 VAL A 99 102 GLY A 102 7.0039 0 1 1 1 1 1 +R 984 99 VAL A 99 104 GLY A 104 4.3408 1 1 0 0 0 177 +R 985 99 VAL A 99 105 MET A 105 5.6156 1 1 1 1 1 46 +R 986 99 VAL A 99 108 TRP A 108 9.1731 1 1 1 1 1 5 +R 987 100 SER A 100 20 TYR A 20 9.2326 1 1 1 1 1 33 +R 988 100 SER A 100 21 ARG A 21 7.2028 1 1 1 1 1 249 +R 989 100 SER A 100 96 LYS A 96 6.2176 1 1 1 1 1 119 +R 990 100 SER A 100 97 LYS A 97 5.2541 1 1 0 0 0 48 +R 991 100 SER A 100 98 ILE A 98 5.4112 1 0 0 0 0 0 +R 992 100 SER A 100 99 VAL A 99 3.8421 1 1 0 0 0 357 +R 993 100 SER A 100 101 ASP A 101 3.8203 1 1 1 1 1 316 +R 994 100 SER A 100 102 GLY A 102 5.9600 1 1 1 1 1 50 +R 995 101 ASP A 101 63 TRP A 63 11.5849 1 1 0 0 0 140 +R 996 101 ASP A 101 75 LEU A 75 10.9431 0 1 0 0 0 44 +R 997 101 ASP A 101 97 LYS A 97 6.4431 1 1 0 0 0 37 +R 998 101 ASP A 101 98 ILE A 98 5.2299 1 1 0 0 0 92 +R 999 101 ASP A 101 99 VAL A 99 5.3917 1 0 0 0 0 0 +R 1000 101 ASP A 101 100 SER A 100 3.8203 1 1 0 0 0 347 +R 1001 101 ASP A 101 102 GLY A 102 3.7587 1 1 1 1 1 326 +R 1002 101 ASP A 101 103 ASN A 103 6.3794 1 1 1 1 1 20 +R 1003 102 GLY A 102 99 VAL A 99 7.0039 0 1 0 0 0 1 +R 1004 102 GLY A 102 100 SER A 100 5.9600 1 1 1 1 1 43 +R 1005 102 GLY A 102 101 ASP A 101 3.7587 1 1 0 0 0 409 +R 1006 102 GLY A 102 103 ASN A 103 3.8452 1 1 1 1 1 380 +R 1007 102 GLY A 102 104 GLY A 104 5.4960 1 1 1 1 1 18 +R 1008 103 ASN A 103 23 TYR A 23 12.4992 0 1 0 0 0 1 +R 1009 103 ASN A 103 101 ASP A 101 6.3794 1 1 1 0 0 11 +R 1010 103 ASN A 103 102 GLY A 102 3.8452 1 1 1 1 1 398 +R 1011 103 ASN A 103 104 GLY A 104 3.8263 1 1 1 1 1 340 +R 1012 103 ASN A 103 105 MET A 105 6.4440 1 0 0 0 0 0 +R 1013 103 ASN A 103 106 ASN A 106 5.4867 1 1 1 1 1 242 +R 1014 103 ASN A 103 107 ALA A 107 6.1089 0 1 1 0 0 32 +R 1015 104 GLY A 104 23 TYR A 23 8.8920 1 1 0 0 0 56 +R 1016 104 GLY A 104 99 VAL A 99 4.3408 1 1 1 1 1 132 +R 1017 104 GLY A 104 102 GLY A 102 5.4960 1 1 1 1 1 26 +R 1018 104 GLY A 104 103 ASN A 103 3.8263 1 1 0 0 0 376 +R 1019 104 GLY A 104 105 MET A 105 3.8395 1 1 1 1 1 367 +R 1020 104 GLY A 104 106 ASN A 106 5.3817 1 1 1 1 1 5 +R 1021 104 GLY A 104 107 ALA A 107 6.2555 1 1 1 0 0 94 +R 1022 105 MET A 105 23 TYR A 23 8.1535 1 1 1 1 1 178 +R 1023 105 MET A 105 27 ASN A 27 8.5492 1 1 0 0 0 66 +R 1024 105 MET A 105 28 TRP A 28 8.7636 1 1 1 1 1 65 +R 1025 105 MET A 105 31 ALA A 31 8.7729 1 1 1 1 1 99 +R 1026 105 MET A 105 99 VAL A 99 5.6156 1 1 1 1 1 57 +R 1027 105 MET A 105 103 ASN A 103 6.4440 1 0 0 0 0 0 +R 1028 105 MET A 105 104 GLY A 104 3.8395 1 1 0 0 0 343 +R 1029 105 MET A 105 106 ASN A 106 3.7700 1 1 1 1 1 321 +R 1030 105 MET A 105 107 ALA A 107 5.0282 1 1 0 0 0 4 +R 1031 105 MET A 105 108 TRP A 108 5.6343 1 1 1 1 1 148 +R 1032 105 MET A 105 111 TRP A 111 6.7413 1 1 1 1 1 195 +R 1033 106 ASN A 106 23 TYR A 23 11.3626 0 1 1 1 1 22 +R 1034 106 ASN A 106 103 ASN A 103 5.4867 1 1 1 1 1 175 +R 1035 106 ASN A 106 104 GLY A 104 5.3817 1 0 0 0 0 0 +R 1036 106 ASN A 106 105 MET A 105 3.7700 1 1 0 0 0 357 +R 1037 106 ASN A 106 107 ALA A 107 3.8144 1 1 1 1 1 348 +R 1038 106 ASN A 106 108 TRP A 108 5.0992 1 1 1 1 1 12 +R 1039 106 ASN A 106 111 TRP A 111 6.6687 1 1 0 0 0 56 +R 1040 106 ASN A 106 112 ARG A 112 5.3634 1 1 1 1 1 179 +R 1041 106 ASN A 106 116 LYS A 116 8.4376 1 1 1 1 1 209 +R 1042 107 ALA A 107 63 TRP A 63 11.8922 0 1 1 1 1 15 +R 1043 107 ALA A 107 98 ILE A 98 7.4522 1 1 1 1 1 144 +R 1044 107 ALA A 107 103 ASN A 103 6.1089 0 1 1 1 1 34 +R 1045 107 ALA A 107 104 GLY A 104 6.2555 1 1 1 0 0 78 +R 1046 107 ALA A 107 105 MET A 105 5.0282 1 0 0 0 0 0 +R 1047 107 ALA A 107 106 ASN A 106 3.8144 1 1 0 0 0 366 +R 1048 107 ALA A 107 108 TRP A 108 3.8323 1 1 1 1 1 344 +R 1049 107 ALA A 107 109 VAL A 109 6.1899 1 1 1 1 1 40 +R 1050 107 ALA A 107 112 ARG A 112 7.9613 0 1 1 1 1 4 +R 1051 108 TRP A 108 28 TRP A 28 10.2074 1 1 1 1 1 79 +R 1052 108 TRP A 108 31 ALA A 31 7.3841 0 1 1 1 1 1 +R 1053 108 TRP A 108 35 GLU A 35 8.1006 1 1 1 0 0 82 +R 1054 108 TRP A 108 56 LEU A 56 8.2153 1 1 1 1 1 175 +R 1055 108 TRP A 108 57 GLN A 57 8.2910 0 1 1 1 1 22 +R 1056 108 TRP A 108 58 ILE A 58 8.7782 0 1 0 0 0 2 +R 1057 108 TRP A 108 95 ALA A 95 10.0572 1 1 1 1 1 217 +R 1058 108 TRP A 108 98 ILE A 98 9.5294 1 1 1 1 1 112 +R 1059 108 TRP A 108 99 VAL A 99 9.1731 1 1 1 1 1 4 +R 1060 108 TRP A 108 105 MET A 105 5.6343 1 1 1 0 0 139 +R 1061 108 TRP A 108 106 ASN A 106 5.0992 1 0 0 0 0 0 +R 1062 108 TRP A 108 107 ALA A 107 3.8323 1 1 0 0 0 366 +R 1063 108 TRP A 108 109 VAL A 109 3.7513 1 1 1 1 1 373 +R 1064 108 TRP A 108 110 ALA A 110 5.5900 1 0 0 0 0 0 +R 1065 108 TRP A 108 111 TRP A 111 5.1466 1 1 1 1 1 47 +R 1066 108 TRP A 108 112 ARG A 112 6.3103 1 1 1 1 1 126 +R 1067 109 VAL A 109 35 GLU A 35 8.4267 0 1 0 0 0 59 +R 1068 109 VAL A 109 107 ALA A 107 6.1899 1 1 1 0 0 19 +R 1069 109 VAL A 109 108 TRP A 108 3.7513 1 1 0 0 0 339 +R 1070 109 VAL A 109 110 ALA A 110 3.8699 1 1 1 0 0 348 +R 1071 109 VAL A 109 111 TRP A 111 5.3384 1 0 0 0 0 0 +R 1072 109 VAL A 109 112 ARG A 112 5.1089 1 1 0 0 0 99 +R 1073 109 VAL A 109 113 ASN A 113 6.1028 1 1 1 1 1 250 +R 1074 110 ALA A 110 34 PHE A 34 5.8542 1 1 1 1 1 157 +R 1075 110 ALA A 110 35 GLU A 35 6.0785 1 1 0 0 0 82 +R 1076 110 ALA A 110 108 TRP A 108 5.5900 1 0 0 0 0 0 +R 1077 110 ALA A 110 109 VAL A 109 3.8699 1 1 1 0 0 376 +R 1078 110 ALA A 110 111 TRP A 111 3.7781 1 1 1 1 1 300 +R 1079 110 ALA A 110 112 ARG A 112 5.4225 1 0 0 0 0 0 +R 1080 110 ALA A 110 113 ASN A 113 5.0166 1 1 0 0 0 2 +R 1081 110 ALA A 110 114 ARG A 114 5.4505 1 1 1 1 1 261 +R 1082 110 ALA A 110 115 CYS A 115 7.0432 1 0 0 0 0 0 +R 1083 111 TRP A 111 23 TYR A 23 11.4919 1 1 1 1 1 99 +R 1084 111 TRP A 111 27 ASN A 27 7.6026 1 1 1 1 1 193 +R 1085 111 TRP A 111 31 ALA A 31 4.9166 1 1 1 1 1 14 +R 1086 111 TRP A 111 105 MET A 105 6.7413 1 1 1 1 1 178 +R 1087 111 TRP A 111 106 ASN A 106 6.6687 1 1 0 0 0 113 +R 1088 111 TRP A 111 108 TRP A 108 5.1466 1 1 1 1 1 95 +R 1089 111 TRP A 111 109 VAL A 109 5.3384 1 0 0 0 0 0 +R 1090 111 TRP A 111 110 ALA A 110 3.7781 1 1 0 0 0 370 +R 1091 111 TRP A 111 112 ARG A 112 3.7781 1 1 1 0 0 326 +R 1092 111 TRP A 111 113 ASN A 113 5.5291 1 0 0 0 0 0 +R 1093 111 TRP A 111 114 ARG A 114 5.3790 1 0 0 0 0 0 +R 1094 111 TRP A 111 115 CYS A 115 4.7065 1 1 1 1 1 128 +R 1095 111 TRP A 111 116 LYS A 116 5.8402 1 1 1 1 1 340 +R 1096 111 TRP A 111 117 GLY A 117 9.5925 0 1 0 0 0 2 +R 1097 112 ARG A 112 106 ASN A 106 5.3634 1 1 1 1 1 215 +R 1098 112 ARG A 112 107 ALA A 107 7.9613 0 1 1 1 1 6 +R 1099 112 ARG A 112 108 TRP A 108 6.3103 1 1 1 0 0 24 +R 1100 112 ARG A 112 109 VAL A 109 5.1089 1 1 0 0 0 149 +R 1101 112 ARG A 112 110 ALA A 110 5.4225 1 0 0 0 0 0 +R 1102 112 ARG A 112 111 TRP A 111 3.7781 1 1 0 0 0 402 +R 1103 112 ARG A 112 113 ASN A 113 3.8018 1 1 1 1 1 413 +R 1104 112 ARG A 112 114 ARG A 114 5.8854 1 0 0 0 0 0 +R 1105 112 ARG A 112 116 LYS A 116 5.0012 1 1 1 0 0 117 +R 1106 113 ASN A 113 109 VAL A 109 6.1028 1 1 0 0 0 184 +R 1107 113 ASN A 113 110 ALA A 110 5.0166 1 1 0 0 0 1 +R 1108 113 ASN A 113 111 TRP A 111 5.5291 1 0 0 0 0 0 +R 1109 113 ASN A 113 112 ARG A 112 3.8018 1 1 1 1 1 483 +R 1110 113 ASN A 113 114 ARG A 114 3.7971 1 1 1 1 1 378 +R 1111 113 ASN A 113 115 CYS A 115 6.1707 1 0 0 0 0 0 +R 1112 114 ARG A 114 30 CYS A 30 8.0485 0 1 0 0 0 14 +R 1113 114 ARG A 114 34 PHE A 34 7.4511 1 1 1 0 0 302 +R 1114 114 ARG A 114 110 ALA A 110 5.4505 1 1 1 0 0 105 +R 1115 114 ARG A 114 111 TRP A 111 5.3790 1 0 0 0 0 0 +R 1116 114 ARG A 114 112 ARG A 112 5.8854 1 0 0 0 0 0 +R 1117 114 ARG A 114 113 ASN A 113 3.7971 1 1 1 1 1 420 +R 1118 114 ARG A 114 115 CYS A 115 3.7433 1 1 1 1 1 327 +R 1119 114 ARG A 114 116 LYS A 116 6.0770 1 0 0 0 0 0 +R 1120 114 ARG A 114 118 THR A 118 7.6414 1 1 1 0 0 93 +R 1121 115 CYS A 115 30 CYS A 30 6.0621 1 1 1 1 1 281 +R 1122 115 CYS A 115 31 ALA A 31 6.6938 1 1 0 0 0 11 +R 1123 115 CYS A 115 34 PHE A 34 8.4896 1 1 0 0 0 16 +R 1124 115 CYS A 115 110 ALA A 110 7.0432 1 0 0 0 0 0 +R 1125 115 CYS A 115 111 TRP A 111 4.7065 1 1 1 1 1 123 +R 1126 115 CYS A 115 113 ASN A 113 6.1707 1 0 0 0 0 0 +R 1127 115 CYS A 115 114 ARG A 114 3.7433 1 1 0 0 0 384 +R 1128 115 CYS A 115 116 LYS A 116 3.7040 1 1 1 0 0 351 +R 1129 115 CYS A 115 117 GLY A 117 6.2355 1 1 1 1 1 2 +R 1130 115 CYS A 115 118 THR A 118 5.5424 1 1 1 1 1 145 +R 1131 115 CYS A 115 120 VAL A 120 6.5881 1 1 0 0 0 19 +R 1132 116 LYS A 116 106 ASN A 106 8.4376 1 1 1 1 1 167 +R 1133 116 LYS A 116 111 TRP A 111 5.8402 1 1 1 1 1 186 +R 1134 116 LYS A 116 112 ARG A 112 5.0012 1 1 1 0 0 104 +R 1135 116 LYS A 116 113 ASN A 113 6.5212 0 1 0 0 0 1 +R 1136 116 LYS A 116 114 ARG A 114 6.0770 1 1 1 1 1 1 +R 1137 116 LYS A 116 115 CYS A 115 3.7040 1 1 0 0 0 350 +R 1138 116 LYS A 116 117 GLY A 117 3.8305 1 1 1 0 0 378 +R 1139 116 LYS A 116 118 THR A 118 5.6274 1 1 1 0 0 42 +R 1140 117 GLY A 117 111 TRP A 111 9.5925 0 1 0 0 0 11 +R 1141 117 GLY A 117 115 CYS A 115 6.2355 1 1 1 1 1 2 +R 1142 117 GLY A 117 116 LYS A 116 3.8305 1 1 0 0 0 389 +R 1143 117 GLY A 117 118 THR A 118 3.8121 1 1 1 1 1 362 +R 1144 117 GLY A 117 119 ASP A 119 6.8454 0 1 1 1 1 3 +R 1145 117 GLY A 117 120 VAL A 120 7.8645 0 1 0 0 0 1 +R 1146 118 THR A 118 30 CYS A 30 9.7068 0 1 0 0 0 8 +R 1147 118 THR A 118 114 ARG A 114 7.6414 1 1 1 0 0 98 +R 1148 118 THR A 118 115 CYS A 115 5.5424 1 1 1 1 1 121 +R 1149 118 THR A 118 116 LYS A 116 5.6274 1 1 0 0 0 51 +R 1150 118 THR A 118 117 GLY A 117 3.8121 1 1 0 0 0 397 +R 1151 118 THR A 118 119 ASP A 119 3.8550 1 1 1 1 1 360 +R 1152 118 THR A 118 120 VAL A 120 5.5102 1 1 1 0 0 145 +R 1153 118 THR A 118 123 TRP A 123 10.4382 0 1 1 1 1 4 +R 1154 119 ASP A 119 117 GLY A 117 6.8454 0 1 1 1 1 2 +R 1155 119 ASP A 119 118 THR A 118 3.8550 1 1 1 1 1 342 +R 1156 119 ASP A 119 120 VAL A 120 3.7995 1 1 1 1 1 333 +R 1157 119 ASP A 119 121 GLN A 121 5.3570 1 1 1 0 0 165 +R 1158 119 ASP A 119 122 ALA A 122 5.9464 1 1 1 0 0 178 +R 1159 119 ASP A 119 123 TRP A 123 8.2961 0 1 1 0 0 7 +R 1160 120 VAL A 120 24 SER A 24 8.3132 1 1 0 0 0 27 +R 1161 120 VAL A 120 26 GLY A 26 4.8514 1 1 0 0 0 84 +R 1162 120 VAL A 120 27 ASN A 27 5.7252 1 1 0 0 0 182 +R 1163 120 VAL A 120 30 CYS A 30 6.6406 1 1 1 1 1 5 +R 1164 120 VAL A 120 115 CYS A 115 6.5881 1 1 1 0 0 184 +R 1165 120 VAL A 120 118 THR A 118 5.5102 1 1 1 0 0 53 +R 1166 120 VAL A 120 119 ASP A 119 3.7995 1 1 0 0 0 339 +R 1167 120 VAL A 120 121 GLN A 121 3.7722 1 1 1 1 1 364 +R 1168 120 VAL A 120 122 ALA A 122 5.1321 1 1 0 0 0 4 +R 1169 120 VAL A 120 123 TRP A 123 5.6692 1 1 1 1 1 93 +R 1170 121 GLN A 121 24 SER A 24 8.0270 0 1 0 0 0 39 +R 1171 121 GLN A 121 119 ASP A 119 5.3570 1 1 1 0 0 78 +R 1172 121 GLN A 121 120 VAL A 120 3.7722 1 1 1 1 1 385 +R 1173 121 GLN A 121 122 ALA A 122 3.7981 1 1 1 1 1 347 +R 1174 121 GLN A 121 123 TRP A 123 5.2614 1 0 0 0 0 0 +R 1175 121 GLN A 121 124 ILE A 124 5.7666 1 1 1 0 0 212 +R 1176 121 GLN A 121 125 ARG A 125 6.5900 1 1 1 1 1 31 +R 1177 122 ALA A 122 5 ARG A 5 10.7979 1 1 1 1 1 33 +R 1178 122 ALA A 122 119 ASP A 119 5.9464 1 1 1 0 0 132 +R 1179 122 ALA A 122 120 VAL A 120 5.1321 1 0 0 0 0 0 +R 1180 122 ALA A 122 121 GLN A 121 3.7981 1 1 0 0 0 367 +R 1181 122 ALA A 122 123 TRP A 123 3.8012 1 1 1 1 1 381 +R 1182 122 ALA A 122 124 ILE A 124 5.5575 1 1 1 1 1 12 +R 1183 122 ALA A 122 125 ARG A 125 5.1332 1 1 1 0 0 197 +R 1184 123 TRP A 123 5 ARG A 5 7.4230 1 1 1 1 1 235 +R 1185 123 TRP A 123 26 GLY A 26 5.1305 1 1 0 0 0 12 +R 1186 123 TRP A 123 29 VAL A 29 6.3580 1 1 1 1 1 87 +R 1187 123 TRP A 123 30 CYS A 30 6.2969 1 1 1 1 1 137 +R 1188 123 TRP A 123 33 LYS A 33 9.2780 1 1 1 1 1 181 +R 1189 123 TRP A 123 34 PHE A 34 11.6342 1 1 1 1 1 121 +R 1190 123 TRP A 123 118 THR A 118 10.4382 0 1 1 1 1 12 +R 1191 123 TRP A 123 119 ASP A 119 8.2961 0 1 1 1 1 14 +R 1192 123 TRP A 123 120 VAL A 120 5.6692 1 1 0 0 0 95 +R 1193 123 TRP A 123 121 GLN A 121 5.2614 1 0 0 0 0 0 +R 1194 123 TRP A 123 122 ALA A 122 3.8012 1 1 0 0 0 379 +R 1195 123 TRP A 123 124 ILE A 124 3.7623 1 1 1 1 1 327 +R 1196 123 TRP A 123 125 ARG A 125 5.6814 1 0 0 0 0 0 +R 1197 124 ILE A 124 5 ARG A 5 7.5648 1 1 0 0 0 6 +R 1198 124 ILE A 124 9 ALA A 9 6.6308 1 1 1 1 1 111 +R 1199 124 ILE A 124 25 LEU A 25 7.3355 1 1 1 1 1 113 +R 1200 124 ILE A 124 26 GLY A 26 5.7057 1 1 0 0 0 41 +R 1201 124 ILE A 124 29 VAL A 29 7.6402 1 1 1 1 1 2 +R 1202 124 ILE A 124 121 GLN A 121 5.7666 1 1 1 0 0 159 +R 1203 124 ILE A 124 122 ALA A 122 5.5575 1 0 0 0 0 0 +R 1204 124 ILE A 124 123 TRP A 123 3.7623 1 1 0 0 0 388 +R 1205 124 ILE A 124 125 ARG A 125 3.8072 1 1 1 1 1 344 +R 1206 124 ILE A 124 126 GLY A 126 6.3927 1 1 1 1 1 1 +R 1207 124 ILE A 124 127 CYS A 127 5.6869 1 1 1 1 1 107 +R 1208 124 ILE A 124 129 LEU A 129 8.6327 1 1 1 1 1 73 +R 1209 125 ARG A 125 5 ARG A 5 9.6347 1 1 1 1 1 208 +R 1210 125 ARG A 125 121 GLN A 121 6.5900 1 1 1 0 0 38 +R 1211 125 ARG A 125 122 ALA A 122 5.1332 1 1 1 1 1 181 +R 1212 125 ARG A 125 123 TRP A 123 5.6814 1 0 0 0 0 0 +R 1213 125 ARG A 125 124 ILE A 124 3.8072 1 1 0 0 0 350 +R 1214 125 ARG A 125 126 GLY A 126 3.8134 1 1 1 0 0 370 +R 1215 125 ARG A 125 127 CYS A 127 5.5076 1 0 0 0 0 0 +R 1216 126 GLY A 126 5 ARG A 5 10.0418 0 1 1 1 1 13 +R 1217 126 GLY A 126 6 CYS A 6 7.9731 0 1 0 0 0 25 +R 1218 126 GLY A 126 124 ILE A 124 6.3927 1 1 1 1 1 1 +R 1219 126 GLY A 126 125 ARG A 125 3.8134 1 1 0 0 0 405 +R 1220 126 GLY A 126 127 CYS A 127 3.7148 1 1 1 1 1 351 +R 1221 126 GLY A 126 128 ARG A 128 6.5352 1 1 1 1 1 24 +R 1222 127 CYS A 127 5 ARG A 5 8.4264 1 1 0 0 0 42 +R 1223 127 CYS A 127 6 CYS A 6 5.3179 1 1 1 1 1 251 +R 1224 127 CYS A 127 124 ILE A 124 5.6869 1 1 1 0 0 103 +R 1225 127 CYS A 127 125 ARG A 125 5.5076 1 0 0 0 0 0 +R 1226 127 CYS A 127 126 GLY A 126 3.7148 1 1 1 0 0 391 +R 1227 127 CYS A 127 128 ARG A 128 3.7185 1 1 1 1 1 344 +R 1228 127 CYS A 127 129 LEU A 129 5.8167 1 1 1 1 1 126 +R 1229 128 ARG A 128 6 CYS A 6 7.4354 0 1 0 0 0 11 +R 1230 128 ARG A 128 10 ALA A 10 7.8262 0 1 0 0 0 52 +R 1231 128 ARG A 128 126 GLY A 126 6.5352 1 1 1 0 0 17 +R 1232 128 ARG A 128 127 CYS A 127 3.7185 1 1 0 0 0 354 +R 1233 128 ARG A 128 129 LEU A 129 3.7614 1 1 1 0 0 416 +R 1234 129 LEU A 129 9 ALA A 9 7.9700 1 1 1 0 0 20 +R 1235 129 LEU A 129 10 ALA A 10 6.1221 1 1 1 0 0 220 +R 1236 129 LEU A 129 13 LYS A 13 8.0834 1 1 1 1 1 187 +R 1237 129 LEU A 129 25 LEU A 25 10.5318 1 1 1 1 1 101 +R 1238 129 LEU A 129 124 ILE A 124 8.6327 1 1 1 1 1 138 +R 1239 129 LEU A 129 127 CYS A 127 5.8167 1 1 1 1 1 53 +R 1240 129 LEU A 129 128 ARG A 128 3.7614 1 1 0 0 0 412 diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/molecule.itp b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/molecule.itp new file mode 100644 index 000000000..3d9a0d4ba --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/molecule.itp @@ -0,0 +1,2017 @@ + +[ moleculetype ] +molecule 1 + +[ atoms ] + 1 Q5 1 LYS BB 1 1 + 2 SC3 1 LYS SC1 2 0.0 + 3 SQ4p 1 LYS SC2 3 1.0 + 4 SP2 2 VAL BB 4 0.0 + 5 SC3 2 VAL SC1 5 0.0 + 6 P2 3 PHE BB 6 0.0 + 7 SC4 3 PHE SC1 7 0.0 + 8 TC5 3 PHE SC2 8 0.0 + 9 TC5 3 PHE SC3 9 0.0 + 10 SP1 4 GLY BB 10 0.0 + 11 P2 5 ARG BB 11 0.0 + 12 SC3 5 ARG SC1 12 0.0 + 13 SQ3p 5 ARG SC2 13 1.0 + 14 P2 6 CYS BB 14 0.0 + 15 TC6 6 CYS SC1 15 0.0 + 16 P2 7 GLU BB 16 0.0 + 17 Q5n 7 GLU SC1 17 -1.0 + 18 P2 8 LEU BB 18 0.0 + 19 SC2 8 LEU SC1 19 0.0 + 20 SP2 9 ALA BB 20 0.0 + 21 TC3 9 ALA SC1 21 0.0 + 22 SP2 10 ALA BB 22 0.0 + 23 TC3 10 ALA SC1 23 0.0 + 24 SP2 11 ALA BB 24 0.0 + 25 TC3 11 ALA SC1 25 0.0 + 26 P2 12 MET BB 26 0.0 + 27 C6 12 MET SC1 27 0.0 + 28 P2 13 LYS BB 28 0.0 + 29 SC3 13 LYS SC1 29 0.0 + 30 SQ4p 13 LYS SC2 30 1.0 + 31 P2 14 ARG BB 31 0.0 + 32 SC3 14 ARG SC1 32 0.0 + 33 SQ3p 14 ARG SC2 33 1.0 + 34 P2 15 HIS BB 34 0.0 + 35 TC4 15 HIS SC1 35 0.0 + 36 TN6d 15 HIS SC2 36 0.0 + 37 TN5a 15 HIS SC3 37 0.0 + 38 SP1 16 GLY BB 38 0.0 + 39 P2 17 LEU BB 39 0.0 + 40 SC2 17 LEU SC1 40 0.0 + 41 P2 18 ASP BB 41 0.0 + 42 SQ5n 18 ASP SC1 42 -1.0 + 43 P2 19 ASN BB 43 0.0 + 44 SP5 19 ASN SC1 44 0.0 + 45 P2 20 TYR BB 45 0.0 + 46 TC4 20 TYR SC1 46 0.0 + 47 TC5 20 TYR SC2 47 0.0 + 48 TC5 20 TYR SC3 48 0.0 + 49 TN6 20 TYR SC4 49 0.0 + 50 P2 21 ARG BB 50 0.0 + 51 SC3 21 ARG SC1 51 0.0 + 52 SQ3p 21 ARG SC2 52 1.0 + 53 SP1 22 GLY BB 53 0.0 + 54 P2 23 TYR BB 54 0.0 + 55 TC4 23 TYR SC1 55 0.0 + 56 TC5 23 TYR SC2 56 0.0 + 57 TC5 23 TYR SC3 57 0.0 + 58 TN6 23 TYR SC4 58 0.0 + 59 P2 24 SER BB 59 0.0 + 60 TP1 24 SER SC1 60 0.0 + 61 P2 25 LEU BB 61 0.0 + 62 SC2 25 LEU SC1 62 0.0 + 63 SP1 26 GLY BB 63 0.0 + 64 P2 27 ASN BB 64 0.0 + 65 SP5 27 ASN SC1 65 0.0 + 66 P2 28 TRP BB 66 0.0 + 67 TC4 28 TRP SC1 67 0.0 36.0 + 68 TN6d 28 TRP SC2 68 0.0 36.0 + 69 TC5 28 TRP SC3 69 0.0 0.0 + 70 TC5 28 TRP SC4 70 0.0 36.0 + 71 TC5 28 TRP SC5 71 0.0 36.0 + 72 SP2 29 VAL BB 72 0.0 + 73 SC3 29 VAL SC1 73 0.0 + 74 P2 30 CYS BB 74 0.0 + 75 TC6 30 CYS SC1 75 0.0 + 76 SP2 31 ALA BB 76 0.0 + 77 TC3 31 ALA SC1 77 0.0 + 78 SP2 32 ALA BB 78 0.0 + 79 TC3 32 ALA SC1 79 0.0 + 80 P2 33 LYS BB 80 0.0 + 81 SC3 33 LYS SC1 81 0.0 + 82 SQ4p 33 LYS SC2 82 1.0 + 83 P2 34 PHE BB 83 0.0 + 84 SC4 34 PHE SC1 84 0.0 + 85 TC5 34 PHE SC2 85 0.0 + 86 TC5 34 PHE SC3 86 0.0 + 87 P2 35 GLU BB 87 0.0 + 88 Q5n 35 GLU SC1 88 -1.0 + 89 P2 36 SER BB 89 0.0 + 90 TP1 36 SER SC1 90 0.0 + 91 P2 37 ASN BB 91 0.0 + 92 SP5 37 ASN SC1 92 0.0 + 93 P2 38 PHE BB 93 0.0 + 94 SC4 38 PHE SC1 94 0.0 + 95 TC5 38 PHE SC2 95 0.0 + 96 TC5 38 PHE SC3 96 0.0 + 97 P2 39 ASN BB 97 0.0 + 98 SP5 39 ASN SC1 98 0.0 + 99 P2 40 THR BB 99 0.0 +100 SP1 40 THR SC1 100 0.0 +101 P2 41 GLN BB 101 0.0 +102 P5 41 GLN SC1 102 0.0 +103 SP2 42 ALA BB 103 0.0 +104 TC3 42 ALA SC1 104 0.0 +105 P2 43 THR BB 105 0.0 +106 SP1 43 THR SC1 106 0.0 +107 P2 44 ASN BB 107 0.0 +108 SP5 44 ASN SC1 108 0.0 +109 P2 45 ARG BB 109 0.0 +110 SC3 45 ARG SC1 110 0.0 +111 SQ3p 45 ARG SC2 111 1.0 +112 P2 46 ASN BB 112 0.0 +113 SP5 46 ASN SC1 113 0.0 +114 P2 47 THR BB 114 0.0 +115 SP1 47 THR SC1 115 0.0 +116 P2 48 ASP BB 116 0.0 +117 SQ5n 48 ASP SC1 117 -1.0 +118 SP1 49 GLY BB 118 0.0 +119 P2 50 SER BB 119 0.0 +120 TP1 50 SER SC1 120 0.0 +121 P2 51 THR BB 121 0.0 +122 SP1 51 THR SC1 122 0.0 +123 P2 52 ASP BB 123 0.0 +124 SQ5n 52 ASP SC1 124 -1.0 +125 P2 53 TYR BB 125 0.0 +126 TC4 53 TYR SC1 126 0.0 +127 TC5 53 TYR SC2 127 0.0 +128 TC5 53 TYR SC3 128 0.0 +129 TN6 53 TYR SC4 129 0.0 +130 SP1 54 GLY BB 130 0.0 +131 P2 55 ILE BB 131 0.0 +132 SC2 55 ILE SC1 132 0.0 +133 P2 56 LEU BB 133 0.0 +134 SC2 56 LEU SC1 134 0.0 +135 P2 57 GLN BB 135 0.0 +136 P5 57 GLN SC1 136 0.0 +137 P2 58 ILE BB 137 0.0 +138 SC2 58 ILE SC1 138 0.0 +139 P2 59 ASN BB 139 0.0 +140 SP5 59 ASN SC1 140 0.0 +141 P2 60 SER BB 141 0.0 +142 TP1 60 SER SC1 142 0.0 +143 P2 61 ARG BB 143 0.0 +144 SC3 61 ARG SC1 144 0.0 +145 SQ3p 61 ARG SC2 145 1.0 +146 P2 62 TRP BB 146 0.0 +147 TC4 62 TRP SC1 147 0.0 36.0 +148 TN6d 62 TRP SC2 148 0.0 36.0 +149 TC5 62 TRP SC3 149 0.0 0.0 +150 TC5 62 TRP SC4 150 0.0 36.0 +151 TC5 62 TRP SC5 151 0.0 36.0 +152 P2 63 TRP BB 152 0.0 +153 TC4 63 TRP SC1 153 0.0 36.0 +154 TN6d 63 TRP SC2 154 0.0 36.0 +155 TC5 63 TRP SC3 155 0.0 0.0 +156 TC5 63 TRP SC4 156 0.0 36.0 +157 TC5 63 TRP SC5 157 0.0 36.0 +158 P2 64 CYS BB 158 0.0 +159 TC6 64 CYS SC1 159 0.0 +160 P2 65 ASN BB 160 0.0 +161 SP5 65 ASN SC1 161 0.0 +162 P2 66 ASP BB 162 0.0 +163 SQ5n 66 ASP SC1 163 -1.0 +164 SP1 67 GLY BB 164 0.0 +165 P2 68 ARG BB 165 0.0 +166 SC3 68 ARG SC1 166 0.0 +167 SQ3p 68 ARG SC2 167 1.0 +168 P2 69 THR BB 168 0.0 +169 SP1 69 THR SC1 169 0.0 +170 SP2a 70 PRO BB 170 0.0 +171 SC3 70 PRO SC1 171 0.0 +172 SP1 71 GLY BB 172 0.0 +173 P2 72 SER BB 173 0.0 +174 TP1 72 SER SC1 174 0.0 +175 P2 73 ARG BB 175 0.0 +176 SC3 73 ARG SC1 176 0.0 +177 SQ3p 73 ARG SC2 177 1.0 +178 P2 74 ASN BB 178 0.0 +179 SP5 74 ASN SC1 179 0.0 +180 P2 75 LEU BB 180 0.0 +181 SC2 75 LEU SC1 181 0.0 +182 P2 76 CYS BB 182 0.0 +183 TC6 76 CYS SC1 183 0.0 +184 P2 77 ASN BB 184 0.0 +185 SP5 77 ASN SC1 185 0.0 +186 P2 78 ILE BB 186 0.0 +187 SC2 78 ILE SC1 187 0.0 +188 SP2a 79 PRO BB 188 0.0 +189 SC3 79 PRO SC1 189 0.0 +190 P2 80 CYS BB 190 0.0 +191 TC6 80 CYS SC1 191 0.0 +192 P2 81 SER BB 192 0.0 +193 TP1 81 SER SC1 193 0.0 +194 SP2 82 ALA BB 194 0.0 +195 TC3 82 ALA SC1 195 0.0 +196 P2 83 LEU BB 196 0.0 +197 SC2 83 LEU SC1 197 0.0 +198 P2 84 LEU BB 198 0.0 +199 SC2 84 LEU SC1 199 0.0 +200 P2 85 SER BB 200 0.0 +201 TP1 85 SER SC1 201 0.0 +202 P2 86 SER BB 202 0.0 +203 TP1 86 SER SC1 203 0.0 +204 P2 87 ASP BB 204 0.0 +205 SQ5n 87 ASP SC1 205 -1.0 +206 P2 88 ILE BB 206 0.0 +207 SC2 88 ILE SC1 207 0.0 +208 P2 89 THR BB 208 0.0 +209 SP1 89 THR SC1 209 0.0 +210 SP2 90 ALA BB 210 0.0 +211 TC3 90 ALA SC1 211 0.0 +212 P2 91 SER BB 212 0.0 +213 TP1 91 SER SC1 213 0.0 +214 SP2 92 VAL BB 214 0.0 +215 SC3 92 VAL SC1 215 0.0 +216 P2 93 ASN BB 216 0.0 +217 SP5 93 ASN SC1 217 0.0 +218 P2 94 CYS BB 218 0.0 +219 TC6 94 CYS SC1 219 0.0 +220 SP2 95 ALA BB 220 0.0 +221 TC3 95 ALA SC1 221 0.0 +222 P2 96 LYS BB 222 0.0 +223 SC3 96 LYS SC1 223 0.0 +224 SQ4p 96 LYS SC2 224 1.0 +225 P2 97 LYS BB 225 0.0 +226 SC3 97 LYS SC1 226 0.0 +227 SQ4p 97 LYS SC2 227 1.0 +228 P2 98 ILE BB 228 0.0 +229 SC2 98 ILE SC1 229 0.0 +230 SP2 99 VAL BB 230 0.0 +231 SC3 99 VAL SC1 231 0.0 +232 P2 100 SER BB 232 0.0 +233 TP1 100 SER SC1 233 0.0 +234 P2 101 ASP BB 234 0.0 +235 SQ5n 101 ASP SC1 235 -1.0 +236 SP1 102 GLY BB 236 0.0 +237 P2 103 ASN BB 237 0.0 +238 SP5 103 ASN SC1 238 0.0 +239 SP1 104 GLY BB 239 0.0 +240 P2 105 MET BB 240 0.0 +241 C6 105 MET SC1 241 0.0 +242 P2 106 ASN BB 242 0.0 +243 SP5 106 ASN SC1 243 0.0 +244 SP2 107 ALA BB 244 0.0 +245 TC3 107 ALA SC1 245 0.0 +246 P2 108 TRP BB 246 0.0 +247 TC4 108 TRP SC1 247 0.0 36.0 +248 TN6d 108 TRP SC2 248 0.0 36.0 +249 TC5 108 TRP SC3 249 0.0 0.0 +250 TC5 108 TRP SC4 250 0.0 36.0 +251 TC5 108 TRP SC5 251 0.0 36.0 +252 SP2 109 VAL BB 252 0.0 +253 SC3 109 VAL SC1 253 0.0 +254 SP2 110 ALA BB 254 0.0 +255 TC3 110 ALA SC1 255 0.0 +256 P2 111 TRP BB 256 0.0 +257 TC4 111 TRP SC1 257 0.0 36.0 +258 TN6d 111 TRP SC2 258 0.0 36.0 +259 TC5 111 TRP SC3 259 0.0 0.0 +260 TC5 111 TRP SC4 260 0.0 36.0 +261 TC5 111 TRP SC5 261 0.0 36.0 +262 P2 112 ARG BB 262 0.0 +263 SC3 112 ARG SC1 263 0.0 +264 SQ3p 112 ARG SC2 264 1.0 +265 P2 113 ASN BB 265 0.0 +266 SP5 113 ASN SC1 266 0.0 +267 P2 114 ARG BB 267 0.0 +268 SC3 114 ARG SC1 268 0.0 +269 SQ3p 114 ARG SC2 269 1.0 +270 P2 115 CYS BB 270 0.0 +271 TC6 115 CYS SC1 271 0.0 +272 P2 116 LYS BB 272 0.0 +273 SC3 116 LYS SC1 273 0.0 +274 SQ4p 116 LYS SC2 274 1.0 +275 SP1 117 GLY BB 275 0.0 +276 P2 118 THR BB 276 0.0 +277 SP1 118 THR SC1 277 0.0 +278 P2 119 ASP BB 278 0.0 +279 SQ5n 119 ASP SC1 279 -1.0 +280 SP2 120 VAL BB 280 0.0 +281 SC3 120 VAL SC1 281 0.0 +282 P2 121 GLN BB 282 0.0 +283 P5 121 GLN SC1 283 0.0 +284 SP2 122 ALA BB 284 0.0 +285 TC3 122 ALA SC1 285 0.0 +286 P2 123 TRP BB 286 0.0 +287 TC4 123 TRP SC1 287 0.0 36.0 +288 TN6d 123 TRP SC2 288 0.0 36.0 +289 TC5 123 TRP SC3 289 0.0 0.0 +290 TC5 123 TRP SC4 290 0.0 36.0 +291 TC5 123 TRP SC5 291 0.0 36.0 +292 P2 124 ILE BB 292 0.0 +293 SC2 124 ILE SC1 293 0.0 +294 P2 125 ARG BB 294 0.0 +295 SC3 125 ARG SC1 295 0.0 +296 SQ3p 125 ARG SC2 296 1.0 +297 SP1 126 GLY BB 297 0.0 +298 P2 127 CYS BB 298 0.0 +299 TC6 127 CYS SC1 299 0.0 +300 P2 128 ARG BB 300 0.0 +301 SC3 128 ARG SC1 301 0.0 +302 SQ3p 128 ARG SC2 302 1.0 +303 Q5 129 LEU BB 303 -1 +304 SC2 129 LEU SC1 304 0.0 +305 molecule_1 1 LYS CA 305 0 0.0 +306 molecule_2 2 VAL CA 306 0 0.0 +307 molecule_3 3 PHE CA 307 0 0.0 +308 molecule_4 4 GLY CA 308 0 0.0 +309 molecule_5 5 ARG CA 309 0 0.0 +310 molecule_6 6 CYS CA 310 0 0.0 +311 molecule_7 7 GLU CA 311 0 0.0 +312 molecule_8 8 LEU CA 312 0 0.0 +313 molecule_9 9 ALA CA 313 0 0.0 +314 molecule_10 10 ALA CA 314 0 0.0 +315 molecule_11 11 ALA CA 315 0 0.0 +316 molecule_12 12 MET CA 316 0 0.0 +317 molecule_13 13 LYS CA 317 0 0.0 +318 molecule_14 14 ARG CA 318 0 0.0 +319 molecule_15 15 HIS CA 319 0 0.0 +320 molecule_16 16 GLY CA 320 0 0.0 +321 molecule_17 17 LEU CA 321 0 0.0 +322 molecule_18 18 ASP CA 322 0 0.0 +323 molecule_19 19 ASN CA 323 0 0.0 +324 molecule_20 20 TYR CA 324 0 0.0 +325 molecule_21 21 ARG CA 325 0 0.0 +326 molecule_22 22 GLY CA 326 0 0.0 +327 molecule_23 23 TYR CA 327 0 0.0 +328 molecule_24 24 SER CA 328 0 0.0 +329 molecule_25 25 LEU CA 329 0 0.0 +330 molecule_26 26 GLY CA 330 0 0.0 +331 molecule_27 27 ASN CA 331 0 0.0 +332 molecule_28 28 TRP CA 332 0 0.0 +333 molecule_29 29 VAL CA 333 0 0.0 +334 molecule_30 30 CYS CA 334 0 0.0 +335 molecule_31 31 ALA CA 335 0 0.0 +336 molecule_32 32 ALA CA 336 0 0.0 +337 molecule_33 33 LYS CA 337 0 0.0 +338 molecule_34 34 PHE CA 338 0 0.0 +339 molecule_35 35 GLU CA 339 0 0.0 +340 molecule_36 36 SER CA 340 0 0.0 +341 molecule_37 37 ASN CA 341 0 0.0 +342 molecule_38 38 PHE CA 342 0 0.0 +343 molecule_39 39 ASN CA 343 0 0.0 +344 molecule_40 40 THR CA 344 0 0.0 +345 molecule_41 41 GLN CA 345 0 0.0 +346 molecule_42 42 ALA CA 346 0 0.0 +347 molecule_43 43 THR CA 347 0 0.0 +348 molecule_44 44 ASN CA 348 0 0.0 +349 molecule_45 45 ARG CA 349 0 0.0 +350 molecule_46 46 ASN CA 350 0 0.0 +351 molecule_47 47 THR CA 351 0 0.0 +352 molecule_48 48 ASP CA 352 0 0.0 +353 molecule_49 49 GLY CA 353 0 0.0 +354 molecule_50 50 SER CA 354 0 0.0 +355 molecule_51 51 THR CA 355 0 0.0 +356 molecule_52 52 ASP CA 356 0 0.0 +357 molecule_53 53 TYR CA 357 0 0.0 +358 molecule_54 54 GLY CA 358 0 0.0 +359 molecule_55 55 ILE CA 359 0 0.0 +360 molecule_56 56 LEU CA 360 0 0.0 +361 molecule_57 57 GLN CA 361 0 0.0 +362 molecule_58 58 ILE CA 362 0 0.0 +363 molecule_59 59 ASN CA 363 0 0.0 +364 molecule_60 60 SER CA 364 0 0.0 +365 molecule_61 61 ARG CA 365 0 0.0 +366 molecule_62 62 TRP CA 366 0 0.0 +367 molecule_63 63 TRP CA 367 0 0.0 +368 molecule_64 64 CYS CA 368 0 0.0 +369 molecule_65 65 ASN CA 369 0 0.0 +370 molecule_66 66 ASP CA 370 0 0.0 +371 molecule_67 67 GLY CA 371 0 0.0 +372 molecule_68 68 ARG CA 372 0 0.0 +373 molecule_69 69 THR CA 373 0 0.0 +374 molecule_70 70 PRO CA 374 0 0.0 +375 molecule_71 71 GLY CA 375 0 0.0 +376 molecule_72 72 SER CA 376 0 0.0 +377 molecule_73 73 ARG CA 377 0 0.0 +378 molecule_74 74 ASN CA 378 0 0.0 +379 molecule_75 75 LEU CA 379 0 0.0 +380 molecule_76 76 CYS CA 380 0 0.0 +381 molecule_77 77 ASN CA 381 0 0.0 +382 molecule_78 78 ILE CA 382 0 0.0 +383 molecule_79 79 PRO CA 383 0 0.0 +384 molecule_80 80 CYS CA 384 0 0.0 +385 molecule_81 81 SER CA 385 0 0.0 +386 molecule_82 82 ALA CA 386 0 0.0 +387 molecule_83 83 LEU CA 387 0 0.0 +388 molecule_84 84 LEU CA 388 0 0.0 +389 molecule_85 85 SER CA 389 0 0.0 +390 molecule_86 86 SER CA 390 0 0.0 +391 molecule_87 87 ASP CA 391 0 0.0 +392 molecule_88 88 ILE CA 392 0 0.0 +393 molecule_89 89 THR CA 393 0 0.0 +394 molecule_90 90 ALA CA 394 0 0.0 +395 molecule_91 91 SER CA 395 0 0.0 +396 molecule_92 92 VAL CA 396 0 0.0 +397 molecule_93 93 ASN CA 397 0 0.0 +398 molecule_94 94 CYS CA 398 0 0.0 +399 molecule_95 95 ALA CA 399 0 0.0 +400 molecule_96 96 LYS CA 400 0 0.0 +401 molecule_97 97 LYS CA 401 0 0.0 +402 molecule_98 98 ILE CA 402 0 0.0 +403 molecule_99 99 VAL CA 403 0 0.0 +404 molecule_100 100 SER CA 404 0 0.0 +405 molecule_101 101 ASP CA 405 0 0.0 +406 molecule_102 102 GLY CA 406 0 0.0 +407 molecule_103 103 ASN CA 407 0 0.0 +408 molecule_104 104 GLY CA 408 0 0.0 +409 molecule_105 105 MET CA 409 0 0.0 +410 molecule_106 106 ASN CA 410 0 0.0 +411 molecule_107 107 ALA CA 411 0 0.0 +412 molecule_108 108 TRP CA 412 0 0.0 +413 molecule_109 109 VAL CA 413 0 0.0 +414 molecule_110 110 ALA CA 414 0 0.0 +415 molecule_111 111 TRP CA 415 0 0.0 +416 molecule_112 112 ARG CA 416 0 0.0 +417 molecule_113 113 ASN CA 417 0 0.0 +418 molecule_114 114 ARG CA 418 0 0.0 +419 molecule_115 115 CYS CA 419 0 0.0 +420 molecule_116 116 LYS CA 420 0 0.0 +421 molecule_117 117 GLY CA 421 0 0.0 +422 molecule_118 118 THR CA 422 0 0.0 +423 molecule_119 119 ASP CA 423 0 0.0 +424 molecule_120 120 VAL CA 424 0 0.0 +425 molecule_121 121 GLN CA 425 0 0.0 +426 molecule_122 122 ALA CA 426 0 0.0 +427 molecule_123 123 TRP CA 427 0 0.0 +428 molecule_124 124 ILE CA 428 0 0.0 +429 molecule_125 125 ARG CA 429 0 0.0 +430 molecule_126 126 GLY CA 430 0 0.0 +431 molecule_127 127 CYS CA 431 0 0.0 +432 molecule_128 128 ARG CA 432 0 0.0 +433 molecule_129 129 LEU CA 433 0 0.0 + +[ bonds ] +; Backbone bonds + 1 4 1 0.350 4000 + 4 6 1 0.350 4000 + 6 10 1 0.350 4000 + 34 38 1 0.350 4000 + 38 39 1 0.350 4000 + 39 41 1 0.350 4000 + 41 43 1 0.350 4000 + 43 45 1 0.350 4000 + 45 50 1 0.350 4000 + 50 53 1 0.350 4000 + 53 54 1 0.350 4000 + 54 59 1 0.350 4000 + 91 93 1 0.350 4000 + 93 97 1 0.350 4000 + 97 99 1 0.350 4000 + 99 101 1 0.350 4000 +101 103 1 0.350 4000 +103 105 1 0.350 4000 +105 107 1 0.350 4000 +107 109 1 0.350 4000 +109 112 1 0.350 4000 +112 114 1 0.350 4000 +114 116 1 0.350 4000 +116 118 1 0.350 4000 +118 119 1 0.350 4000 +119 121 1 0.350 4000 +121 123 1 0.350 4000 +123 125 1 0.350 4000 +125 130 1 0.350 4000 +130 131 1 0.350 4000 +131 133 1 0.350 4000 +133 135 1 0.350 4000 +135 137 1 0.350 4000 +137 139 1 0.350 4000 +139 141 1 0.350 4000 +141 143 1 0.350 4000 +143 146 1 0.350 4000 +146 152 1 0.350 4000 +152 158 1 0.350 4000 +158 160 1 0.350 4000 +160 162 1 0.350 4000 +162 164 1 0.350 4000 +164 165 1 0.350 4000 +165 168 1 0.350 4000 +168 170 1 0.350 4000 +170 172 1 0.350 4000 +172 173 1 0.350 4000 +173 175 1 0.350 4000 +175 178 1 0.350 4000 +178 180 1 0.350 4000 +180 182 1 0.350 4000 +182 184 1 0.350 4000 +184 186 1 0.350 4000 +186 188 1 0.350 4000 +200 202 1 0.350 4000 +202 204 1 0.350 4000 +204 206 1 0.350 4000 +234 236 1 0.350 4000 +236 237 1 0.350 4000 +270 272 1 0.350 4000 +272 275 1 0.350 4000 +275 276 1 0.350 4000 +276 278 1 0.350 4000 +294 297 1 0.350 4000 +297 298 1 0.350 4000 +298 300 1 0.350 4000 +300 303 1 0.350 4000 + +; Side chain bonds + 1 2 1 0.330 5000 + 2 3 1 0.360 5000 + 6 7 1 0.325 7500 + 11 12 1 0.330 5000 + 12 13 1 0.380 5000 + 14 15 1 0.341 7500 + 16 17 1 0.400 5000 + 18 19 1 0.363 7500 + 26 27 1 0.40 2500 + 28 29 1 0.330 5000 + 29 30 1 0.360 5000 + 31 32 1 0.330 5000 + 32 33 1 0.380 5000 + 34 35 1 0.336 7500 + 39 40 1 0.363 7500 + 41 42 1 0.352 7500 + 43 44 1 0.352 5000 + 45 46 1 0.325 5000 + 50 51 1 0.330 5000 + 51 52 1 0.380 5000 + 54 55 1 0.325 5000 + 59 60 1 0.287 7500 + 61 62 1 0.363 7500 + 64 65 1 0.352 5000 + 66 67 1 0.315 5000 + 74 75 1 0.341 7500 + 80 81 1 0.330 5000 + 81 82 1 0.360 5000 + 83 84 1 0.325 7500 + 87 88 1 0.400 5000 + 89 90 1 0.287 7500 + 91 92 1 0.352 5000 + 93 94 1 0.325 7500 + 97 98 1 0.352 5000 +101 102 1 0.400 5000 +107 108 1 0.352 5000 +109 110 1 0.330 5000 +110 111 1 0.380 5000 +112 113 1 0.352 5000 +116 117 1 0.352 7500 +119 120 1 0.287 7500 +123 124 1 0.352 7500 +125 126 1 0.325 5000 +133 134 1 0.363 7500 +135 136 1 0.400 5000 +139 140 1 0.352 5000 +141 142 1 0.287 7500 +143 144 1 0.330 5000 +144 145 1 0.380 5000 +146 147 1 0.315 5000 +152 153 1 0.315 5000 +158 159 1 0.341 7500 +160 161 1 0.352 5000 +162 163 1 0.352 7500 +165 166 1 0.330 5000 +166 167 1 0.380 5000 +170 171 1 0.330 7500 +173 174 1 0.287 7500 +175 176 1 0.330 5000 +176 177 1 0.380 5000 +178 179 1 0.352 5000 +180 181 1 0.363 7500 +182 183 1 0.341 7500 +184 185 1 0.352 5000 +188 189 1 0.330 7500 +190 191 1 0.341 7500 +192 193 1 0.287 7500 +196 197 1 0.363 7500 +198 199 1 0.363 7500 +200 201 1 0.287 7500 +202 203 1 0.287 7500 +204 205 1 0.352 7500 +212 213 1 0.287 7500 +216 217 1 0.352 5000 +218 219 1 0.341 7500 +222 223 1 0.330 5000 +223 224 1 0.360 5000 +225 226 1 0.330 5000 +226 227 1 0.360 5000 +232 233 1 0.287 7500 +234 235 1 0.352 7500 +237 238 1 0.352 5000 +240 241 1 0.40 2500 +242 243 1 0.352 5000 +246 247 1 0.315 5000 +256 257 1 0.315 5000 +262 263 1 0.330 5000 +263 264 1 0.380 5000 +265 266 1 0.352 5000 +267 268 1 0.330 5000 +268 269 1 0.380 5000 +270 271 1 0.341 7500 +272 273 1 0.330 5000 +273 274 1 0.360 5000 +278 279 1 0.352 7500 +282 283 1 0.400 5000 +286 287 1 0.315 5000 +294 295 1 0.330 5000 +295 296 1 0.380 5000 +298 299 1 0.341 7500 +300 301 1 0.330 5000 +301 302 1 0.380 5000 +303 304 1 0.363 7500 + +#ifdef FLEXIBLE +; Side chain bonds + 4 5 1 0.292 1000000 + 7 8 1 0.340 1000000 + 7 9 1 0.340 1000000 + 8 9 1 0.290 1000000 + 20 21 1 0.270 1000000 + 22 23 1 0.270 1000000 + 24 25 1 0.270 1000000 + 35 36 1 0.320 1000000 + 35 37 1 0.300 1000000 + 36 37 1 0.270 1000000 + 46 47 1 0.300 1000000 + 46 48 1 0.300 1000000 + 47 49 1 0.285 1000000 + 48 49 1 0.285 1000000 + 47 48 1 0.300 1000000 + 55 56 1 0.300 1000000 + 55 57 1 0.300 1000000 + 56 58 1 0.285 1000000 + 57 58 1 0.285 1000000 + 56 57 1 0.300 1000000 + 67 68 1 0.335 1000000 + 68 71 1 0.412 1000000 + 70 71 1 0.293 1000000 + 67 70 1 0.404 1000000 + 68 70 1 0.470 1000000 + 72 73 1 0.292 1000000 + 76 77 1 0.270 1000000 + 78 79 1 0.270 1000000 + 84 85 1 0.340 1000000 + 84 86 1 0.340 1000000 + 85 86 1 0.290 1000000 + 94 95 1 0.340 1000000 + 94 96 1 0.340 1000000 + 95 96 1 0.290 1000000 + 99 100 1 0.305 1000000 +103 104 1 0.270 1000000 +105 106 1 0.305 1000000 +114 115 1 0.305 1000000 +121 122 1 0.305 1000000 +126 127 1 0.300 1000000 +126 128 1 0.300 1000000 +127 129 1 0.285 1000000 +128 129 1 0.285 1000000 +127 128 1 0.300 1000000 +131 132 1 0.341 1000000 +137 138 1 0.341 1000000 +147 148 1 0.335 1000000 +148 151 1 0.412 1000000 +150 151 1 0.293 1000000 +147 150 1 0.404 1000000 +148 150 1 0.470 1000000 +153 154 1 0.335 1000000 +154 157 1 0.412 1000000 +156 157 1 0.293 1000000 +153 156 1 0.404 1000000 +154 156 1 0.470 1000000 +168 169 1 0.305 1000000 +186 187 1 0.341 1000000 +194 195 1 0.270 1000000 +206 207 1 0.341 1000000 +208 209 1 0.305 1000000 +210 211 1 0.270 1000000 +214 215 1 0.292 1000000 +220 221 1 0.270 1000000 +228 229 1 0.341 1000000 +230 231 1 0.292 1000000 +244 245 1 0.270 1000000 +247 248 1 0.335 1000000 +248 251 1 0.412 1000000 +250 251 1 0.293 1000000 +247 250 1 0.404 1000000 +248 250 1 0.470 1000000 +252 253 1 0.292 1000000 +254 255 1 0.270 1000000 +257 258 1 0.335 1000000 +258 261 1 0.412 1000000 +260 261 1 0.293 1000000 +257 260 1 0.404 1000000 +258 260 1 0.470 1000000 +276 277 1 0.305 1000000 +280 281 1 0.292 1000000 +284 285 1 0.270 1000000 +287 288 1 0.335 1000000 +288 291 1 0.412 1000000 +290 291 1 0.293 1000000 +287 290 1 0.404 1000000 +288 290 1 0.470 1000000 +292 293 1 0.341 1000000 +#endif + +[ constraints ] + 15 299 1 0.24 ; Disulfide bridge + 75 271 1 0.24 ; Disulfide bridge +159 191 1 0.24 ; Disulfide bridge +183 219 1 0.24 ; Disulfide bridge + +; Backbone bonds + 10 11 1 0.33 + 11 14 1 0.310 + 14 16 1 0.310 + 16 18 1 0.310 + 18 20 1 0.310 + 20 22 1 0.310 + 22 24 1 0.310 + 24 26 1 0.310 + 26 28 1 0.310 + 28 31 1 0.310 + 31 34 1 0.33 + 59 61 1 0.33 + 61 63 1 0.310 + 63 64 1 0.310 + 64 66 1 0.310 + 66 72 1 0.310 + 72 74 1 0.310 + 74 76 1 0.310 + 76 78 1 0.310 + 78 80 1 0.310 + 80 83 1 0.310 + 83 87 1 0.310 + 87 89 1 0.310 + 89 91 1 0.33 +188 190 1 0.33 +190 192 1 0.310 +192 194 1 0.310 +194 196 1 0.310 +196 198 1 0.310 +198 200 1 0.33 +206 208 1 0.33 +208 210 1 0.310 +210 212 1 0.310 +212 214 1 0.310 +214 216 1 0.310 +216 218 1 0.310 +218 220 1 0.310 +220 222 1 0.310 +222 225 1 0.310 +225 228 1 0.310 +228 230 1 0.310 +230 232 1 0.310 +232 234 1 0.33 +237 239 1 0.33 +239 240 1 0.310 +240 242 1 0.310 +242 244 1 0.310 +244 246 1 0.33 +246 252 1 0.33 +252 254 1 0.310 +254 256 1 0.310 +256 262 1 0.310 +262 265 1 0.310 +265 267 1 0.310 +267 270 1 0.33 +278 280 1 0.33 +280 282 1 0.310 +282 284 1 0.310 +284 286 1 0.310 +286 292 1 0.310 +292 294 1 0.33 + +#ifndef FLEXIBLE +; Side chain bonds + 4 5 1 0.292 + 7 8 1 0.340 + 7 9 1 0.340 + 8 9 1 0.290 + 20 21 1 0.270 + 22 23 1 0.270 + 24 25 1 0.270 + 35 36 1 0.320 + 35 37 1 0.300 + 36 37 1 0.270 + 46 47 1 0.300 + 46 48 1 0.300 + 47 49 1 0.285 + 48 49 1 0.285 + 47 48 1 0.300 + 55 56 1 0.300 + 55 57 1 0.300 + 56 58 1 0.285 + 57 58 1 0.285 + 56 57 1 0.300 + 67 68 1 0.335 + 68 71 1 0.412 + 70 71 1 0.293 + 67 70 1 0.404 + 68 70 1 0.470 + 72 73 1 0.292 + 76 77 1 0.270 + 78 79 1 0.270 + 84 85 1 0.340 + 84 86 1 0.340 + 85 86 1 0.290 + 94 95 1 0.340 + 94 96 1 0.340 + 95 96 1 0.290 + 99 100 1 0.305 +103 104 1 0.270 +105 106 1 0.305 +114 115 1 0.305 +121 122 1 0.305 +126 127 1 0.300 +126 128 1 0.300 +127 129 1 0.285 +128 129 1 0.285 +127 128 1 0.300 +131 132 1 0.341 +137 138 1 0.341 +147 148 1 0.335 +148 151 1 0.412 +150 151 1 0.293 +147 150 1 0.404 +148 150 1 0.470 +153 154 1 0.335 +154 157 1 0.412 +156 157 1 0.293 +153 156 1 0.404 +154 156 1 0.470 +168 169 1 0.305 +186 187 1 0.341 +194 195 1 0.270 +206 207 1 0.341 +208 209 1 0.305 +210 211 1 0.270 +214 215 1 0.292 +220 221 1 0.270 +228 229 1 0.341 +230 231 1 0.292 +244 245 1 0.270 +247 248 1 0.335 +248 251 1 0.412 +250 251 1 0.293 +247 250 1 0.404 +248 250 1 0.470 +252 253 1 0.292 +254 255 1 0.270 +257 258 1 0.335 +258 261 1 0.412 +260 261 1 0.293 +257 260 1 0.404 +258 260 1 0.470 +276 277 1 0.305 +280 281 1 0.292 +284 285 1 0.270 +287 288 1 0.335 +288 291 1 0.412 +290 291 1 0.293 +287 290 1 0.404 +288 290 1 0.470 +292 293 1 0.341 +#endif + +[ angles ] +; BBB angles + 6 10 11 10 127 20 + 10 11 14 10 127 20 + 11 14 16 2 96 700 + 14 16 18 2 96 700 + 16 18 20 2 96 700 + 18 20 22 2 96 700 + 20 22 24 2 96 700 + 22 24 26 2 96 700 + 24 26 28 2 96 700 + 26 28 31 2 96 700 + 28 31 34 10 100 20 + 31 34 38 10 100 20 + 54 59 61 10 127 20 + 59 61 63 10 127 20 + 61 63 64 2 96 700 + 63 64 66 2 96 700 + 64 66 72 2 96 700 + 66 72 74 2 96 700 + 72 74 76 2 96 700 + 74 76 78 2 96 700 + 76 78 80 2 96 700 + 78 80 83 2 96 700 + 80 83 87 2 96 700 + 83 87 89 2 96 700 + 87 89 91 10 100 20 + 89 91 93 10 100 20 +186 188 190 10 130 20 +188 190 192 10 134 25 +190 192 194 2 96 700 +192 194 196 2 96 700 +194 196 198 2 96 700 +196 198 200 10 130 20 +198 200 202 10 130 20 +204 206 208 10 127 20 +206 208 210 10 127 20 +208 210 212 2 96 700 +210 212 214 2 96 700 +212 214 216 2 96 700 +214 216 218 2 96 700 +216 218 220 2 96 700 +218 220 222 2 96 700 +220 222 225 2 96 700 +222 225 228 2 96 700 +225 228 230 2 96 700 +228 230 232 2 96 700 +230 232 234 10 100 20 +232 234 236 10 100 20 +236 237 239 10 130 20 +237 239 240 10 130 20 +239 240 242 2 96 700 +240 242 244 2 96 700 +242 244 246 10 130 20 +244 246 252 10 130 20 +246 252 254 10 130 20 +252 254 256 2 96 700 +254 256 262 2 96 700 +256 262 265 2 96 700 +262 265 267 2 96 700 +265 267 270 10 100 20 +267 270 272 10 100 20 +276 278 280 10 127 20 +278 280 282 10 127 20 +280 282 284 2 96 700 +282 284 286 2 96 700 +284 286 292 2 96 700 +286 292 294 10 100 20 +292 294 297 10 100 20 + 1 4 6 10 127 20 + 4 6 10 10 127 20 + 41 43 45 10 100 20 + 43 45 50 10 100 20 + 45 50 53 10 100 20 + 50 53 54 10 100 20 + 53 54 59 10 100 20 + 91 93 97 10 100 20 + 93 97 99 10 100 20 + 97 99 101 10 100 20 +101 103 105 10 100 20 +103 105 107 10 127 20 +105 107 109 10 134 25 +107 109 112 10 127 20 +109 112 114 10 100 20 +118 119 121 10 127 20 +119 121 123 10 127 20 +121 123 125 10 134 25 +123 125 130 10 100 20 +125 130 131 10 100 20 +133 135 137 10 100 20 +135 137 139 10 100 20 +137 139 141 10 100 20 +139 141 143 10 100 20 +152 158 160 10 100 20 +158 160 162 10 127 20 +160 162 164 10 127 20 +184 186 188 10 127 20 +165 168 170 10 127 20 +168 170 172 10 100 20 +170 172 173 10 100 20 +114 116 118 10 100 20 +116 118 119 10 100 20 +162 164 165 10 127 20 +164 165 168 10 127 20 +182 184 186 10 100 20 +200 202 204 10 130 20 +202 204 206 10 127 20 +234 236 237 10 100 20 +272 275 276 10 100 20 +275 276 278 10 100 20 + 34 38 39 10 100 20 + 38 39 41 10 100 20 + 39 41 43 10 100 20 + 99 101 103 10 100 20 +112 114 116 10 100 20 +146 152 158 10 100 20 +172 173 175 10 100 20 +173 175 178 10 127 20 +175 178 180 10 100 20 +178 180 182 10 100 20 +180 182 184 10 100 20 +294 297 298 10 100 20 +297 298 300 10 100 20 +298 300 303 10 127 20 +130 131 133 10 100 20 +131 133 135 10 100 20 +141 143 146 10 100 20 +143 146 152 10 100 20 +270 272 275 10 100 20 + +; BBS angles regular martini + 1 4 5 2 100 25 + 4 6 7 2 100 25 + 10 11 12 2 100 25 + 11 14 15 2 100 25 + 14 16 17 2 100 25 + 16 18 19 2 100 25 + 18 20 21 2 100 25 + 20 22 23 2 100 25 + 22 24 25 2 100 25 + 24 26 27 2 100 25 + 26 28 29 2 100 25 + 28 31 32 2 100 25 + 31 34 35 2 100 25 + 38 39 40 2 100 25 + 39 41 42 2 100 25 + 41 43 44 2 100 25 + 43 45 46 2 100 25 + 45 50 51 2 100 25 + 53 54 55 2 100 25 + 54 59 60 2 100 25 + 59 61 62 2 100 25 + 63 64 65 2 100 25 + 64 66 67 2 100 25 + 66 72 73 2 100 25 + 72 74 75 2 100 25 + 74 76 77 2 100 25 + 76 78 79 2 100 25 + 78 80 81 2 100 25 + 80 83 84 2 100 25 + 83 87 88 2 100 25 + 87 89 90 2 100 25 + 89 91 92 2 100 25 + 91 93 94 2 100 25 + 93 97 98 2 100 25 + 97 99 100 2 100 25 + 99 101 102 2 100 25 +101 103 104 2 100 25 +103 105 106 2 100 25 +105 107 108 2 100 25 +107 109 110 2 100 25 +109 112 113 2 100 25 +112 114 115 2 100 25 +114 116 117 2 100 25 +118 119 120 2 100 25 +119 121 122 2 100 25 +121 123 124 2 100 25 +123 125 126 2 100 25 +130 131 132 2 100 25 +131 133 134 2 100 25 +133 135 136 2 100 25 +135 137 138 2 100 25 +137 139 140 2 100 25 +139 141 142 2 100 25 +141 143 144 2 100 25 +143 146 147 2 100 25 +146 152 153 2 100 25 +152 158 159 2 100 25 +158 160 161 2 100 25 +160 162 163 2 100 25 +164 165 166 2 100 25 +165 168 169 2 100 25 +168 170 171 2 100 25 +172 173 174 2 100 25 +173 175 176 2 100 25 +175 178 179 2 100 25 +178 180 181 2 100 25 +180 182 183 2 100 25 +182 184 185 2 100 25 +184 186 187 2 100 25 +186 188 189 2 100 25 +188 190 191 2 100 25 +190 192 193 2 100 25 +192 194 195 2 100 25 +194 196 197 2 100 25 +196 198 199 2 100 25 +198 200 201 2 100 25 +200 202 203 2 100 25 +202 204 205 2 100 25 +204 206 207 2 100 25 +206 208 209 2 100 25 +208 210 211 2 100 25 +210 212 213 2 100 25 +212 214 215 2 100 25 +214 216 217 2 100 25 +216 218 219 2 100 25 +218 220 221 2 100 25 +220 222 223 2 100 25 +222 225 226 2 100 25 +225 228 229 2 100 25 +228 230 231 2 100 25 +230 232 233 2 100 25 +232 234 235 2 100 25 +236 237 238 2 100 25 +239 240 241 2 100 25 +240 242 243 2 100 25 +242 244 245 2 100 25 +244 246 247 2 100 25 +246 252 253 2 100 25 +252 254 255 2 100 25 +254 256 257 2 100 25 +256 262 263 2 100 25 +262 265 266 2 100 25 +265 267 268 2 100 25 +267 270 271 2 100 25 +270 272 273 2 100 25 +275 276 277 2 100 25 +276 278 279 2 100 25 +278 280 281 2 100 25 +280 282 283 2 100 25 +282 284 285 2 100 25 +284 286 287 2 100 25 +286 292 293 2 100 25 +292 294 295 2 100 25 +297 298 299 2 100 25 +298 300 301 2 100 25 +300 303 304 2 100 25 + +; First SBB regular martini + 2 1 4 2 100 25 + +; SC-BB-BB and BB-BB-SC scFix + 2 1 4 10 100 15 ; SC-BB-BB + 5 4 6 10 100 15 ; SC-BB-BB + 7 6 10 10 100 15 ; SC-BB-BB + 12 11 14 10 100 15 ; SC-BB-BB + 15 14 16 10 100 15 ; SC-BB-BB + 17 16 18 10 100 15 ; SC-BB-BB + 19 18 20 10 100 15 ; SC-BB-BB + 21 20 22 10 100 15 ; SC-BB-BB + 23 22 24 10 100 15 ; SC-BB-BB + 25 24 26 10 100 15 ; SC-BB-BB + 27 26 28 10 100 15 ; SC-BB-BB + 29 28 31 10 100 15 ; SC-BB-BB + 32 31 34 10 100 15 ; SC-BB-BB + 35 34 38 10 100 15 ; SC-BB-BB + 40 39 41 10 100 15 ; SC-BB-BB + 42 41 43 10 100 15 ; SC-BB-BB + 44 43 45 10 100 15 ; SC-BB-BB + 46 45 50 10 100 15 ; SC-BB-BB + 51 50 53 10 100 15 ; SC-BB-BB + 55 54 59 10 100 15 ; SC-BB-BB + 60 59 61 10 100 15 ; SC-BB-BB + 62 61 63 10 100 15 ; SC-BB-BB + 65 64 66 10 100 15 ; SC-BB-BB + 67 66 72 10 100 15 ; SC-BB-BB + 73 72 74 10 100 15 ; SC-BB-BB + 75 74 76 10 100 15 ; SC-BB-BB + 77 76 78 10 100 15 ; SC-BB-BB + 79 78 80 10 100 15 ; SC-BB-BB + 81 80 83 10 100 15 ; SC-BB-BB + 84 83 87 10 100 15 ; SC-BB-BB + 88 87 89 10 100 15 ; SC-BB-BB + 90 89 91 10 100 15 ; SC-BB-BB + 92 91 93 10 100 15 ; SC-BB-BB + 94 93 97 10 100 15 ; SC-BB-BB + 98 97 99 10 100 15 ; SC-BB-BB +100 99 101 10 100 15 ; SC-BB-BB +102 101 103 10 100 15 ; SC-BB-BB +104 103 105 10 100 15 ; SC-BB-BB +106 105 107 10 100 15 ; SC-BB-BB +108 107 109 10 100 15 ; SC-BB-BB +110 109 112 10 100 15 ; SC-BB-BB +113 112 114 10 100 15 ; SC-BB-BB +115 114 116 10 100 15 ; SC-BB-BB +117 116 118 10 100 15 ; SC-BB-BB +120 119 121 10 100 15 ; SC-BB-BB +122 121 123 10 100 15 ; SC-BB-BB +124 123 125 10 100 15 ; SC-BB-BB +126 125 130 10 100 15 ; SC-BB-BB +132 131 133 10 100 15 ; SC-BB-BB +134 133 135 10 100 15 ; SC-BB-BB +136 135 137 10 100 15 ; SC-BB-BB +138 137 139 10 100 15 ; SC-BB-BB +140 139 141 10 100 15 ; SC-BB-BB +142 141 143 10 100 15 ; SC-BB-BB +144 143 146 10 100 15 ; SC-BB-BB +147 146 152 10 100 15 ; SC-BB-BB +153 152 158 10 100 15 ; SC-BB-BB +159 158 160 10 100 15 ; SC-BB-BB +161 160 162 10 100 15 ; SC-BB-BB +163 162 164 10 100 15 ; SC-BB-BB +166 165 168 10 100 15 ; SC-BB-BB +169 168 170 10 100 15 ; SC-BB-BB +171 170 172 10 100 15 ; SC-BB-BB +174 173 175 10 100 15 ; SC-BB-BB +176 175 178 10 100 15 ; SC-BB-BB +179 178 180 10 100 15 ; SC-BB-BB +181 180 182 10 100 15 ; SC-BB-BB +183 182 184 10 100 15 ; SC-BB-BB +185 184 186 10 100 15 ; SC-BB-BB +187 186 188 10 100 15 ; SC-BB-BB +189 188 190 10 100 15 ; SC-BB-BB +191 190 192 10 100 15 ; SC-BB-BB +193 192 194 10 100 15 ; SC-BB-BB +195 194 196 10 100 15 ; SC-BB-BB +197 196 198 10 100 15 ; SC-BB-BB +199 198 200 10 100 15 ; SC-BB-BB +201 200 202 10 100 15 ; SC-BB-BB +203 202 204 10 100 15 ; SC-BB-BB +205 204 206 10 100 15 ; SC-BB-BB +207 206 208 10 100 15 ; SC-BB-BB +209 208 210 10 100 15 ; SC-BB-BB +211 210 212 10 100 15 ; SC-BB-BB +213 212 214 10 100 15 ; SC-BB-BB +215 214 216 10 100 15 ; SC-BB-BB +217 216 218 10 100 15 ; SC-BB-BB +219 218 220 10 100 15 ; SC-BB-BB +221 220 222 10 100 15 ; SC-BB-BB +223 222 225 10 100 15 ; SC-BB-BB +226 225 228 10 100 15 ; SC-BB-BB +229 228 230 10 100 15 ; SC-BB-BB +231 230 232 10 100 15 ; SC-BB-BB +233 232 234 10 100 15 ; SC-BB-BB +235 234 236 10 100 15 ; SC-BB-BB +238 237 239 10 100 15 ; SC-BB-BB +241 240 242 10 100 15 ; SC-BB-BB +243 242 244 10 100 15 ; SC-BB-BB +245 244 246 10 100 15 ; SC-BB-BB +247 246 252 10 100 15 ; SC-BB-BB +253 252 254 10 100 15 ; SC-BB-BB +255 254 256 10 100 15 ; SC-BB-BB +257 256 262 10 100 15 ; SC-BB-BB +263 262 265 10 100 15 ; SC-BB-BB +266 265 267 10 100 15 ; SC-BB-BB +268 267 270 10 100 15 ; SC-BB-BB +271 270 272 10 100 15 ; SC-BB-BB +273 272 275 10 100 15 ; SC-BB-BB +277 276 278 10 100 15 ; SC-BB-BB +279 278 280 10 100 15 ; SC-BB-BB +281 280 282 10 100 15 ; SC-BB-BB +283 282 284 10 100 15 ; SC-BB-BB +285 284 286 10 100 15 ; SC-BB-BB +287 286 292 10 100 15 ; SC-BB-BB +293 292 294 10 100 15 ; SC-BB-BB +295 294 297 10 100 15 ; SC-BB-BB +299 298 300 10 100 15 ; SC-BB-BB +301 300 303 10 100 15 ; SC-BB-BB + 1 4 5 10 100 15 ; BB-BB-SC + 4 6 7 10 100 15 ; BB-BB-SC + 10 11 12 10 100 15 ; BB-BB-SC + 11 14 15 10 100 15 ; BB-BB-SC + 14 16 17 10 100 15 ; BB-BB-SC + 16 18 19 10 100 15 ; BB-BB-SC + 18 20 21 10 100 15 ; BB-BB-SC + 20 22 23 10 100 15 ; BB-BB-SC + 22 24 25 10 100 15 ; BB-BB-SC + 24 26 27 10 100 15 ; BB-BB-SC + 26 28 29 10 100 15 ; BB-BB-SC + 28 31 32 10 100 15 ; BB-BB-SC + 31 34 35 10 100 15 ; BB-BB-SC + 38 39 40 10 100 15 ; BB-BB-SC + 39 41 42 10 100 15 ; BB-BB-SC + 41 43 44 10 100 15 ; BB-BB-SC + 43 45 46 10 100 15 ; BB-BB-SC + 45 50 51 10 100 15 ; BB-BB-SC + 53 54 55 10 100 15 ; BB-BB-SC + 54 59 60 10 100 15 ; BB-BB-SC + 59 61 62 10 100 15 ; BB-BB-SC + 63 64 65 10 100 15 ; BB-BB-SC + 64 66 67 10 100 15 ; BB-BB-SC + 66 72 73 10 100 15 ; BB-BB-SC + 72 74 75 10 100 15 ; BB-BB-SC + 74 76 77 10 100 15 ; BB-BB-SC + 76 78 79 10 100 15 ; BB-BB-SC + 78 80 81 10 100 15 ; BB-BB-SC + 80 83 84 10 100 15 ; BB-BB-SC + 83 87 88 10 100 15 ; BB-BB-SC + 87 89 90 10 100 15 ; BB-BB-SC + 89 91 92 10 100 15 ; BB-BB-SC + 91 93 94 10 100 15 ; BB-BB-SC + 93 97 98 10 100 15 ; BB-BB-SC + 97 99 100 10 100 15 ; BB-BB-SC + 99 101 102 10 100 15 ; BB-BB-SC +101 103 104 10 100 15 ; BB-BB-SC +103 105 106 10 100 15 ; BB-BB-SC +105 107 108 10 100 15 ; BB-BB-SC +107 109 110 10 100 15 ; BB-BB-SC +109 112 113 10 100 15 ; BB-BB-SC +112 114 115 10 100 15 ; BB-BB-SC +114 116 117 10 100 15 ; BB-BB-SC +118 119 120 10 100 15 ; BB-BB-SC +119 121 122 10 100 15 ; BB-BB-SC +121 123 124 10 100 15 ; BB-BB-SC +123 125 126 10 100 15 ; BB-BB-SC +130 131 132 10 100 15 ; BB-BB-SC +131 133 134 10 100 15 ; BB-BB-SC +133 135 136 10 100 15 ; BB-BB-SC +135 137 138 10 100 15 ; BB-BB-SC +137 139 140 10 100 15 ; BB-BB-SC +139 141 142 10 100 15 ; BB-BB-SC +141 143 144 10 100 15 ; BB-BB-SC +143 146 147 10 100 15 ; BB-BB-SC +146 152 153 10 100 15 ; BB-BB-SC +152 158 159 10 100 15 ; BB-BB-SC +158 160 161 10 100 15 ; BB-BB-SC +160 162 163 10 100 15 ; BB-BB-SC +164 165 166 10 100 15 ; BB-BB-SC +165 168 169 10 100 15 ; BB-BB-SC +168 170 171 10 100 15 ; BB-BB-SC +172 173 174 10 100 15 ; BB-BB-SC +173 175 176 10 100 15 ; BB-BB-SC +175 178 179 10 100 15 ; BB-BB-SC +178 180 181 10 100 15 ; BB-BB-SC +180 182 183 10 100 15 ; BB-BB-SC +182 184 185 10 100 15 ; BB-BB-SC +184 186 187 10 100 15 ; BB-BB-SC +186 188 189 10 100 15 ; BB-BB-SC +188 190 191 10 100 15 ; BB-BB-SC +190 192 193 10 100 15 ; BB-BB-SC +192 194 195 10 100 15 ; BB-BB-SC +194 196 197 10 100 15 ; BB-BB-SC +196 198 199 10 100 15 ; BB-BB-SC +198 200 201 10 100 15 ; BB-BB-SC +200 202 203 10 100 15 ; BB-BB-SC +202 204 205 10 100 15 ; BB-BB-SC +204 206 207 10 100 15 ; BB-BB-SC +206 208 209 10 100 15 ; BB-BB-SC +208 210 211 10 100 15 ; BB-BB-SC +210 212 213 10 100 15 ; BB-BB-SC +212 214 215 10 100 15 ; BB-BB-SC +214 216 217 10 100 15 ; BB-BB-SC +216 218 219 10 100 15 ; BB-BB-SC +218 220 221 10 100 15 ; BB-BB-SC +220 222 223 10 100 15 ; BB-BB-SC +222 225 226 10 100 15 ; BB-BB-SC +225 228 229 10 100 15 ; BB-BB-SC +228 230 231 10 100 15 ; BB-BB-SC +230 232 233 10 100 15 ; BB-BB-SC +232 234 235 10 100 15 ; BB-BB-SC +236 237 238 10 100 15 ; BB-BB-SC +239 240 241 10 100 15 ; BB-BB-SC +240 242 243 10 100 15 ; BB-BB-SC +242 244 245 10 100 15 ; BB-BB-SC +244 246 247 10 100 15 ; BB-BB-SC +246 252 253 10 100 15 ; BB-BB-SC +252 254 255 10 100 15 ; BB-BB-SC +254 256 257 10 100 15 ; BB-BB-SC +256 262 263 10 100 15 ; BB-BB-SC +262 265 266 10 100 15 ; BB-BB-SC +265 267 268 10 100 15 ; BB-BB-SC +267 270 271 10 100 15 ; BB-BB-SC +270 272 273 10 100 15 ; BB-BB-SC +275 276 277 10 100 15 ; BB-BB-SC +276 278 279 10 100 15 ; BB-BB-SC +278 280 281 10 100 15 ; BB-BB-SC +280 282 283 10 100 15 ; BB-BB-SC +282 284 285 10 100 15 ; BB-BB-SC +284 286 287 10 100 15 ; BB-BB-SC +286 292 293 10 100 15 ; BB-BB-SC +292 294 295 10 100 15 ; BB-BB-SC +297 298 299 10 100 15 ; BB-BB-SC +298 300 301 10 100 15 ; BB-BB-SC +300 303 304 10 100 15 ; BB-BB-SC + +; Side chain angles + 1 2 3 2 180.000 25.0 + 6 7 8 2 120.000 50.0 + 6 7 9 2 120.000 50.0 + 11 12 13 2 180.000 25.0 + 28 29 30 2 180.000 25.0 + 31 32 33 2 180.000 25.0 + 34 35 36 2 120.000 50.0 + 34 35 37 2 120.000 50.0 + 45 46 47 2 120.000 60.0 + 45 46 48 2 120.000 60.0 + 50 51 52 2 180.000 25.0 + 54 55 56 2 120.000 60.0 + 54 55 57 2 120.000 60.0 + 66 67 68 2 120.000 60.0 + 66 67 70 2 130.000 60.0 + 80 81 82 2 180.000 25.0 + 83 84 85 2 120.000 50.0 + 83 84 86 2 120.000 50.0 + 93 94 95 2 120.000 50.0 + 93 94 96 2 120.000 50.0 +109 110 111 2 180.000 25.0 +125 126 127 2 120.000 60.0 +125 126 128 2 120.000 60.0 +143 144 145 2 180.000 25.0 +146 147 148 2 120.000 60.0 +146 147 150 2 130.000 60.0 +152 153 154 2 120.000 60.0 +152 153 156 2 130.000 60.0 +165 166 167 2 180.000 25.0 +175 176 177 2 180.000 25.0 +222 223 224 2 180.000 25.0 +225 226 227 2 180.000 25.0 +246 247 248 2 120.000 60.0 +246 247 250 2 130.000 60.0 +256 257 258 2 120.000 60.0 +256 257 260 2 130.000 60.0 +262 263 264 2 180.000 25.0 +267 268 269 2 180.000 25.0 +272 273 274 2 180.000 25.0 +286 287 288 2 120.000 60.0 +286 287 290 2 130.000 60.0 +294 295 296 2 180.000 25.0 +300 301 302 2 180.000 25.0 + +[ dihedrals ] + 11 14 16 18 1 -120 400 1 + 14 16 18 20 1 -120 400 1 + 16 18 20 22 1 -120 400 1 + 18 20 22 24 1 -120 400 1 + 20 22 24 26 1 -120 400 1 + 22 24 26 28 1 -120 400 1 + 24 26 28 31 1 -120 400 1 + 61 63 64 66 1 -120 400 1 + 63 64 66 72 1 -120 400 1 + 64 66 72 74 1 -120 400 1 + 66 72 74 76 1 -120 400 1 + 72 74 76 78 1 -120 400 1 + 74 76 78 80 1 -120 400 1 + 76 78 80 83 1 -120 400 1 + 78 80 83 87 1 -120 400 1 + 80 83 87 89 1 -120 400 1 +190 192 194 196 1 -120 400 1 +192 194 196 198 1 -120 400 1 +208 210 212 214 1 -120 400 1 +210 212 214 216 1 -120 400 1 +212 214 216 218 1 -120 400 1 +214 216 218 220 1 -120 400 1 +216 218 220 222 1 -120 400 1 +218 220 222 225 1 -120 400 1 +220 222 225 228 1 -120 400 1 +222 225 228 230 1 -120 400 1 +225 228 230 232 1 -120 400 1 +239 240 242 244 1 -120 400 1 +252 254 256 262 1 -120 400 1 +254 256 262 265 1 -120 400 1 +256 262 265 267 1 -120 400 1 +280 282 284 286 1 -120 400 1 +282 284 286 292 1 -120 400 1 + +; SC-BB-BB-SC scFix + 2 1 4 5 1 10.7 75 1 ; SC-BB-BB-SC + 5 4 6 7 1 38.8 75 1 ; SC-BB-BB-SC + 12 11 14 15 1 -153.1 75 1 ; SC-BB-BB-SC + 15 14 16 17 1 -122.6 75 1 ; SC-BB-BB-SC + 17 16 18 19 1 -137.4 75 1 ; SC-BB-BB-SC + 19 18 20 21 1 -99.9 75 1 ; SC-BB-BB-SC + 21 20 22 23 1 -142.6 75 1 ; SC-BB-BB-SC + 23 22 24 25 1 -143.4 75 1 ; SC-BB-BB-SC + 25 24 26 27 1 -150.6 75 1 ; SC-BB-BB-SC + 27 26 28 29 1 -139.0 75 1 ; SC-BB-BB-SC + 29 28 31 32 1 -121.1 75 1 ; SC-BB-BB-SC + 32 31 34 35 1 -152.0 75 1 ; SC-BB-BB-SC + 40 39 41 42 1 -134.5 75 1 ; SC-BB-BB-SC + 42 41 43 44 1 -166.3 75 1 ; SC-BB-BB-SC + 44 43 45 46 1 19.9 75 1 ; SC-BB-BB-SC + 46 45 50 51 1 -169.2 75 1 ; SC-BB-BB-SC + 55 54 59 60 1 78.5 75 1 ; SC-BB-BB-SC + 60 59 61 62 1 80.1 75 1 ; SC-BB-BB-SC + 65 64 66 67 1 -154.3 75 1 ; SC-BB-BB-SC + 67 66 72 73 1 -164.5 75 1 ; SC-BB-BB-SC + 73 72 74 75 1 -132.2 75 1 ; SC-BB-BB-SC + 75 74 76 77 1 -110.8 75 1 ; SC-BB-BB-SC + 77 76 78 79 1 -141.3 75 1 ; SC-BB-BB-SC + 79 78 80 81 1 -136.6 75 1 ; SC-BB-BB-SC + 81 80 83 84 1 -150.4 75 1 ; SC-BB-BB-SC + 84 83 87 88 1 -168.0 75 1 ; SC-BB-BB-SC + 88 87 89 90 1 -167.6 75 1 ; SC-BB-BB-SC + 90 89 91 92 1 0.1 75 1 ; SC-BB-BB-SC + 92 91 93 94 1 110.7 75 1 ; SC-BB-BB-SC + 94 93 97 98 1 72.8 75 1 ; SC-BB-BB-SC + 98 97 99 100 1 77.6 75 1 ; SC-BB-BB-SC +100 99 101 102 1 -173.5 75 1 ; SC-BB-BB-SC +102 101 103 104 1 -74.6 75 1 ; SC-BB-BB-SC +104 103 105 106 1 10.7 75 1 ; SC-BB-BB-SC +106 105 107 108 1 -8.6 75 1 ; SC-BB-BB-SC +108 107 109 110 1 30.3 75 1 ; SC-BB-BB-SC +110 109 112 113 1 44.6 75 1 ; SC-BB-BB-SC +113 112 114 115 1 113.7 75 1 ; SC-BB-BB-SC +115 114 116 117 1 -128.1 75 1 ; SC-BB-BB-SC +120 119 121 122 1 2.7 75 1 ; SC-BB-BB-SC +122 121 123 124 1 43.4 75 1 ; SC-BB-BB-SC +124 123 125 126 1 36.4 75 1 ; SC-BB-BB-SC +132 131 133 134 1 161.9 75 1 ; SC-BB-BB-SC +134 133 135 136 1 15.9 75 1 ; SC-BB-BB-SC +136 135 137 138 1 31.3 75 1 ; SC-BB-BB-SC +138 137 139 140 1 41.1 75 1 ; SC-BB-BB-SC +140 139 141 142 1 99.6 75 1 ; SC-BB-BB-SC +142 141 143 144 1 -135.6 75 1 ; SC-BB-BB-SC +144 143 146 147 1 -160.7 75 1 ; SC-BB-BB-SC +147 146 152 153 1 -174.5 75 1 ; SC-BB-BB-SC +153 152 158 159 1 138.4 75 1 ; SC-BB-BB-SC +159 158 160 161 1 -4.8 75 1 ; SC-BB-BB-SC +161 160 162 163 1 49.3 75 1 ; SC-BB-BB-SC +166 165 168 169 1 -178.6 75 1 ; SC-BB-BB-SC +169 168 170 171 1 76.4 75 1 ; SC-BB-BB-SC +174 173 175 176 1 45.2 75 1 ; SC-BB-BB-SC +176 175 178 179 1 -6.8 75 1 ; SC-BB-BB-SC +179 178 180 181 1 3.5 75 1 ; SC-BB-BB-SC +181 180 182 183 1 -159.3 75 1 ; SC-BB-BB-SC +183 182 184 185 1 18.3 75 1 ; SC-BB-BB-SC +185 184 186 187 1 -46.2 75 1 ; SC-BB-BB-SC +187 186 188 189 1 69.5 75 1 ; SC-BB-BB-SC +189 188 190 191 1 47.0 75 1 ; SC-BB-BB-SC +191 190 192 193 1 -114.4 75 1 ; SC-BB-BB-SC +193 192 194 195 1 -132.7 75 1 ; SC-BB-BB-SC +195 194 196 197 1 -157.0 75 1 ; SC-BB-BB-SC +197 196 198 199 1 -170.4 75 1 ; SC-BB-BB-SC +199 198 200 201 1 -87.6 75 1 ; SC-BB-BB-SC +201 200 202 203 1 85.2 75 1 ; SC-BB-BB-SC +203 202 204 205 1 138.2 75 1 ; SC-BB-BB-SC +205 204 206 207 1 66.9 75 1 ; SC-BB-BB-SC +207 206 208 209 1 -87.4 75 1 ; SC-BB-BB-SC +209 208 210 211 1 -138.0 75 1 ; SC-BB-BB-SC +211 210 212 213 1 -144.5 75 1 ; SC-BB-BB-SC +213 212 214 215 1 -145.4 75 1 ; SC-BB-BB-SC +215 214 216 217 1 -145.1 75 1 ; SC-BB-BB-SC +217 216 218 219 1 -162.0 75 1 ; SC-BB-BB-SC +219 218 220 221 1 -103.8 75 1 ; SC-BB-BB-SC +221 220 222 223 1 -141.5 75 1 ; SC-BB-BB-SC +223 222 225 226 1 -162.6 75 1 ; SC-BB-BB-SC +226 225 228 229 1 -127.6 75 1 ; SC-BB-BB-SC +229 228 230 231 1 -143.1 75 1 ; SC-BB-BB-SC +231 230 232 233 1 -135.1 75 1 ; SC-BB-BB-SC +233 232 234 235 1 -152.4 75 1 ; SC-BB-BB-SC +241 240 242 243 1 -81.1 75 1 ; SC-BB-BB-SC +243 242 244 245 1 -124.6 75 1 ; SC-BB-BB-SC +245 244 246 247 1 157.0 75 1 ; SC-BB-BB-SC +247 246 252 253 1 89.4 75 1 ; SC-BB-BB-SC +253 252 254 255 1 -140.8 75 1 ; SC-BB-BB-SC +255 254 256 257 1 -133.9 75 1 ; SC-BB-BB-SC +257 256 262 263 1 -123.1 75 1 ; SC-BB-BB-SC +263 262 265 266 1 -156.4 75 1 ; SC-BB-BB-SC +266 265 267 268 1 159.3 75 1 ; SC-BB-BB-SC +268 267 270 271 1 162.7 75 1 ; SC-BB-BB-SC +271 270 272 273 1 -174.1 75 1 ; SC-BB-BB-SC +277 276 278 279 1 35.7 75 1 ; SC-BB-BB-SC +279 278 280 281 1 36.8 75 1 ; SC-BB-BB-SC +281 280 282 283 1 -134.8 75 1 ; SC-BB-BB-SC +283 282 284 285 1 -84.7 75 1 ; SC-BB-BB-SC +285 284 286 287 1 -149.9 75 1 ; SC-BB-BB-SC +287 286 292 293 1 -179.0 75 1 ; SC-BB-BB-SC +293 292 294 295 1 -132.5 75 1 ; SC-BB-BB-SC +299 298 300 301 1 41.6 75 1 ; SC-BB-BB-SC +301 300 303 304 1 -8.7 75 1 ; SC-BB-BB-SC + 6 10 11 12 1 -98.9 75 1 ; BB-BB-BB-SC + 7 6 10 11 1 -100.3 75 1 ; SC-BB-BB-BB + 34 38 39 40 1 138.6 75 1 ; BB-BB-BB-SC + 35 34 38 39 1 -144.1 75 1 ; SC-BB-BB-BB + 50 53 54 55 1 114.9 75 1 ; BB-BB-BB-SC + 51 50 53 54 1 -97.5 75 1 ; SC-BB-BB-BB + 61 63 64 65 1 92.4 75 1 ; BB-BB-BB-SC + 62 61 63 64 1 44.4 75 1 ; SC-BB-BB-BB +116 118 119 120 1 140.2 75 1 ; BB-BB-BB-SC +117 116 118 119 1 -157.4 75 1 ; SC-BB-BB-BB +125 130 131 132 1 44.0 75 1 ; BB-BB-BB-SC +126 125 130 131 1 -26.0 75 1 ; SC-BB-BB-BB +162 164 165 166 1 114.1 75 1 ; BB-BB-BB-SC +163 162 164 165 1 178.3 75 1 ; SC-BB-BB-BB +170 172 173 174 1 153.7 75 1 ; BB-BB-BB-SC +171 170 172 173 1 56.8 75 1 ; SC-BB-BB-BB +234 236 237 238 1 80.8 75 1 ; BB-BB-BB-SC +235 234 236 237 1 -115.7 75 1 ; SC-BB-BB-BB +237 239 240 241 1 25.4 75 1 ; BB-BB-BB-SC +238 237 239 240 1 104.0 75 1 ; SC-BB-BB-BB +272 275 276 277 1 134.9 75 1 ; BB-BB-BB-SC +273 272 275 276 1 31.9 75 1 ; SC-BB-BB-BB +294 297 298 299 1 130.9 75 1 ; BB-BB-BB-SC +295 294 297 298 1 37.9 75 1 ; SC-BB-BB-BB + +[ exclusions ] + 6 7 8 9 + 7 8 9 + 8 9 + 34 35 36 37 + 35 36 37 + 36 37 + 45 46 47 48 49 + 46 47 48 49 + 47 48 49 + 48 49 + 54 55 56 57 58 + 55 56 57 58 + 56 57 58 + 57 58 + 66 67 68 69 70 71 + 67 68 69 70 71 + 68 69 70 71 + 69 70 71 + 70 71 + 83 84 85 86 + 84 85 86 + 85 86 + 93 94 95 96 + 94 95 96 + 95 96 +125 126 127 128 129 +126 127 128 129 +127 128 129 +128 129 +146 147 148 149 150 151 +147 148 149 150 151 +148 149 150 151 +149 150 151 +150 151 +152 153 154 155 156 157 +153 154 155 156 157 +154 155 156 157 +155 156 157 +156 157 +246 247 248 249 250 251 +247 248 249 250 251 +248 249 250 251 +249 250 251 +250 251 +256 257 258 259 260 261 +257 258 259 260 261 +258 259 260 261 +259 260 261 +260 261 +286 287 288 289 290 291 +287 288 289 290 291 +288 289 290 291 +289 290 291 +290 291 + +; Go model exclusion + 16 6 + 18 6 + 18 10 + 20 11 + 22 14 + 24 16 + 26 18 + 28 20 + 31 22 + 34 24 + 38 26 + 39 26 + 41 28 + 45 38 + 54 43 + 59 41 + 59 43 + 61 20 + 61 26 + 61 28 + 61 41 + 64 53 + 64 54 + 66 26 + 66 39 + 66 54 + 66 59 + 72 11 + 72 20 + 72 26 + 72 61 + 74 63 + 76 64 + 78 18 + 78 66 + 80 72 + 83 74 + 87 76 + 89 78 + 91 78 + 91 80 + 93 1 + 93 4 + 93 6 + 93 11 + 93 18 + 93 72 + 93 78 + 93 80 + 97 1 + 97 4 + 99 1 + 99 6 +101 1 +103 89 +107 87 +118 109 +119 109 +119 112 +121 105 +121 107 +121 109 +121 112 +123 105 +123 107 +123 112 +125 103 +125 105 +130 89 +130 99 +130 103 +131 6 +131 18 +131 78 +131 87 +131 89 +131 93 +131 97 +131 99 +133 76 +133 78 +133 87 +135 87 +135 89 +135 103 +135 105 +135 107 +135 123 +135 125 +137 123 +137 125 +139 112 +139 119 +139 121 +139 123 +141 119 +141 121 +141 125 +143 116 +143 119 +152 137 +152 139 +158 125 +158 141 +162 121 +162 141 +165 121 +168 118 +168 119 +168 141 +168 143 +170 143 +173 141 +173 143 +173 158 +175 143 +175 146 +178 146 +178 152 +178 158 +178 160 +180 146 +180 152 +182 152 +186 152 +186 160 +186 178 +190 125 +190 141 +194 186 +196 125 +196 130 +196 137 +196 158 +196 186 +198 99 +198 101 +198 103 +198 105 +198 125 +198 130 +200 99 +200 192 +202 1 +202 6 +202 99 +206 18 +206 24 +206 26 +206 34 +206 99 +206 131 +208 31 +208 34 +210 186 +210 194 +210 196 +212 131 +212 137 +212 196 +214 34 +214 39 +214 206 +216 208 +218 137 +218 152 +218 196 +218 210 +220 66 +220 133 +220 137 +220 212 +222 34 +222 38 +222 39 +222 45 +222 214 +225 152 +225 182 +225 216 +228 137 +228 152 +228 218 +230 45 +230 50 +230 54 +230 220 +232 45 +232 50 +232 222 +234 225 +239 54 +239 230 +240 54 +240 64 +240 66 +240 76 +240 230 +244 228 +246 66 +246 87 +246 133 +246 135 +246 228 +246 230 +254 83 +254 87 +256 64 +256 76 +256 240 +256 242 +262 242 +262 244 +262 246 +265 252 +267 83 +267 254 +270 83 +270 254 +270 256 +272 242 +272 256 +272 262 +276 267 +280 59 +280 63 +280 64 +280 74 +280 270 +284 11 +286 11 +286 63 +286 72 +286 74 +286 80 +286 276 +292 11 +292 20 +292 61 +292 63 +292 72 +294 11 +294 282 +303 20 +303 22 +303 28 +303 292 + +[ dihedrals ] + 49 47 48 46 2 180.0 50.0 + 58 56 57 55 2 180.0 50.0 + 71 70 68 67 2 180.0 100.0 +129 127 128 126 2 180.0 50.0 +151 150 148 147 2 180.0 100.0 +157 156 154 153 2 180.0 100.0 +251 250 248 247 2 180.0 100.0 +261 260 258 257 2 180.0 100.0 +291 290 288 287 2 180.0 100.0 + +[ virtual_sitesn ] + 69 2 71 70 68 67 +149 2 151 150 148 147 +155 2 157 156 154 153 +249 2 251 250 248 247 +259 2 261 260 258 257 +289 2 291 290 288 287 + +; Virtual go site +305 1 1 +306 1 4 +307 1 6 +308 1 10 +309 1 11 +310 1 14 +311 1 16 +312 1 18 +313 1 20 +314 1 22 +315 1 24 +316 1 26 +317 1 28 +318 1 31 +319 1 34 +320 1 38 +321 1 39 +322 1 41 +323 1 43 +324 1 45 +325 1 50 +326 1 53 +327 1 54 +328 1 59 +329 1 61 +330 1 63 +331 1 64 +332 1 66 +333 1 72 +334 1 74 +335 1 76 +336 1 78 +337 1 80 +338 1 83 +339 1 87 +340 1 89 +341 1 91 +342 1 93 +343 1 97 +344 1 99 +345 1 101 +346 1 103 +347 1 105 +348 1 107 +349 1 109 +350 1 112 +351 1 114 +352 1 116 +353 1 118 +354 1 119 +355 1 121 +356 1 123 +357 1 125 +358 1 130 +359 1 131 +360 1 133 +361 1 135 +362 1 137 +363 1 139 +364 1 141 +365 1 143 +366 1 146 +367 1 152 +368 1 158 +369 1 160 +370 1 162 +371 1 164 +372 1 165 +373 1 168 +374 1 170 +375 1 172 +376 1 173 +377 1 175 +378 1 178 +379 1 180 +380 1 182 +381 1 184 +382 1 186 +383 1 188 +384 1 190 +385 1 192 +386 1 194 +387 1 196 +388 1 198 +389 1 200 +390 1 202 +391 1 204 +392 1 206 +393 1 208 +394 1 210 +395 1 212 +396 1 214 +397 1 216 +398 1 218 +399 1 220 +400 1 222 +401 1 225 +402 1 228 +403 1 230 +404 1 232 +405 1 234 +406 1 236 +407 1 237 +408 1 239 +409 1 240 +410 1 242 +411 1 244 +412 1 246 +413 1 252 +414 1 254 +415 1 256 +416 1 262 +417 1 265 +418 1 267 +419 1 270 +420 1 272 +421 1 275 +422 1 276 +423 1 278 +424 1 280 +425 1 282 +426 1 284 +427 1 286 +428 1 292 +429 1 294 +430 1 297 +431 1 298 +432 1 300 +433 1 303 + diff --git a/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/topol.top b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/topol.top new file mode 100644 index 000000000..c17043808 --- /dev/null +++ b/vermouth/tests/data/integration_tests/tier-1/lysozyme_GO_internal/martinize2/topol.top @@ -0,0 +1,9 @@ +#define GO_VIRT +#include "martini.itp" +#include "molecule.itp" + +[ system ] +Title of the system + +[ molecules ] +molecule 1 diff --git a/vermouth/tests/integration_tests/test_integration.py b/vermouth/tests/integration_tests/test_integration.py index 6d06a1e7a..5ef49efd8 100644 --- a/vermouth/tests/integration_tests/test_integration.py +++ b/vermouth/tests/integration_tests/test_integration.py @@ -136,10 +136,22 @@ def compare_goatomtypes(fileref, filecomp): for key in ref.keys(): assert ref[key] == compare[key] #assert correct atom definition string +def compare_written_contact_map(fileref, filecomp): + with open(fileref) as f0: + ref_lines = f0.readlines() + + with open(filecomp) as f1: + comp_lines = f1.readlines() + + # compare from line 1 otherwise we compare martinize version + for (ref, comp) in zip(ref_lines[1:], comp_lines[1:]): + assert ref == comp + GOCOMPARERS = {'go_nbparams.itp': compare_nbparams, 'virtual_sites_nonbond_params.itp': compare_nbparams, 'go_atomtypes.itp': compare_goatomtypes, - 'virtual_sites_atomtypes.itp': compare_goatomtypes} + 'virtual_sites_atomtypes.itp': compare_goatomtypes, + 'martinize_contact_map.out': compare_written_contact_map} def _interaction_equal(interaction1, interaction2): """ @@ -172,7 +184,8 @@ def _interaction_equal(interaction1, interaction2): ['tier-1', 'EN_chain'], ['tier-1', 'EN_region'], ['tier-1', 'hst5'], - ['tier-1', '1UBQ'] + ['tier-1', '1UBQ'], + ['tier-1', 'lysozyme_GO_internal'] # ['tier-2', 'barnase_barstar'], # ['tier-2', 'dna'], # ['tier-2', 'gpa_dimer'], From c536effb76a517974790e4ce3e396c65584355cb Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Fri, 10 Jan 2025 10:42:00 +0100 Subject: [PATCH 27/29] update docs with additional arguments for go bead placement --- doc/source/tutorials/go_models.rst | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/doc/source/tutorials/go_models.rst b/doc/source/tutorials/go_models.rst index 6ad1c8967..3fe148718 100644 --- a/doc/source/tutorials/go_models.rst +++ b/doc/source/tutorials/go_models.rst @@ -18,14 +18,16 @@ The Gō model is described in the help:: -go [GO] Use Martini Go model. Accepts either an input file from the server, or just provide the flag to calculate as part of Martinize. (default: None) -go-eps GO_EPS The strength of the Go model structural bias in kJ/mol. (default: 9.414) - -go-moltype GOVS_MOLTYPE - Set the name of the molecule when using Virtual Sites GoMartini. (default: molecule_0) -go-low GO_LOW Minimum distance (nm) below which contacts are removed. (default: 0.3) -go-up GO_UP Maximum distance (nm) above which contacts are removed. (default: 1.1) -go-res-dist GO_RES_DIST Minimum graph distance (similar sequence distance) below which contacts are removed. (default: 3) - -go-write-file [GO_WRITE_FILE] - Write out contact map to file if calculating as part of Martinize2. (default: None) + -go-write-file [GO_WRITE_FILE] + Write out contact map to file if calculating as part of Martinize2. (default: None) + -go-backbone GO_BACKBONE + Name of protein backbone bead on which to place a virtual interaction go site (default: BB) + -go-atomname GO_ATOMNAME + Name of the virtual interaction go site atom (default: CA) To add a Gō model to your protein, the first step is to calculate the contact map of your protein. The contact map can be obtained in two ways. Firstly, by uploading it @@ -51,9 +53,10 @@ Otherwise the contact map is calculated as part of Martinize2 by just specifying Without any further additions, this will: - 1) Generate virtual sites with the atomname ``CA`` directly on top of all the backbone beads in your protein. - Each ``CA`` atom has an underlying atomtype (see below), which has a default name specified using the - ``-go-moltype`` flag. + 1) Generate virtual sites with the atomname ``CA`` directly on top of all the backbone beads ``BB`` in your protein. + The atomname and the name of the backbone bead are controlled using the ``-go-atomname`` and ``-go-backbone`` flags + respectively. Each ``CA`` atom has an underlying atomtype (see below), which has a default name inherited from the + ``-name`` flag. 2) Use the contact map to generate a set of non-bonded parameters between specific pairs of ``CA`` atoms in your molecule with strength 9.414 kJ/mol (changed through the ``-go-eps`` flag). 3) Eliminate any contacts which are shorter than 0.3 nm and longer than 1.1 nm, or are closer than 3 residues in the @@ -69,23 +72,23 @@ interactions between them. For example, ``go_atomtypes.itp`` looks like any other ``[ atomtypes ]`` directive:: [ atomtypes ] - molecule_0_1 0.0 0 A 0.00000000 0.00000000 - molecule_0_2 0.0 0 A 0.00000000 0.00000000 - molecule_0_3 0.0 0 A 0.00000000 0.00000000 - molecule_0_4 0.0 0 A 0.00000000 0.00000000 - molecule_0_5 0.0 0 A 0.00000000 0.00000000 + molecule_1 0.0 0 A 0.00000000 0.00000000 + molecule_2 0.0 0 A 0.00000000 0.00000000 + molecule_3 0.0 0 A 0.00000000 0.00000000 + molecule_4 0.0 0 A 0.00000000 0.00000000 + molecule_5 0.0 0 A 0.00000000 0.00000000 ... Similarly, ``go_nbparams.itp`` looks like any ``[ nonbond_params ]`` directive (obviously, the exact parameters here depend on your protein):: [ nonbond_params ] - molecule_0_17 molecule_0_13 1 0.59354169 9.41400000 ;go bond 0.666228018941817 - molecule_0_18 molecule_0_14 1 0.53798937 9.41400000 ;go bond 0.6038726468003999 - molecule_0_19 molecule_0_15 1 0.51270658 9.41400000 ;go bond 0.5754936778307316 - molecule_0_22 molecule_0_15 1 0.73815666 9.41400000 ;go bond 0.8285528398039018 - molecule_0_22 molecule_0_18 1 0.54218134 9.41400000 ;go bond 0.6085779754055839 - molecule_0_23 molecule_0_19 1 0.53307395 9.41400000 ;go bond 0.5983552758317587 + molecule_17 molecule_0_13 1 0.59354169 9.41400000 ;go bond 0.666228018941817 + molecule_18 molecule_0_14 1 0.53798937 9.41400000 ;go bond 0.6038726468003999 + molecule_19 molecule_0_15 1 0.51270658 9.41400000 ;go bond 0.5754936778307316 + molecule_22 molecule_0_15 1 0.73815666 9.41400000 ;go bond 0.8285528398039018 + molecule_22 molecule_0_18 1 0.54218134 9.41400000 ;go bond 0.6085779754055839 + molecule_23 molecule_0_19 1 0.53307395 9.41400000 ;go bond 0.5983552758317587 ... To activate your Gō model for use in Gromacs, the `martini_v3.0.0.itp` master itp needs the additional files included. From 0683b43f0c37463b593152e1a1e0b79440386612 Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Mon, 13 Jan 2025 10:37:51 +0100 Subject: [PATCH 28/29] add test to check that warning raised when chain ids in contact map not found --- vermouth/tests/rcsu/test_go_structure_bias.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/vermouth/tests/rcsu/test_go_structure_bias.py b/vermouth/tests/rcsu/test_go_structure_bias.py index bddcfe282..3ca3a853a 100644 --- a/vermouth/tests/rcsu/test_go_structure_bias.py +++ b/vermouth/tests/rcsu/test_go_structure_bias.py @@ -159,3 +159,58 @@ def test_contact_selector(test_molecule, # run the contact map selector contact_matrix = go_processor.contact_selector(test_molecule) assert contact_matrix == expected + + + +@pytest.mark.parametrize('cmap, expected',( + # single symmetric contact good chain id + ([(1, 'A', 4, 'A'), (4, 'A', 1, 'A')], + False), + # single symmetric contact bad chain id + ([(1, 'Z', 4, 'Z'), (4, 'Z', 1, 'Z')], + True), +)) +def test_correct_chains(test_molecule, cmap, expected, caplog): + + # the molecule atomtypes + atypes = {0: "P1", 1: "SN4a", 2: "SN4a", + 3: "SP1", 4: "C1", + 5: "TP1", + 6: "P1", 7: "SN3a", 8: "SP4"} + # the molecule resnames + resnames = {0: "A", 1: "A", 2: "A", + 3: "B", 4: "B", + 5: "C", + 6: "D", 7: "D", 8: "D"} + + secstruc = {1: "H", 2: "H", 3: "H", 4: "H"} + system = create_sys_all_attrs(test_molecule, + moltype="mol_0", + secstruc=secstruc, + defaults={"chain": "A"}, + attrs={"resname": resnames, + "atype": atypes}) + + # generate the virtual sites + VirtualSiteCreator().run_system(system) + # add the contacts to the system + system.go_params["go_map"] = [cmap] + # initialize the Go processor + go_processor = ComputeStructuralGoBias(cutoff_short=0.3, + cutoff_long=2.0, + go_eps=2.1, + res_dist=0, + moltype="mol_0", + system=system) + + caplog.clear() + go_processor.run_system(system) + + if expected: + assert any(rec.levelname == 'WARNING' for rec in caplog.records) + # makes sure the warning is only printed once + assert len(caplog.records) == 1 + else: + assert caplog.records == [] + + From 9a12024f51c476f8d3eb7f5ea474554bf4859b9b Mon Sep 17 00:00:00 2001 From: csbrasnett Date: Thu, 16 Jan 2025 15:09:17 +0100 Subject: [PATCH 29/29] add note about using multiple go models in documentation --- doc/source/tutorials/go_models.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/doc/source/tutorials/go_models.rst b/doc/source/tutorials/go_models.rst index 3fe148718..3b21197b7 100644 --- a/doc/source/tutorials/go_models.rst +++ b/doc/source/tutorials/go_models.rst @@ -146,6 +146,35 @@ not truly as intermolecular forces in the system as a whole. For more detail on see the paper by `Korshunova et al. `_. +Multiple Go models in the same system +------------------------------------- + +If you have several different proteins that you have martinized with their own Go models, then several extra steps are +required to ensure that they can be simulated together. + +Firstly, when the proteins are coarse grained with Martinize2, the `-name` flag must be used to ensure that all the virtual +sites created for the purposes of the Go model have unique names and atomtypes. For example:: + + martinize2 -f protein.pdb -x cg.pdb -o topol.top -go contact_map.out -name my_protein + +will ensure that the atoms created to apply Go sites to are names `my_protein_{0..n}` for a protein of n residues. + +Having martinized the proteins in this way, all the `go_atomtypes.itp` and `go_nbparams.itp` files generated for each +protein should be concatenated into a single file, which may then be included in the master force field file as +described above. + +Note on multiple Go models +-------------------------- + +While the Go model is expressed as a set of interactions between Go sites on a protein, interactions are not +generally extended over all copies of a protein. That is, if a simulation is set up with several copies of a +multimeric protein where the monomers are held together by a Go model, Gromacs will not permit the multimers +to "fall apart" for monomers to find other monomers that were initially in other complexes. This limitation is +a result of the nature of the Gromacs itp format, with the Go interactions described within each `[ moleculetype ]` +directive. This issue is discussed more extensively in a recent paper by `Korshunova et al. `_. + + + Visualising Go networks ----------------------------