diff --git a/bin/polyply b/bin/polyply index 26596dd13..d283945b2 100755 --- a/bin/polyply +++ b/bin/polyply @@ -138,6 +138,9 @@ def main(): # pylint: disable=too-many-locals,too-many-statements help='file with grid-points', default=None) system_group.add_argument('-mi', dest='maxiter', type=int, help='max number of trys to grow a molecule', default=800) + system_group.add_argument('-skip_filter', action='store_true', dest='skip_filter', + help='do not group residues by isomophism when making ' + 'templates but just resname') system_group.add_argument('-start', dest='start', nargs='+', type=str, default=[], help=('Specify which residue to build first. The syntax is ' diff --git a/polyply/src/backmap.py b/polyply/src/backmap.py index b643c07b3..b3ef8ed0c 100644 --- a/polyply/src/backmap.py +++ b/polyply/src/backmap.py @@ -169,7 +169,7 @@ def _place_init_coords(self, meta_molecule): built_nodes = [] for node in meta_molecule.nodes: if meta_molecule.nodes[node]["backmap"]: - resname = meta_molecule.nodes[node]["resname"] + resname = meta_molecule.nodes[node]["template"] cg_coord = meta_molecule.nodes[node]["position"] resid = meta_molecule.nodes[node]["resid"] high_res_atoms = meta_molecule.nodes[node]["graph"].nodes diff --git a/polyply/src/check_residue_equivalence.py b/polyply/src/check_residue_equivalence.py index 68d5df952..527f2045d 100644 --- a/polyply/src/check_residue_equivalence.py +++ b/polyply/src/check_residue_equivalence.py @@ -1,5 +1,6 @@ import networkx as nx from vermouth.molecule import attributes_match +from collections import defaultdict def check_residue_equivalence(topology): """ @@ -42,3 +43,35 @@ def check_residue_equivalence(topology): visited_residues[resname] = graph molnames[resname] = mol_name resids[resname] = molecule.nodes[node]["resid"] + +def group_residues_by_hash(meta_molecule, template_graphs={}): + """ + Collect all unique residue graphs using the Weisfeiler-Lehman has. + A dict of unique graphs with the hash as key is returned. The + `meta_molecule` nodes are annotated with the hash using the template + keyword. If required template_graphs can be given that are used for + matching rather than the first founds residue. + + Parameters + ---------- + meta_molecule: `:class:polyply.meta_molecule.MetaMolecule` + template_graphs: dict[`:class:nx.Graph`] + + Returns + ------- + dict[`:class:nx.Graph`] + keys are the hash of the graph + """ + unique_graphs = {} + for graph in template_graphs.values(): + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + unique_graphs[graph_hash] = graph + + for node in meta_molecule.nodes: + graph = meta_molecule.nodes[node]["graph"] + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + if graph_hash not in unique_graphs: + unique_graphs[graph_hash] = graph + meta_molecule.nodes[node]["template"] = graph_hash + + return unique_graphs diff --git a/polyply/src/gen_coords.py b/polyply/src/gen_coords.py index a44e4786b..70b9b4f1e 100644 --- a/polyply/src/gen_coords.py +++ b/polyply/src/gen_coords.py @@ -108,6 +108,7 @@ def gen_coords(toppath, grid_spacing=0.2, grid=None, maxiter=800, + skip_filter=False, start=[], density=None, box=None, @@ -254,11 +255,15 @@ def gen_coords(toppath, LOGGER.warning(msg, type="warning") # do a sanity check - LOGGER.info("checking residue integrity", type="step") - check_residue_equivalence(topology) + if skip_filter: + LOGGER.info("checking residue integrity", type="step") + check_residue_equivalence(topology) + # Build polymer structure LOGGER.info("generating templates", type="step") - GenerateTemplates(topology=topology, max_opt=10).run_system(topology) + GenerateTemplates(topology=topology, + max_opt=10, + skip_filter=skip_filter).run_system(topology) LOGGER.info("annotating ligands", type="step") ligand_annotator = AnnotateLigands(topology, ligands) ligand_annotator.run_system(topology) diff --git a/polyply/src/generate_templates.py b/polyply/src/generate_templates.py index 5d200a585..ca7df0794 100644 --- a/polyply/src/generate_templates.py +++ b/polyply/src/generate_templates.py @@ -21,6 +21,8 @@ radius_of_gyration) from .topology import replace_defined_interaction from .linalg_functions import dih +from .check_residue_equivalence import group_residues_by_hash +from tqdm import tqdm """ Processor generating coordinates for all residues of a meta_molecule matching those in the meta_molecule.molecule attribute. @@ -28,6 +30,21 @@ LOGGER = StyleAdapter(get_logger(__name__)) +def _extract_template_graphs(meta_molecule, template_graphs={}, skip_filter=False): + if skip_filter: + for node in meta_molecule.nodes: + resname = meta_molecule.nodes[node]["resname"] + graph = meta_molecule.nodes[node]["graph"] + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + if resname in template_graphs: + template_graphs[graph_hash] = graph + del template_graphs[resname] + elif resname not in template_graphs and graph_hash not in template_graphs: + template_graphs[graph_hash] = graph + else: + template_graphs = group_residues_by_hash(meta_molecule, template_graphs) + return template_graphs + def find_atoms(molecule, attr, value): """ Find all nodes of a `vermouth.molecule.Molecule` that have the @@ -239,7 +256,7 @@ def _relabel_interaction_atoms(interaction, mapping): new_interaction = interaction._replace(atoms=new_atoms) return new_interaction -def extract_block(molecule, resname, defines): +def extract_block(molecule, template_graph, defines): """ Given a `vermouth.molecule` and a `resname` extract the information of a block from the @@ -249,7 +266,8 @@ def extract_block(molecule, resname, defines): Parameters ---------- molecule: :class:vermouth.molecule.Molecule - resname: str + template_graph: :class:`nx.Graph` + the graph of the template reisdue defines: dict dict of type define: value @@ -257,8 +275,6 @@ def extract_block(molecule, resname, defines): ------- :class:vermouth.molecule.Block """ - nodes = find_atoms(molecule, "resname", resname) - resid = molecule.nodes[nodes[0]]["resid"] block = vermouth.molecule.Block() # select all nodes with the same first resid and @@ -267,11 +283,10 @@ def extract_block(molecule, resname, defines): # label in the molecule and in the block for # relabeling the interactions mapping = {} - for node in nodes: + for node in template_graph.nodes: attr_dict = molecule.nodes[node] - if attr_dict["resid"] == resid: - block.add_node(attr_dict["atomname"], **attr_dict) - mapping[node] = attr_dict["atomname"] + block.add_node(attr_dict["atomname"], **attr_dict) + mapping[node] = attr_dict["atomname"] for inter_type in molecule.interactions: for interaction in molecule.interactions[inter_type]: @@ -284,12 +299,6 @@ def extract_block(molecule, resname, defines): "virtual_sites2", "virtual_sites3", "virtual_sites4"]: block.make_edges_from_interaction_type(inter_type) - if not nx.is_connected(block): - msg = ('\n Residue {} with id {} consistes of two disconnected parts. ' - 'Make sure all atoms/particles in a residue are connected by bonds,' - ' constraints or virual-sites.') - raise IOError(msg.format(resname, resid)) - return block class GenerateTemplates(Processor): @@ -300,14 +309,15 @@ class GenerateTemplates(Processor): in the templates attribute. The processor also stores the volume of each block in the volume attribute. """ - def __init__(self, topology, max_opt, *args, **kwargs): + def __init__(self, topology, max_opt, skip_filter, *args, **kwargs): super().__init__(*args, **kwargs) self.max_opt = max_opt self.topology = topology self.volumes = self.topology.volumes self.templates = {} + self.skip_filter = skip_filter - def gen_templates(self, meta_molecule): + def gen_templates(self, meta_molecule, template_graphs): """ Generate blocks for each unique residue by extracting the block information, placing initial coordinates, and geometry @@ -318,17 +328,18 @@ class variable. Parameters ---------- meta_molecule: :class:`polyply.src.meta_molecule.MetaMolecule` + template_graphs: dict + a dict of graphs corresponding to the templates to be generated Updates --------- self.templates self.volumes """ - resnames = set(nx.get_node_attributes(meta_molecule, "resname").values()) - - for resname in resnames: + for resname, template_graph in tqdm(template_graphs.items()): if resname not in self.templates: - block = extract_block(meta_molecule.molecule, resname, + block = extract_block(meta_molecule.molecule, + template_graph, self.topology.defines) opt_counter = 0 @@ -366,7 +377,16 @@ def run_molecule(self, meta_molecule): and volume attribute. """ if hasattr(meta_molecule, "templates"): - self.templates.update(meta_molecule.templates) - self.gen_templates(meta_molecule) + template_graphs = {res: None for res in meta_molecule.templates} + else: + template_graphs = {} + meta_molecule.templates = {} + + template_graphs = _extract_template_graphs(meta_molecule, + skip_filter=self.skip_filter, + template_graphs=template_graphs) + self.templates.update(meta_molecule.templates) + + self.gen_templates(meta_molecule, template_graphs) meta_molecule.templates = self.templates return meta_molecule diff --git a/polyply/src/nonbond_engine.py b/polyply/src/nonbond_engine.py index 5a38182b4..61df2873f 100644 --- a/polyply/src/nonbond_engine.py +++ b/polyply/src/nonbond_engine.py @@ -384,7 +384,8 @@ def from_topology(cls, molecules, topology, box): "Make sure all coordiantes are wrapped inside the box.") raise IOError(msg) - resname = molecule.nodes[node]["resname"] + # try getting the template name; if no template name is given use resname + resname = molecule.nodes[node].get("template", molecule.nodes[node]["resname"]) atom_types.append(resname) nodes_to_gndx[(mol_count, node)] = idx idx += 1 diff --git a/polyply/tests/test_backmap.py b/polyply/tests/test_backmap.py index 91aa1ba56..1ecaae83e 100644 --- a/polyply/tests/test_backmap.py +++ b/polyply/tests/test_backmap.py @@ -43,13 +43,13 @@ def test_backmapping(): meta_molecule = MetaMolecule(graph) meta_molecule.molecule = molecule - nx.set_node_attributes(meta_molecule, {0: {"resname": "test", + nx.set_node_attributes(meta_molecule, {0: {"resname": "test", "template": "test", "position": np.array([0, 0, 0]), "resid": 1, "backmap": True}, - 1: {"resname": "test", + 1: {"resname": "test", "template": "test", "position": np.array([0, 0, 1.0]), "resid": 2, "backmap": True}, - 2: {"resname": "test", + 2: {"resname": "test", "template": "test", "position": np.array([0, 0, 2.0]), "resid": 3, "backmap": False}}) # test if disordered template works diff --git a/polyply/tests/test_data/topology_test/PE.itp b/polyply/tests/test_data/topology_test/PE.itp new file mode 100644 index 000000000..d5ab60df7 --- /dev/null +++ b/polyply/tests/test_data/topology_test/PE.itp @@ -0,0 +1,1726 @@ +; UFF parameters + +[ moleculetype ] +PE 2 + +[ atoms ] + 1 C-3 0 PE C0 2 0 + 2 C-3 0 PE C1 2 0 + 3 H-0 0 PE H2 2 0 + 4 H-0 0 PE H3 2 0 + 5 H-0 0 PE H6 2 0 + 6 H-0 0 PE H7 2 0 + 7 H-0 0 PE H9 2 0 + 8 C-3 1 PE C0 2 0 + 9 C-3 1 PE C1 2 0 + 10 H-0 1 PE H2 2 0 + 11 H-0 1 PE H3 2 0 + 12 H-0 1 PE H6 2 0 + 13 C-3 2 PE C0 2 0 + 14 C-3 2 PE C1 2 0 + 15 H-0 2 PE H2 2 0 + 16 H-0 2 PE H3 2 0 + 17 H-0 2 PE H6 2 0 + 18 H-0 2 PE H7 2 0 + 19 C-3 3 PE C0 2 0 + 20 C-3 3 PE C1 2 0 + 21 H-0 3 PE H2 2 0 + 22 H-0 3 PE H3 2 0 + 23 H-0 3 PE H6 2 0 + 24 H-0 3 PE H8 2 0 + 25 H-0 3 PE H9 2 0 + 26 C-3 4 PE C0 2 0 + 27 C-3 4 PE C1 2 0 + 28 H-0 4 PE H2 2 0 + 29 H-0 4 PE H3 2 0 + 30 H-0 4 PE H6 2 0 + 31 C-3 5 PE C0 2 0 + 32 C-3 5 PE C1 2 0 + 33 H-0 5 PE H2 2 0 + 34 H-0 5 PE H3 2 0 + 35 H-0 5 PE H6 2 0 + 36 H-0 5 PE H7 2 0 + 37 C-3 6 PE C0 2 0 + 38 C-3 6 PE C1 2 0 + 39 H-0 6 PE H2 2 0 + 40 H-0 6 PE H3 2 0 + 41 H-0 6 PE H6 2 0 + 42 H-0 6 PE H8 2 0 + 43 H-0 6 PE H9 2 0 + 44 C-3 7 PE C0 2 0 + 45 C-3 7 PE C1 2 0 + 46 H-0 7 PE H2 2 0 + 47 H-0 7 PE H3 2 0 + 48 H-0 7 PE H6 2 0 + 49 C-3 8 PE C0 2 0 + 50 C-3 8 PE C1 2 0 + 51 H-0 8 PE H2 2 0 + 52 H-0 8 PE H3 2 0 + 53 H-0 8 PE H6 2 0 + 54 H-0 8 PE H7 2 0 + 55 C-3 9 PE C0 2 0 + 56 C-3 9 PE C1 2 0 + 57 H-0 9 PE H2 2 0 + 58 H-0 9 PE H3 2 0 + 59 H-0 9 PE H6 2 0 + 60 H-0 9 PE H8 2 0 + 61 H-0 9 PE H9 2 0 + 62 C-3 10 PE C0 2 0 + 63 C-3 10 PE C1 2 0 + 64 H-0 10 PE H2 2 0 + 65 H-0 10 PE H3 2 0 + 66 H-0 10 PE H6 2 0 + 67 H-0 10 PE H7 2 0 + 68 C-3 11 PE C0 2 0 + 69 C-3 11 PE C1 2 0 + 70 H-0 11 PE H2 2 0 + 71 H-0 11 PE H3 2 0 + 72 H-0 11 PE H6 2 0 + 73 H-0 11 PE H7 2 0 + 74 C-3 12 PE C0 2 0 + 75 C-3 12 PE C1 2 0 + 76 H-0 12 PE H2 2 0 + 77 H-0 12 PE H3 2 0 + 78 H-0 12 PE H6 2 0 + 79 H-0 12 PE H7 2 0 + 80 C-3 13 PE C0 2 0 + 81 C-3 13 PE C1 2 0 + 82 H-0 13 PE H2 2 0 + 83 H-0 13 PE H3 2 0 + 84 H-0 13 PE H6 2 0 + 85 H-0 13 PE H7 2 0 + 86 C-3 14 PE C0 2 0 + 87 C-3 14 PE C1 2 0 + 88 H-0 14 PE H2 2 0 + 89 H-0 14 PE H3 2 0 + 90 H-0 14 PE H6 2 0 + 91 C-3 15 PE C0 2 0 + 92 C-3 15 PE C1 2 0 + 93 H-0 15 PE H2 2 0 + 94 H-0 15 PE H3 2 0 + 95 H-0 15 PE H6 2 0 + 96 H-0 15 PE H7 2 0 + 97 C-3 16 PE C0 2 0 + 98 C-3 16 PE C1 2 0 + 99 H-0 16 PE H2 2 0 +100 H-0 16 PE H3 2 0 +101 H-0 16 PE H6 2 0 +102 H-0 16 PE H8 2 0 +103 H-0 16 PE H9 2 0 +104 C-3 17 PE C0 2 0 +105 C-3 17 PE C1 2 0 +106 H-0 17 PE H2 2 0 +107 H-0 17 PE H3 2 0 +108 H-0 17 PE H6 2 0 +109 C-3 18 PE C0 2 0 +110 C-3 18 PE C1 2 0 +111 H-0 18 PE H2 2 0 +112 H-0 18 PE H3 2 0 +113 H-0 18 PE H6 2 0 +114 H-0 18 PE H7 2 0 +115 C-3 19 PE C0 2 0 +116 C-3 19 PE C1 2 0 +117 H-0 19 PE H2 2 0 +118 H-0 19 PE H3 2 0 +119 H-0 19 PE H6 2 0 +120 H-0 19 PE H8 2 0 +121 H-0 19 PE H9 2 0 +122 C-3 20 PE C0 2 0 +123 C-3 20 PE C1 2 0 +124 H-0 20 PE H2 2 0 +125 H-0 20 PE H3 2 0 +126 H-0 20 PE H6 2 0 +127 C-3 21 PE C0 2 0 +128 C-3 21 PE C1 2 0 +129 H-0 21 PE H2 2 0 +130 H-0 21 PE H3 2 0 +131 H-0 21 PE H6 2 0 +132 H-0 21 PE H7 2 0 +133 C-3 22 PE C0 2 0 +134 C-3 22 PE C1 2 0 +135 H-0 22 PE H2 2 0 +136 H-0 22 PE H3 2 0 +137 H-0 22 PE H6 2 0 +138 H-0 22 PE H8 2 0 +139 H-0 22 PE H9 2 0 +140 C-3 23 PE C0 2 0 +141 C-3 23 PE C1 2 0 +142 H-0 23 PE H2 2 0 +143 H-0 23 PE H3 2 0 +144 H-0 23 PE H6 2 0 +145 H-0 23 PE H8 2 0 +146 H-0 23 PE H9 2 0 + +[ bonds ] + 1 2 1 0.1514 292709.20858138485 + 1 3 1 0.11306050586724889 275844.25277375145 + 1 9 1 0.1514 292709.20858138485 + 1 5 1 0.11306050586724889 275844.25277375145 + 2 4 1 0.11306050586724889 275844.25277375145 + 2 6 1 0.11306050586724889 275844.25277375145 + 2 7 1 0.11306050586724889 275844.25277375145 + 8 9 1 0.1514 292709.20858138485 + 8 10 1 0.11306050586724889 275844.25277375145 + 8 14 1 0.1514 292709.20858138485 + 8 27 1 0.1514 292709.20858138485 + 9 11 1 0.11306050586724889 275844.25277375145 + 9 12 1 0.11306050586724889 275844.25277375145 + 13 14 1 0.1514 292709.20858138485 + 13 15 1 0.11306050586724889 275844.25277375145 + 13 20 1 0.1514 292709.20858138485 + 13 17 1 0.11306050586724889 275844.25277375145 + 14 16 1 0.11306050586724889 275844.25277375145 + 14 18 1 0.11306050586724889 275844.25277375145 + 19 20 1 0.1514 292709.20858138485 + 19 21 1 0.11306050586724889 275844.25277375145 + 19 23 1 0.11306050586724889 275844.25277375145 + 19 24 1 0.11306050586724889 275844.25277375145 + 20 22 1 0.11306050586724889 275844.25277375145 + 20 25 1 0.11306050586724889 275844.25277375145 + 26 27 1 0.1514 292709.20858138485 + 26 28 1 0.11306050586724889 275844.25277375145 + 26 32 1 0.1514 292709.20858138485 + 26 45 1 0.1514 292709.20858138485 + 27 29 1 0.11306050586724889 275844.25277375145 + 27 30 1 0.11306050586724889 275844.25277375145 + 31 32 1 0.1514 292709.20858138485 + 31 33 1 0.11306050586724889 275844.25277375145 + 31 38 1 0.1514 292709.20858138485 + 31 35 1 0.11306050586724889 275844.25277375145 + 32 34 1 0.11306050586724889 275844.25277375145 + 32 36 1 0.11306050586724889 275844.25277375145 + 37 38 1 0.1514 292709.20858138485 + 37 39 1 0.11306050586724889 275844.25277375145 + 37 41 1 0.11306050586724889 275844.25277375145 + 37 42 1 0.11306050586724889 275844.25277375145 + 38 40 1 0.11306050586724889 275844.25277375145 + 38 43 1 0.11306050586724889 275844.25277375145 + 44 45 1 0.1514 292709.20858138485 + 44 46 1 0.11306050586724889 275844.25277375145 + 44 50 1 0.1514 292709.20858138485 + 44 63 1 0.1514 292709.20858138485 + 45 47 1 0.11306050586724889 275844.25277375145 + 45 48 1 0.11306050586724889 275844.25277375145 + 49 50 1 0.1514 292709.20858138485 + 49 51 1 0.11306050586724889 275844.25277375145 + 49 56 1 0.1514 292709.20858138485 + 49 53 1 0.11306050586724889 275844.25277375145 + 50 52 1 0.11306050586724889 275844.25277375145 + 50 54 1 0.11306050586724889 275844.25277375145 + 55 56 1 0.1514 292709.20858138485 + 55 57 1 0.11306050586724889 275844.25277375145 + 55 59 1 0.11306050586724889 275844.25277375145 + 55 60 1 0.11306050586724889 275844.25277375145 + 56 58 1 0.11306050586724889 275844.25277375145 + 56 61 1 0.11306050586724889 275844.25277375145 + 62 63 1 0.1514 292709.20858138485 + 62 64 1 0.11306050586724889 275844.25277375145 + 62 69 1 0.1514 292709.20858138485 + 62 66 1 0.11306050586724889 275844.25277375145 + 63 65 1 0.11306050586724889 275844.25277375145 + 63 67 1 0.11306050586724889 275844.25277375145 + 68 69 1 0.1514 292709.20858138485 + 68 70 1 0.11306050586724889 275844.25277375145 + 68 75 1 0.1514 292709.20858138485 + 68 72 1 0.11306050586724889 275844.25277375145 + 69 71 1 0.11306050586724889 275844.25277375145 + 69 73 1 0.11306050586724889 275844.25277375145 + 74 75 1 0.1514 292709.20858138485 + 74 76 1 0.11306050586724889 275844.25277375145 + 74 81 1 0.1514 292709.20858138485 + 74 78 1 0.11306050586724889 275844.25277375145 + 75 77 1 0.11306050586724889 275844.25277375145 + 75 79 1 0.11306050586724889 275844.25277375145 + 80 81 1 0.1514 292709.20858138485 + 80 82 1 0.11306050586724889 275844.25277375145 + 80 87 1 0.1514 292709.20858138485 + 80 84 1 0.11306050586724889 275844.25277375145 + 81 83 1 0.11306050586724889 275844.25277375145 + 81 85 1 0.11306050586724889 275844.25277375145 + 86 87 1 0.1514 292709.20858138485 + 86 88 1 0.11306050586724889 275844.25277375145 + 86 92 1 0.1514 292709.20858138485 + 86 105 1 0.1514 292709.20858138485 + 87 89 1 0.11306050586724889 275844.25277375145 + 87 90 1 0.11306050586724889 275844.25277375145 + 91 92 1 0.1514 292709.20858138485 + 91 93 1 0.11306050586724889 275844.25277375145 + 91 98 1 0.1514 292709.20858138485 + 91 95 1 0.11306050586724889 275844.25277375145 + 92 94 1 0.11306050586724889 275844.25277375145 + 92 96 1 0.11306050586724889 275844.25277375145 + 97 98 1 0.1514 292709.20858138485 + 97 99 1 0.11306050586724889 275844.25277375145 + 97 101 1 0.11306050586724889 275844.25277375145 + 97 102 1 0.11306050586724889 275844.25277375145 + 98 100 1 0.11306050586724889 275844.25277375145 + 98 103 1 0.11306050586724889 275844.25277375145 +104 105 1 0.1514 292709.20858138485 +104 106 1 0.11306050586724889 275844.25277375145 +104 110 1 0.1514 292709.20858138485 +104 123 1 0.1514 292709.20858138485 +105 107 1 0.11306050586724889 275844.25277375145 +105 108 1 0.11306050586724889 275844.25277375145 +109 110 1 0.1514 292709.20858138485 +109 111 1 0.11306050586724889 275844.25277375145 +109 116 1 0.1514 292709.20858138485 +109 113 1 0.11306050586724889 275844.25277375145 +110 112 1 0.11306050586724889 275844.25277375145 +110 114 1 0.11306050586724889 275844.25277375145 +115 116 1 0.1514 292709.20858138485 +115 117 1 0.11306050586724889 275844.25277375145 +115 119 1 0.11306050586724889 275844.25277375145 +115 120 1 0.11306050586724889 275844.25277375145 +116 118 1 0.11306050586724889 275844.25277375145 +116 121 1 0.11306050586724889 275844.25277375145 +122 123 1 0.1514 292709.20858138485 +122 124 1 0.11306050586724889 275844.25277375145 +122 128 1 0.1514 292709.20858138485 +122 141 1 0.1514 292709.20858138485 +123 125 1 0.11306050586724889 275844.25277375145 +123 126 1 0.11306050586724889 275844.25277375145 +127 128 1 0.1514 292709.20858138485 +127 129 1 0.11306050586724889 275844.25277375145 +127 134 1 0.1514 292709.20858138485 +127 131 1 0.11306050586724889 275844.25277375145 +128 130 1 0.11306050586724889 275844.25277375145 +128 132 1 0.11306050586724889 275844.25277375145 +133 134 1 0.1514 292709.20858138485 +133 135 1 0.11306050586724889 275844.25277375145 +133 137 1 0.11306050586724889 275844.25277375145 +133 138 1 0.11306050586724889 275844.25277375145 +134 136 1 0.11306050586724889 275844.25277375145 +134 139 1 0.11306050586724889 275844.25277375145 +140 141 1 0.1514 292709.20858138485 +140 142 1 0.11306050586724889 275844.25277375145 +140 144 1 0.11306050586724889 275844.25277375145 +140 145 1 0.11306050586724889 275844.25277375145 +141 143 1 0.11306050586724889 275844.25277375145 +141 146 1 0.11306050586724889 275844.25277375145 + +[ angles ] + 1 2 4 1 109.47 881.3676628762172 + 1 2 6 1 109.47 881.3676628762172 + 1 2 7 1 109.47 881.3676628762172 + 1 9 8 1 109.47 1086.7354874741789 + 1 9 11 1 109.47 881.3676628762172 + 1 9 12 1 109.47 881.3676628762172 + 2 1 3 1 109.47 881.3676628762172 + 2 1 9 1 109.47 1086.7354874741789 + 2 1 5 1 109.47 881.3676628762172 + 3 1 2 1 109.47 881.3676628762171 + 3 1 9 1 109.47 881.3676628762171 + 3 1 5 1 109.47 865.6798034997371 + 4 2 1 1 109.47 881.3676628762171 + 4 2 6 1 109.47 865.6798034997371 + 4 2 7 1 109.47 865.6798034997371 + 5 1 2 1 109.47 881.3676628762171 + 5 1 3 1 109.47 865.6798034997371 + 5 1 9 1 109.47 881.3676628762171 + 6 2 1 1 109.47 881.3676628762171 + 6 2 4 1 109.47 865.6798034997371 + 6 2 7 1 109.47 865.6798034997371 + 7 2 1 1 109.47 881.3676628762171 + 7 2 4 1 109.47 865.6798034997371 + 7 2 6 1 109.47 865.6798034997371 + 8 9 11 1 109.47 881.3676628762172 + 8 9 1 1 109.47 1086.7354874741789 + 8 9 12 1 109.47 881.3676628762172 + 8 14 13 1 109.47 1086.7354874741789 + 8 14 16 1 109.47 881.3676628762172 + 8 14 18 1 109.47 881.3676628762172 + 8 27 26 1 109.47 1086.7354874741789 + 8 27 29 1 109.47 881.3676628762172 + 8 27 30 1 109.47 881.3676628762172 + 9 8 10 1 109.47 881.3676628762172 + 9 8 14 1 109.47 1086.7354874741789 + 9 8 27 1 109.47 1086.7354874741789 + 9 1 2 1 109.47 1086.7354874741789 + 9 1 3 1 109.47 881.3676628762172 + 9 1 5 1 109.47 881.3676628762172 + 10 8 9 1 109.47 881.3676628762171 + 10 8 14 1 109.47 881.3676628762171 + 10 8 27 1 109.47 881.3676628762171 + 11 9 8 1 109.47 881.3676628762171 + 11 9 1 1 109.47 881.3676628762171 + 11 9 12 1 109.47 865.6798034997371 + 12 9 8 1 109.47 881.3676628762171 + 12 9 11 1 109.47 865.6798034997371 + 12 9 1 1 109.47 881.3676628762171 + 13 14 16 1 109.47 881.3676628762172 + 13 14 8 1 109.47 1086.7354874741789 + 13 14 18 1 109.47 881.3676628762172 + 13 20 19 1 109.47 1086.7354874741789 + 13 20 22 1 109.47 881.3676628762172 + 13 20 25 1 109.47 881.3676628762172 + 14 13 15 1 109.47 881.3676628762172 + 14 13 20 1 109.47 1086.7354874741789 + 14 13 17 1 109.47 881.3676628762172 + 14 8 9 1 109.47 1086.7354874741789 + 14 8 10 1 109.47 881.3676628762172 + 14 8 27 1 109.47 1086.7354874741789 + 15 13 14 1 109.47 881.3676628762171 + 15 13 20 1 109.47 881.3676628762171 + 15 13 17 1 109.47 865.6798034997371 + 16 14 13 1 109.47 881.3676628762171 + 16 14 8 1 109.47 881.3676628762171 + 16 14 18 1 109.47 865.6798034997371 + 17 13 14 1 109.47 881.3676628762171 + 17 13 15 1 109.47 865.6798034997371 + 17 13 20 1 109.47 881.3676628762171 + 18 14 13 1 109.47 881.3676628762171 + 18 14 16 1 109.47 865.6798034997371 + 18 14 8 1 109.47 881.3676628762171 + 19 20 22 1 109.47 881.3676628762172 + 19 20 13 1 109.47 1086.7354874741789 + 19 20 25 1 109.47 881.3676628762172 + 20 19 21 1 109.47 881.3676628762172 + 20 19 23 1 109.47 881.3676628762172 + 20 19 24 1 109.47 881.3676628762172 + 20 13 14 1 109.47 1086.7354874741789 + 20 13 15 1 109.47 881.3676628762172 + 20 13 17 1 109.47 881.3676628762172 + 21 19 20 1 109.47 881.3676628762171 + 21 19 23 1 109.47 865.6798034997371 + 21 19 24 1 109.47 865.6798034997371 + 22 20 19 1 109.47 881.3676628762171 + 22 20 13 1 109.47 881.3676628762171 + 22 20 25 1 109.47 865.6798034997371 + 23 19 20 1 109.47 881.3676628762171 + 23 19 21 1 109.47 865.6798034997371 + 23 19 24 1 109.47 865.6798034997371 + 24 19 20 1 109.47 881.3676628762171 + 24 19 21 1 109.47 865.6798034997371 + 24 19 23 1 109.47 865.6798034997371 + 25 20 19 1 109.47 881.3676628762171 + 25 20 22 1 109.47 865.6798034997371 + 25 20 13 1 109.47 881.3676628762171 + 26 27 29 1 109.47 881.3676628762172 + 26 27 8 1 109.47 1086.7354874741789 + 26 27 30 1 109.47 881.3676628762172 + 26 32 31 1 109.47 1086.7354874741789 + 26 32 34 1 109.47 881.3676628762172 + 26 32 36 1 109.47 881.3676628762172 + 26 45 44 1 109.47 1086.7354874741789 + 26 45 47 1 109.47 881.3676628762172 + 26 45 48 1 109.47 881.3676628762172 + 27 26 28 1 109.47 881.3676628762172 + 27 26 32 1 109.47 1086.7354874741789 + 27 26 45 1 109.47 1086.7354874741789 + 27 8 9 1 109.47 1086.7354874741789 + 27 8 10 1 109.47 881.3676628762172 + 27 8 14 1 109.47 1086.7354874741789 + 28 26 27 1 109.47 881.3676628762171 + 28 26 32 1 109.47 881.3676628762171 + 28 26 45 1 109.47 881.3676628762171 + 29 27 26 1 109.47 881.3676628762171 + 29 27 8 1 109.47 881.3676628762171 + 29 27 30 1 109.47 865.6798034997371 + 30 27 26 1 109.47 881.3676628762171 + 30 27 29 1 109.47 865.6798034997371 + 30 27 8 1 109.47 881.3676628762171 + 31 32 34 1 109.47 881.3676628762172 + 31 32 26 1 109.47 1086.7354874741789 + 31 32 36 1 109.47 881.3676628762172 + 31 38 37 1 109.47 1086.7354874741789 + 31 38 40 1 109.47 881.3676628762172 + 31 38 43 1 109.47 881.3676628762172 + 32 31 33 1 109.47 881.3676628762172 + 32 31 38 1 109.47 1086.7354874741789 + 32 31 35 1 109.47 881.3676628762172 + 32 26 27 1 109.47 1086.7354874741789 + 32 26 28 1 109.47 881.3676628762172 + 32 26 45 1 109.47 1086.7354874741789 + 33 31 32 1 109.47 881.3676628762171 + 33 31 38 1 109.47 881.3676628762171 + 33 31 35 1 109.47 865.6798034997371 + 34 32 31 1 109.47 881.3676628762171 + 34 32 26 1 109.47 881.3676628762171 + 34 32 36 1 109.47 865.6798034997371 + 35 31 32 1 109.47 881.3676628762171 + 35 31 33 1 109.47 865.6798034997371 + 35 31 38 1 109.47 881.3676628762171 + 36 32 31 1 109.47 881.3676628762171 + 36 32 34 1 109.47 865.6798034997371 + 36 32 26 1 109.47 881.3676628762171 + 37 38 40 1 109.47 881.3676628762172 + 37 38 31 1 109.47 1086.7354874741789 + 37 38 43 1 109.47 881.3676628762172 + 38 37 39 1 109.47 881.3676628762172 + 38 37 41 1 109.47 881.3676628762172 + 38 37 42 1 109.47 881.3676628762172 + 38 31 32 1 109.47 1086.7354874741789 + 38 31 33 1 109.47 881.3676628762172 + 38 31 35 1 109.47 881.3676628762172 + 39 37 38 1 109.47 881.3676628762171 + 39 37 41 1 109.47 865.6798034997371 + 39 37 42 1 109.47 865.6798034997371 + 40 38 37 1 109.47 881.3676628762171 + 40 38 31 1 109.47 881.3676628762171 + 40 38 43 1 109.47 865.6798034997371 + 41 37 38 1 109.47 881.3676628762171 + 41 37 39 1 109.47 865.6798034997371 + 41 37 42 1 109.47 865.6798034997371 + 42 37 38 1 109.47 881.3676628762171 + 42 37 39 1 109.47 865.6798034997371 + 42 37 41 1 109.47 865.6798034997371 + 43 38 37 1 109.47 881.3676628762171 + 43 38 40 1 109.47 865.6798034997371 + 43 38 31 1 109.47 881.3676628762171 + 44 45 47 1 109.47 881.3676628762172 + 44 45 26 1 109.47 1086.7354874741789 + 44 45 48 1 109.47 881.3676628762172 + 44 50 49 1 109.47 1086.7354874741789 + 44 50 52 1 109.47 881.3676628762172 + 44 50 54 1 109.47 881.3676628762172 + 44 63 62 1 109.47 1086.7354874741789 + 44 63 65 1 109.47 881.3676628762172 + 44 63 67 1 109.47 881.3676628762172 + 45 44 46 1 109.47 881.3676628762172 + 45 44 50 1 109.47 1086.7354874741789 + 45 44 63 1 109.47 1086.7354874741789 + 45 26 27 1 109.47 1086.7354874741789 + 45 26 28 1 109.47 881.3676628762172 + 45 26 32 1 109.47 1086.7354874741789 + 46 44 45 1 109.47 881.3676628762171 + 46 44 50 1 109.47 881.3676628762171 + 46 44 63 1 109.47 881.3676628762171 + 47 45 44 1 109.47 881.3676628762171 + 47 45 26 1 109.47 881.3676628762171 + 47 45 48 1 109.47 865.6798034997371 + 48 45 44 1 109.47 881.3676628762171 + 48 45 47 1 109.47 865.6798034997371 + 48 45 26 1 109.47 881.3676628762171 + 49 50 52 1 109.47 881.3676628762172 + 49 50 44 1 109.47 1086.7354874741789 + 49 50 54 1 109.47 881.3676628762172 + 49 56 55 1 109.47 1086.7354874741789 + 49 56 58 1 109.47 881.3676628762172 + 49 56 61 1 109.47 881.3676628762172 + 50 49 51 1 109.47 881.3676628762172 + 50 49 56 1 109.47 1086.7354874741789 + 50 49 53 1 109.47 881.3676628762172 + 50 44 45 1 109.47 1086.7354874741789 + 50 44 46 1 109.47 881.3676628762172 + 50 44 63 1 109.47 1086.7354874741789 + 51 49 50 1 109.47 881.3676628762171 + 51 49 56 1 109.47 881.3676628762171 + 51 49 53 1 109.47 865.6798034997371 + 52 50 49 1 109.47 881.3676628762171 + 52 50 44 1 109.47 881.3676628762171 + 52 50 54 1 109.47 865.6798034997371 + 53 49 50 1 109.47 881.3676628762171 + 53 49 51 1 109.47 865.6798034997371 + 53 49 56 1 109.47 881.3676628762171 + 54 50 49 1 109.47 881.3676628762171 + 54 50 52 1 109.47 865.6798034997371 + 54 50 44 1 109.47 881.3676628762171 + 55 56 58 1 109.47 881.3676628762172 + 55 56 49 1 109.47 1086.7354874741789 + 55 56 61 1 109.47 881.3676628762172 + 56 55 57 1 109.47 881.3676628762172 + 56 55 59 1 109.47 881.3676628762172 + 56 55 60 1 109.47 881.3676628762172 + 56 49 50 1 109.47 1086.7354874741789 + 56 49 51 1 109.47 881.3676628762172 + 56 49 53 1 109.47 881.3676628762172 + 57 55 56 1 109.47 881.3676628762171 + 57 55 59 1 109.47 865.6798034997371 + 57 55 60 1 109.47 865.6798034997371 + 58 56 55 1 109.47 881.3676628762171 + 58 56 49 1 109.47 881.3676628762171 + 58 56 61 1 109.47 865.6798034997371 + 59 55 56 1 109.47 881.3676628762171 + 59 55 57 1 109.47 865.6798034997371 + 59 55 60 1 109.47 865.6798034997371 + 60 55 56 1 109.47 881.3676628762171 + 60 55 57 1 109.47 865.6798034997371 + 60 55 59 1 109.47 865.6798034997371 + 61 56 55 1 109.47 881.3676628762171 + 61 56 58 1 109.47 865.6798034997371 + 61 56 49 1 109.47 881.3676628762171 + 62 63 65 1 109.47 881.3676628762172 + 62 63 44 1 109.47 1086.7354874741789 + 62 63 67 1 109.47 881.3676628762172 + 62 69 68 1 109.47 1086.7354874741789 + 62 69 71 1 109.47 881.3676628762172 + 62 69 73 1 109.47 881.3676628762172 + 63 62 64 1 109.47 881.3676628762172 + 63 62 69 1 109.47 1086.7354874741789 + 63 62 66 1 109.47 881.3676628762172 + 63 44 45 1 109.47 1086.7354874741789 + 63 44 46 1 109.47 881.3676628762172 + 63 44 50 1 109.47 1086.7354874741789 + 64 62 63 1 109.47 881.3676628762171 + 64 62 69 1 109.47 881.3676628762171 + 64 62 66 1 109.47 865.6798034997371 + 65 63 62 1 109.47 881.3676628762171 + 65 63 44 1 109.47 881.3676628762171 + 65 63 67 1 109.47 865.6798034997371 + 66 62 63 1 109.47 881.3676628762171 + 66 62 64 1 109.47 865.6798034997371 + 66 62 69 1 109.47 881.3676628762171 + 67 63 62 1 109.47 881.3676628762171 + 67 63 65 1 109.47 865.6798034997371 + 67 63 44 1 109.47 881.3676628762171 + 68 69 71 1 109.47 881.3676628762172 + 68 69 62 1 109.47 1086.7354874741789 + 68 69 73 1 109.47 881.3676628762172 + 68 75 74 1 109.47 1086.7354874741789 + 68 75 77 1 109.47 881.3676628762172 + 68 75 79 1 109.47 881.3676628762172 + 69 68 70 1 109.47 881.3676628762172 + 69 68 75 1 109.47 1086.7354874741789 + 69 68 72 1 109.47 881.3676628762172 + 69 62 63 1 109.47 1086.7354874741789 + 69 62 64 1 109.47 881.3676628762172 + 69 62 66 1 109.47 881.3676628762172 + 70 68 69 1 109.47 881.3676628762171 + 70 68 75 1 109.47 881.3676628762171 + 70 68 72 1 109.47 865.6798034997371 + 71 69 68 1 109.47 881.3676628762171 + 71 69 62 1 109.47 881.3676628762171 + 71 69 73 1 109.47 865.6798034997371 + 72 68 69 1 109.47 881.3676628762171 + 72 68 70 1 109.47 865.6798034997371 + 72 68 75 1 109.47 881.3676628762171 + 73 69 68 1 109.47 881.3676628762171 + 73 69 71 1 109.47 865.6798034997371 + 73 69 62 1 109.47 881.3676628762171 + 74 75 77 1 109.47 881.3676628762172 + 74 75 68 1 109.47 1086.7354874741789 + 74 75 79 1 109.47 881.3676628762172 + 74 81 80 1 109.47 1086.7354874741789 + 74 81 83 1 109.47 881.3676628762172 + 74 81 85 1 109.47 881.3676628762172 + 75 74 76 1 109.47 881.3676628762172 + 75 74 81 1 109.47 1086.7354874741789 + 75 74 78 1 109.47 881.3676628762172 + 75 68 69 1 109.47 1086.7354874741789 + 75 68 70 1 109.47 881.3676628762172 + 75 68 72 1 109.47 881.3676628762172 + 76 74 75 1 109.47 881.3676628762171 + 76 74 81 1 109.47 881.3676628762171 + 76 74 78 1 109.47 865.6798034997371 + 77 75 74 1 109.47 881.3676628762171 + 77 75 68 1 109.47 881.3676628762171 + 77 75 79 1 109.47 865.6798034997371 + 78 74 75 1 109.47 881.3676628762171 + 78 74 76 1 109.47 865.6798034997371 + 78 74 81 1 109.47 881.3676628762171 + 79 75 74 1 109.47 881.3676628762171 + 79 75 77 1 109.47 865.6798034997371 + 79 75 68 1 109.47 881.3676628762171 + 80 81 83 1 109.47 881.3676628762172 + 80 81 74 1 109.47 1086.7354874741789 + 80 81 85 1 109.47 881.3676628762172 + 80 87 86 1 109.47 1086.7354874741789 + 80 87 89 1 109.47 881.3676628762172 + 80 87 90 1 109.47 881.3676628762172 + 81 80 82 1 109.47 881.3676628762172 + 81 80 87 1 109.47 1086.7354874741789 + 81 80 84 1 109.47 881.3676628762172 + 81 74 75 1 109.47 1086.7354874741789 + 81 74 76 1 109.47 881.3676628762172 + 81 74 78 1 109.47 881.3676628762172 + 82 80 81 1 109.47 881.3676628762171 + 82 80 87 1 109.47 881.3676628762171 + 82 80 84 1 109.47 865.6798034997371 + 83 81 80 1 109.47 881.3676628762171 + 83 81 74 1 109.47 881.3676628762171 + 83 81 85 1 109.47 865.6798034997371 + 84 80 81 1 109.47 881.3676628762171 + 84 80 82 1 109.47 865.6798034997371 + 84 80 87 1 109.47 881.3676628762171 + 85 81 80 1 109.47 881.3676628762171 + 85 81 83 1 109.47 865.6798034997371 + 85 81 74 1 109.47 881.3676628762171 + 86 87 89 1 109.47 881.3676628762172 + 86 87 80 1 109.47 1086.7354874741789 + 86 87 90 1 109.47 881.3676628762172 + 86 92 91 1 109.47 1086.7354874741789 + 86 92 94 1 109.47 881.3676628762172 + 86 92 96 1 109.47 881.3676628762172 + 86 105 104 1 109.47 1086.7354874741789 + 86 105 107 1 109.47 881.3676628762172 + 86 105 108 1 109.47 881.3676628762172 + 87 86 88 1 109.47 881.3676628762172 + 87 86 92 1 109.47 1086.7354874741789 + 87 86 105 1 109.47 1086.7354874741789 + 87 80 81 1 109.47 1086.7354874741789 + 87 80 82 1 109.47 881.3676628762172 + 87 80 84 1 109.47 881.3676628762172 + 88 86 87 1 109.47 881.3676628762171 + 88 86 92 1 109.47 881.3676628762171 + 88 86 105 1 109.47 881.3676628762171 + 89 87 86 1 109.47 881.3676628762171 + 89 87 80 1 109.47 881.3676628762171 + 89 87 90 1 109.47 865.6798034997371 + 90 87 86 1 109.47 881.3676628762171 + 90 87 89 1 109.47 865.6798034997371 + 90 87 80 1 109.47 881.3676628762171 + 91 92 94 1 109.47 881.3676628762172 + 91 92 86 1 109.47 1086.7354874741789 + 91 92 96 1 109.47 881.3676628762172 + 91 98 97 1 109.47 1086.7354874741789 + 91 98 100 1 109.47 881.3676628762172 + 91 98 103 1 109.47 881.3676628762172 + 92 91 93 1 109.47 881.3676628762172 + 92 91 98 1 109.47 1086.7354874741789 + 92 91 95 1 109.47 881.3676628762172 + 92 86 87 1 109.47 1086.7354874741789 + 92 86 88 1 109.47 881.3676628762172 + 92 86 105 1 109.47 1086.7354874741789 + 93 91 92 1 109.47 881.3676628762171 + 93 91 98 1 109.47 881.3676628762171 + 93 91 95 1 109.47 865.6798034997371 + 94 92 91 1 109.47 881.3676628762171 + 94 92 86 1 109.47 881.3676628762171 + 94 92 96 1 109.47 865.6798034997371 + 95 91 92 1 109.47 881.3676628762171 + 95 91 93 1 109.47 865.6798034997371 + 95 91 98 1 109.47 881.3676628762171 + 96 92 91 1 109.47 881.3676628762171 + 96 92 94 1 109.47 865.6798034997371 + 96 92 86 1 109.47 881.3676628762171 + 97 98 100 1 109.47 881.3676628762172 + 97 98 91 1 109.47 1086.7354874741789 + 97 98 103 1 109.47 881.3676628762172 + 98 97 99 1 109.47 881.3676628762172 + 98 97 101 1 109.47 881.3676628762172 + 98 97 102 1 109.47 881.3676628762172 + 98 91 92 1 109.47 1086.7354874741789 + 98 91 93 1 109.47 881.3676628762172 + 98 91 95 1 109.47 881.3676628762172 + 99 97 98 1 109.47 881.3676628762171 + 99 97 101 1 109.47 865.6798034997371 + 99 97 102 1 109.47 865.6798034997371 +100 98 97 1 109.47 881.3676628762171 +100 98 91 1 109.47 881.3676628762171 +100 98 103 1 109.47 865.6798034997371 +101 97 98 1 109.47 881.3676628762171 +101 97 99 1 109.47 865.6798034997371 +101 97 102 1 109.47 865.6798034997371 +102 97 98 1 109.47 881.3676628762171 +102 97 99 1 109.47 865.6798034997371 +102 97 101 1 109.47 865.6798034997371 +103 98 97 1 109.47 881.3676628762171 +103 98 100 1 109.47 865.6798034997371 +103 98 91 1 109.47 881.3676628762171 +104 105 107 1 109.47 881.3676628762172 +104 105 86 1 109.47 1086.7354874741789 +104 105 108 1 109.47 881.3676628762172 +104 110 109 1 109.47 1086.7354874741789 +104 110 112 1 109.47 881.3676628762172 +104 110 114 1 109.47 881.3676628762172 +104 123 122 1 109.47 1086.7354874741789 +104 123 125 1 109.47 881.3676628762172 +104 123 126 1 109.47 881.3676628762172 +105 104 106 1 109.47 881.3676628762172 +105 104 110 1 109.47 1086.7354874741789 +105 104 123 1 109.47 1086.7354874741789 +105 86 87 1 109.47 1086.7354874741789 +105 86 88 1 109.47 881.3676628762172 +105 86 92 1 109.47 1086.7354874741789 +106 104 105 1 109.47 881.3676628762171 +106 104 110 1 109.47 881.3676628762171 +106 104 123 1 109.47 881.3676628762171 +107 105 104 1 109.47 881.3676628762171 +107 105 86 1 109.47 881.3676628762171 +107 105 108 1 109.47 865.6798034997371 +108 105 104 1 109.47 881.3676628762171 +108 105 107 1 109.47 865.6798034997371 +108 105 86 1 109.47 881.3676628762171 +109 110 112 1 109.47 881.3676628762172 +109 110 104 1 109.47 1086.7354874741789 +109 110 114 1 109.47 881.3676628762172 +109 116 115 1 109.47 1086.7354874741789 +109 116 118 1 109.47 881.3676628762172 +109 116 121 1 109.47 881.3676628762172 +110 109 111 1 109.47 881.3676628762172 +110 109 116 1 109.47 1086.7354874741789 +110 109 113 1 109.47 881.3676628762172 +110 104 105 1 109.47 1086.7354874741789 +110 104 106 1 109.47 881.3676628762172 +110 104 123 1 109.47 1086.7354874741789 +111 109 110 1 109.47 881.3676628762171 +111 109 116 1 109.47 881.3676628762171 +111 109 113 1 109.47 865.6798034997371 +112 110 109 1 109.47 881.3676628762171 +112 110 104 1 109.47 881.3676628762171 +112 110 114 1 109.47 865.6798034997371 +113 109 110 1 109.47 881.3676628762171 +113 109 111 1 109.47 865.6798034997371 +113 109 116 1 109.47 881.3676628762171 +114 110 109 1 109.47 881.3676628762171 +114 110 112 1 109.47 865.6798034997371 +114 110 104 1 109.47 881.3676628762171 +115 116 118 1 109.47 881.3676628762172 +115 116 109 1 109.47 1086.7354874741789 +115 116 121 1 109.47 881.3676628762172 +116 115 117 1 109.47 881.3676628762172 +116 115 119 1 109.47 881.3676628762172 +116 115 120 1 109.47 881.3676628762172 +116 109 110 1 109.47 1086.7354874741789 +116 109 111 1 109.47 881.3676628762172 +116 109 113 1 109.47 881.3676628762172 +117 115 116 1 109.47 881.3676628762171 +117 115 119 1 109.47 865.6798034997371 +117 115 120 1 109.47 865.6798034997371 +118 116 115 1 109.47 881.3676628762171 +118 116 109 1 109.47 881.3676628762171 +118 116 121 1 109.47 865.6798034997371 +119 115 116 1 109.47 881.3676628762171 +119 115 117 1 109.47 865.6798034997371 +119 115 120 1 109.47 865.6798034997371 +120 115 116 1 109.47 881.3676628762171 +120 115 117 1 109.47 865.6798034997371 +120 115 119 1 109.47 865.6798034997371 +121 116 115 1 109.47 881.3676628762171 +121 116 118 1 109.47 865.6798034997371 +121 116 109 1 109.47 881.3676628762171 +122 123 125 1 109.47 881.3676628762172 +122 123 104 1 109.47 1086.7354874741789 +122 123 126 1 109.47 881.3676628762172 +122 128 127 1 109.47 1086.7354874741789 +122 128 130 1 109.47 881.3676628762172 +122 128 132 1 109.47 881.3676628762172 +122 141 140 1 109.47 1086.7354874741789 +122 141 143 1 109.47 881.3676628762172 +122 141 146 1 109.47 881.3676628762172 +123 122 124 1 109.47 881.3676628762172 +123 122 128 1 109.47 1086.7354874741789 +123 122 141 1 109.47 1086.7354874741789 +123 104 105 1 109.47 1086.7354874741789 +123 104 106 1 109.47 881.3676628762172 +123 104 110 1 109.47 1086.7354874741789 +124 122 123 1 109.47 881.3676628762171 +124 122 128 1 109.47 881.3676628762171 +124 122 141 1 109.47 881.3676628762171 +125 123 122 1 109.47 881.3676628762171 +125 123 104 1 109.47 881.3676628762171 +125 123 126 1 109.47 865.6798034997371 +126 123 122 1 109.47 881.3676628762171 +126 123 125 1 109.47 865.6798034997371 +126 123 104 1 109.47 881.3676628762171 +127 128 130 1 109.47 881.3676628762172 +127 128 122 1 109.47 1086.7354874741789 +127 128 132 1 109.47 881.3676628762172 +127 134 133 1 109.47 1086.7354874741789 +127 134 136 1 109.47 881.3676628762172 +127 134 139 1 109.47 881.3676628762172 +128 127 129 1 109.47 881.3676628762172 +128 127 134 1 109.47 1086.7354874741789 +128 127 131 1 109.47 881.3676628762172 +128 122 123 1 109.47 1086.7354874741789 +128 122 124 1 109.47 881.3676628762172 +128 122 141 1 109.47 1086.7354874741789 +129 127 128 1 109.47 881.3676628762171 +129 127 134 1 109.47 881.3676628762171 +129 127 131 1 109.47 865.6798034997371 +130 128 127 1 109.47 881.3676628762171 +130 128 122 1 109.47 881.3676628762171 +130 128 132 1 109.47 865.6798034997371 +131 127 128 1 109.47 881.3676628762171 +131 127 129 1 109.47 865.6798034997371 +131 127 134 1 109.47 881.3676628762171 +132 128 127 1 109.47 881.3676628762171 +132 128 130 1 109.47 865.6798034997371 +132 128 122 1 109.47 881.3676628762171 +133 134 136 1 109.47 881.3676628762172 +133 134 127 1 109.47 1086.7354874741789 +133 134 139 1 109.47 881.3676628762172 +134 133 135 1 109.47 881.3676628762172 +134 133 137 1 109.47 881.3676628762172 +134 133 138 1 109.47 881.3676628762172 +134 127 128 1 109.47 1086.7354874741789 +134 127 129 1 109.47 881.3676628762172 +134 127 131 1 109.47 881.3676628762172 +135 133 134 1 109.47 881.3676628762171 +135 133 137 1 109.47 865.6798034997371 +135 133 138 1 109.47 865.6798034997371 +136 134 133 1 109.47 881.3676628762171 +136 134 127 1 109.47 881.3676628762171 +136 134 139 1 109.47 865.6798034997371 +137 133 134 1 109.47 881.3676628762171 +137 133 135 1 109.47 865.6798034997371 +137 133 138 1 109.47 865.6798034997371 +138 133 134 1 109.47 881.3676628762171 +138 133 135 1 109.47 865.6798034997371 +138 133 137 1 109.47 865.6798034997371 +139 134 133 1 109.47 881.3676628762171 +139 134 136 1 109.47 865.6798034997371 +139 134 127 1 109.47 881.3676628762171 +140 141 143 1 109.47 881.3676628762172 +140 141 122 1 109.47 1086.7354874741789 +140 141 146 1 109.47 881.3676628762172 +141 140 142 1 109.47 881.3676628762172 +141 140 144 1 109.47 881.3676628762172 +141 140 145 1 109.47 881.3676628762172 +141 122 123 1 109.47 1086.7354874741789 +141 122 124 1 109.47 881.3676628762172 +141 122 128 1 109.47 1086.7354874741789 +142 140 141 1 109.47 881.3676628762171 +142 140 144 1 109.47 865.6798034997371 +142 140 145 1 109.47 865.6798034997371 +143 141 140 1 109.47 881.3676628762171 +143 141 122 1 109.47 881.3676628762171 +143 141 146 1 109.47 865.6798034997371 +144 140 141 1 109.47 881.3676628762171 +144 140 142 1 109.47 865.6798034997371 +144 140 145 1 109.47 865.6798034997371 +145 140 141 1 109.47 881.3676628762171 +145 140 142 1 109.47 865.6798034997371 +145 140 144 1 109.47 865.6798034997371 +146 141 140 1 109.47 881.3676628762171 +146 141 143 1 109.47 865.6798034997371 +146 141 122 1 109.47 881.3676628762171 + +[ dihedrals ] + 1 9 8 10 1 0 4.4329480000000006 3 + 1 9 8 14 1 0 4.4329480000000006 3 + 1 9 8 27 1 0 4.4329480000000006 3 + 2 1 9 8 1 0 4.4329480000000006 3 + 2 1 9 11 1 0 4.4329480000000006 3 + 2 1 9 12 1 0 4.4329480000000006 3 + 3 1 2 4 1 0 4.4329480000000006 3 + 3 1 2 6 1 0 4.4329480000000006 3 + 3 1 2 7 1 0 4.4329480000000006 3 + 3 1 9 8 1 0 4.4329480000000006 3 + 3 1 9 11 1 0 4.4329480000000006 3 + 3 1 9 12 1 0 4.4329480000000006 3 + 4 2 1 3 1 0 4.4329480000000006 3 + 4 2 1 9 1 0 4.4329480000000006 3 + 4 2 1 5 1 0 4.4329480000000006 3 + 5 1 2 4 1 0 4.4329480000000006 3 + 5 1 2 6 1 0 4.4329480000000006 3 + 5 1 2 7 1 0 4.4329480000000006 3 + 5 1 9 8 1 0 4.4329480000000006 3 + 5 1 9 11 1 0 4.4329480000000006 3 + 5 1 9 12 1 0 4.4329480000000006 3 + 6 2 1 3 1 0 4.4329480000000006 3 + 6 2 1 9 1 0 4.4329480000000006 3 + 6 2 1 5 1 0 4.4329480000000006 3 + 7 2 1 3 1 0 4.4329480000000006 3 + 7 2 1 9 1 0 4.4329480000000006 3 + 7 2 1 5 1 0 4.4329480000000006 3 + 8 9 1 2 1 0 4.4329480000000006 3 + 8 9 1 3 1 0 4.4329480000000006 3 + 8 9 1 5 1 0 4.4329480000000006 3 + 8 14 13 15 1 0 4.4329480000000006 3 + 8 14 13 20 1 0 4.4329480000000006 3 + 8 14 13 17 1 0 4.4329480000000006 3 + 8 27 26 28 1 0 4.4329480000000006 3 + 8 27 26 32 1 0 4.4329480000000006 3 + 8 27 26 45 1 0 4.4329480000000006 3 + 9 8 14 13 1 0 4.4329480000000006 3 + 9 8 14 16 1 0 4.4329480000000006 3 + 9 8 14 18 1 0 4.4329480000000006 3 + 9 8 27 26 1 0 4.4329480000000006 3 + 9 8 27 29 1 0 4.4329480000000006 3 + 9 8 27 30 1 0 4.4329480000000006 3 + 9 1 2 4 1 0 4.4329480000000006 3 + 9 1 2 6 1 0 4.4329480000000006 3 + 9 1 2 7 1 0 4.4329480000000006 3 + 10 8 9 11 1 0 4.4329480000000006 3 + 10 8 9 1 1 0 4.4329480000000006 3 + 10 8 9 12 1 0 4.4329480000000006 3 + 10 8 14 13 1 0 4.4329480000000006 3 + 10 8 14 16 1 0 4.4329480000000006 3 + 10 8 14 18 1 0 4.4329480000000006 3 + 10 8 27 26 1 0 4.4329480000000006 3 + 10 8 27 29 1 0 4.4329480000000006 3 + 10 8 27 30 1 0 4.4329480000000006 3 + 11 9 8 10 1 0 4.4329480000000006 3 + 11 9 8 14 1 0 4.4329480000000006 3 + 11 9 8 27 1 0 4.4329480000000006 3 + 11 9 1 2 1 0 4.4329480000000006 3 + 11 9 1 3 1 0 4.4329480000000006 3 + 11 9 1 5 1 0 4.4329480000000006 3 + 12 9 8 10 1 0 4.4329480000000006 3 + 12 9 8 14 1 0 4.4329480000000006 3 + 12 9 8 27 1 0 4.4329480000000006 3 + 12 9 1 2 1 0 4.4329480000000006 3 + 12 9 1 3 1 0 4.4329480000000006 3 + 12 9 1 5 1 0 4.4329480000000006 3 + 13 14 8 9 1 0 4.4329480000000006 3 + 13 14 8 10 1 0 4.4329480000000006 3 + 13 14 8 27 1 0 4.4329480000000006 3 + 13 20 19 21 1 0 4.4329480000000006 3 + 13 20 19 23 1 0 4.4329480000000006 3 + 13 20 19 24 1 0 4.4329480000000006 3 + 14 13 20 19 1 0 4.4329480000000006 3 + 14 13 20 22 1 0 4.4329480000000006 3 + 14 13 20 25 1 0 4.4329480000000006 3 + 14 8 9 11 1 0 4.4329480000000006 3 + 14 8 9 1 1 0 4.4329480000000006 3 + 14 8 9 12 1 0 4.4329480000000006 3 + 14 8 27 26 1 0 4.4329480000000006 3 + 14 8 27 29 1 0 4.4329480000000006 3 + 14 8 27 30 1 0 4.4329480000000006 3 + 15 13 14 16 1 0 4.4329480000000006 3 + 15 13 14 8 1 0 4.4329480000000006 3 + 15 13 14 18 1 0 4.4329480000000006 3 + 15 13 20 19 1 0 4.4329480000000006 3 + 15 13 20 22 1 0 4.4329480000000006 3 + 15 13 20 25 1 0 4.4329480000000006 3 + 16 14 13 15 1 0 4.4329480000000006 3 + 16 14 13 20 1 0 4.4329480000000006 3 + 16 14 13 17 1 0 4.4329480000000006 3 + 16 14 8 9 1 0 4.4329480000000006 3 + 16 14 8 10 1 0 4.4329480000000006 3 + 16 14 8 27 1 0 4.4329480000000006 3 + 17 13 14 16 1 0 4.4329480000000006 3 + 17 13 14 8 1 0 4.4329480000000006 3 + 17 13 14 18 1 0 4.4329480000000006 3 + 17 13 20 19 1 0 4.4329480000000006 3 + 17 13 20 22 1 0 4.4329480000000006 3 + 17 13 20 25 1 0 4.4329480000000006 3 + 18 14 13 15 1 0 4.4329480000000006 3 + 18 14 13 20 1 0 4.4329480000000006 3 + 18 14 13 17 1 0 4.4329480000000006 3 + 18 14 8 9 1 0 4.4329480000000006 3 + 18 14 8 10 1 0 4.4329480000000006 3 + 18 14 8 27 1 0 4.4329480000000006 3 + 19 20 13 14 1 0 4.4329480000000006 3 + 19 20 13 15 1 0 4.4329480000000006 3 + 19 20 13 17 1 0 4.4329480000000006 3 + 20 13 14 16 1 0 4.4329480000000006 3 + 20 13 14 8 1 0 4.4329480000000006 3 + 20 13 14 18 1 0 4.4329480000000006 3 + 21 19 20 22 1 0 4.4329480000000006 3 + 21 19 20 13 1 0 4.4329480000000006 3 + 21 19 20 25 1 0 4.4329480000000006 3 + 22 20 19 21 1 0 4.4329480000000006 3 + 22 20 19 23 1 0 4.4329480000000006 3 + 22 20 19 24 1 0 4.4329480000000006 3 + 22 20 13 14 1 0 4.4329480000000006 3 + 22 20 13 15 1 0 4.4329480000000006 3 + 22 20 13 17 1 0 4.4329480000000006 3 + 23 19 20 22 1 0 4.4329480000000006 3 + 23 19 20 13 1 0 4.4329480000000006 3 + 23 19 20 25 1 0 4.4329480000000006 3 + 24 19 20 22 1 0 4.4329480000000006 3 + 24 19 20 13 1 0 4.4329480000000006 3 + 24 19 20 25 1 0 4.4329480000000006 3 + 25 20 19 21 1 0 4.4329480000000006 3 + 25 20 19 23 1 0 4.4329480000000006 3 + 25 20 19 24 1 0 4.4329480000000006 3 + 25 20 13 14 1 0 4.4329480000000006 3 + 25 20 13 15 1 0 4.4329480000000006 3 + 25 20 13 17 1 0 4.4329480000000006 3 + 26 27 8 9 1 0 4.4329480000000006 3 + 26 27 8 10 1 0 4.4329480000000006 3 + 26 27 8 14 1 0 4.4329480000000006 3 + 26 32 31 33 1 0 4.4329480000000006 3 + 26 32 31 38 1 0 4.4329480000000006 3 + 26 32 31 35 1 0 4.4329480000000006 3 + 26 45 44 46 1 0 4.4329480000000006 3 + 26 45 44 50 1 0 4.4329480000000006 3 + 26 45 44 63 1 0 4.4329480000000006 3 + 27 26 32 31 1 0 4.4329480000000006 3 + 27 26 32 34 1 0 4.4329480000000006 3 + 27 26 32 36 1 0 4.4329480000000006 3 + 27 26 45 44 1 0 4.4329480000000006 3 + 27 26 45 47 1 0 4.4329480000000006 3 + 27 26 45 48 1 0 4.4329480000000006 3 + 27 8 9 11 1 0 4.4329480000000006 3 + 27 8 9 1 1 0 4.4329480000000006 3 + 27 8 9 12 1 0 4.4329480000000006 3 + 27 8 14 13 1 0 4.4329480000000006 3 + 27 8 14 16 1 0 4.4329480000000006 3 + 27 8 14 18 1 0 4.4329480000000006 3 + 28 26 27 29 1 0 4.4329480000000006 3 + 28 26 27 8 1 0 4.4329480000000006 3 + 28 26 27 30 1 0 4.4329480000000006 3 + 28 26 32 31 1 0 4.4329480000000006 3 + 28 26 32 34 1 0 4.4329480000000006 3 + 28 26 32 36 1 0 4.4329480000000006 3 + 28 26 45 44 1 0 4.4329480000000006 3 + 28 26 45 47 1 0 4.4329480000000006 3 + 28 26 45 48 1 0 4.4329480000000006 3 + 29 27 26 28 1 0 4.4329480000000006 3 + 29 27 26 32 1 0 4.4329480000000006 3 + 29 27 26 45 1 0 4.4329480000000006 3 + 29 27 8 9 1 0 4.4329480000000006 3 + 29 27 8 10 1 0 4.4329480000000006 3 + 29 27 8 14 1 0 4.4329480000000006 3 + 30 27 26 28 1 0 4.4329480000000006 3 + 30 27 26 32 1 0 4.4329480000000006 3 + 30 27 26 45 1 0 4.4329480000000006 3 + 30 27 8 9 1 0 4.4329480000000006 3 + 30 27 8 10 1 0 4.4329480000000006 3 + 30 27 8 14 1 0 4.4329480000000006 3 + 31 32 26 27 1 0 4.4329480000000006 3 + 31 32 26 28 1 0 4.4329480000000006 3 + 31 32 26 45 1 0 4.4329480000000006 3 + 31 38 37 39 1 0 4.4329480000000006 3 + 31 38 37 41 1 0 4.4329480000000006 3 + 31 38 37 42 1 0 4.4329480000000006 3 + 32 31 38 37 1 0 4.4329480000000006 3 + 32 31 38 40 1 0 4.4329480000000006 3 + 32 31 38 43 1 0 4.4329480000000006 3 + 32 26 27 29 1 0 4.4329480000000006 3 + 32 26 27 8 1 0 4.4329480000000006 3 + 32 26 27 30 1 0 4.4329480000000006 3 + 32 26 45 44 1 0 4.4329480000000006 3 + 32 26 45 47 1 0 4.4329480000000006 3 + 32 26 45 48 1 0 4.4329480000000006 3 + 33 31 32 34 1 0 4.4329480000000006 3 + 33 31 32 26 1 0 4.4329480000000006 3 + 33 31 32 36 1 0 4.4329480000000006 3 + 33 31 38 37 1 0 4.4329480000000006 3 + 33 31 38 40 1 0 4.4329480000000006 3 + 33 31 38 43 1 0 4.4329480000000006 3 + 34 32 31 33 1 0 4.4329480000000006 3 + 34 32 31 38 1 0 4.4329480000000006 3 + 34 32 31 35 1 0 4.4329480000000006 3 + 34 32 26 27 1 0 4.4329480000000006 3 + 34 32 26 28 1 0 4.4329480000000006 3 + 34 32 26 45 1 0 4.4329480000000006 3 + 35 31 32 34 1 0 4.4329480000000006 3 + 35 31 32 26 1 0 4.4329480000000006 3 + 35 31 32 36 1 0 4.4329480000000006 3 + 35 31 38 37 1 0 4.4329480000000006 3 + 35 31 38 40 1 0 4.4329480000000006 3 + 35 31 38 43 1 0 4.4329480000000006 3 + 36 32 31 33 1 0 4.4329480000000006 3 + 36 32 31 38 1 0 4.4329480000000006 3 + 36 32 31 35 1 0 4.4329480000000006 3 + 36 32 26 27 1 0 4.4329480000000006 3 + 36 32 26 28 1 0 4.4329480000000006 3 + 36 32 26 45 1 0 4.4329480000000006 3 + 37 38 31 32 1 0 4.4329480000000006 3 + 37 38 31 33 1 0 4.4329480000000006 3 + 37 38 31 35 1 0 4.4329480000000006 3 + 38 31 32 34 1 0 4.4329480000000006 3 + 38 31 32 26 1 0 4.4329480000000006 3 + 38 31 32 36 1 0 4.4329480000000006 3 + 39 37 38 40 1 0 4.4329480000000006 3 + 39 37 38 31 1 0 4.4329480000000006 3 + 39 37 38 43 1 0 4.4329480000000006 3 + 40 38 37 39 1 0 4.4329480000000006 3 + 40 38 37 41 1 0 4.4329480000000006 3 + 40 38 37 42 1 0 4.4329480000000006 3 + 40 38 31 32 1 0 4.4329480000000006 3 + 40 38 31 33 1 0 4.4329480000000006 3 + 40 38 31 35 1 0 4.4329480000000006 3 + 41 37 38 40 1 0 4.4329480000000006 3 + 41 37 38 31 1 0 4.4329480000000006 3 + 41 37 38 43 1 0 4.4329480000000006 3 + 42 37 38 40 1 0 4.4329480000000006 3 + 42 37 38 31 1 0 4.4329480000000006 3 + 42 37 38 43 1 0 4.4329480000000006 3 + 43 38 37 39 1 0 4.4329480000000006 3 + 43 38 37 41 1 0 4.4329480000000006 3 + 43 38 37 42 1 0 4.4329480000000006 3 + 43 38 31 32 1 0 4.4329480000000006 3 + 43 38 31 33 1 0 4.4329480000000006 3 + 43 38 31 35 1 0 4.4329480000000006 3 + 44 45 26 27 1 0 4.4329480000000006 3 + 44 45 26 28 1 0 4.4329480000000006 3 + 44 45 26 32 1 0 4.4329480000000006 3 + 44 50 49 51 1 0 4.4329480000000006 3 + 44 50 49 56 1 0 4.4329480000000006 3 + 44 50 49 53 1 0 4.4329480000000006 3 + 44 63 62 64 1 0 4.4329480000000006 3 + 44 63 62 69 1 0 4.4329480000000006 3 + 44 63 62 66 1 0 4.4329480000000006 3 + 45 44 50 49 1 0 4.4329480000000006 3 + 45 44 50 52 1 0 4.4329480000000006 3 + 45 44 50 54 1 0 4.4329480000000006 3 + 45 44 63 62 1 0 4.4329480000000006 3 + 45 44 63 65 1 0 4.4329480000000006 3 + 45 44 63 67 1 0 4.4329480000000006 3 + 45 26 27 29 1 0 4.4329480000000006 3 + 45 26 27 8 1 0 4.4329480000000006 3 + 45 26 27 30 1 0 4.4329480000000006 3 + 45 26 32 31 1 0 4.4329480000000006 3 + 45 26 32 34 1 0 4.4329480000000006 3 + 45 26 32 36 1 0 4.4329480000000006 3 + 46 44 45 47 1 0 4.4329480000000006 3 + 46 44 45 26 1 0 4.4329480000000006 3 + 46 44 45 48 1 0 4.4329480000000006 3 + 46 44 50 49 1 0 4.4329480000000006 3 + 46 44 50 52 1 0 4.4329480000000006 3 + 46 44 50 54 1 0 4.4329480000000006 3 + 46 44 63 62 1 0 4.4329480000000006 3 + 46 44 63 65 1 0 4.4329480000000006 3 + 46 44 63 67 1 0 4.4329480000000006 3 + 47 45 44 46 1 0 4.4329480000000006 3 + 47 45 44 50 1 0 4.4329480000000006 3 + 47 45 44 63 1 0 4.4329480000000006 3 + 47 45 26 27 1 0 4.4329480000000006 3 + 47 45 26 28 1 0 4.4329480000000006 3 + 47 45 26 32 1 0 4.4329480000000006 3 + 48 45 44 46 1 0 4.4329480000000006 3 + 48 45 44 50 1 0 4.4329480000000006 3 + 48 45 44 63 1 0 4.4329480000000006 3 + 48 45 26 27 1 0 4.4329480000000006 3 + 48 45 26 28 1 0 4.4329480000000006 3 + 48 45 26 32 1 0 4.4329480000000006 3 + 49 50 44 45 1 0 4.4329480000000006 3 + 49 50 44 46 1 0 4.4329480000000006 3 + 49 50 44 63 1 0 4.4329480000000006 3 + 49 56 55 57 1 0 4.4329480000000006 3 + 49 56 55 59 1 0 4.4329480000000006 3 + 49 56 55 60 1 0 4.4329480000000006 3 + 50 49 56 55 1 0 4.4329480000000006 3 + 50 49 56 58 1 0 4.4329480000000006 3 + 50 49 56 61 1 0 4.4329480000000006 3 + 50 44 45 47 1 0 4.4329480000000006 3 + 50 44 45 26 1 0 4.4329480000000006 3 + 50 44 45 48 1 0 4.4329480000000006 3 + 50 44 63 62 1 0 4.4329480000000006 3 + 50 44 63 65 1 0 4.4329480000000006 3 + 50 44 63 67 1 0 4.4329480000000006 3 + 51 49 50 52 1 0 4.4329480000000006 3 + 51 49 50 44 1 0 4.4329480000000006 3 + 51 49 50 54 1 0 4.4329480000000006 3 + 51 49 56 55 1 0 4.4329480000000006 3 + 51 49 56 58 1 0 4.4329480000000006 3 + 51 49 56 61 1 0 4.4329480000000006 3 + 52 50 49 51 1 0 4.4329480000000006 3 + 52 50 49 56 1 0 4.4329480000000006 3 + 52 50 49 53 1 0 4.4329480000000006 3 + 52 50 44 45 1 0 4.4329480000000006 3 + 52 50 44 46 1 0 4.4329480000000006 3 + 52 50 44 63 1 0 4.4329480000000006 3 + 53 49 50 52 1 0 4.4329480000000006 3 + 53 49 50 44 1 0 4.4329480000000006 3 + 53 49 50 54 1 0 4.4329480000000006 3 + 53 49 56 55 1 0 4.4329480000000006 3 + 53 49 56 58 1 0 4.4329480000000006 3 + 53 49 56 61 1 0 4.4329480000000006 3 + 54 50 49 51 1 0 4.4329480000000006 3 + 54 50 49 56 1 0 4.4329480000000006 3 + 54 50 49 53 1 0 4.4329480000000006 3 + 54 50 44 45 1 0 4.4329480000000006 3 + 54 50 44 46 1 0 4.4329480000000006 3 + 54 50 44 63 1 0 4.4329480000000006 3 + 55 56 49 50 1 0 4.4329480000000006 3 + 55 56 49 51 1 0 4.4329480000000006 3 + 55 56 49 53 1 0 4.4329480000000006 3 + 56 49 50 52 1 0 4.4329480000000006 3 + 56 49 50 44 1 0 4.4329480000000006 3 + 56 49 50 54 1 0 4.4329480000000006 3 + 57 55 56 58 1 0 4.4329480000000006 3 + 57 55 56 49 1 0 4.4329480000000006 3 + 57 55 56 61 1 0 4.4329480000000006 3 + 58 56 55 57 1 0 4.4329480000000006 3 + 58 56 55 59 1 0 4.4329480000000006 3 + 58 56 55 60 1 0 4.4329480000000006 3 + 58 56 49 50 1 0 4.4329480000000006 3 + 58 56 49 51 1 0 4.4329480000000006 3 + 58 56 49 53 1 0 4.4329480000000006 3 + 59 55 56 58 1 0 4.4329480000000006 3 + 59 55 56 49 1 0 4.4329480000000006 3 + 59 55 56 61 1 0 4.4329480000000006 3 + 60 55 56 58 1 0 4.4329480000000006 3 + 60 55 56 49 1 0 4.4329480000000006 3 + 60 55 56 61 1 0 4.4329480000000006 3 + 61 56 55 57 1 0 4.4329480000000006 3 + 61 56 55 59 1 0 4.4329480000000006 3 + 61 56 55 60 1 0 4.4329480000000006 3 + 61 56 49 50 1 0 4.4329480000000006 3 + 61 56 49 51 1 0 4.4329480000000006 3 + 61 56 49 53 1 0 4.4329480000000006 3 + 62 63 44 45 1 0 4.4329480000000006 3 + 62 63 44 46 1 0 4.4329480000000006 3 + 62 63 44 50 1 0 4.4329480000000006 3 + 62 69 68 70 1 0 4.4329480000000006 3 + 62 69 68 75 1 0 4.4329480000000006 3 + 62 69 68 72 1 0 4.4329480000000006 3 + 63 62 69 68 1 0 4.4329480000000006 3 + 63 62 69 71 1 0 4.4329480000000006 3 + 63 62 69 73 1 0 4.4329480000000006 3 + 63 44 45 47 1 0 4.4329480000000006 3 + 63 44 45 26 1 0 4.4329480000000006 3 + 63 44 45 48 1 0 4.4329480000000006 3 + 63 44 50 49 1 0 4.4329480000000006 3 + 63 44 50 52 1 0 4.4329480000000006 3 + 63 44 50 54 1 0 4.4329480000000006 3 + 64 62 63 65 1 0 4.4329480000000006 3 + 64 62 63 44 1 0 4.4329480000000006 3 + 64 62 63 67 1 0 4.4329480000000006 3 + 64 62 69 68 1 0 4.4329480000000006 3 + 64 62 69 71 1 0 4.4329480000000006 3 + 64 62 69 73 1 0 4.4329480000000006 3 + 65 63 62 64 1 0 4.4329480000000006 3 + 65 63 62 69 1 0 4.4329480000000006 3 + 65 63 62 66 1 0 4.4329480000000006 3 + 65 63 44 45 1 0 4.4329480000000006 3 + 65 63 44 46 1 0 4.4329480000000006 3 + 65 63 44 50 1 0 4.4329480000000006 3 + 66 62 63 65 1 0 4.4329480000000006 3 + 66 62 63 44 1 0 4.4329480000000006 3 + 66 62 63 67 1 0 4.4329480000000006 3 + 66 62 69 68 1 0 4.4329480000000006 3 + 66 62 69 71 1 0 4.4329480000000006 3 + 66 62 69 73 1 0 4.4329480000000006 3 + 67 63 62 64 1 0 4.4329480000000006 3 + 67 63 62 69 1 0 4.4329480000000006 3 + 67 63 62 66 1 0 4.4329480000000006 3 + 67 63 44 45 1 0 4.4329480000000006 3 + 67 63 44 46 1 0 4.4329480000000006 3 + 67 63 44 50 1 0 4.4329480000000006 3 + 68 69 62 63 1 0 4.4329480000000006 3 + 68 69 62 64 1 0 4.4329480000000006 3 + 68 69 62 66 1 0 4.4329480000000006 3 + 68 75 74 76 1 0 4.4329480000000006 3 + 68 75 74 81 1 0 4.4329480000000006 3 + 68 75 74 78 1 0 4.4329480000000006 3 + 69 68 75 74 1 0 4.4329480000000006 3 + 69 68 75 77 1 0 4.4329480000000006 3 + 69 68 75 79 1 0 4.4329480000000006 3 + 69 62 63 65 1 0 4.4329480000000006 3 + 69 62 63 44 1 0 4.4329480000000006 3 + 69 62 63 67 1 0 4.4329480000000006 3 + 70 68 69 71 1 0 4.4329480000000006 3 + 70 68 69 62 1 0 4.4329480000000006 3 + 70 68 69 73 1 0 4.4329480000000006 3 + 70 68 75 74 1 0 4.4329480000000006 3 + 70 68 75 77 1 0 4.4329480000000006 3 + 70 68 75 79 1 0 4.4329480000000006 3 + 71 69 68 70 1 0 4.4329480000000006 3 + 71 69 68 75 1 0 4.4329480000000006 3 + 71 69 68 72 1 0 4.4329480000000006 3 + 71 69 62 63 1 0 4.4329480000000006 3 + 71 69 62 64 1 0 4.4329480000000006 3 + 71 69 62 66 1 0 4.4329480000000006 3 + 72 68 69 71 1 0 4.4329480000000006 3 + 72 68 69 62 1 0 4.4329480000000006 3 + 72 68 69 73 1 0 4.4329480000000006 3 + 72 68 75 74 1 0 4.4329480000000006 3 + 72 68 75 77 1 0 4.4329480000000006 3 + 72 68 75 79 1 0 4.4329480000000006 3 + 73 69 68 70 1 0 4.4329480000000006 3 + 73 69 68 75 1 0 4.4329480000000006 3 + 73 69 68 72 1 0 4.4329480000000006 3 + 73 69 62 63 1 0 4.4329480000000006 3 + 73 69 62 64 1 0 4.4329480000000006 3 + 73 69 62 66 1 0 4.4329480000000006 3 + 74 75 68 69 1 0 4.4329480000000006 3 + 74 75 68 70 1 0 4.4329480000000006 3 + 74 75 68 72 1 0 4.4329480000000006 3 + 74 81 80 82 1 0 4.4329480000000006 3 + 74 81 80 87 1 0 4.4329480000000006 3 + 74 81 80 84 1 0 4.4329480000000006 3 + 75 74 81 80 1 0 4.4329480000000006 3 + 75 74 81 83 1 0 4.4329480000000006 3 + 75 74 81 85 1 0 4.4329480000000006 3 + 75 68 69 71 1 0 4.4329480000000006 3 + 75 68 69 62 1 0 4.4329480000000006 3 + 75 68 69 73 1 0 4.4329480000000006 3 + 76 74 75 77 1 0 4.4329480000000006 3 + 76 74 75 68 1 0 4.4329480000000006 3 + 76 74 75 79 1 0 4.4329480000000006 3 + 76 74 81 80 1 0 4.4329480000000006 3 + 76 74 81 83 1 0 4.4329480000000006 3 + 76 74 81 85 1 0 4.4329480000000006 3 + 77 75 74 76 1 0 4.4329480000000006 3 + 77 75 74 81 1 0 4.4329480000000006 3 + 77 75 74 78 1 0 4.4329480000000006 3 + 77 75 68 69 1 0 4.4329480000000006 3 + 77 75 68 70 1 0 4.4329480000000006 3 + 77 75 68 72 1 0 4.4329480000000006 3 + 78 74 75 77 1 0 4.4329480000000006 3 + 78 74 75 68 1 0 4.4329480000000006 3 + 78 74 75 79 1 0 4.4329480000000006 3 + 78 74 81 80 1 0 4.4329480000000006 3 + 78 74 81 83 1 0 4.4329480000000006 3 + 78 74 81 85 1 0 4.4329480000000006 3 + 79 75 74 76 1 0 4.4329480000000006 3 + 79 75 74 81 1 0 4.4329480000000006 3 + 79 75 74 78 1 0 4.4329480000000006 3 + 79 75 68 69 1 0 4.4329480000000006 3 + 79 75 68 70 1 0 4.4329480000000006 3 + 79 75 68 72 1 0 4.4329480000000006 3 + 80 81 74 75 1 0 4.4329480000000006 3 + 80 81 74 76 1 0 4.4329480000000006 3 + 80 81 74 78 1 0 4.4329480000000006 3 + 80 87 86 88 1 0 4.4329480000000006 3 + 80 87 86 92 1 0 4.4329480000000006 3 + 80 87 86 105 1 0 4.4329480000000006 3 + 81 80 87 86 1 0 4.4329480000000006 3 + 81 80 87 89 1 0 4.4329480000000006 3 + 81 80 87 90 1 0 4.4329480000000006 3 + 81 74 75 77 1 0 4.4329480000000006 3 + 81 74 75 68 1 0 4.4329480000000006 3 + 81 74 75 79 1 0 4.4329480000000006 3 + 82 80 81 83 1 0 4.4329480000000006 3 + 82 80 81 74 1 0 4.4329480000000006 3 + 82 80 81 85 1 0 4.4329480000000006 3 + 82 80 87 86 1 0 4.4329480000000006 3 + 82 80 87 89 1 0 4.4329480000000006 3 + 82 80 87 90 1 0 4.4329480000000006 3 + 83 81 80 82 1 0 4.4329480000000006 3 + 83 81 80 87 1 0 4.4329480000000006 3 + 83 81 80 84 1 0 4.4329480000000006 3 + 83 81 74 75 1 0 4.4329480000000006 3 + 83 81 74 76 1 0 4.4329480000000006 3 + 83 81 74 78 1 0 4.4329480000000006 3 + 84 80 81 83 1 0 4.4329480000000006 3 + 84 80 81 74 1 0 4.4329480000000006 3 + 84 80 81 85 1 0 4.4329480000000006 3 + 84 80 87 86 1 0 4.4329480000000006 3 + 84 80 87 89 1 0 4.4329480000000006 3 + 84 80 87 90 1 0 4.4329480000000006 3 + 85 81 80 82 1 0 4.4329480000000006 3 + 85 81 80 87 1 0 4.4329480000000006 3 + 85 81 80 84 1 0 4.4329480000000006 3 + 85 81 74 75 1 0 4.4329480000000006 3 + 85 81 74 76 1 0 4.4329480000000006 3 + 85 81 74 78 1 0 4.4329480000000006 3 + 86 87 80 81 1 0 4.4329480000000006 3 + 86 87 80 82 1 0 4.4329480000000006 3 + 86 87 80 84 1 0 4.4329480000000006 3 + 86 92 91 93 1 0 4.4329480000000006 3 + 86 92 91 98 1 0 4.4329480000000006 3 + 86 92 91 95 1 0 4.4329480000000006 3 + 86 105 104 106 1 0 4.4329480000000006 3 + 86 105 104 110 1 0 4.4329480000000006 3 + 86 105 104 123 1 0 4.4329480000000006 3 + 87 86 92 91 1 0 4.4329480000000006 3 + 87 86 92 94 1 0 4.4329480000000006 3 + 87 86 92 96 1 0 4.4329480000000006 3 + 87 86 105 104 1 0 4.4329480000000006 3 + 87 86 105 107 1 0 4.4329480000000006 3 + 87 86 105 108 1 0 4.4329480000000006 3 + 87 80 81 83 1 0 4.4329480000000006 3 + 87 80 81 74 1 0 4.4329480000000006 3 + 87 80 81 85 1 0 4.4329480000000006 3 + 88 86 87 89 1 0 4.4329480000000006 3 + 88 86 87 80 1 0 4.4329480000000006 3 + 88 86 87 90 1 0 4.4329480000000006 3 + 88 86 92 91 1 0 4.4329480000000006 3 + 88 86 92 94 1 0 4.4329480000000006 3 + 88 86 92 96 1 0 4.4329480000000006 3 + 88 86 105 104 1 0 4.4329480000000006 3 + 88 86 105 107 1 0 4.4329480000000006 3 + 88 86 105 108 1 0 4.4329480000000006 3 + 89 87 86 88 1 0 4.4329480000000006 3 + 89 87 86 92 1 0 4.4329480000000006 3 + 89 87 86 105 1 0 4.4329480000000006 3 + 89 87 80 81 1 0 4.4329480000000006 3 + 89 87 80 82 1 0 4.4329480000000006 3 + 89 87 80 84 1 0 4.4329480000000006 3 + 90 87 86 88 1 0 4.4329480000000006 3 + 90 87 86 92 1 0 4.4329480000000006 3 + 90 87 86 105 1 0 4.4329480000000006 3 + 90 87 80 81 1 0 4.4329480000000006 3 + 90 87 80 82 1 0 4.4329480000000006 3 + 90 87 80 84 1 0 4.4329480000000006 3 + 91 92 86 87 1 0 4.4329480000000006 3 + 91 92 86 88 1 0 4.4329480000000006 3 + 91 92 86 105 1 0 4.4329480000000006 3 + 91 98 97 99 1 0 4.4329480000000006 3 + 91 98 97 101 1 0 4.4329480000000006 3 + 91 98 97 102 1 0 4.4329480000000006 3 + 92 91 98 97 1 0 4.4329480000000006 3 + 92 91 98 100 1 0 4.4329480000000006 3 + 92 91 98 103 1 0 4.4329480000000006 3 + 92 86 87 89 1 0 4.4329480000000006 3 + 92 86 87 80 1 0 4.4329480000000006 3 + 92 86 87 90 1 0 4.4329480000000006 3 + 92 86 105 104 1 0 4.4329480000000006 3 + 92 86 105 107 1 0 4.4329480000000006 3 + 92 86 105 108 1 0 4.4329480000000006 3 + 93 91 92 94 1 0 4.4329480000000006 3 + 93 91 92 86 1 0 4.4329480000000006 3 + 93 91 92 96 1 0 4.4329480000000006 3 + 93 91 98 97 1 0 4.4329480000000006 3 + 93 91 98 100 1 0 4.4329480000000006 3 + 93 91 98 103 1 0 4.4329480000000006 3 + 94 92 91 93 1 0 4.4329480000000006 3 + 94 92 91 98 1 0 4.4329480000000006 3 + 94 92 91 95 1 0 4.4329480000000006 3 + 94 92 86 87 1 0 4.4329480000000006 3 + 94 92 86 88 1 0 4.4329480000000006 3 + 94 92 86 105 1 0 4.4329480000000006 3 + 95 91 92 94 1 0 4.4329480000000006 3 + 95 91 92 86 1 0 4.4329480000000006 3 + 95 91 92 96 1 0 4.4329480000000006 3 + 95 91 98 97 1 0 4.4329480000000006 3 + 95 91 98 100 1 0 4.4329480000000006 3 + 95 91 98 103 1 0 4.4329480000000006 3 + 96 92 91 93 1 0 4.4329480000000006 3 + 96 92 91 98 1 0 4.4329480000000006 3 + 96 92 91 95 1 0 4.4329480000000006 3 + 96 92 86 87 1 0 4.4329480000000006 3 + 96 92 86 88 1 0 4.4329480000000006 3 + 96 92 86 105 1 0 4.4329480000000006 3 + 97 98 91 92 1 0 4.4329480000000006 3 + 97 98 91 93 1 0 4.4329480000000006 3 + 97 98 91 95 1 0 4.4329480000000006 3 + 98 91 92 94 1 0 4.4329480000000006 3 + 98 91 92 86 1 0 4.4329480000000006 3 + 98 91 92 96 1 0 4.4329480000000006 3 + 99 97 98 100 1 0 4.4329480000000006 3 + 99 97 98 91 1 0 4.4329480000000006 3 + 99 97 98 103 1 0 4.4329480000000006 3 +100 98 97 99 1 0 4.4329480000000006 3 +100 98 97 101 1 0 4.4329480000000006 3 +100 98 97 102 1 0 4.4329480000000006 3 +100 98 91 92 1 0 4.4329480000000006 3 +100 98 91 93 1 0 4.4329480000000006 3 +100 98 91 95 1 0 4.4329480000000006 3 +101 97 98 100 1 0 4.4329480000000006 3 +101 97 98 91 1 0 4.4329480000000006 3 +101 97 98 103 1 0 4.4329480000000006 3 +102 97 98 100 1 0 4.4329480000000006 3 +102 97 98 91 1 0 4.4329480000000006 3 +102 97 98 103 1 0 4.4329480000000006 3 +103 98 97 99 1 0 4.4329480000000006 3 +103 98 97 101 1 0 4.4329480000000006 3 +103 98 97 102 1 0 4.4329480000000006 3 +103 98 91 92 1 0 4.4329480000000006 3 +103 98 91 93 1 0 4.4329480000000006 3 +103 98 91 95 1 0 4.4329480000000006 3 +104 105 86 87 1 0 4.4329480000000006 3 +104 105 86 88 1 0 4.4329480000000006 3 +104 105 86 92 1 0 4.4329480000000006 3 +104 110 109 111 1 0 4.4329480000000006 3 +104 110 109 116 1 0 4.4329480000000006 3 +104 110 109 113 1 0 4.4329480000000006 3 +104 123 122 124 1 0 4.4329480000000006 3 +104 123 122 128 1 0 4.4329480000000006 3 +104 123 122 141 1 0 4.4329480000000006 3 +105 104 110 109 1 0 4.4329480000000006 3 +105 104 110 112 1 0 4.4329480000000006 3 +105 104 110 114 1 0 4.4329480000000006 3 +105 104 123 122 1 0 4.4329480000000006 3 +105 104 123 125 1 0 4.4329480000000006 3 +105 104 123 126 1 0 4.4329480000000006 3 +105 86 87 89 1 0 4.4329480000000006 3 +105 86 87 80 1 0 4.4329480000000006 3 +105 86 87 90 1 0 4.4329480000000006 3 +105 86 92 91 1 0 4.4329480000000006 3 +105 86 92 94 1 0 4.4329480000000006 3 +105 86 92 96 1 0 4.4329480000000006 3 +106 104 105 107 1 0 4.4329480000000006 3 +106 104 105 86 1 0 4.4329480000000006 3 +106 104 105 108 1 0 4.4329480000000006 3 +106 104 110 109 1 0 4.4329480000000006 3 +106 104 110 112 1 0 4.4329480000000006 3 +106 104 110 114 1 0 4.4329480000000006 3 +106 104 123 122 1 0 4.4329480000000006 3 +106 104 123 125 1 0 4.4329480000000006 3 +106 104 123 126 1 0 4.4329480000000006 3 +107 105 104 106 1 0 4.4329480000000006 3 +107 105 104 110 1 0 4.4329480000000006 3 +107 105 104 123 1 0 4.4329480000000006 3 +107 105 86 87 1 0 4.4329480000000006 3 +107 105 86 88 1 0 4.4329480000000006 3 +107 105 86 92 1 0 4.4329480000000006 3 +108 105 104 106 1 0 4.4329480000000006 3 +108 105 104 110 1 0 4.4329480000000006 3 +108 105 104 123 1 0 4.4329480000000006 3 +108 105 86 87 1 0 4.4329480000000006 3 +108 105 86 88 1 0 4.4329480000000006 3 +108 105 86 92 1 0 4.4329480000000006 3 +109 110 104 105 1 0 4.4329480000000006 3 +109 110 104 106 1 0 4.4329480000000006 3 +109 110 104 123 1 0 4.4329480000000006 3 +109 116 115 117 1 0 4.4329480000000006 3 +109 116 115 119 1 0 4.4329480000000006 3 +109 116 115 120 1 0 4.4329480000000006 3 +110 109 116 115 1 0 4.4329480000000006 3 +110 109 116 118 1 0 4.4329480000000006 3 +110 109 116 121 1 0 4.4329480000000006 3 +110 104 105 107 1 0 4.4329480000000006 3 +110 104 105 86 1 0 4.4329480000000006 3 +110 104 105 108 1 0 4.4329480000000006 3 +110 104 123 122 1 0 4.4329480000000006 3 +110 104 123 125 1 0 4.4329480000000006 3 +110 104 123 126 1 0 4.4329480000000006 3 +111 109 110 112 1 0 4.4329480000000006 3 +111 109 110 104 1 0 4.4329480000000006 3 +111 109 110 114 1 0 4.4329480000000006 3 +111 109 116 115 1 0 4.4329480000000006 3 +111 109 116 118 1 0 4.4329480000000006 3 +111 109 116 121 1 0 4.4329480000000006 3 +112 110 109 111 1 0 4.4329480000000006 3 +112 110 109 116 1 0 4.4329480000000006 3 +112 110 109 113 1 0 4.4329480000000006 3 +112 110 104 105 1 0 4.4329480000000006 3 +112 110 104 106 1 0 4.4329480000000006 3 +112 110 104 123 1 0 4.4329480000000006 3 +113 109 110 112 1 0 4.4329480000000006 3 +113 109 110 104 1 0 4.4329480000000006 3 +113 109 110 114 1 0 4.4329480000000006 3 +113 109 116 115 1 0 4.4329480000000006 3 +113 109 116 118 1 0 4.4329480000000006 3 +113 109 116 121 1 0 4.4329480000000006 3 +114 110 109 111 1 0 4.4329480000000006 3 +114 110 109 116 1 0 4.4329480000000006 3 +114 110 109 113 1 0 4.4329480000000006 3 +114 110 104 105 1 0 4.4329480000000006 3 +114 110 104 106 1 0 4.4329480000000006 3 +114 110 104 123 1 0 4.4329480000000006 3 +115 116 109 110 1 0 4.4329480000000006 3 +115 116 109 111 1 0 4.4329480000000006 3 +115 116 109 113 1 0 4.4329480000000006 3 +116 109 110 112 1 0 4.4329480000000006 3 +116 109 110 104 1 0 4.4329480000000006 3 +116 109 110 114 1 0 4.4329480000000006 3 +117 115 116 118 1 0 4.4329480000000006 3 +117 115 116 109 1 0 4.4329480000000006 3 +117 115 116 121 1 0 4.4329480000000006 3 +118 116 115 117 1 0 4.4329480000000006 3 +118 116 115 119 1 0 4.4329480000000006 3 +118 116 115 120 1 0 4.4329480000000006 3 +118 116 109 110 1 0 4.4329480000000006 3 +118 116 109 111 1 0 4.4329480000000006 3 +118 116 109 113 1 0 4.4329480000000006 3 +119 115 116 118 1 0 4.4329480000000006 3 +119 115 116 109 1 0 4.4329480000000006 3 +119 115 116 121 1 0 4.4329480000000006 3 +120 115 116 118 1 0 4.4329480000000006 3 +120 115 116 109 1 0 4.4329480000000006 3 +120 115 116 121 1 0 4.4329480000000006 3 +121 116 115 117 1 0 4.4329480000000006 3 +121 116 115 119 1 0 4.4329480000000006 3 +121 116 115 120 1 0 4.4329480000000006 3 +121 116 109 110 1 0 4.4329480000000006 3 +121 116 109 111 1 0 4.4329480000000006 3 +121 116 109 113 1 0 4.4329480000000006 3 +122 123 104 105 1 0 4.4329480000000006 3 +122 123 104 106 1 0 4.4329480000000006 3 +122 123 104 110 1 0 4.4329480000000006 3 +122 128 127 129 1 0 4.4329480000000006 3 +122 128 127 134 1 0 4.4329480000000006 3 +122 128 127 131 1 0 4.4329480000000006 3 +122 141 140 142 1 0 4.4329480000000006 3 +122 141 140 144 1 0 4.4329480000000006 3 +122 141 140 145 1 0 4.4329480000000006 3 +123 122 128 127 1 0 4.4329480000000006 3 +123 122 128 130 1 0 4.4329480000000006 3 +123 122 128 132 1 0 4.4329480000000006 3 +123 122 141 140 1 0 4.4329480000000006 3 +123 122 141 143 1 0 4.4329480000000006 3 +123 122 141 146 1 0 4.4329480000000006 3 +123 104 105 107 1 0 4.4329480000000006 3 +123 104 105 86 1 0 4.4329480000000006 3 +123 104 105 108 1 0 4.4329480000000006 3 +123 104 110 109 1 0 4.4329480000000006 3 +123 104 110 112 1 0 4.4329480000000006 3 +123 104 110 114 1 0 4.4329480000000006 3 +124 122 123 125 1 0 4.4329480000000006 3 +124 122 123 104 1 0 4.4329480000000006 3 +124 122 123 126 1 0 4.4329480000000006 3 +124 122 128 127 1 0 4.4329480000000006 3 +124 122 128 130 1 0 4.4329480000000006 3 +124 122 128 132 1 0 4.4329480000000006 3 +124 122 141 140 1 0 4.4329480000000006 3 +124 122 141 143 1 0 4.4329480000000006 3 +124 122 141 146 1 0 4.4329480000000006 3 +125 123 122 124 1 0 4.4329480000000006 3 +125 123 122 128 1 0 4.4329480000000006 3 +125 123 122 141 1 0 4.4329480000000006 3 +125 123 104 105 1 0 4.4329480000000006 3 +125 123 104 106 1 0 4.4329480000000006 3 +125 123 104 110 1 0 4.4329480000000006 3 +126 123 122 124 1 0 4.4329480000000006 3 +126 123 122 128 1 0 4.4329480000000006 3 +126 123 122 141 1 0 4.4329480000000006 3 +126 123 104 105 1 0 4.4329480000000006 3 +126 123 104 106 1 0 4.4329480000000006 3 +126 123 104 110 1 0 4.4329480000000006 3 +127 128 122 123 1 0 4.4329480000000006 3 +127 128 122 124 1 0 4.4329480000000006 3 +127 128 122 141 1 0 4.4329480000000006 3 +127 134 133 135 1 0 4.4329480000000006 3 +127 134 133 137 1 0 4.4329480000000006 3 +127 134 133 138 1 0 4.4329480000000006 3 +128 127 134 133 1 0 4.4329480000000006 3 +128 127 134 136 1 0 4.4329480000000006 3 +128 127 134 139 1 0 4.4329480000000006 3 +128 122 123 125 1 0 4.4329480000000006 3 +128 122 123 104 1 0 4.4329480000000006 3 +128 122 123 126 1 0 4.4329480000000006 3 +128 122 141 140 1 0 4.4329480000000006 3 +128 122 141 143 1 0 4.4329480000000006 3 +128 122 141 146 1 0 4.4329480000000006 3 +129 127 128 130 1 0 4.4329480000000006 3 +129 127 128 122 1 0 4.4329480000000006 3 +129 127 128 132 1 0 4.4329480000000006 3 +129 127 134 133 1 0 4.4329480000000006 3 +129 127 134 136 1 0 4.4329480000000006 3 +129 127 134 139 1 0 4.4329480000000006 3 +130 128 127 129 1 0 4.4329480000000006 3 +130 128 127 134 1 0 4.4329480000000006 3 +130 128 127 131 1 0 4.4329480000000006 3 +130 128 122 123 1 0 4.4329480000000006 3 +130 128 122 124 1 0 4.4329480000000006 3 +130 128 122 141 1 0 4.4329480000000006 3 +131 127 128 130 1 0 4.4329480000000006 3 +131 127 128 122 1 0 4.4329480000000006 3 +131 127 128 132 1 0 4.4329480000000006 3 +131 127 134 133 1 0 4.4329480000000006 3 +131 127 134 136 1 0 4.4329480000000006 3 +131 127 134 139 1 0 4.4329480000000006 3 +132 128 127 129 1 0 4.4329480000000006 3 +132 128 127 134 1 0 4.4329480000000006 3 +132 128 127 131 1 0 4.4329480000000006 3 +132 128 122 123 1 0 4.4329480000000006 3 +132 128 122 124 1 0 4.4329480000000006 3 +132 128 122 141 1 0 4.4329480000000006 3 +133 134 127 128 1 0 4.4329480000000006 3 +133 134 127 129 1 0 4.4329480000000006 3 +133 134 127 131 1 0 4.4329480000000006 3 +134 127 128 130 1 0 4.4329480000000006 3 +134 127 128 122 1 0 4.4329480000000006 3 +134 127 128 132 1 0 4.4329480000000006 3 +135 133 134 136 1 0 4.4329480000000006 3 +135 133 134 127 1 0 4.4329480000000006 3 +135 133 134 139 1 0 4.4329480000000006 3 +136 134 133 135 1 0 4.4329480000000006 3 +136 134 133 137 1 0 4.4329480000000006 3 +136 134 133 138 1 0 4.4329480000000006 3 +136 134 127 128 1 0 4.4329480000000006 3 +136 134 127 129 1 0 4.4329480000000006 3 +136 134 127 131 1 0 4.4329480000000006 3 +137 133 134 136 1 0 4.4329480000000006 3 +137 133 134 127 1 0 4.4329480000000006 3 +137 133 134 139 1 0 4.4329480000000006 3 +138 133 134 136 1 0 4.4329480000000006 3 +138 133 134 127 1 0 4.4329480000000006 3 +138 133 134 139 1 0 4.4329480000000006 3 +139 134 133 135 1 0 4.4329480000000006 3 +139 134 133 137 1 0 4.4329480000000006 3 +139 134 133 138 1 0 4.4329480000000006 3 +139 134 127 128 1 0 4.4329480000000006 3 +139 134 127 129 1 0 4.4329480000000006 3 +139 134 127 131 1 0 4.4329480000000006 3 +140 141 122 123 1 0 4.4329480000000006 3 +140 141 122 124 1 0 4.4329480000000006 3 +140 141 122 128 1 0 4.4329480000000006 3 +141 122 123 125 1 0 4.4329480000000006 3 +141 122 123 104 1 0 4.4329480000000006 3 +141 122 123 126 1 0 4.4329480000000006 3 +141 122 128 127 1 0 4.4329480000000006 3 +141 122 128 130 1 0 4.4329480000000006 3 +141 122 128 132 1 0 4.4329480000000006 3 +142 140 141 143 1 0 4.4329480000000006 3 +142 140 141 122 1 0 4.4329480000000006 3 +142 140 141 146 1 0 4.4329480000000006 3 +143 141 140 142 1 0 4.4329480000000006 3 +143 141 140 144 1 0 4.4329480000000006 3 +143 141 140 145 1 0 4.4329480000000006 3 +143 141 122 123 1 0 4.4329480000000006 3 +143 141 122 124 1 0 4.4329480000000006 3 +143 141 122 128 1 0 4.4329480000000006 3 +144 140 141 143 1 0 4.4329480000000006 3 +144 140 141 122 1 0 4.4329480000000006 3 +144 140 141 146 1 0 4.4329480000000006 3 +145 140 141 143 1 0 4.4329480000000006 3 +145 140 141 122 1 0 4.4329480000000006 3 +145 140 141 146 1 0 4.4329480000000006 3 +146 141 140 142 1 0 4.4329480000000006 3 +146 141 140 144 1 0 4.4329480000000006 3 +146 141 140 145 1 0 4.4329480000000006 3 +146 141 122 123 1 0 4.4329480000000006 3 +146 141 122 124 1 0 4.4329480000000006 3 +146 141 122 128 1 0 4.4329480000000006 3 + diff --git a/polyply/tests/test_data/topology_test/uff.top b/polyply/tests/test_data/topology_test/uff.top new file mode 100644 index 000000000..16e5177a2 --- /dev/null +++ b/polyply/tests/test_data/topology_test/uff.top @@ -0,0 +1,28 @@ +[defaults] +1 1 yes 1 1 +[ atomtypes ] +H-0 1.0080 12.00000 A 0.000212741545 0.000000061461 +H-b 1.0080 12.00000 A 0.000212741545 0.000000061461 +B-3 10.8110 11.00000 A 0.006978634549 0.000016166527 +B-2 10.8110 12.05200 A 0.006978634549 0.000016166527 +C-3 12.0110 12.73000 A 0.002865840939 0.000004673725 +C-R 12.0110 12.73000 A 0.002865840939 0.000004673725 +C-2 12.0110 12.73000 A 0.002865840939 0.000004673725 +C-1 12.0110 12.73000 A 0.002865840939 0.000004673725 +N-3 14.0067 13.40700 A 0.001387897120 0.000001668068 +N-R 14.0067 13.40700 A 0.001387897120 0.000001668068 +N-2 14.0067 13.40700 A 0.001387897120 0.000001668068 +N-1 14.0067 13.40700 A 0.001387897120 0.000001668068 +O-3 15.9994 14.08500 A 0.000922956405 0.000000848320 +O-R 15.9994 14.08500 A 0.000922956405 0.000000848320 +O-2 15.9994 14.08500 A 0.000922956405 0.000000848320 +O-1 15.9994 14.08500 A 0.000922956405 0.000000848320 +F-3 18.9984 14.76200 A 0.000606355887 0.000000439373 +Cl3 34.4530 14.86600 A 0.007182080806 0.000013577601 +Si2 28.0855 12.17500 A 0.021116733237 0.000066278969 +#include "PE.itp" +[ system ] +single chain uff +[ molecules ] +PE 1 + diff --git a/polyply/tests/test_gen_coords_logic.py b/polyply/tests/test_gen_coords_logic.py index 9412ac1c2..d701e0d2a 100644 --- a/polyply/tests/test_gen_coords_logic.py +++ b/polyply/tests/test_gen_coords_logic.py @@ -157,3 +157,30 @@ def test_warning_partial_metamol_coords(tmp_path, monkeypatch, caplog): break else: assert False + +@pytest.mark.parametrize('skip, error', [ + (True, IOError), + (False, None) + +]) +def test_coords_workflow_non_unique_resname(tmp_path, monkeypatch, skip, error): + """ + This integration test checks that we can handle non-unique + residue names when generating templates. + """ + top_file = TEST_DATA / "topology_test" / "uff.top" + out_file = tmp_path / "out.gro" + args = {'toppath': top_file, + 'outpath': out_file, + 'name': "test", + 'skip_filter': skip, + 'box': np.array([11, 11, 11])} + + if skip: + with pytest.raises(error): + gen_coords(**args) + else: + gen_coords(**args) + molecule_out = read_gro(out_file, exclude=()) + for node in molecule_out.nodes: + assert np.all(np.isfinite(molecule_out.nodes[node].get('position', np.inf))) diff --git a/polyply/tests/test_generate_templates.py b/polyply/tests/test_generate_templates.py index 3c9f36d28..7e84af88b 100644 --- a/polyply/tests/test_generate_templates.py +++ b/polyply/tests/test_generate_templates.py @@ -31,7 +31,9 @@ _relabel_interaction_atoms, compute_volume, map_from_CoG, extract_block, GenerateTemplates, - find_interaction_involving) + find_interaction_involving, + _extract_template_graphs) +from .example_fixtures import example_meta_molecule class TestGenTemps: @@ -142,7 +144,8 @@ def test_extract_block(): polyply.src.polyply_parser.read_polyply(lines, ff) block = ff.blocks['test'] molecule = block.to_molecule() - new_block = extract_block(molecule, "GLY", {}) + template_graph = ff.blocks['GLY'].to_molecule() + new_block = extract_block(molecule, template_graph, {}) for node in ff.blocks["GLY"]: atomname = ff.blocks["GLY"].nodes[node]["atomname"] assert ff.blocks["GLY"].nodes[node] == new_block.nodes[atomname] @@ -154,9 +157,11 @@ def test_run_molecule(): top = polyply.src.topology.Topology.from_gmx_topfile(TEST_DATA / "topology_test" / "system.top", "test") top.gen_pairs() top.convert_nonbond_to_sig_eps() - GenerateTemplates(topology=top, max_opt=10).run_molecule(top.molecules[0]) - assert "PMMA" in top.volumes - assert "PMMA" in top.molecules[0].templates + GenerateTemplates(topology=top, skip_filter=False, max_opt=10).run_molecule(top.molecules[0]) + graph = top.molecules[0].nodes[0]['graph'] + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + assert graph_hash in top.volumes + assert graph_hash in top.molecules[0].templates @staticmethod @pytest.mark.parametrize('lines, result', ( @@ -302,3 +307,38 @@ def test_compute_volume(lines, coords, volume): new_vol = compute_volume(block, coord_dict, nonbond_params) print(new_vol) assert np.isclose(new_vol, volume, atol=0.000001) + + +@pytest.mark.parametrize('resnames, gen_template_graphs, skip_filter', ( + # two different residues no template_graphs + (['A', 'B', 'A'], [], False), + # two different residues no template_graphs + (['A', 'B', 'A'], [], True), + # two different residues one template_graphs + (['A', 'B', 'A'], [1], True), + # two different residues one template_graphs + (['A', 'B', 'A'], [1], False), +)) +def test_extract_template_graphs(example_meta_molecule, resnames, gen_template_graphs, skip_filter): + # set the residue names + for resname, node in zip(resnames, example_meta_molecule.nodes): + example_meta_molecule.nodes[node]['resname'] = resname + nx.set_node_attributes(example_meta_molecule.nodes[node]['graph'], resname, 'resname') + + # extract template graphs if needed + template_graphs = {} + for node in gen_template_graphs: + graph = example_meta_molecule.nodes[node]['graph'] + nx.set_node_attributes(graph, True, 'template') + template_graphs[example_meta_molecule.nodes[node]['resname']] = graph + + # perfrom the grouping + unique_graphs = _extract_template_graphs(example_meta_molecule, template_graphs, skip_filter) + + # check the outcome + assert len(unique_graphs) == 2 + + for graph in template_graphs.values(): + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + templated = list(nx.get_node_attributes(unique_graphs[graph_hash], 'template').values()) + assert all(templated) diff --git a/polyply/tests/test_lib_files.py b/polyply/tests/test_lib_files.py index 3bfda94ad..c7181e94f 100644 --- a/polyply/tests/test_lib_files.py +++ b/polyply/tests/test_lib_files.py @@ -237,7 +237,7 @@ def test_integration_protein(tmp_path, monkeypatch, library, polymer): # with open(str(data_path/'citation')) as cite_file: # for line in cite_file: # citations.append(line.strip()) - + print(command) proc = subprocess.run(command, cwd='.', timeout=60, check=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, diff --git a/polyply/tests/test_residue_check.py b/polyply/tests/test_residue_equivalence.py similarity index 75% rename from polyply/tests/test_residue_check.py rename to polyply/tests/test_residue_equivalence.py index 5d494677a..4ae276df3 100644 --- a/polyply/tests/test_residue_check.py +++ b/polyply/tests/test_residue_equivalence.py @@ -1,25 +1,46 @@ -# Copyright 2020 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. -""" -Test that inequivalent residues are identified. -""" import textwrap import pytest +import networkx as nx from vermouth.forcefield import ForceField import polyply from polyply.src.topology import Topology from polyply.src.top_parser import read_topology +from polyply.src.check_residue_equivalence import group_residues_by_hash +from .example_fixtures import example_meta_molecule + +@pytest.mark.parametrize('resnames, gen_template_graphs', ( + # two different residues no template_graphs + (['A', 'B', 'A'], []), + # two different residues one template_graphs + (['A', 'B', 'A'], [1]), + # all residues with same name but not equivalent + (['A', 'A', 'A'], []), + # all different residues two template_graphs + (['A', 'B', 'A'], [0, 1]), +)) +def test_group_by_hash(example_meta_molecule, resnames, gen_template_graphs): + # set the residue names + for resname, node in zip(resnames, example_meta_molecule.nodes): + example_meta_molecule.nodes[node]['resname'] = resname + nx.set_node_attributes(example_meta_molecule.nodes[node]['graph'], resname, 'resname') + + # extract template graphs if needed + template_graphs = {} + for node in gen_template_graphs: + graph = example_meta_molecule.nodes[node]['graph'] + nx.set_node_attributes(graph, True, 'template') + template_graphs[example_meta_molecule.nodes[node]['resname']] = graph + + # perfrom the grouping + unique_graphs = group_residues_by_hash(example_meta_molecule, template_graphs) + + # check the outcome + assert len(unique_graphs) == 2 + + for graph in template_graphs.values(): + graph_hash = nx.algorithms.graph_hashing.weisfeiler_lehman_graph_hash(graph, node_attr='atomname') + templated = list(nx.get_node_attributes(unique_graphs[graph_hash], 'template').values()) + assert all(templated) @pytest.mark.parametrize('top_lines', ( # residue in two different molecules not equivalent by