From 4b5d283432c694f138d8fc9611cc36b43d7161b4 Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 12:12:15 +0200 Subject: [PATCH 1/7] DOC: Improve documentation of `AnchorTup` --- CAT/utils.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CAT/utils.py b/CAT/utils.py index 42893609..2975c9f4 100644 --- a/CAT/utils.py +++ b/CAT/utils.py @@ -582,16 +582,36 @@ class MultiAnchorEnum(enum.Enum): class AnchorTup(NamedTuple): """A named tuple with anchoring operation instructions.""" + #: The rdkit molecule representing the functional group. mol: "None | Mol" + + #: The string representation of the function group (usually SMILES). group: "None | str" = None + + #: The indices of the anchoring atom(s) in :attr:`AnchorTup.group`. group_idx: Tuple[int, ...] = (0,) + + #: The indices of the anchor inside a specific core or ligand. anchor_idx: Tuple[int, ...] = () - anchor_group_idx: Tuple[int, ...] = () + + #: The indices of the to-be removed atoms in :attr:`AnchorTup.group`. remove: "None | Tuple[int, ...]" = None + + #: How atoms are to-be attached when multiple anchor atoms are + #: specified in :attr:`AnchorTup.group_idx`. kind: KindEnum = KindEnum.FIRST + + #: Manually offset the angle of the ligand vector by a given number in radian. angle_offset: "None | float" = None + + #: Manually specify the ligands vector dihedral angle in radian, + #: rather than optimizing it w.r.t. the inter-ligand distance. dihedral: "None | float" = None + + #: The string format of :attr:`AnchorTup.group`. group_format: FormatEnum = FormatEnum.SMILES + + #: The to-be undertaken action when multiple functional groups are encountered. multi_anchor_filter: MultiAnchorEnum = MultiAnchorEnum.ALL def __repr__(self) -> str: From edabfae15a4e28b9df0732339efb1fe46ac1338b Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 13:31:59 +0200 Subject: [PATCH 2/7] ENH: Add the new `optional.core.allignment = "anchor"` option Use for defining core vectors as those based on the vectors of poly-atomic core anchors (e.g. complete acetate molecules rather than chloride atoms) --- CAT/data_handling/validation_schemas.py | 3 +++ CAT/utils.py | 1 + docs/4_optional.rst | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/CAT/data_handling/validation_schemas.py b/CAT/data_handling/validation_schemas.py index 2bd2d2c3..97959901 100644 --- a/CAT/data_handling/validation_schemas.py +++ b/CAT/data_handling/validation_schemas.py @@ -291,10 +291,13 @@ def _get_crsjob() -> type: allignment_mapping = { 'sphere': AllignmentTup(AllignmentEnum.SPHERE, False), 'surface': AllignmentTup(AllignmentEnum.SURFACE, False), + 'anchor': AllignmentTup(AllignmentEnum.ANCHOR, False), 'sphere_invert': AllignmentTup(AllignmentEnum.SPHERE, True), 'sphere invert': AllignmentTup(AllignmentEnum.SPHERE, True), 'surface_invert': AllignmentTup(AllignmentEnum.SURFACE, True), 'surface invert': AllignmentTup(AllignmentEnum.SURFACE, True), + 'anchor_invert': AllignmentTup(AllignmentEnum.ANCHOR, True), + 'anchor invert': AllignmentTup(AllignmentEnum.ANCHOR, True), } #: Schema for validating the ``['optional']['core']`` block. diff --git a/CAT/utils.py b/CAT/utils.py index 2975c9f4..f2948c94 100644 --- a/CAT/utils.py +++ b/CAT/utils.py @@ -569,6 +569,7 @@ class AllignmentEnum(enum.Enum): SPHERE = 0 SURFACE = 1 + ANCHOR = 2 class MultiAnchorEnum(enum.Enum): diff --git a/docs/4_optional.rst b/docs/4_optional.rst index 09c67e5d..d604aede 100644 --- a/docs/4_optional.rst +++ b/docs/4_optional.rst @@ -302,10 +302,14 @@ Core The surface is herein defined by a convex hull constructed from the core. * ``"sphere"``: Define the core vectors as those drawn from the core anchor atoms to the cores center. + * ``"anchor"``: Define the core vectors based on the optimal vector of its anchors. + Only available in when the core contains molecular anchors, *e.g.* acetates. * ``"surface invert"``/``"surface_invert"``: The same as ``"surface"``, except the core vectors are inverted. * ``"sphere invert"``/``"sphere_invert"``: The same as ``"sphere"``, except the core vectors are inverted. + * ``"anchor invert"``/``"anchor_invert"``: The same as ``"anchor"``, + except the core vectors are inverted. Note that for a spherical core both approaches are equivalent. From d19e2f9691cc74aedf9aee20d86860cf5015d12f Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 13:33:45 +0200 Subject: [PATCH 3/7] REL: Bump the next CAT version to 1.1.0 --- CAT/__version__.py | 2 +- CHANGELOG.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CAT/__version__.py b/CAT/__version__.py index 85ddf151..15b05982 100644 --- a/CAT/__version__.py +++ b/CAT/__version__.py @@ -1,3 +1,3 @@ """The **CAT** version.""" -__version__ = '1.0.1.dev0' +__version__ = '1.1.0.dev0' diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 182a6339..b5a7c231 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,7 @@ Change Log All notable changes to this project will be documented in this file. This project adheres to `Semantic Versioning `_. -1.0.1 +1.1.0 ***** * *placeholder*. From 86840d97166d2e70084a7ff09f46df820484d0a7 Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 14:03:29 +0200 Subject: [PATCH 4/7] MAINT: Move the core vector parsing to the `core_anchoring` module --- CAT/attachment/core_anchoring.py | 39 ++++++++++++++++++++++++++++---- CAT/attachment/ligand_attach.py | 12 +--------- CAT/multi_ligand.py | 2 +- tests/test_CAT.py | 2 +- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/CAT/attachment/core_anchoring.py b/CAT/attachment/core_anchoring.py index 53ff9910..11e964d8 100644 --- a/CAT/attachment/core_anchoring.py +++ b/CAT/attachment/core_anchoring.py @@ -14,17 +14,18 @@ """ -from typing import Tuple, Any, Mapping, TYPE_CHECKING +from typing import Tuple, Any, Mapping, Iterable, TYPE_CHECKING import numpy as np -from scm.plams import Molecule, MoleculeError, to_rdmol +from scm.plams import Molecule, Atom, MoleculeError, to_rdmol +from .perp_surface import get_surface_vec from .distribution import distribute_idx from ..utils import AllignmentEnum, AllignmentTup, AnchorTup if TYPE_CHECKING: from numpy.typing import NDArray - from numpy import int64 as i8 + from numpy import int64 as i8, float64 as f8 __all__ = ["set_core_anchors", "find_core_substructure"] @@ -63,11 +64,18 @@ def set_core_anchors( # Returns an error if no anchor atoms were found if (len(mol) - len(anchor_idx)) < 4 and allignment_tup.kind == AllignmentEnum.SURFACE: - raise NotImplementedError( + raise ValueError( '`optional.core.allignment = "surface"` is not supported for cores with less ' f'than 4 (non-anchor) atoms ({mol.get_formula()}); consider using ' '`optional.core.allignment = "sphere"`' ) + elif len(anchor_tup.mol.GetAtoms()) < 2 and allignment_tup.kind == AllignmentEnum.ANCHOR: + raise ValueError( + '`optional.core.allignment = "anchor"` is not supported for mono-atomic core anchors' + ) + + # Define all core vectors + mol.properties.core_vec = _get_core_vectors(mol, mol.properties.dummies, allignment_tup) # Delete all core anchor atoms if remove_idx is not None: @@ -78,6 +86,29 @@ def set_core_anchors( return formula, ' '.join(anchor_idx.astype(str)) +def _get_core_vectors( + core: Molecule, + dummies: Iterable[Atom], + allignment: AllignmentTup, +) -> "NDArray[f8]": + """Return a 2D array with all core (unit) vectors.""" + anchor = Molecule.as_array(None, atom_subset=dummies) + + if allignment.kind == AllignmentEnum.SPHERE: + vec = np.array(core.get_center_of_mass()) - anchor + vec /= np.linalg.norm(vec, axis=1)[..., None] + elif allignment.kind == AllignmentEnum.SURFACE: + vec = -get_surface_vec(np.array(core), anchor) + elif allignment.kind == AllignmentEnum.ANCHOR: + raise NotImplementedError + else: + raise ValueError(f"Unknown allignment kind: {allignment.kind}") + + if allignment.invert: + vec *= -1 + return vec + + def find_core_substructure( mol: Molecule, anchor_tup: AnchorTup, diff --git a/CAT/attachment/ligand_attach.py b/CAT/attachment/ligand_attach.py index be696b8f..cee42bbb 100644 --- a/CAT/attachment/ligand_attach.py +++ b/CAT/attachment/ligand_attach.py @@ -45,7 +45,6 @@ from scm.plams import Molecule, Atom, Settings, MoleculeError from assertionlib.ndrepr import aNDRepr -from .perp_surface import get_surface_vec from ..mol_utils import get_index, round_coords # noqa: F401 from ..utils import AnchorTup, KindEnum from ..workflows import WorkFlow, HDF5_INDEX, MOL, OPT @@ -212,16 +211,7 @@ def get_name() -> str: ligand.properties.dummies.properties.anchor = True # Attach the rotated ligands to the core, returning the resulting strucutre (PLAMS Molecule). - anchor = sanitize_dim_2(core.properties.dummies) - if allignment.kind == AllignmentEnum.SPHERE: - vec2 = np.array(core.get_center_of_mass()) - anchor - vec2 /= np.linalg.norm(vec2, axis=1)[..., None] - elif allignment.kind == AllignmentEnum.SURFACE: - vec2 = -get_surface_vec(np.array(core)[idx_subset_], anchor) - else: - raise ValueError(f"Unknown allignment kind: {allignment.kind}") - if allignment.invert: - vec2 *= -1 + vec2 = core.properties.core_vec # Rotate the ligands if anchor_tup.dihedral is None: diff --git a/CAT/multi_ligand.py b/CAT/multi_ligand.py index 51d656f3..40b52175 100755 --- a/CAT/multi_ligand.py +++ b/CAT/multi_ligand.py @@ -101,7 +101,7 @@ def _multi_lig_anchor(qd_series, ligands, path, anchor, allignment) -> np.ndarra qd.properties.dummies = np.array(coords, ndmin=2, dtype=float) qd = ligand_to_qd(qd, ligand, path=path, allignment=allignment, - idx_subset=qd.properties.indices) + idx_subset=qd.properties.indices) # FIXME ret[j, i] = qd for at in reversed(atoms): qd.delete_atom(qd[at.id]) diff --git a/tests/test_CAT.py b/tests/test_CAT.py index b21079df..2c54dc50 100644 --- a/tests/test_CAT.py +++ b/tests/test_CAT.py @@ -37,7 +37,7 @@ def test_cat_fail() -> None: arg.optional.qd.optimize = False del arg.input_cores[0]["Cd68Se55.xyz"] arg.input_cores[0]["CdCl.xyz"] = {"indices": [2]} - with pytest.raises(NotImplementedError): + with pytest.raises(ValueError): prep(arg) From 2bc916822f44b51aac5aece034e15cfc895522d3 Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 15:30:44 +0200 Subject: [PATCH 5/7] ENH: Add support for parsing polyatomic core anchors --- CAT/attachment/core_anchoring.py | 53 +++++++++++++++++++++-------- CAT/attachment/ligand_attach.py | 27 ++------------- CAT/data_handling/anchor_parsing.py | 4 +-- CAT/multi_ligand.py | 4 +-- tests/test_ligand_anchoring.py | 2 +- 5 files changed, 46 insertions(+), 44 deletions(-) diff --git a/CAT/attachment/core_anchoring.py b/CAT/attachment/core_anchoring.py index 11e964d8..4f23d046 100644 --- a/CAT/attachment/core_anchoring.py +++ b/CAT/attachment/core_anchoring.py @@ -14,14 +14,14 @@ """ -from typing import Tuple, Any, Mapping, Iterable, TYPE_CHECKING +from typing import Tuple, Any, Mapping, TYPE_CHECKING import numpy as np -from scm.plams import Molecule, Atom, MoleculeError, to_rdmol +from scm.plams import Molecule, MoleculeError, to_rdmol from .perp_surface import get_surface_vec from .distribution import distribute_idx -from ..utils import AllignmentEnum, AllignmentTup, AnchorTup +from ..utils import AllignmentEnum, AllignmentTup, AnchorTup, KindEnum if TYPE_CHECKING: from numpy.typing import NDArray @@ -47,13 +47,17 @@ def set_core_anchors( # Get the indices of all anchor atom ligand placeholders in the core anchors = mol.properties.dummies if anchors is None: - anchor_idx, remove_idx = find_core_substructure(mol, anchor_tup) + anchor_idx_group, remove_idx = find_core_substructure(mol, anchor_tup) + anchor_idx = anchor_idx_group[:, anchor_tup.group_idx[0]].copy() else: anchor_idx = np.fromiter(anchors, count=len(anchors), dtype=np.int64) anchor_idx -= 1 remove_idx = anchor_idx.copy() - if subset_kwargs: + anchor_idx_group = anchor_idx.reshape(-1, 1).copy() + if subset_kwargs is not None: + anchor_idx_old = anchor_idx anchor_idx = distribute_idx(mol, anchor_idx, **subset_kwargs) + anchor_idx_group = anchor_idx_group[np.isin(anchor_idx_old, anchor_idx)] if not len(anchor_idx): raise MoleculeError(f"No valid anchoring groups found in the core {formula!r}") @@ -75,7 +79,9 @@ def set_core_anchors( ) # Define all core vectors - mol.properties.core_vec = _get_core_vectors(mol, mol.properties.dummies, allignment_tup) + mol.properties.core_vec = _get_core_vectors( + mol, anchor_idx_group, remove_idx, allignment_tup, anchor_tup + ) # Delete all core anchor atoms if remove_idx is not None: @@ -88,21 +94,40 @@ def set_core_anchors( def _get_core_vectors( core: Molecule, - dummies: Iterable[Atom], + anchor_group_idx: "NDArray[i8]", + remove_idx: "None | NDArray[i8]", allignment: AllignmentTup, + anchor_tup: AnchorTup, ) -> "NDArray[f8]": """Return a 2D array with all core (unit) vectors.""" - anchor = Molecule.as_array(None, atom_subset=dummies) + core_ar = np.array(core) + + # Put the (effective) coordinates of the anchors into an (n, 3) array + if anchor_tup.kind == KindEnum.FIRST: + anchor_atoms = core_ar[anchor_group_idx[:, anchor_tup.group_idx[0]]] + elif anchor_tup.kind == KindEnum.MEAN: + anchor_idx = anchor_group_idx[:, np.fromiter(anchor_tup.group_idx, np.int64)] + anchor_atoms = core_ar[anchor_idx].mean(axis=1) + else: + raise ValueError(f"Unknown anchor kind: {anchor_tup.kind!r}") + # Define vectors based on the various allignment options if allignment.kind == AllignmentEnum.SPHERE: - vec = np.array(core.get_center_of_mass()) - anchor + vec = np.array(core.get_center_of_mass()) - anchor_atoms vec /= np.linalg.norm(vec, axis=1)[..., None] elif allignment.kind == AllignmentEnum.SURFACE: - vec = -get_surface_vec(np.array(core), anchor) + if remove_idx is None: + vec = -get_surface_vec(core_ar, anchor_atoms) + else: + no_anchor_mask = np.ones(len(core_ar), dtype=np.bool_) + no_anchor_mask[remove_idx] = False + vec = -get_surface_vec(core_ar[no_anchor_mask], anchor_atoms) elif allignment.kind == AllignmentEnum.ANCHOR: - raise NotImplementedError + anchor_mean = core_ar[anchor_group_idx].mean(axis=1) + vec = anchor_atoms - anchor_mean + vec /= np.linalg.norm(vec, axis=1)[..., None] else: - raise ValueError(f"Unknown allignment kind: {allignment.kind}") + raise ValueError(f"Unknown allignment kind: {allignment.kind!r}") if allignment.invert: vec *= -1 @@ -136,9 +161,9 @@ def find_core_substructure( if remove is not None: remove_list += [idx_tup[i] for i in remove] - anchor_list.append(anchor_idx_tup[0]) + anchor_list.append(idx_tup) - anchor_array = np.fromiter(anchor_list, dtype=np.int64, count=len(anchor_list)) + anchor_array = np.array(anchor_list, dtype=np.int64) if remove is not None: remove_array = np.fromiter(remove_list, dtype=np.int64, count=len(remove_list)) return anchor_array, remove_array diff --git a/CAT/attachment/ligand_attach.py b/CAT/attachment/ligand_attach.py index cee42bbb..ee00bf93 100644 --- a/CAT/attachment/ligand_attach.py +++ b/CAT/attachment/ligand_attach.py @@ -34,7 +34,7 @@ """ -from typing import List, Any, Optional, NoReturn, Union, Iterable +from typing import List, Any, Optional, NoReturn, Union from collections import abc import numpy as np @@ -50,7 +50,6 @@ from ..workflows import WorkFlow, HDF5_INDEX, MOL, OPT from ..settings_dataframe import SettingsDataFrame from ..data_handling import mol_to_file, WARN_MAP -from ..utils import AllignmentTup, AllignmentEnum __all__ = ['init_qd_construction'] @@ -110,7 +109,7 @@ def construct_mol_series(qd_df: SettingsDataFrame, core_df: pd.DataFrame, def _get_mol(i, j, k, m): ij = i, j km = k, m - return ligand_to_qd(core_df.at[ij, MOL], ligand_df.at[km, MOL], path, allignment=allignment) + return ligand_to_qd(core_df.at[ij, MOL], ligand_df.at[km, MOL], path) mol_list = [_get_mol(i, j, k, m) for i, j, k, m in qd_df.index] return pd.Series(mol_list, index=qd_df.index, name=MOL, dtype=object) @@ -153,13 +152,7 @@ def _get_df(core_index: pd.MultiIndex, return SettingsDataFrame(data, index=index, columns=columns, settings=settings) -def ligand_to_qd( - core: Molecule, - ligand: Molecule, - path: str, - allignment: AllignmentTup, - idx_subset: "None | Iterable[int]" = None, -) -> Molecule: +def ligand_to_qd(core: Molecule, ligand: Molecule, path: str) -> Molecule: """Function that handles quantum dot (qd, *i.e.* core + all ligands) operations. Combine the core and ligands and assign properties to the quantom dot. @@ -172,19 +165,6 @@ def ligand_to_qd( ligand : |plams.Molecule|_ A ligand molecule. - allignment : :class:`str` - How the core vector(s) should be defined. - Accepted values are ``"sphere"`` and ``"surface"``: - - * ``"sphere"``: Vectors from the core anchor atoms to the center of the core. - * ``"surface"``: Vectors perpendicular to the surface of the core. - - Note that for a perfect sphere both approaches are equivalent. - - idx_subset : :class:`Iterable` [:class:`int`], optional - An iterable with the (0-based) indices defining a subset of atoms in **core**. - Only relevant in the construction of the convex hull when ``allignment=surface``. - Returns ------- |plams.Molecule|_ @@ -198,7 +178,6 @@ def get_name() -> str: return f'{core_name}__{anchor}_{lig_name}' anchor_tup = ligand.properties.anchor_tup - idx_subset_ = idx_subset if idx_subset is not None else ... # Define vectors and indices used for rotation and translation the ligands vec1 = np.array([-1, 0, 0], dtype=float) # All ligands are already alligned along the X-axis diff --git a/CAT/data_handling/anchor_parsing.py b/CAT/data_handling/anchor_parsing.py index c6f4e5bf..385b9479 100644 --- a/CAT/data_handling/anchor_parsing.py +++ b/CAT/data_handling/anchor_parsing.py @@ -219,8 +219,8 @@ def parse_anchors( raise TypeError("`dihedral != None` is not supported for core anchors") elif angle_offset is not None: raise TypeError("`angle_offset != None` is not supported for core anchors") - elif kwargs["kind"] != KindEnum.FIRST: - raise NotImplementedError('`kind != "first"` is not yet supported') + elif kwargs["kind"] == KindEnum.MEAN_TRANSLATE: + raise ValueError('`kind == "mean translate"` is not supported for core anchors') else: # Check that at least 3 atoms are available for `angle_offset` # (so a plane can be defined) diff --git a/CAT/multi_ligand.py b/CAT/multi_ligand.py index 40b52175..ec5925ab 100755 --- a/CAT/multi_ligand.py +++ b/CAT/multi_ligand.py @@ -99,9 +99,7 @@ def _multi_lig_anchor(qd_series, ligands, path, anchor, allignment) -> np.ndarra coords = Molecule.as_array(None, atom_subset=atoms) qd.properties.dummies = np.array(coords, ndmin=2, dtype=float) - qd = ligand_to_qd(qd, ligand, path=path, - allignment=allignment, - idx_subset=qd.properties.indices) # FIXME + qd = ligand_to_qd(qd, ligand, path=path) ret[j, i] = qd for at in reversed(atoms): qd.delete_atom(qd[at.id]) diff --git a/tests/test_ligand_anchoring.py b/tests/test_ligand_anchoring.py index 01f815cc..3b5c8bc5 100644 --- a/tests/test_ligand_anchoring.py +++ b/tests/test_ligand_anchoring.py @@ -292,7 +292,7 @@ def test_raise(self, inp: Any, exc_type: "type[Exception]") -> None: angle_offset=({"group": "Cl", "group_idx": 0, "angle_offset": 90}, TypeError), dihedral=({"group": "Cl", "group_idx": 0, "dihedral": 90}, TypeError), multiple=(["OC", "OCC"], NotImplementedError), - kind=({"group": "Cl", "group_idx": 0, "kind": "mean"}, NotImplementedError), + kind=({"group": "Cl", "group_idx": 0, "kind": "mean_translate"}, ValueError), ) @pytest.mark.parametrize("inp,exc_type", PARAM_RAISE_CORE.values(), ids=PARAM_RAISE_CORE) From fa566f0511546037c4c08ea102cc099904d69206 Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 16:40:37 +0200 Subject: [PATCH 6/7] TST: Use the Ipython debugger by default --- setup.cfg | 2 +- setup.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index b1eeff3c..93f517c3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,7 +17,7 @@ per-file-ignores = [tool:pytest] testpaths = CAT tests -addopts = --tb=short --doctest-glob='*.py' --doctest-glob='*.rst' --cov=CAT --cov-report xml --cov-report term --cov-report html --doctest-modules +addopts = --tb=short --doctest-glob='*.py' --doctest-glob='*.rst' --cov=CAT --cov-report xml --cov-report term --cov-report html --doctest-modules --pdbcls=IPython.terminal.debugger:TerminalPdb markers = slow: A marker for slow tests. filterwarnings = ignore:Conversion of the second argument of issubdtype from `.` to `.` is deprecated:FutureWarning:h5py.* diff --git a/setup.py b/setup.py index f9a555eb..66e72f29 100644 --- a/setup.py +++ b/setup.py @@ -113,6 +113,7 @@ 'pytest-cov', 'pytest-mock', 'h5py>=2.7.0', + 'ipython>=5.0.0', 'sphinx>=2.4; python_version>="3.7"', 'sphinx_rtd_theme; python_version>="3.7"', 'data-CAT>=0.7.0; python_version>="3.7"', From e5c4ded88b7a976c7e5037e5de28c9e179000598 Mon Sep 17 00:00:00 2001 From: Bas van Beek Date: Thu, 15 Sep 2022 16:43:30 +0200 Subject: [PATCH 7/7] TST: Add tests for parsing polyatomic core anchors --- tests/test_distribution.py | 31 +- tests/test_files/CAT_subset.yaml | 24 ++ .../core/Cd68Cl26Se55__26_CC[O-]@O3.pdb | 384 ++++++++++++++++++ .../core/Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb | 254 ++++++++++++ tests/test_files/qd_test_distribution.pdb | 202 +++++++++ tests/test_files/test_allignment.hdf5 | Bin 67474 -> 101614 bytes tests/test_ligand_attach.py | 20 +- 7 files changed, 910 insertions(+), 5 deletions(-) create mode 100644 tests/test_files/CAT_subset.yaml create mode 100644 tests/test_files/core/Cd68Cl26Se55__26_CC[O-]@O3.pdb create mode 100644 tests/test_files/core/Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb create mode 100644 tests/test_files/qd_test_distribution.pdb diff --git a/tests/test_distribution.py b/tests/test_distribution.py index d2695132..77e9fee0 100644 --- a/tests/test_distribution.py +++ b/tests/test_distribution.py @@ -2,15 +2,25 @@ from pathlib import Path +import yaml +import pytest import numpy as np - -from scm.plams import Molecule +from scm.plams import Molecule, Settings, readpdb from assertionlib import assertion +from nanoutils import delete_finally +from CAT.test_utils import assert_mol_allclose +from CAT.base import prep +from CAT.workflows import MOL as MOL_KEY from CAT.attachment.distribution import distribute_idx PATH = Path('tests') / 'test_files' +LIG_PATH = PATH / 'ligand' +QD_PATH = PATH / 'qd' +DB_PATH = PATH / 'database' + MOL = Molecule(PATH / 'core' / 'Cd68Se55.xyz') + IDX = np.array([i for i, at in enumerate(MOL) if at.symbol == 'Cl']) IDX.setflags(write=False) @@ -65,3 +75,20 @@ def test_distribute_idx() -> None: assertion.assert_(distribute_idx, MOL, IDX, f=0.5, randomness='bob', exception=TypeError) assertion.assert_(distribute_idx, MOL, IDX, f=0.5, randomness=-10, exception=ValueError) assertion.assert_(distribute_idx, MOL, IDX, f=0.5, randomness=1.5, exception=ValueError) + + +@pytest.mark.slow +@delete_finally(LIG_PATH, QD_PATH, DB_PATH) +def test_cat() -> None: + """Tests for the CAT package.""" + yaml_path = PATH / 'CAT_subset.yaml' + with open(yaml_path, 'r') as f: + arg = Settings(yaml.load(f, Loader=yaml.FullLoader)) + + arg.path = PATH + qd_df, _, _ = prep(arg) + + assertion.len_eq(qd_df, 1) + qd = qd_df[MOL_KEY].iloc[0] + qd_ref = readpdb(PATH / "qd_test_distribution.pdb") + assert_mol_allclose(qd, qd_ref) diff --git a/tests/test_files/CAT_subset.yaml b/tests/test_files/CAT_subset.yaml new file mode 100644 index 00000000..5ae82fa1 --- /dev/null +++ b/tests/test_files/CAT_subset.yaml @@ -0,0 +1,24 @@ +path: . + +input_cores: + - Cd68Se55.xyz + +input_ligands: + - CO + +optional: + database: + dirname: database + mol_format: [pdb] + core: + dirname: core + anchor: Cl + subset: + f: 0.5 + mode: uniform + ligand: + dirname: ligand + optimize: True + split: True + qd: + dirname: QD diff --git a/tests/test_files/core/Cd68Cl26Se55__26_CC[O-]@O3.pdb b/tests/test_files/core/Cd68Cl26Se55__26_CC[O-]@O3.pdb new file mode 100644 index 00000000..961d535d --- /dev/null +++ b/tests/test_files/core/Cd68Cl26Se55__26_CC[O-]@O3.pdb @@ -0,0 +1,384 @@ +HETATM 1 Cdab COR A 1 12.318 13.562 10.963 1.00 0.00 CD2+ +HETATM 2 Cdac COR A 1 12.417 10.883 14.270 1.00 0.00 CD2+ +HETATM 3 Cdad COR A 1 10.032 14.341 14.385 1.00 0.00 CD2+ +HETATM 4 Cdae COR A 1 15.737 15.828 10.109 1.00 0.00 CD2+ +HETATM 5 Cdaf COR A 1 15.831 13.031 13.270 1.00 0.00 CD2+ +HETATM 6 Cdag COR A 1 13.406 16.762 13.522 1.00 0.00 CD2+ +HETATM 7 Cdah COR A 1 15.749 10.334 16.598 1.00 0.00 CD2+ +HETATM 8 Cdai COR A 1 13.418 13.886 16.920 1.00 0.00 CD2+ +HETATM 9 Cdaj COR A 1 11.238 17.526 17.081 1.00 0.00 CD2+ +HETATM 10 Cdak COR A 1 19.255 15.384 12.536 1.00 0.00 CD2+ +HETATM 11 Cdal COR A 1 16.932 18.995 12.789 1.00 0.00 CD2+ +HETATM 12 Cdam COR A 1 19.226 12.677 15.755 1.00 0.00 CD2+ +HETATM 13 Cdan COR A 1 17.061 16.289 16.027 1.00 0.00 CD2+ +HETATM 14 Cdao COR A 1 14.657 19.776 16.225 1.00 0.00 CD2+ +HETATM 15 Cdap COR A 1 16.947 13.501 19.281 1.00 0.00 CD2+ +HETATM 16 Cdaq COR A 1 14.702 16.928 19.384 1.00 0.00 CD2+ +HETATM 17 Sear COR A 1 13.804 11.687 12.137 1.00 0.00 SE2- +HETATM 18 Seas COR A 1 11.275 15.576 12.368 1.00 0.00 SE2- +HETATM 19 Seat COR A 1 11.273 12.588 15.962 1.00 0.00 SE2- +HETATM 20 Seau COR A 1 17.358 14.032 11.248 1.00 0.00 SE2- +HETATM 21 Seav COR A 1 14.851 17.917 11.513 1.00 0.00 SE2- +HETATM 22 Seaw COR A 1 17.330 11.195 14.617 1.00 0.00 SE2- +HETATM 23 Seax COR A 1 14.939 14.990 14.931 1.00 0.00 SE2- +HETATM 24 Seay COR A 1 12.477 18.770 15.068 1.00 0.00 SE2- +HETATM 25 Seaz COR A 1 14.856 12.094 18.398 1.00 0.00 SE2- +HETATM 26 SeaA COR A 1 12.456 15.724 18.620 1.00 0.00 SE2- +HETATM 27 SeaB COR A 1 18.640 17.431 14.125 1.00 0.00 SE2- +HETATM 28 SeaC COR A 1 18.614 14.597 17.496 1.00 0.00 SE2- +HETATM 29 SeaD COR A 1 16.280 18.248 17.686 1.00 0.00 SE2- +HETATM 30 CdaE COR A 1 11.541 10.498 8.382 1.00 0.00 CD2+ +HETATM 31 CdaF COR A 1 9.108 14.485 8.726 1.00 0.00 CD2+ +HETATM 32 CdaG COR A 1 11.088 7.971 11.317 1.00 0.00 CD2+ +HETATM 33 CdaH COR A 1 8.869 10.953 11.645 1.00 0.00 CD2+ +HETATM 34 CdaI COR A 1 6.965 15.147 12.049 1.00 0.00 CD2+ +HETATM 35 CdaJ COR A 1 9.068 8.786 15.547 1.00 0.00 CD2+ +HETATM 36 CdaK COR A 1 6.956 12.188 15.560 1.00 0.00 CD2+ +HETATM 37 CdaL COR A 1 14.652 12.541 7.429 1.00 0.00 CD2+ +HETATM 38 CdaM COR A 1 12.188 16.464 7.714 1.00 0.00 CD2+ +HETATM 39 CdaN COR A 1 14.718 9.621 10.384 1.00 0.00 CD2+ +HETATM 40 CdaO COR A 1 9.761 17.522 10.928 1.00 0.00 CD2+ +HETATM 41 CdaP COR A 1 14.444 7.205 13.615 1.00 0.00 CD2+ +HETATM 42 CdaQ COR A 1 7.763 18.067 14.494 1.00 0.00 CD2+ +HETATM 43 CdaR COR A 1 12.161 8.118 17.585 1.00 0.00 CD2+ +HETATM 44 CdaS COR A 1 9.729 11.483 18.098 1.00 0.00 CD2+ +HETATM 45 CdaT COR A 1 7.750 15.108 18.009 1.00 0.00 CD2+ +HETATM 46 CdaU COR A 1 17.878 14.558 6.966 1.00 0.00 CD2+ +HETATM 47 CdaV COR A 1 15.306 18.600 7.232 1.00 0.00 CD2+ +HETATM 48 CdaW COR A 1 18.144 11.830 9.612 1.00 0.00 CD2+ +HETATM 49 CdaX COR A 1 13.119 19.724 10.153 1.00 0.00 CD2+ +HETATM 50 CdaY COR A 1 18.095 9.209 12.726 1.00 0.00 CD2+ +HETATM 51 CdaZ COR A 1 10.898 20.551 13.485 1.00 0.00 CD2+ +HETATM 52 Cdbc COR A 1 17.702 7.035 15.795 1.00 0.00 CD2+ +HETATM 53 Cdbd COR A 1 9.115 20.839 16.869 1.00 0.00 CD2+ +HETATM 54 Cdbe COR A 1 15.259 8.002 19.787 1.00 0.00 CD2+ +HETATM 55 Cdbf COR A 1 13.095 11.073 20.391 1.00 0.00 CD2+ +HETATM 56 Cdbg COR A 1 10.864 14.488 20.652 1.00 0.00 CD2+ +HETATM 57 Cdbh COR A 1 9.109 17.876 20.380 1.00 0.00 CD2+ +HETATM 58 Cdbi COR A 1 21.189 14.125 9.275 1.00 0.00 CD2+ +HETATM 59 Cdbj COR A 1 19.009 17.973 9.590 1.00 0.00 CD2+ +HETATM 60 Cdbk COR A 1 16.433 21.577 9.757 1.00 0.00 CD2+ +HETATM 61 Cdbl COR A 1 21.434 11.666 12.183 1.00 0.00 CD2+ +HETATM 62 Cdbm COR A 1 14.489 22.569 12.884 1.00 0.00 CD2+ +HETATM 63 Cdbn COR A 1 21.101 9.218 15.104 1.00 0.00 CD2+ +HETATM 64 Cdbo COR A 1 12.336 23.048 15.974 1.00 0.00 CD2+ +HETATM 65 Cdbp COR A 1 18.959 10.187 18.825 1.00 0.00 CD2+ +HETATM 66 Cdbq COR A 1 12.566 20.753 19.942 1.00 0.00 CD2+ +HETATM 67 Cdbr COR A 1 16.381 10.974 22.311 1.00 0.00 CD2+ +HETATM 68 Cdbs COR A 1 14.471 14.231 22.761 1.00 0.00 CD2+ +HETATM 69 Cdbt COR A 1 12.284 17.286 22.743 1.00 0.00 CD2+ +HETATM 70 Cdbu COR A 1 22.523 17.659 12.268 1.00 0.00 CD2+ +HETATM 71 Cdbv COR A 1 20.345 21.074 12.490 1.00 0.00 CD2+ +HETATM 72 Cdbw COR A 1 22.738 15.115 15.106 1.00 0.00 CD2+ +HETATM 73 Cdbx COR A 1 20.757 18.765 15.488 1.00 0.00 CD2+ +HETATM 74 Cdby COR A 1 18.271 22.120 15.534 1.00 0.00 CD2+ +HETATM 75 Cdbz COR A 1 22.442 12.786 18.123 1.00 0.00 CD2+ +HETATM 76 CdbA COR A 1 20.713 16.162 18.613 1.00 0.00 CD2+ +HETATM 77 CdbB COR A 1 18.491 19.633 18.853 1.00 0.00 CD2+ +HETATM 78 CdbC COR A 1 16.140 22.674 18.674 1.00 0.00 CD2+ +HETATM 79 CdbD COR A 1 20.209 13.698 21.436 1.00 0.00 CD2+ +HETATM 80 CdbE COR A 1 18.130 16.993 21.895 1.00 0.00 CD2+ +HETATM 81 CdbF COR A 1 15.764 20.390 21.818 1.00 0.00 CD2+ +HETATM 82 SebG COR A 1 12.597 8.337 9.231 1.00 0.00 SE2- +HETATM 83 SebH COR A 1 10.187 12.319 9.743 1.00 0.00 SE2- +HETATM 84 SebI COR A 1 7.563 16.216 9.797 1.00 0.00 SE2- +HETATM 85 SebJ COR A 1 10.292 9.509 13.354 1.00 0.00 SE2- +HETATM 86 SebK COR A 1 7.856 12.948 13.198 1.00 0.00 SE2- +HETATM 87 SebL COR A 1 7.505 10.163 17.031 1.00 0.00 SE2- +HETATM 88 SebM COR A 1 16.149 10.647 8.372 1.00 0.00 SE2- +HETATM 89 SebN COR A 1 13.715 14.598 8.896 1.00 0.00 SE2- +HETATM 90 SebO COR A 1 11.139 18.523 8.888 1.00 0.00 SE2- +HETATM 91 SebP COR A 1 16.116 7.800 11.715 1.00 0.00 SE2- +HETATM 92 SebQ COR A 1 8.740 19.394 12.490 1.00 0.00 SE2- +HETATM 93 SebR COR A 1 13.733 8.941 15.570 1.00 0.00 SE2- +HETATM 94 SebS COR A 1 9.089 16.290 16.005 1.00 0.00 SE2- +HETATM 95 SebT COR A 1 11.112 9.636 19.411 1.00 0.00 SE2- +HETATM 96 SebU COR A 1 8.697 13.346 19.662 1.00 0.00 SE2- +HETATM 97 SebV COR A 1 19.748 12.927 7.553 1.00 0.00 SE2- +HETATM 98 SebW COR A 1 17.259 16.946 7.972 1.00 0.00 SE2- +HETATM 99 SebX COR A 1 14.642 20.908 8.077 1.00 0.00 SE2- +HETATM 100 SebY COR A 1 19.761 10.170 10.895 1.00 0.00 SE2- +HETATM 101 SebZ COR A 1 12.363 21.772 11.635 1.00 0.00 SE2- +HETATM 102 Secd COR A 1 19.651 7.348 14.171 1.00 0.00 SE2- +HETATM 103 Sece COR A 1 9.957 22.568 15.174 1.00 0.00 SE2- +HETATM 104 Secf COR A 1 17.240 8.396 18.058 1.00 0.00 SE2- +HETATM 105 Secg COR A 1 10.369 19.598 18.827 1.00 0.00 SE2- +HETATM 106 Sech COR A 1 14.584 9.214 21.921 1.00 0.00 SE2- +HETATM 107 Seci COR A 1 12.339 12.877 22.161 1.00 0.00 SE2- +HETATM 108 Secj COR A 1 9.890 16.468 22.372 1.00 0.00 SE2- +HETATM 109 Seck COR A 1 20.927 16.472 10.502 1.00 0.00 SE2- +HETATM 110 Secl COR A 1 18.505 20.235 10.757 1.00 0.00 SE2- +HETATM 111 Secm COR A 1 20.833 13.678 13.862 1.00 0.00 SE2- +HETATM 112 Secn COR A 1 16.133 21.011 14.328 1.00 0.00 SE2- +HETATM 113 Seco COR A 1 20.867 10.853 17.191 1.00 0.00 SE2- +HETATM 114 Secp COR A 1 13.781 21.849 17.809 1.00 0.00 SE2- +HETATM 115 Secq COR A 1 18.492 11.718 20.874 1.00 0.00 SE2- +HETATM 116 Secr COR A 1 16.158 15.364 21.005 1.00 0.00 SE2- +HETATM 117 Secs COR A 1 13.776 18.730 21.156 1.00 0.00 SE2- +HETATM 118 Sect COR A 1 22.385 19.899 13.466 1.00 0.00 SE2- +HETATM 119 Secu COR A 1 22.365 17.079 16.747 1.00 0.00 SE2- +HETATM 120 Secv COR A 1 19.980 20.800 16.964 1.00 0.00 SE2- +HETATM 121 Secw COR A 1 22.292 14.364 20.112 1.00 0.00 SE2- +HETATM 122 Secx COR A 1 19.957 17.996 20.342 1.00 0.00 SE2- +HETATM 123 Secy COR A 1 17.612 21.644 20.484 1.00 0.00 SE2- +ATOM 124 Cab LIG A 2 12.965 23.124 22.541 1.00 0.00 C +ATOM 125 Cac LIG A 2 13.763 24.392 22.799 1.00 0.00 C +HETATM 126 Oad LIG A 2 13.685 22.273 21.703 1.00 0.00 O1- +ATOM 127 Hai LIG A 2 13.963 24.917 21.841 1.00 0.00 H +ATOM 128 Hah LIG A 2 13.189 25.068 23.467 1.00 0.00 H +ATOM 129 Hag LIG A 2 14.729 24.142 23.286 1.00 0.00 H +ATOM 130 Haf LIG A 2 12.764 22.607 23.503 1.00 0.00 H +ATOM 131 Hae LIG A 2 11.998 23.381 22.060 1.00 0.00 H +ATOM 132 Cab LIG A 3 16.795 24.754 10.598 1.00 0.00 C +ATOM 133 Cac LIG A 3 16.248 26.007 11.263 1.00 0.00 C +HETATM 134 Oad LIG A 3 16.186 23.623 11.143 1.00 0.00 O1- +ATOM 135 Hai LIG A 3 16.453 25.980 12.354 1.00 0.00 H +ATOM 136 Hah LIG A 3 16.733 26.905 10.827 1.00 0.00 H +ATOM 137 Hag LIG A 3 15.151 26.076 11.100 1.00 0.00 H +ATOM 138 Haf LIG A 3 16.592 24.789 9.507 1.00 0.00 H +ATOM 139 Hae LIG A 3 17.892 24.693 10.759 1.00 0.00 H +ATOM 140 Cab LIG A 4 9.498 14.863 5.457 1.00 0.00 C +ATOM 141 Cac LIG A 4 10.338 15.036 4.201 1.00 0.00 C +HETATM 142 Oad LIG A 4 10.288 15.067 6.588 1.00 0.00 O1- +ATOM 143 Hai LIG A 4 11.169 14.300 4.196 1.00 0.00 H +ATOM 144 Hah LIG A 4 9.707 14.874 3.302 1.00 0.00 H +ATOM 145 Hag LIG A 4 10.760 16.063 4.164 1.00 0.00 H +ATOM 146 Haf LIG A 4 8.665 15.598 5.455 1.00 0.00 H +ATOM 147 Hae LIG A 4 9.074 13.837 5.486 1.00 0.00 H +ATOM 148 Cab LIG A 5 16.064 12.377 25.473 1.00 0.00 C +ATOM 149 Cac LIG A 5 17.183 13.093 26.212 1.00 0.00 C +HETATM 150 Oad LIG A 5 16.132 12.670 24.111 1.00 0.00 O1- +ATOM 151 Hai LIG A 5 17.087 14.191 26.076 1.00 0.00 H +ATOM 152 Hah LIG A 5 17.127 12.858 27.296 1.00 0.00 H +ATOM 153 Hag LIG A 5 18.169 12.762 25.823 1.00 0.00 H +ATOM 154 Haf LIG A 5 16.161 11.281 25.617 1.00 0.00 H +ATOM 155 Hae LIG A 5 15.081 12.708 25.870 1.00 0.00 H +ATOM 156 Cab LIG A 6 7.385 8.169 9.974 1.00 0.00 C +ATOM 157 Cac LIG A 6 7.390 7.691 8.530 1.00 0.00 C +HETATM 158 Oad LIG A 6 8.601 8.784 10.274 1.00 0.00 O1- +ATOM 159 Hai LIG A 6 8.210 6.959 8.375 1.00 0.00 H +ATOM 160 Hah LIG A 6 6.421 7.204 8.293 1.00 0.00 H +ATOM 161 Hag LIG A 6 7.536 8.553 7.845 1.00 0.00 H +ATOM 162 Haf LIG A 6 6.560 8.897 10.124 1.00 0.00 H +ATOM 163 Hae LIG A 6 7.233 7.305 10.655 1.00 0.00 H +ATOM 164 Cab LIG A 7 25.466 13.076 16.561 1.00 0.00 C +ATOM 165 Cac LIG A 7 26.128 12.278 15.450 1.00 0.00 C +HETATM 166 Oad LIG A 7 24.101 13.207 16.303 1.00 0.00 O1- +ATOM 167 Hai LIG A 7 25.995 12.797 14.477 1.00 0.00 H +ATOM 168 Hah LIG A 7 27.214 12.174 15.657 1.00 0.00 H +ATOM 169 Hag LIG A 7 25.676 11.265 15.387 1.00 0.00 H +ATOM 170 Haf LIG A 7 25.607 12.555 17.532 1.00 0.00 H +ATOM 171 Hae LIG A 7 25.926 14.085 16.623 1.00 0.00 H +ATOM 172 Cab LIG A 8 5.781 17.997 19.531 1.00 0.00 C +ATOM 173 Cac LIG A 8 4.634 17.155 20.066 1.00 0.00 C +HETATM 174 Oad LIG A 8 6.915 17.202 19.364 1.00 0.00 O1- +ATOM 175 Hai LIG A 8 4.910 16.714 21.047 1.00 0.00 H +ATOM 176 Hah LIG A 8 3.732 17.790 20.197 1.00 0.00 H +ATOM 177 Hag LIG A 8 4.397 16.338 19.352 1.00 0.00 H +ATOM 178 Haf LIG A 8 5.498 18.440 18.553 1.00 0.00 H +ATOM 179 Hae LIG A 8 6.011 18.816 20.246 1.00 0.00 H +ATOM 180 Cab LIG A 9 17.882 25.297 16.727 1.00 0.00 C +ATOM 181 Cac LIG A 9 16.895 26.450 16.814 1.00 0.00 C +HETATM 182 Oad LIG A 9 17.209 24.084 16.871 1.00 0.00 O1- +ATOM 183 Hai LIG A 9 16.383 26.439 17.800 1.00 0.00 H +ATOM 184 Hah LIG A 9 17.433 27.414 16.699 1.00 0.00 H +ATOM 185 Hag LIG A 9 16.136 26.363 16.008 1.00 0.00 H +ATOM 186 Haf LIG A 9 18.395 25.317 15.742 1.00 0.00 H +ATOM 187 Hae LIG A 9 18.642 25.392 17.531 1.00 0.00 H +ATOM 188 Cab LIG A 10 13.280 5.147 19.315 1.00 0.00 C +ATOM 189 Cac LIG A 10 13.813 3.958 18.532 1.00 0.00 C +HETATM 190 Oad LIG A 10 13.738 6.335 18.745 1.00 0.00 O1- +ATOM 191 Hai LIG A 10 14.923 3.958 18.548 1.00 0.00 H +ATOM 192 Hah LIG A 10 13.447 3.014 18.987 1.00 0.00 H +ATOM 193 Hag LIG A 10 13.464 4.008 17.479 1.00 0.00 H +ATOM 194 Haf LIG A 10 12.170 5.138 19.300 1.00 0.00 H +ATOM 195 Hae LIG A 10 13.628 5.088 20.368 1.00 0.00 H +ATOM 196 Cab LIG A 11 17.712 18.840 24.650 1.00 0.00 C +ATOM 197 Cac LIG A 11 16.719 19.204 25.743 1.00 0.00 C +HETATM 198 Oad LIG A 11 17.059 18.773 23.419 1.00 0.00 O1- +ATOM 199 Hai LIG A 11 15.920 18.436 25.802 1.00 0.00 H +ATOM 200 Hah LIG A 11 17.241 19.258 26.721 1.00 0.00 H +ATOM 201 Hag LIG A 11 16.260 20.192 25.526 1.00 0.00 H +ATOM 202 Haf LIG A 11 18.512 19.608 24.599 1.00 0.00 H +ATOM 203 Hae LIG A 11 18.172 17.854 24.875 1.00 0.00 H +ATOM 204 Cab LIG A 12 14.303 25.708 14.106 1.00 0.00 C +ATOM 205 Cac LIG A 12 13.732 26.819 14.973 1.00 0.00 C +HETATM 206 Oad LIG A 12 13.838 24.471 14.553 1.00 0.00 O1- +ATOM 207 Hai LIG A 12 14.046 26.677 16.028 1.00 0.00 H +ATOM 208 Hah LIG A 12 14.103 27.802 14.615 1.00 0.00 H +ATOM 209 Hag LIG A 12 12.623 26.811 14.918 1.00 0.00 H +ATOM 210 Haf LIG A 12 13.990 25.857 13.051 1.00 0.00 H +ATOM 211 Hae LIG A 12 15.413 25.723 14.160 1.00 0.00 H +ATOM 212 Cab LIG A 13 12.547 11.765 4.934 1.00 0.00 C +ATOM 213 Cac LIG A 13 11.392 11.020 4.283 1.00 0.00 C +HETATM 214 Oad LIG A 13 12.495 11.604 6.319 1.00 0.00 O1- +ATOM 215 Hai LIG A 13 10.425 11.420 4.654 1.00 0.00 H +ATOM 216 Hah LIG A 13 11.436 11.149 3.182 1.00 0.00 H +ATOM 217 Hag LIG A 13 11.455 9.937 4.522 1.00 0.00 H +ATOM 218 Haf LIG A 13 13.511 11.365 4.556 1.00 0.00 H +ATOM 219 Hae LIG A 13 12.483 12.846 4.688 1.00 0.00 H +ATOM 220 Cab LIG A 14 9.661 5.588 16.961 1.00 0.00 C +ATOM 221 Cac LIG A 14 9.996 4.421 16.044 1.00 0.00 C +HETATM 222 Oad LIG A 14 10.234 6.760 16.466 1.00 0.00 O1- +ATOM 223 Hai LIG A 14 11.097 4.287 15.988 1.00 0.00 H +ATOM 224 Hah LIG A 14 9.539 3.490 16.440 1.00 0.00 H +ATOM 225 Hag LIG A 14 9.599 4.612 15.025 1.00 0.00 H +ATOM 226 Haf LIG A 14 8.559 5.714 17.018 1.00 0.00 H +ATOM 227 Hae LIG A 14 10.055 5.389 17.980 1.00 0.00 H +ATOM 228 Cab LIG A 15 4.461 14.635 16.579 1.00 0.00 C +ATOM 229 Cac LIG A 15 3.459 13.863 17.422 1.00 0.00 C +HETATM 230 Oad LIG A 15 5.725 14.056 16.697 1.00 0.00 O1- +ATOM 231 Hai LIG A 15 3.764 13.883 18.490 1.00 0.00 H +ATOM 232 Hah LIG A 15 2.454 14.325 17.326 1.00 0.00 H +ATOM 233 Hag LIG A 15 3.404 12.808 17.078 1.00 0.00 H +ATOM 234 Haf LIG A 15 4.149 14.616 15.514 1.00 0.00 H +ATOM 235 Hae LIG A 15 4.508 15.690 16.924 1.00 0.00 H +ATOM 236 Cab LIG A 16 19.260 14.856 24.695 1.00 0.00 C +ATOM 237 Cac LIG A 16 20.494 15.394 25.401 1.00 0.00 C +HETATM 238 Oad LIG A 16 19.373 15.061 23.319 1.00 0.00 O1- +ATOM 239 Hai LIG A 16 20.598 16.483 25.209 1.00 0.00 H +ATOM 240 Hah LIG A 16 20.402 15.229 26.495 1.00 0.00 H +ATOM 241 Hag LIG A 16 21.402 14.871 25.033 1.00 0.00 H +ATOM 242 Haf LIG A 16 19.159 13.768 24.895 1.00 0.00 H +ATOM 243 Hae LIG A 16 18.355 15.378 25.070 1.00 0.00 H +ATOM 244 Cab LIG A 17 24.273 10.170 13.266 1.00 0.00 C +ATOM 245 Cac LIG A 17 25.053 9.045 13.929 1.00 0.00 C +HETATM 246 Oad LIG A 17 22.956 10.170 13.727 1.00 0.00 O1- +ATOM 247 Hai LIG A 17 24.588 8.066 13.687 1.00 0.00 H +ATOM 248 Hah LIG A 17 26.100 9.048 13.562 1.00 0.00 H +ATOM 249 Hag LIG A 17 25.058 9.184 15.031 1.00 0.00 H +ATOM 250 Haf LIG A 17 24.745 11.146 13.507 1.00 0.00 H +ATOM 251 Hae LIG A 17 24.276 10.029 12.165 1.00 0.00 H +ATOM 252 Cab LIG A 18 15.174 4.307 15.266 1.00 0.00 C +ATOM 253 Cac LIG A 18 16.093 3.269 15.891 1.00 0.00 C +HETATM 254 Oad LIG A 18 15.793 5.557 15.277 1.00 0.00 O1- +ATOM 255 Hai LIG A 18 16.321 3.547 16.942 1.00 0.00 H +ATOM 256 Hah LIG A 18 15.599 2.275 15.881 1.00 0.00 H +ATOM 257 Hag LIG A 18 17.041 3.206 15.316 1.00 0.00 H +ATOM 258 Haf LIG A 18 14.944 4.021 14.218 1.00 0.00 H +ATOM 259 Hae LIG A 18 14.225 4.362 15.841 1.00 0.00 H +ATOM 260 Cab LIG A 19 24.402 12.986 10.518 1.00 0.00 C +ATOM 261 Cac LIG A 19 25.001 12.084 9.450 1.00 0.00 C +HETATM 262 Oad LIG A 19 23.009 12.914 10.472 1.00 0.00 O1- +ATOM 263 Hai LIG A 19 24.658 12.406 8.444 1.00 0.00 H +ATOM 264 Hah LIG A 19 26.109 12.142 9.489 1.00 0.00 H +ATOM 265 Hag LIG A 19 24.690 11.032 9.622 1.00 0.00 H +ATOM 266 Haf LIG A 19 24.752 12.663 11.521 1.00 0.00 H +ATOM 267 Hae LIG A 19 24.721 14.035 10.344 1.00 0.00 H +ATOM 268 Cab LIG A 20 19.393 24.538 13.058 1.00 0.00 C +ATOM 269 Cac LIG A 20 20.696 25.274 13.330 1.00 0.00 C +HETATM 270 Oad LIG A 20 19.511 23.204 13.451 1.00 0.00 O1- +ATOM 271 Hai LIG A 20 21.524 24.804 12.760 1.00 0.00 H +ATOM 272 Hah LIG A 20 20.599 26.335 13.017 1.00 0.00 H +ATOM 273 Hag LIG A 20 20.933 25.239 14.414 1.00 0.00 H +ATOM 274 Haf LIG A 20 18.567 25.015 13.626 1.00 0.00 H +ATOM 275 Hae LIG A 20 19.158 24.581 11.973 1.00 0.00 H +ATOM 276 Cab LIG A 21 4.542 17.179 14.128 1.00 0.00 C +ATOM 277 Cac LIG A 21 3.352 16.464 13.508 1.00 0.00 C +HETATM 278 Oad LIG A 21 5.730 16.621 13.657 1.00 0.00 O1- +ATOM 279 Hai LIG A 21 3.374 15.387 13.776 1.00 0.00 H +ATOM 280 Hah LIG A 21 2.408 16.911 13.884 1.00 0.00 H +ATOM 281 Hag LIG A 21 3.382 16.565 12.402 1.00 0.00 H +ATOM 282 Haf LIG A 21 4.512 18.256 13.861 1.00 0.00 H +ATOM 283 Hae LIG A 21 4.504 17.080 15.234 1.00 0.00 H +ATOM 284 Cab LIG A 22 11.717 4.939 13.199 1.00 0.00 C +ATOM 285 Cac LIG A 22 12.034 3.787 12.259 1.00 0.00 C +HETATM 286 Oad LIG A 22 12.290 6.116 12.717 1.00 0.00 O1- +ATOM 287 Hai LIG A 22 13.134 3.647 12.187 1.00 0.00 H +ATOM 288 Hah LIG A 22 11.577 2.852 12.645 1.00 0.00 H +ATOM 289 Hag LIG A 22 11.626 3.997 11.248 1.00 0.00 H +ATOM 290 Haf LIG A 22 10.617 5.071 13.272 1.00 0.00 H +ATOM 291 Hae LIG A 22 12.123 4.722 14.210 1.00 0.00 H +ATOM 292 Cab LIG A 23 13.826 16.848 4.445 1.00 0.00 C +ATOM 293 Cac LIG A 23 13.135 17.862 3.546 1.00 0.00 C +HETATM 294 Oad LIG A 23 13.789 17.285 5.769 1.00 0.00 O1- +ATOM 295 Hai LIG A 23 13.650 18.843 3.615 1.00 0.00 H +ATOM 296 Hah LIG A 23 13.166 17.511 2.493 1.00 0.00 H +ATOM 297 Hag LIG A 23 12.075 17.983 3.854 1.00 0.00 H +ATOM 298 Haf LIG A 23 13.312 15.867 4.369 1.00 0.00 H +ATOM 299 Hae LIG A 23 14.884 16.726 4.129 1.00 0.00 H +ATOM 300 Cab LIG A 24 15.392 13.608 4.295 1.00 0.00 C +ATOM 301 Cac LIG A 24 16.285 14.146 3.188 1.00 0.00 C +HETATM 302 Oad LIG A 24 15.975 13.856 5.538 1.00 0.00 O1- +ATOM 303 Hai LIG A 24 17.277 13.649 3.225 1.00 0.00 H +ATOM 304 Hah LIG A 24 15.819 13.949 2.200 1.00 0.00 H +ATOM 305 Hag LIG A 24 16.422 15.242 3.309 1.00 0.00 H +ATOM 306 Haf LIG A 24 14.400 14.105 4.250 1.00 0.00 H +ATOM 307 Hae LIG A 24 15.254 12.514 4.167 1.00 0.00 H +ATOM 308 Cab LIG A 25 25.413 15.340 13.037 1.00 0.00 C +ATOM 309 Cac LIG A 25 26.322 16.063 12.056 1.00 0.00 C +HETATM 310 Oad LIG A 25 24.145 15.923 13.026 1.00 0.00 O1- +ATOM 311 Hai LIG A 25 26.416 17.132 12.341 1.00 0.00 H +ATOM 312 Hah LIG A 25 27.330 15.598 12.066 1.00 0.00 H +ATOM 313 Hag LIG A 25 25.904 15.995 11.029 1.00 0.00 H +ATOM 314 Haf LIG A 25 25.327 14.271 12.750 1.00 0.00 H +ATOM 315 Hae LIG A 25 25.837 15.407 14.061 1.00 0.00 H +ATOM 316 Cab LIG A 26 14.360 16.015 25.665 1.00 0.00 C +ATOM 317 Cac LIG A 26 13.546 16.795 26.686 1.00 0.00 C +HETATM 318 Oad LIG A 26 13.780 16.138 24.402 1.00 0.00 O1- +ATOM 319 Hai LIG A 26 12.509 16.400 26.727 1.00 0.00 H +ATOM 320 Hah LIG A 26 14.010 16.695 27.690 1.00 0.00 H +ATOM 321 Hag LIG A 26 13.517 17.869 26.408 1.00 0.00 H +ATOM 322 Haf LIG A 26 15.397 16.410 25.632 1.00 0.00 H +ATOM 323 Hae LIG A 26 14.391 14.942 25.950 1.00 0.00 H +ATOM 324 Cab LIG A 27 5.524 19.784 16.317 1.00 0.00 C +ATOM 325 Cac LIG A 27 5.021 20.867 17.259 1.00 0.00 C +HETATM 326 Oad LIG A 27 6.919 19.764 16.319 1.00 0.00 O1- +ATOM 327 Hai LIG A 27 5.394 21.860 16.930 1.00 0.00 H +ATOM 328 Hah LIG A 27 3.911 20.880 17.256 1.00 0.00 H +ATOM 329 Hag LIG A 27 5.376 20.667 18.292 1.00 0.00 H +ATOM 330 Haf LIG A 27 5.143 18.795 16.647 1.00 0.00 H +ATOM 331 Hae LIG A 27 5.162 19.985 15.287 1.00 0.00 H +CONECT 124 125 126 130 131 +CONECT 125 127 128 129 +CONECT 132 133 134 138 139 +CONECT 133 135 136 137 +CONECT 140 141 142 146 147 +CONECT 141 143 144 145 +CONECT 148 149 150 154 155 +CONECT 149 151 152 153 +CONECT 156 157 158 162 163 +CONECT 157 159 160 161 +CONECT 164 165 166 170 171 +CONECT 165 167 168 169 +CONECT 172 173 174 178 179 +CONECT 173 175 176 177 +CONECT 180 181 182 186 187 +CONECT 181 183 184 185 +CONECT 188 189 190 194 195 +CONECT 189 191 192 193 +CONECT 196 197 198 202 203 +CONECT 197 199 200 201 +CONECT 204 205 206 210 211 +CONECT 205 207 208 209 +CONECT 212 213 214 218 219 +CONECT 213 215 216 217 +CONECT 220 221 222 226 227 +CONECT 221 223 224 225 +CONECT 228 229 230 234 235 +CONECT 229 231 232 233 +CONECT 236 237 238 242 243 +CONECT 237 239 240 241 +CONECT 244 245 246 250 251 +CONECT 245 247 248 249 +CONECT 252 253 254 258 259 +CONECT 253 255 256 257 +CONECT 260 261 262 266 267 +CONECT 261 263 264 265 +CONECT 268 269 270 274 275 +CONECT 269 271 272 273 +CONECT 276 277 278 282 283 +CONECT 277 279 280 281 +CONECT 284 285 286 290 291 +CONECT 285 287 288 289 +CONECT 292 293 294 298 299 +CONECT 293 295 296 297 +CONECT 300 301 302 306 307 +CONECT 301 303 304 305 +CONECT 308 309 310 314 315 +CONECT 309 311 312 313 +CONECT 316 317 318 322 323 +CONECT 317 319 320 321 +CONECT 324 325 326 330 331 +CONECT 325 327 328 329 +END diff --git a/tests/test_files/core/Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb b/tests/test_files/core/Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb new file mode 100644 index 00000000..4f3107a4 --- /dev/null +++ b/tests/test_files/core/Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb @@ -0,0 +1,254 @@ +HETATM 1 Cdab COR A 1 12.318 13.562 10.963 1.00 0.00 CD2+ +HETATM 2 Cdac COR A 1 12.417 10.883 14.270 1.00 0.00 CD2+ +HETATM 3 Cdad COR A 1 10.032 14.341 14.385 1.00 0.00 CD2+ +HETATM 4 Cdae COR A 1 15.737 15.828 10.109 1.00 0.00 CD2+ +HETATM 5 Cdaf COR A 1 15.831 13.031 13.270 1.00 0.00 CD2+ +HETATM 6 Cdag COR A 1 13.406 16.762 13.522 1.00 0.00 CD2+ +HETATM 7 Cdah COR A 1 15.749 10.334 16.598 1.00 0.00 CD2+ +HETATM 8 Cdai COR A 1 13.418 13.886 16.920 1.00 0.00 CD2+ +HETATM 9 Cdaj COR A 1 11.238 17.526 17.081 1.00 0.00 CD2+ +HETATM 10 Cdak COR A 1 19.255 15.384 12.536 1.00 0.00 CD2+ +HETATM 11 Cdal COR A 1 16.932 18.995 12.789 1.00 0.00 CD2+ +HETATM 12 Cdam COR A 1 19.226 12.677 15.755 1.00 0.00 CD2+ +HETATM 13 Cdan COR A 1 17.061 16.289 16.027 1.00 0.00 CD2+ +HETATM 14 Cdao COR A 1 14.657 19.776 16.225 1.00 0.00 CD2+ +HETATM 15 Cdap COR A 1 16.947 13.501 19.281 1.00 0.00 CD2+ +HETATM 16 Cdaq COR A 1 14.702 16.928 19.384 1.00 0.00 CD2+ +HETATM 17 Sear COR A 1 13.804 11.687 12.137 1.00 0.00 SE2- +HETATM 18 Seas COR A 1 11.275 15.576 12.368 1.00 0.00 SE2- +HETATM 19 Seat COR A 1 11.273 12.588 15.962 1.00 0.00 SE2- +HETATM 20 Seau COR A 1 17.358 14.032 11.248 1.00 0.00 SE2- +HETATM 21 Seav COR A 1 14.851 17.917 11.513 1.00 0.00 SE2- +HETATM 22 Seaw COR A 1 17.330 11.195 14.617 1.00 0.00 SE2- +HETATM 23 Seax COR A 1 14.939 14.990 14.931 1.00 0.00 SE2- +HETATM 24 Seay COR A 1 12.477 18.770 15.068 1.00 0.00 SE2- +HETATM 25 Seaz COR A 1 14.856 12.094 18.398 1.00 0.00 SE2- +HETATM 26 SeaA COR A 1 12.456 15.724 18.620 1.00 0.00 SE2- +HETATM 27 SeaB COR A 1 18.640 17.431 14.125 1.00 0.00 SE2- +HETATM 28 SeaC COR A 1 18.614 14.597 17.496 1.00 0.00 SE2- +HETATM 29 SeaD COR A 1 16.280 18.248 17.686 1.00 0.00 SE2- +HETATM 30 CdaE COR A 1 11.541 10.498 8.382 1.00 0.00 CD2+ +HETATM 31 CdaF COR A 1 9.108 14.485 8.726 1.00 0.00 CD2+ +HETATM 32 CdaG COR A 1 11.088 7.971 11.317 1.00 0.00 CD2+ +HETATM 33 CdaH COR A 1 8.869 10.953 11.645 1.00 0.00 CD2+ +HETATM 34 CdaI COR A 1 6.965 15.147 12.049 1.00 0.00 CD2+ +HETATM 35 CdaJ COR A 1 9.068 8.786 15.547 1.00 0.00 CD2+ +HETATM 36 CdaK COR A 1 6.956 12.188 15.560 1.00 0.00 CD2+ +HETATM 37 CdaL COR A 1 14.652 12.541 7.429 1.00 0.00 CD2+ +HETATM 38 CdaM COR A 1 12.188 16.464 7.714 1.00 0.00 CD2+ +HETATM 39 CdaN COR A 1 14.718 9.621 10.384 1.00 0.00 CD2+ +HETATM 40 CdaO COR A 1 9.761 17.522 10.928 1.00 0.00 CD2+ +HETATM 41 CdaP COR A 1 14.444 7.205 13.615 1.00 0.00 CD2+ +HETATM 42 CdaQ COR A 1 7.763 18.067 14.494 1.00 0.00 CD2+ +HETATM 43 CdaR COR A 1 12.161 8.118 17.585 1.00 0.00 CD2+ +HETATM 44 CdaS COR A 1 9.729 11.483 18.098 1.00 0.00 CD2+ +HETATM 45 CdaT COR A 1 7.750 15.108 18.009 1.00 0.00 CD2+ +HETATM 46 CdaU COR A 1 17.878 14.558 6.966 1.00 0.00 CD2+ +HETATM 47 CdaV COR A 1 15.306 18.600 7.232 1.00 0.00 CD2+ +HETATM 48 CdaW COR A 1 18.144 11.830 9.612 1.00 0.00 CD2+ +HETATM 49 CdaX COR A 1 13.119 19.724 10.153 1.00 0.00 CD2+ +HETATM 50 CdaY COR A 1 18.095 9.209 12.726 1.00 0.00 CD2+ +HETATM 51 CdaZ COR A 1 10.898 20.551 13.485 1.00 0.00 CD2+ +HETATM 52 Cdbc COR A 1 17.702 7.035 15.795 1.00 0.00 CD2+ +HETATM 53 Cdbd COR A 1 9.115 20.839 16.869 1.00 0.00 CD2+ +HETATM 54 Cdbe COR A 1 15.259 8.002 19.787 1.00 0.00 CD2+ +HETATM 55 Cdbf COR A 1 13.095 11.073 20.391 1.00 0.00 CD2+ +HETATM 56 Cdbg COR A 1 10.864 14.488 20.652 1.00 0.00 CD2+ +HETATM 57 Cdbh COR A 1 9.109 17.876 20.380 1.00 0.00 CD2+ +HETATM 58 Cdbi COR A 1 21.189 14.125 9.275 1.00 0.00 CD2+ +HETATM 59 Cdbj COR A 1 19.009 17.973 9.590 1.00 0.00 CD2+ +HETATM 60 Cdbk COR A 1 16.433 21.577 9.757 1.00 0.00 CD2+ +HETATM 61 Cdbl COR A 1 21.434 11.666 12.183 1.00 0.00 CD2+ +HETATM 62 Cdbm COR A 1 14.489 22.569 12.884 1.00 0.00 CD2+ +HETATM 63 Cdbn COR A 1 21.101 9.218 15.104 1.00 0.00 CD2+ +HETATM 64 Cdbo COR A 1 12.336 23.048 15.974 1.00 0.00 CD2+ +HETATM 65 Cdbp COR A 1 18.959 10.187 18.825 1.00 0.00 CD2+ +HETATM 66 Cdbq COR A 1 12.566 20.753 19.942 1.00 0.00 CD2+ +HETATM 67 Cdbr COR A 1 16.381 10.974 22.311 1.00 0.00 CD2+ +HETATM 68 Cdbs COR A 1 14.471 14.231 22.761 1.00 0.00 CD2+ +HETATM 69 Cdbt COR A 1 12.284 17.286 22.743 1.00 0.00 CD2+ +HETATM 70 Cdbu COR A 1 22.523 17.659 12.268 1.00 0.00 CD2+ +HETATM 71 Cdbv COR A 1 20.345 21.074 12.490 1.00 0.00 CD2+ +HETATM 72 Cdbw COR A 1 22.738 15.115 15.106 1.00 0.00 CD2+ +HETATM 73 Cdbx COR A 1 20.757 18.765 15.488 1.00 0.00 CD2+ +HETATM 74 Cdby COR A 1 18.271 22.120 15.534 1.00 0.00 CD2+ +HETATM 75 Cdbz COR A 1 22.442 12.786 18.123 1.00 0.00 CD2+ +HETATM 76 CdbA COR A 1 20.713 16.162 18.613 1.00 0.00 CD2+ +HETATM 77 CdbB COR A 1 18.491 19.633 18.853 1.00 0.00 CD2+ +HETATM 78 CdbC COR A 1 16.140 22.674 18.674 1.00 0.00 CD2+ +HETATM 79 CdbD COR A 1 20.209 13.698 21.436 1.00 0.00 CD2+ +HETATM 80 CdbE COR A 1 18.130 16.993 21.895 1.00 0.00 CD2+ +HETATM 81 CdbF COR A 1 15.764 20.390 21.818 1.00 0.00 CD2+ +HETATM 82 SebG COR A 1 12.597 8.337 9.231 1.00 0.00 SE2- +HETATM 83 SebH COR A 1 10.187 12.319 9.743 1.00 0.00 SE2- +HETATM 84 SebI COR A 1 7.563 16.216 9.797 1.00 0.00 SE2- +HETATM 85 SebJ COR A 1 10.292 9.509 13.354 1.00 0.00 SE2- +HETATM 86 SebK COR A 1 7.856 12.948 13.198 1.00 0.00 SE2- +HETATM 87 SebL COR A 1 7.505 10.163 17.031 1.00 0.00 SE2- +HETATM 88 SebM COR A 1 16.149 10.647 8.372 1.00 0.00 SE2- +HETATM 89 SebN COR A 1 13.715 14.598 8.896 1.00 0.00 SE2- +HETATM 90 SebO COR A 1 11.139 18.523 8.888 1.00 0.00 SE2- +HETATM 91 SebP COR A 1 16.116 7.800 11.715 1.00 0.00 SE2- +HETATM 92 SebQ COR A 1 8.740 19.394 12.490 1.00 0.00 SE2- +HETATM 93 SebR COR A 1 13.733 8.941 15.570 1.00 0.00 SE2- +HETATM 94 SebS COR A 1 9.089 16.290 16.005 1.00 0.00 SE2- +HETATM 95 SebT COR A 1 11.112 9.636 19.411 1.00 0.00 SE2- +HETATM 96 SebU COR A 1 8.697 13.346 19.662 1.00 0.00 SE2- +HETATM 97 SebV COR A 1 19.748 12.927 7.553 1.00 0.00 SE2- +HETATM 98 SebW COR A 1 17.259 16.946 7.972 1.00 0.00 SE2- +HETATM 99 SebX COR A 1 14.642 20.908 8.077 1.00 0.00 SE2- +HETATM 100 SebY COR A 1 19.761 10.170 10.895 1.00 0.00 SE2- +HETATM 101 SebZ COR A 1 12.363 21.772 11.635 1.00 0.00 SE2- +HETATM 102 Secd COR A 1 19.651 7.348 14.171 1.00 0.00 SE2- +HETATM 103 Sece COR A 1 9.957 22.568 15.174 1.00 0.00 SE2- +HETATM 104 Secf COR A 1 17.240 8.396 18.058 1.00 0.00 SE2- +HETATM 105 Secg COR A 1 10.369 19.598 18.827 1.00 0.00 SE2- +HETATM 106 Sech COR A 1 14.584 9.214 21.921 1.00 0.00 SE2- +HETATM 107 Seci COR A 1 12.339 12.877 22.161 1.00 0.00 SE2- +HETATM 108 Secj COR A 1 9.890 16.468 22.372 1.00 0.00 SE2- +HETATM 109 Seck COR A 1 20.927 16.472 10.502 1.00 0.00 SE2- +HETATM 110 Secl COR A 1 18.505 20.235 10.757 1.00 0.00 SE2- +HETATM 111 Secm COR A 1 20.833 13.678 13.862 1.00 0.00 SE2- +HETATM 112 Secn COR A 1 16.133 21.011 14.328 1.00 0.00 SE2- +HETATM 113 Seco COR A 1 20.867 10.853 17.191 1.00 0.00 SE2- +HETATM 114 Secp COR A 1 13.781 21.849 17.809 1.00 0.00 SE2- +HETATM 115 Secq COR A 1 18.492 11.718 20.874 1.00 0.00 SE2- +HETATM 116 Secr COR A 1 16.158 15.364 21.005 1.00 0.00 SE2- +HETATM 117 Secs COR A 1 13.776 18.730 21.156 1.00 0.00 SE2- +HETATM 118 Sect COR A 1 22.385 19.899 13.466 1.00 0.00 SE2- +HETATM 119 Secu COR A 1 22.365 17.079 16.747 1.00 0.00 SE2- +HETATM 120 Secv COR A 1 19.980 20.800 16.964 1.00 0.00 SE2- +HETATM 121 Secw COR A 1 22.292 14.364 20.112 1.00 0.00 SE2- +HETATM 122 Secx COR A 1 19.957 17.996 20.342 1.00 0.00 SE2- +HETATM 123 Secy COR A 1 17.612 21.644 20.484 1.00 0.00 SE2- +ATOM 124 Cab LIG A 2 12.520 22.373 22.450 1.00 0.00 C +HETATM 125 Oac LIG A 2 13.685 22.273 21.703 1.00 0.00 O1- +HETATM 126 Oad LIG A 2 11.692 21.426 22.456 1.00 0.00 O +ATOM 127 Hae LIG A 2 12.324 23.266 23.029 1.00 0.00 H +ATOM 128 Cab LIG A 3 16.892 24.065 10.033 1.00 0.00 C +HETATM 129 Oac LIG A 3 16.186 23.623 11.143 1.00 0.00 O1- +HETATM 130 Oad LIG A 3 17.280 23.241 9.166 1.00 0.00 O +ATOM 131 Hae LIG A 3 17.107 25.119 9.914 1.00 0.00 H +ATOM 132 Cab LIG A 4 9.049 14.601 6.171 1.00 0.00 C +HETATM 133 Oac LIG A 4 10.288 15.067 6.588 1.00 0.00 O1- +HETATM 134 Oad LIG A 4 8.190 14.252 7.021 1.00 0.00 O +ATOM 135 Hae LIG A 4 8.822 14.540 5.115 1.00 0.00 H +ATOM 136 Cab LIG A 5 16.861 11.662 24.726 1.00 0.00 C +HETATM 137 Oac LIG A 5 16.132 12.670 24.111 1.00 0.00 O1- +HETATM 138 Oad LIG A 5 17.277 10.685 24.051 1.00 0.00 O +ATOM 139 Hae LIG A 5 17.071 11.717 25.786 1.00 0.00 H +ATOM 140 Cab LIG A 6 7.346 8.493 10.789 1.00 0.00 C +HETATM 141 Oac LIG A 6 8.601 8.784 10.274 1.00 0.00 O1- +HETATM 142 Oad LIG A 6 7.055 8.829 11.965 1.00 0.00 O +ATOM 143 Hae LIG A 6 6.617 7.977 10.177 1.00 0.00 H +ATOM 144 Cab LIG A 7 24.730 12.259 17.098 1.00 0.00 C +HETATM 145 Oac LIG A 7 24.101 13.207 16.303 1.00 0.00 O1- +HETATM 146 Oad LIG A 7 24.091 11.683 18.015 1.00 0.00 O +ATOM 147 Hae LIG A 7 25.770 12.014 16.927 1.00 0.00 H +ATOM 148 Cab LIG A 8 6.593 18.377 20.028 1.00 0.00 C +HETATM 149 Oac LIG A 8 6.915 17.202 19.364 1.00 0.00 O1- +HETATM 150 Oad LIG A 8 7.503 19.170 20.380 1.00 0.00 O +ATOM 151 Hae LIG A 8 5.558 18.610 20.242 1.00 0.00 H +ATOM 152 Cab LIG A 9 16.280 24.981 16.363 1.00 0.00 C +HETATM 153 Oac LIG A 9 17.209 24.084 16.871 1.00 0.00 O1- +HETATM 154 Oad LIG A 9 15.165 24.568 15.954 1.00 0.00 O +ATOM 155 Hae LIG A 9 16.515 26.037 16.321 1.00 0.00 H +ATOM 156 Cab LIG A 10 14.526 5.566 19.590 1.00 0.00 C +HETATM 157 Oac LIG A 10 13.738 6.335 18.745 1.00 0.00 O1- +HETATM 158 Oad LIG A 10 15.479 6.096 20.217 1.00 0.00 O +ATOM 159 Hae LIG A 10 14.320 4.510 19.709 1.00 0.00 H +ATOM 160 Cab LIG A 11 18.204 19.349 23.953 1.00 0.00 C +HETATM 161 Oac LIG A 11 17.059 18.773 23.419 1.00 0.00 O1- +HETATM 162 Oad LIG A 11 19.122 19.746 23.191 1.00 0.00 O +ATOM 163 Hae LIG A 11 18.304 19.457 25.025 1.00 0.00 H +ATOM 164 Cab LIG A 12 12.890 25.348 14.045 1.00 0.00 C +HETATM 165 Oac LIG A 12 13.838 24.471 14.553 1.00 0.00 O1- +HETATM 166 Oad LIG A 12 11.788 24.910 13.627 1.00 0.00 O +ATOM 167 Hae LIG A 12 13.099 26.409 14.010 1.00 0.00 H +ATOM 168 Cab LIG A 13 12.919 10.560 5.509 1.00 0.00 C +HETATM 169 Oac LIG A 13 12.495 11.604 6.319 1.00 0.00 O1- +HETATM 170 Oad LIG A 13 13.648 9.652 5.983 1.00 0.00 O +ATOM 171 Hae LIG A 13 12.622 10.528 4.469 1.00 0.00 H +ATOM 172 Cab LIG A 14 9.006 6.260 16.053 1.00 0.00 C +HETATM 173 Oac LIG A 14 10.234 6.760 16.466 1.00 0.00 O1- +HETATM 174 Oad LIG A 14 8.148 7.033 15.555 1.00 0.00 O +ATOM 175 Hae LIG A 14 8.788 5.206 16.160 1.00 0.00 H +ATOM 176 Cab LIG A 15 4.743 13.442 15.933 1.00 0.00 C +HETATM 177 Oac LIG A 15 5.725 14.056 16.697 1.00 0.00 O1- +HETATM 178 Oad LIG A 15 5.066 12.640 15.020 1.00 0.00 O +ATOM 179 Hae LIG A 15 3.699 13.654 16.123 1.00 0.00 H +ATOM 180 Cab LIG A 16 20.671 14.991 23.806 1.00 0.00 C +HETATM 181 Oac LIG A 16 19.373 15.061 23.319 1.00 0.00 O1- +HETATM 182 Oad LIG A 16 21.639 14.916 23.006 1.00 0.00 O +ATOM 183 Hae LIG A 16 20.850 15.003 24.873 1.00 0.00 H +ATOM 184 Cab LIG A 17 23.368 8.862 13.513 1.00 0.00 C +HETATM 185 Oac LIG A 17 22.956 10.170 13.727 1.00 0.00 O1- +HETATM 186 Oad LIG A 17 22.518 7.937 13.452 1.00 0.00 O +ATOM 187 Hae LIG A 17 24.420 8.638 13.398 1.00 0.00 H +ATOM 188 Cab LIG A 18 16.677 4.580 14.841 1.00 0.00 C +HETATM 189 Oac LIG A 18 15.793 5.557 15.277 1.00 0.00 O1- +HETATM 190 Oad LIG A 18 17.728 4.909 14.233 1.00 0.00 O +ATOM 191 Hae LIG A 18 16.462 3.536 15.025 1.00 0.00 H +ATOM 192 Cab LIG A 19 23.677 13.548 9.433 1.00 0.00 C +HETATM 193 Oac LIG A 19 23.009 12.914 10.472 1.00 0.00 O1- +HETATM 194 Oad LIG A 19 23.074 14.388 8.718 1.00 0.00 O +ATOM 195 Hae LIG A 19 24.717 13.319 9.240 1.00 0.00 H +ATOM 196 Cab LIG A 20 20.812 23.646 13.255 1.00 0.00 C +HETATM 197 Oac LIG A 20 19.511 23.204 13.451 1.00 0.00 O1- +HETATM 198 Oad LIG A 20 21.765 22.826 13.280 1.00 0.00 O +ATOM 199 Hae LIG A 20 21.006 24.696 13.079 1.00 0.00 H +ATOM 200 Cab LIG A 21 4.973 17.450 12.840 1.00 0.00 C +HETATM 201 Oac LIG A 21 5.730 16.621 13.657 1.00 0.00 O1- +HETATM 202 Oad LIG A 21 5.516 18.048 11.876 1.00 0.00 O +ATOM 203 Hae LIG A 21 3.917 17.580 13.033 1.00 0.00 H +ATOM 204 Cab LIG A 22 12.704 5.152 11.809 1.00 0.00 C +HETATM 205 Oac LIG A 22 12.290 6.116 12.717 1.00 0.00 O1- +HETATM 206 Oad LIG A 22 13.449 5.471 10.847 1.00 0.00 O +ATOM 207 Hae LIG A 22 12.386 4.124 11.930 1.00 0.00 H +ATOM 208 Cab LIG A 23 14.598 17.963 4.868 1.00 0.00 C +HETATM 209 Oac LIG A 23 13.789 17.285 5.769 1.00 0.00 O1- +HETATM 210 Oad LIG A 23 15.570 18.644 5.285 1.00 0.00 O +ATOM 211 Hae LIG A 23 14.392 17.905 3.808 1.00 0.00 H +ATOM 212 Cab LIG A 24 16.956 13.453 4.643 1.00 0.00 C +HETATM 213 Oac LIG A 24 15.975 13.856 5.538 1.00 0.00 O1- +HETATM 214 Oad LIG A 24 18.081 13.083 5.067 1.00 0.00 O +ATOM 215 Hae LIG A 24 16.752 13.456 3.580 1.00 0.00 H +ATOM 216 Cab LIG A 25 25.109 16.920 12.972 1.00 0.00 C +HETATM 217 Oac LIG A 25 24.145 15.923 13.026 1.00 0.00 O1- +HETATM 218 Oad LIG A 25 24.794 18.113 13.216 1.00 0.00 O +ATOM 219 Hae LIG A 25 26.131 16.670 12.722 1.00 0.00 H +ATOM 220 Cab LIG A 26 13.050 17.016 25.192 1.00 0.00 C +HETATM 221 Oac LIG A 26 13.780 16.138 24.402 1.00 0.00 O1- +HETATM 222 Oad LIG A 26 12.146 17.722 24.676 1.00 0.00 O +ATOM 223 Hae LIG A 26 13.258 17.091 26.251 1.00 0.00 H +ATOM 224 Cab LIG A 27 6.416 21.041 16.108 1.00 0.00 C +HETATM 225 Oac LIG A 27 6.919 19.764 16.319 1.00 0.00 O1- +HETATM 226 Oad LIG A 27 7.151 21.933 15.612 1.00 0.00 O +ATOM 227 Hae LIG A 27 5.391 21.268 16.369 1.00 0.00 H +CONECT 124 125 126 126 127 +CONECT 128 129 130 130 131 +CONECT 132 133 134 134 135 +CONECT 136 137 138 138 139 +CONECT 140 141 142 142 143 +CONECT 144 145 146 146 147 +CONECT 148 149 150 150 151 +CONECT 152 153 154 154 155 +CONECT 156 157 158 158 159 +CONECT 160 161 162 162 163 +CONECT 164 165 166 166 167 +CONECT 168 169 170 170 171 +CONECT 172 173 174 174 175 +CONECT 176 177 178 178 179 +CONECT 180 181 182 182 183 +CONECT 184 185 186 186 187 +CONECT 188 189 190 190 191 +CONECT 192 193 194 194 195 +CONECT 196 197 198 198 199 +CONECT 200 201 202 202 203 +CONECT 204 205 206 206 207 +CONECT 208 209 210 210 211 +CONECT 212 213 214 214 215 +CONECT 216 217 218 218 219 +CONECT 220 221 222 222 223 +CONECT 224 225 226 226 227 +END diff --git a/tests/test_files/qd_test_distribution.pdb b/tests/test_files/qd_test_distribution.pdb new file mode 100644 index 00000000..6ba9f939 --- /dev/null +++ b/tests/test_files/qd_test_distribution.pdb @@ -0,0 +1,202 @@ +HETATM 1 Cdab COR A 1 12.318 13.562 10.963 1.00 0.00 CD2+ +HETATM 2 Cdac COR A 1 12.417 10.883 14.270 1.00 0.00 CD2+ +HETATM 3 Cdad COR A 1 10.032 14.341 14.385 1.00 0.00 CD2+ +HETATM 4 Cdae COR A 1 15.737 15.828 10.109 1.00 0.00 CD2+ +HETATM 5 Cdaf COR A 1 15.831 13.031 13.270 1.00 0.00 CD2+ +HETATM 6 Cdag COR A 1 13.406 16.762 13.522 1.00 0.00 CD2+ +HETATM 7 Cdah COR A 1 15.749 10.334 16.598 1.00 0.00 CD2+ +HETATM 8 Cdai COR A 1 13.418 13.886 16.920 1.00 0.00 CD2+ +HETATM 9 Cdaj COR A 1 11.238 17.526 17.081 1.00 0.00 CD2+ +HETATM 10 Cdak COR A 1 19.255 15.384 12.536 1.00 0.00 CD2+ +HETATM 11 Cdal COR A 1 16.932 18.995 12.789 1.00 0.00 CD2+ +HETATM 12 Cdam COR A 1 19.226 12.677 15.755 1.00 0.00 CD2+ +HETATM 13 Cdan COR A 1 17.061 16.289 16.027 1.00 0.00 CD2+ +HETATM 14 Cdao COR A 1 14.657 19.776 16.225 1.00 0.00 CD2+ +HETATM 15 Cdap COR A 1 16.947 13.501 19.281 1.00 0.00 CD2+ +HETATM 16 Cdaq COR A 1 14.702 16.928 19.384 1.00 0.00 CD2+ +HETATM 17 Sear COR A 1 13.804 11.687 12.137 1.00 0.00 SE2- +HETATM 18 Seas COR A 1 11.275 15.576 12.368 1.00 0.00 SE2- +HETATM 19 Seat COR A 1 11.273 12.588 15.962 1.00 0.00 SE2- +HETATM 20 Seau COR A 1 17.358 14.032 11.248 1.00 0.00 SE2- +HETATM 21 Seav COR A 1 14.851 17.917 11.513 1.00 0.00 SE2- +HETATM 22 Seaw COR A 1 17.330 11.195 14.617 1.00 0.00 SE2- +HETATM 23 Seax COR A 1 14.939 14.990 14.931 1.00 0.00 SE2- +HETATM 24 Seay COR A 1 12.477 18.770 15.068 1.00 0.00 SE2- +HETATM 25 Seaz COR A 1 14.856 12.094 18.398 1.00 0.00 SE2- +HETATM 26 SeaA COR A 1 12.456 15.724 18.620 1.00 0.00 SE2- +HETATM 27 SeaB COR A 1 18.640 17.431 14.125 1.00 0.00 SE2- +HETATM 28 SeaC COR A 1 18.614 14.597 17.496 1.00 0.00 SE2- +HETATM 29 SeaD COR A 1 16.280 18.248 17.686 1.00 0.00 SE2- +HETATM 30 CdaE COR A 1 11.541 10.498 8.382 1.00 0.00 CD2+ +HETATM 31 CdaF COR A 1 9.108 14.485 8.726 1.00 0.00 CD2+ +HETATM 32 CdaG COR A 1 11.088 7.971 11.317 1.00 0.00 CD2+ +HETATM 33 CdaH COR A 1 8.869 10.953 11.645 1.00 0.00 CD2+ +HETATM 34 CdaI COR A 1 6.965 15.147 12.049 1.00 0.00 CD2+ +HETATM 35 CdaJ COR A 1 9.068 8.786 15.547 1.00 0.00 CD2+ +HETATM 36 CdaK COR A 1 6.956 12.188 15.560 1.00 0.00 CD2+ +HETATM 37 CdaL COR A 1 14.652 12.541 7.429 1.00 0.00 CD2+ +HETATM 38 CdaM COR A 1 12.188 16.464 7.714 1.00 0.00 CD2+ +HETATM 39 CdaN COR A 1 14.718 9.621 10.384 1.00 0.00 CD2+ +HETATM 40 CdaO COR A 1 9.761 17.522 10.928 1.00 0.00 CD2+ +HETATM 41 CdaP COR A 1 14.444 7.205 13.615 1.00 0.00 CD2+ +HETATM 42 CdaQ COR A 1 7.763 18.067 14.494 1.00 0.00 CD2+ +HETATM 43 CdaR COR A 1 12.161 8.118 17.585 1.00 0.00 CD2+ +HETATM 44 CdaS COR A 1 9.729 11.483 18.098 1.00 0.00 CD2+ +HETATM 45 CdaT COR A 1 7.750 15.108 18.009 1.00 0.00 CD2+ +HETATM 46 CdaU COR A 1 17.878 14.558 6.966 1.00 0.00 CD2+ +HETATM 47 CdaV COR A 1 15.306 18.600 7.232 1.00 0.00 CD2+ +HETATM 48 CdaW COR A 1 18.144 11.830 9.612 1.00 0.00 CD2+ +HETATM 49 CdaX COR A 1 13.119 19.724 10.153 1.00 0.00 CD2+ +HETATM 50 CdaY COR A 1 18.095 9.209 12.726 1.00 0.00 CD2+ +HETATM 51 CdaZ COR A 1 10.898 20.551 13.485 1.00 0.00 CD2+ +HETATM 52 Cdbc COR A 1 17.702 7.035 15.795 1.00 0.00 CD2+ +HETATM 53 Cdbd COR A 1 9.115 20.839 16.869 1.00 0.00 CD2+ +HETATM 54 Cdbe COR A 1 15.259 8.002 19.787 1.00 0.00 CD2+ +HETATM 55 Cdbf COR A 1 13.095 11.073 20.391 1.00 0.00 CD2+ +HETATM 56 Cdbg COR A 1 10.864 14.488 20.652 1.00 0.00 CD2+ +HETATM 57 Cdbh COR A 1 9.109 17.876 20.380 1.00 0.00 CD2+ +HETATM 58 Cdbi COR A 1 21.189 14.125 9.275 1.00 0.00 CD2+ +HETATM 59 Cdbj COR A 1 19.009 17.973 9.590 1.00 0.00 CD2+ +HETATM 60 Cdbk COR A 1 16.433 21.577 9.757 1.00 0.00 CD2+ +HETATM 61 Cdbl COR A 1 21.434 11.666 12.183 1.00 0.00 CD2+ +HETATM 62 Cdbm COR A 1 14.489 22.569 12.884 1.00 0.00 CD2+ +HETATM 63 Cdbn COR A 1 21.101 9.218 15.104 1.00 0.00 CD2+ +HETATM 64 Cdbo COR A 1 12.336 23.048 15.974 1.00 0.00 CD2+ +HETATM 65 Cdbp COR A 1 18.959 10.187 18.825 1.00 0.00 CD2+ +HETATM 66 Cdbq COR A 1 12.566 20.753 19.942 1.00 0.00 CD2+ +HETATM 67 Cdbr COR A 1 16.381 10.974 22.311 1.00 0.00 CD2+ +HETATM 68 Cdbs COR A 1 14.471 14.231 22.761 1.00 0.00 CD2+ +HETATM 69 Cdbt COR A 1 12.284 17.286 22.743 1.00 0.00 CD2+ +HETATM 70 Cdbu COR A 1 22.523 17.659 12.268 1.00 0.00 CD2+ +HETATM 71 Cdbv COR A 1 20.345 21.074 12.490 1.00 0.00 CD2+ +HETATM 72 Cdbw COR A 1 22.738 15.115 15.106 1.00 0.00 CD2+ +HETATM 73 Cdbx COR A 1 20.757 18.765 15.488 1.00 0.00 CD2+ +HETATM 74 Cdby COR A 1 18.271 22.120 15.534 1.00 0.00 CD2+ +HETATM 75 Cdbz COR A 1 22.442 12.786 18.123 1.00 0.00 CD2+ +HETATM 76 CdbA COR A 1 20.713 16.162 18.613 1.00 0.00 CD2+ +HETATM 77 CdbB COR A 1 18.491 19.633 18.853 1.00 0.00 CD2+ +HETATM 78 CdbC COR A 1 16.140 22.674 18.674 1.00 0.00 CD2+ +HETATM 79 CdbD COR A 1 20.209 13.698 21.436 1.00 0.00 CD2+ +HETATM 80 CdbE COR A 1 18.130 16.993 21.895 1.00 0.00 CD2+ +HETATM 81 CdbF COR A 1 15.764 20.390 21.818 1.00 0.00 CD2+ +HETATM 82 SebG COR A 1 12.597 8.337 9.231 1.00 0.00 SE2- +HETATM 83 SebH COR A 1 10.187 12.319 9.743 1.00 0.00 SE2- +HETATM 84 SebI COR A 1 7.563 16.216 9.797 1.00 0.00 SE2- +HETATM 85 SebJ COR A 1 10.292 9.509 13.354 1.00 0.00 SE2- +HETATM 86 SebK COR A 1 7.856 12.948 13.198 1.00 0.00 SE2- +HETATM 87 SebL COR A 1 7.505 10.163 17.031 1.00 0.00 SE2- +HETATM 88 SebM COR A 1 16.149 10.647 8.372 1.00 0.00 SE2- +HETATM 89 SebN COR A 1 13.715 14.598 8.896 1.00 0.00 SE2- +HETATM 90 SebO COR A 1 11.139 18.523 8.888 1.00 0.00 SE2- +HETATM 91 SebP COR A 1 16.116 7.800 11.715 1.00 0.00 SE2- +HETATM 92 SebQ COR A 1 8.740 19.394 12.490 1.00 0.00 SE2- +HETATM 93 SebR COR A 1 13.733 8.941 15.570 1.00 0.00 SE2- +HETATM 94 SebS COR A 1 9.089 16.290 16.005 1.00 0.00 SE2- +HETATM 95 SebT COR A 1 11.112 9.636 19.411 1.00 0.00 SE2- +HETATM 96 SebU COR A 1 8.697 13.346 19.662 1.00 0.00 SE2- +HETATM 97 SebV COR A 1 19.748 12.927 7.553 1.00 0.00 SE2- +HETATM 98 SebW COR A 1 17.259 16.946 7.972 1.00 0.00 SE2- +HETATM 99 SebX COR A 1 14.642 20.908 8.077 1.00 0.00 SE2- +HETATM 100 SebY COR A 1 19.761 10.170 10.895 1.00 0.00 SE2- +HETATM 101 SebZ COR A 1 12.363 21.772 11.635 1.00 0.00 SE2- +HETATM 102 Secd COR A 1 19.651 7.348 14.171 1.00 0.00 SE2- +HETATM 103 Sece COR A 1 9.957 22.568 15.174 1.00 0.00 SE2- +HETATM 104 Secf COR A 1 17.240 8.396 18.058 1.00 0.00 SE2- +HETATM 105 Secg COR A 1 10.369 19.598 18.827 1.00 0.00 SE2- +HETATM 106 Sech COR A 1 14.584 9.214 21.921 1.00 0.00 SE2- +HETATM 107 Seci COR A 1 12.339 12.877 22.161 1.00 0.00 SE2- +HETATM 108 Secj COR A 1 9.890 16.468 22.372 1.00 0.00 SE2- +HETATM 109 Seck COR A 1 20.927 16.472 10.502 1.00 0.00 SE2- +HETATM 110 Secl COR A 1 18.505 20.235 10.757 1.00 0.00 SE2- +HETATM 111 Secm COR A 1 20.833 13.678 13.862 1.00 0.00 SE2- +HETATM 112 Secn COR A 1 16.133 21.011 14.328 1.00 0.00 SE2- +HETATM 113 Seco COR A 1 20.867 10.853 17.191 1.00 0.00 SE2- +HETATM 114 Secp COR A 1 13.781 21.849 17.809 1.00 0.00 SE2- +HETATM 115 Secq COR A 1 18.492 11.718 20.874 1.00 0.00 SE2- +HETATM 116 Secr COR A 1 16.158 15.364 21.005 1.00 0.00 SE2- +HETATM 117 Secs COR A 1 13.776 18.730 21.156 1.00 0.00 SE2- +HETATM 118 Sect COR A 1 22.385 19.899 13.466 1.00 0.00 SE2- +HETATM 119 Secu COR A 1 22.365 17.079 16.747 1.00 0.00 SE2- +HETATM 120 Secv COR A 1 19.980 20.800 16.964 1.00 0.00 SE2- +HETATM 121 Secw COR A 1 22.292 14.364 20.112 1.00 0.00 SE2- +HETATM 122 Secx COR A 1 19.957 17.996 20.342 1.00 0.00 SE2- +HETATM 123 Secy COR A 1 17.612 21.644 20.484 1.00 0.00 SE2- +ATOM 124 Cab LIG A 2 13.359 23.387 22.474 1.00 0.00 C +HETATM 125 Oac LIG A 2 13.685 22.273 21.703 1.00 0.00 O1- +ATOM 126 Haf LIG A 2 12.611 23.100 23.242 1.00 0.00 H +ATOM 127 Hae LIG A 2 12.935 24.178 21.821 1.00 0.00 H +ATOM 128 Had LIG A 2 14.273 23.772 22.973 1.00 0.00 H +ATOM 129 Cab LIG A 3 16.504 24.961 10.916 1.00 0.00 C +HETATM 130 Oac LIG A 3 16.186 23.623 11.143 1.00 0.00 O1- +ATOM 131 Haf LIG A 3 16.915 25.075 9.892 1.00 0.00 H +ATOM 132 Hae LIG A 3 17.259 25.293 11.658 1.00 0.00 H +ATOM 133 Had LIG A 3 15.589 25.581 11.018 1.00 0.00 H +ATOM 134 Cab LIG A 4 16.445 12.666 25.469 1.00 0.00 C +HETATM 135 Oac LIG A 4 16.132 12.670 24.111 1.00 0.00 O1- +ATOM 136 Haf LIG A 4 16.818 11.662 25.760 1.00 0.00 H +ATOM 137 Hae LIG A 4 15.538 12.910 26.059 1.00 0.00 H +ATOM 138 Had LIG A 4 17.231 13.424 25.670 1.00 0.00 H +ATOM 139 Cab LIG A 5 7.608 8.124 9.552 1.00 0.00 C +HETATM 140 Oac LIG A 5 8.601 8.784 10.274 1.00 0.00 O1- +ATOM 141 Haf LIG A 5 8.056 7.272 8.999 1.00 0.00 H +ATOM 142 Hae LIG A 5 7.142 8.829 8.833 1.00 0.00 H +ATOM 143 Had LIG A 5 6.834 7.744 10.251 1.00 0.00 H +ATOM 144 Cab LIG A 6 17.434 25.457 16.782 1.00 0.00 C +HETATM 145 Oac LIG A 6 17.209 24.084 16.871 1.00 0.00 O1- +ATOM 146 Haf LIG A 6 18.514 25.644 16.604 1.00 0.00 H +ATOM 147 Hae LIG A 6 17.125 25.945 17.729 1.00 0.00 H +ATOM 148 Had LIG A 6 16.843 25.875 15.941 1.00 0.00 H +ATOM 149 Cab LIG A 7 13.539 4.971 18.953 1.00 0.00 C +HETATM 150 Oac LIG A 7 13.738 6.335 18.745 1.00 0.00 O1- +ATOM 151 Haf LIG A 7 14.182 4.627 19.790 1.00 0.00 H +ATOM 152 Hae LIG A 7 13.802 4.413 18.031 1.00 0.00 H +ATOM 153 Had LIG A 7 12.474 4.787 19.205 1.00 0.00 H +ATOM 154 Cab LIG A 8 12.157 11.490 4.972 1.00 0.00 C +HETATM 155 Oac LIG A 8 12.495 11.604 6.319 1.00 0.00 O1- +ATOM 156 Haf LIG A 8 11.488 12.328 4.685 1.00 0.00 H +ATOM 157 Hae LIG A 8 11.636 10.525 4.801 1.00 0.00 H +ATOM 158 Had LIG A 8 13.079 11.525 4.355 1.00 0.00 H +ATOM 159 Cab LIG A 9 4.361 14.275 16.879 1.00 0.00 C +HETATM 160 Oac LIG A 9 5.725 14.056 16.697 1.00 0.00 O1- +ATOM 161 Haf LIG A 9 4.042 15.146 16.270 1.00 0.00 H +ATOM 162 Hae LIG A 9 4.158 14.478 17.950 1.00 0.00 H +ATOM 163 Had LIG A 9 3.796 13.375 16.560 1.00 0.00 H +ATOM 164 Cab LIG A 10 24.291 9.799 13.569 1.00 0.00 C +HETATM 165 Oac LIG A 10 22.956 10.170 13.727 1.00 0.00 O1- +ATOM 166 Haf LIG A 10 24.498 9.614 12.494 1.00 0.00 H +ATOM 167 Hae LIG A 10 24.489 8.875 14.149 1.00 0.00 H +ATOM 168 Had LIG A 10 24.947 10.615 13.937 1.00 0.00 H +ATOM 169 Cab LIG A 11 11.926 4.774 12.802 1.00 0.00 C +HETATM 170 Oac LIG A 11 12.290 6.116 12.717 1.00 0.00 O1- +ATOM 171 Haf LIG A 11 12.357 4.218 11.943 1.00 0.00 H +ATOM 172 Hae LIG A 11 10.820 4.688 12.781 1.00 0.00 H +ATOM 173 Had LIG A 11 12.311 4.345 13.750 1.00 0.00 H +ATOM 174 Cab LIG A 12 13.592 17.262 4.390 1.00 0.00 C +HETATM 175 Oac LIG A 12 13.789 17.285 5.769 1.00 0.00 O1- +ATOM 176 Haf LIG A 12 14.039 18.170 3.936 1.00 0.00 H +ATOM 177 Hae LIG A 12 12.504 17.236 4.172 1.00 0.00 H +ATOM 178 Had LIG A 12 14.075 16.359 3.962 1.00 0.00 H +ATOM 179 Cab LIG A 13 25.482 15.685 12.711 1.00 0.00 C +HETATM 180 Oac LIG A 13 24.145 15.923 13.026 1.00 0.00 O1- +ATOM 181 Haf LIG A 13 25.882 16.538 12.125 1.00 0.00 H +ATOM 182 Hae LIG A 13 25.561 14.754 12.112 1.00 0.00 H +ATOM 183 Had LIG A 13 26.068 15.572 13.647 1.00 0.00 H +ATOM 184 Cab LIG A 14 5.612 20.137 16.628 1.00 0.00 C +HETATM 185 Oac LIG A 14 6.919 19.764 16.319 1.00 0.00 O1- +ATOM 186 Haf LIG A 14 5.602 21.187 16.989 1.00 0.00 H +ATOM 187 Hae LIG A 14 5.214 19.469 17.420 1.00 0.00 H +ATOM 188 Had LIG A 14 4.978 20.053 15.721 1.00 0.00 H +CONECT 124 125 126 127 128 +CONECT 129 130 131 132 133 +CONECT 134 135 136 137 138 +CONECT 139 140 141 142 143 +CONECT 144 145 146 147 148 +CONECT 149 150 151 152 153 +CONECT 154 155 156 157 158 +CONECT 159 160 161 162 163 +CONECT 164 165 166 167 168 +CONECT 169 170 171 172 173 +CONECT 174 175 176 177 178 +CONECT 179 180 181 182 183 +CONECT 184 185 186 187 188 +END diff --git a/tests/test_files/test_allignment.hdf5 b/tests/test_files/test_allignment.hdf5 index 0228bb55c0878ec9de3450b2634c000fc0e1f584..a84c4db61efe3eec00a42b99d5b3165618bb3977 100644 GIT binary patch delta 24064 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 J|NmjF|1VgJR)_!q delta 66 zcmV-I0KNb2nFf-N1du2Kk_WLWe&Um~$RM%6*a4G}1`q)dld None: class TestCoreAnchor: PARAMS = { - "HCl": {"group": "[H]Cl", "group_idx": 0, "remove": 0} + "HCl": ("Cd68Se55_HCl.pdb", {"group": "[H]Cl", "group_idx": 0, "remove": 0}), + "formate": ("Cd68Cl26Se55__26_O=C[O-]@O2O3.pdb", { + "group": "[H]C([O-])=O", + "group_idx": [2, 3], + "remove": [0, 1, 2, 3], + "kind": "mean", + }), + "ethoxide": ("Cd68Cl26Se55__26_CC[O-]@O3.pdb", { + "group": "[O-]C([H])([H])C([H])([H])[H]", + "group_idx": 0, + "remove": [0, 1, 2, 3, 4, 5, 6, 7], + "kind": "first", + }), } @pytest.fixture(scope="class", name="output", params=PARAMS.items(), ids=PARAMS) @@ -198,14 +210,16 @@ def run_cat( self, request: "_pytest.fixtures.SubRequest" ) -> Generator[AllignmentTup, None, None]: # Setup - name, kwargs = request.param # type: str, dict[str, Any] + name, (core, kwargs) = request.param # type: str, tuple[str, dict[str, Any]] yaml_path = PATH / 'CAT_allignment.yaml' with open(yaml_path, 'r') as f1: arg = Settings(yaml.load(f1, Loader=yaml.FullLoader)) arg.path = PATH - arg.input_cores = ["Cd68Se55_HCl.pdb"] + arg.input_cores = [core] arg.optional.core.anchor = kwargs + if name == "formate": + arg.optional.core.allignment = "anchor" qd_df, _, _ = prep(arg) qd = qd_df[MOL].iloc[0]