From aced5b91e8ae56495e608c85ca7475f57ff34b36 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:40:31 +0100 Subject: [PATCH 01/18] Added as author --- package/AUTHORS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/AUTHORS b/package/AUTHORS index c413c90462d..7d5d1d1f673 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -222,6 +222,8 @@ Chronological list of authors - Shubham Kumar - Zaheer Timol - Geongi Moon +2024 + - Jure Cerar External code ------------- From a865090cbcbf2a1bf0e50a709b0460bb1b5d56c1 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:45:01 +0100 Subject: [PATCH 02/18] Added to changelog --- package/CHANGELOG | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/package/CHANGELOG b/package/CHANGELOG index 4551124635c..a920b2b799f 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -17,6 +17,12 @@ The rules for this file: ??/??/?? IAlibay, ianmkenney, PicoCentauri, pgbarletta, p-j-smith, richardjgowers, lilyminium, ALescoulie, hmacdope + * 2.8.0 + +Enhancements + * Add calculation for the accessible surface area, and relative accessible + surface area using Shrake-Rupley algorithm (PR #4025) + * 2.7.0 Fixes From 9cff128f483fdea9dd55f132579837e0134aa334 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:45:26 +0100 Subject: [PATCH 03/18] Added 'documentation' --- package/CHANGELOG | 3 ++- .../doc/sphinx/source/documentation_pages/analysis/sasa.rst | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 package/doc/sphinx/source/documentation_pages/analysis/sasa.rst diff --git a/package/CHANGELOG b/package/CHANGELOG index a920b2b799f..5a05a5e3711 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -17,11 +17,12 @@ The rules for this file: ??/??/?? IAlibay, ianmkenney, PicoCentauri, pgbarletta, p-j-smith, richardjgowers, lilyminium, ALescoulie, hmacdope + * 2.8.0 Enhancements * Add calculation for the accessible surface area, and relative accessible - surface area using Shrake-Rupley algorithm (PR #4025) + surface area using Shrake-Rupley algorithm (PR #2439) * 2.7.0 diff --git a/package/doc/sphinx/source/documentation_pages/analysis/sasa.rst b/package/doc/sphinx/source/documentation_pages/analysis/sasa.rst new file mode 100644 index 00000000000..75372090c8e --- /dev/null +++ b/package/doc/sphinx/source/documentation_pages/analysis/sasa.rst @@ -0,0 +1,2 @@ +.. automodule:: MDAnalysis.analysis.sasa + :members: \ No newline at end of file From ffe131751c66f12340d4ebc3ae83daaa272f401c Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:50:47 +0100 Subject: [PATCH 04/18] Implementation of SASA/RSASA calculation with Shrake-Rupley algorithm. --- package/MDAnalysis/analysis/sasa.py | 557 ++++++++++++++++++++++++++++ 1 file changed, 557 insertions(+) create mode 100644 package/MDAnalysis/analysis/sasa.py diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py new file mode 100644 index 00000000000..145a6bb0bde --- /dev/null +++ b/package/MDAnalysis/analysis/sasa.py @@ -0,0 +1,557 @@ +# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*- +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 +# +# MDAnalysis --- https://www.mdanalysis.org +# Copyright (c) 2006-2024 The MDAnalysis Development Team and contributors +# (see the file AUTHORS for the full list of names) +# +# Released under the GNU Public Licence, v2 or any higher version +# +# Please cite your use of MDAnalysis in published work: +# +# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, +# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. +# MDAnalysis: A Python package for the rapid analysis of molecular dynamics +# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th +# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. +# doi: 10.25080/majora-629e541a-00e +# +# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. +# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. +# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 +# +"""\ +Solvent-Accessible Surface Area --- :mod:`MDAnalysis.analysis.sasa` +=================================================================== + +:Authors: Jure Cerar +:Year: 2024 +:Copyright: GNU Public License v2 + +Solvent-Accessible Surface Area +------------------------------- + +`Solvent-Accessible Surface Area`_ (SASA) or `Accessible Surface Area`_ (ASA) +is the surface area of molecule that is accessible to solvent molecules in a +given environment. In the context of biomolecules such as proteins or nucleic +acids, solvent-exposed surface area quantifies the extent to which specific +regions of the molecule are exposed and interact with the surrounding solvent +and other solutes. + +Implementation here uses the Shrake-Rupley algorithm :footcite:p:`Shrake1973`. +Algorithm works by drawing a mesh of equidistant points around each particle. +The points are drawn at particle's van der Waals radius, :math:`r_{VDW}`, with +added radius of solvent probe, :math:`r_{probe}`, usually water molecule (a +typical value is 1.4 Å). All points are checked against the surface of +neighboring atoms to determine whether they are buried or exposed. The number +of points accessible is multiplied by the portion of surface area each point +represents to calculate the accessible surface, :math:`S`: + +.. math:: + + S = 4 * \pi * (r_{VDW} + r_{probe})^2 * N_{exposed} / N + +Relative Solvent-Exposed Surface Area +------------------------------------- + +`Relative Solvent-Exposed Surface Area`_ (RSASA) or `Relative Solvent +Accessibility`_ (RSA) is a normalized measure of the solvent accessibility of a +specific region within a molecule, usually a residue. It represents the ratio +of the actual exposed surface area to the maximum possible surface area +accessible, :math:`S_{max}`, in that particular region with value of 0 for +fully buried and 1 for fully exposed residue and is often expressed as a +percentage. By normalizing to the maximum value this allows for a more +standardized comparison between different molecules or regions within the same +molecule, facilitating the analysis of structural changes and functional +implications across various biological contexts. It is calculated as: + +.. math:: + + S_{relative} = S / S_{max} + +To measure the relative solvent accessibility, one usually takes +:math:`S_{max}` values that have been obtained from `Gly-X-Gly` tripeptides, +where `X` is the residue of interest. Commonly pre-calculated :math:`S_{max}` +scales are used e.g. :footcite:p:`Tien2013`. Here a different approach is +implemented. The :math:`S_{max}` is calculated by removing all other residues +except its two next neighbors (if present) for a given structure with no need +for tabulated values. This approach has several advantages. It is more robust, +as it always guaranteed to return value between 0 and 1. It is not limited to +standard amino acid residues, and works for other polymers (DNA, RNA, etc.) as +well. Additionally, it is not dependant on atomic radii and probe radius used. +The results are however still comparable to values from literature. + +Examples +-------- + +For example, we can find how the average area of adenylate kinase (AdK). The +trajectory is included within the test data files: + +.. code-block:: python + + import MDAnalysis as mda + from MDAnalysis.analysis.sasa import SASA, RSASA + + from MDAnalysisTests.datafiles import TPR, GRO + from MDAnalysis.transformations import unwrap + + # Load and unwrap the structure + u = MDAnalysis.Universe(TPR, GRO) + u.trajectory.add_transformations(unwrap(u.atoms)) + protein = u.select_atoms("protein") + + # Calculate SASA + S = SASA(protein).run() + print(f"Total surface: {S.results.area.sum():.2f} Å^2") + + # Calculate SASA more accurately + S = SASA(protein, n_dots=1024).run() + print(f"Total surface: {S.results.area.sum():.2f} Å^2") + + # Calculate surface area (no probe) + S = SASA(protein, probe_radius=0).run() + print(f"Total surface: {S.results.area.sum():.2f} Å^2") + + # Calculate SASA with custom atom radii for H + S = SASA(protein, radii_dict={"H": 1.2}).run() + print(f"Total surface: {S.results.area.sum():.2f} Å^2") + + # Calculate relative SASA + RS = RSASA(protein).run() + for res, area in zip(protein.residues, RS.results.relative_area): + print(res.resnum, res.resname[:3], f"{area:7.2%}") + + # Calculate relative SASA of side-chain atoms + RS = RSASA(protein, subsele="not backbone").run() + for res, area in zip(protein.residues, RS.results.relative_area): + print(res.resnum, res.resname[:3], f"{area:7.2%}") + +Notes +_____ + +There are several things that must be taken into account when calculating +surfaces, like using unwrapped trajectories, etc. When calculating SASA make +sure that the structure fluctuates around the equilibrium state; If there are +major changes in structure use the `start`, `stop`, and `step` keywords to +control which frames are used for calculations. Note that computation of SASA +can be intensive for large systems or long trajectories. + +Classes +------- + +.. autoclass:: SASA +.. autoclass:: RSASA + +References +---------- + +.. footbibliography:: + + +.. _`Solvent-Accessible Surface Area`: + https://en.wikipedia.org/wiki/Accessible_surface_area +.. _`Accessible Surface Area`: + https://en.wikipedia.org/wiki/Accessible_surface_area +.. _`Relative Solvent-Accessible Surface Area`: + https://en.wikipedia.org/wiki/Relative_accessible_surface_area +.. _`Relative Solvent Accessibility`: + https://en.wikipedia.org/wiki/Relative_accessible_surface_area +""" + +import numpy as np +import collections +import logging +import scipy + +from ..due import due, Doi +from .base import AnalysisBase +from ..topology.tables import vdwradii + +from ..core import groups + +logger = logging.getLogger('MDAnalysis.analysis.sasa') + +due.cite( + Doi("10.1016/0022-2836(73)90011-9"), + description="Environment and exposure to solvent of protein atoms", + path="MDAnalysis.analysis.sasa", + cite_module=True, +) +due.cite( + Doi("10.1371/journal.pone.0080635"), + description="Maximum Allowed Solvent Accessibilites of Residues in Proteins", + path="MDAnalysis.analysis.sasa", + cite_module=True, +) +due.cite( + Doi("10.12688/f1000research.7931.1"), + description="FreeSASA: An open source C library for SASA calculations", + path="MDAnalysis.analysis.sasa", + cite_module=True, +) +del Doi + + +class SASA(AnalysisBase): + """ + Calculate Solvent-Accessible Surface Area for atoms in selection using the + Shrake-Rupley algorithm. + + Parameters + ---------- + atomgroup : :class:`AtomGroup` + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are + not accepted. + n_dots : int + Resolution of the surface of each atom. A higher number of points results + in more precise measurements, but slows down the calculation. Defaults to 256. + probe_radius : float + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly + the radius of a water molecule. + radii_dict : dict + User-provided dictionary of atomic radii to use in the calculation. Values + will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. + For unknown particles radii defaults to 2.0 :math:`Angstroms`. + + Attributes + ---------- + results.area : :class:`numpy.ndarray` + Atom-wise Solvent Exposed Surface Area in :math:`Angstrom^2`. + radii : :class:`numpy.ndarray` + Atomic radii (with probe) used in calculation. + radii_dict : :class:`collections.defaultdict` + Dictionary of atomic radii used for assignment. + probe_radius : float + Radius of the solvent probe used in calculation. + n_dots : int + Resolution used for calculation. + n_frames : int + Number of frames included in calculation. + + Examples + -------- + >>> R = SASA(u.atoms).run() + >>> R = SASA(u.atoms, n_dots=256).run() + >>> R = SASA(u.atoms, probe_radius=1.4).run() + >>> R = SASA(u.atoms, radii_dict={"H": 1.2}).run() + >>> R.results.area + [ 2.999 0.614 19.942 ... 2.830 10.882 40.180 ] + >>> R.results.area.sum() + 12146.27 + + + .. versionadded:: 2.8.0 + """ + + def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs): + """ + Parameters + ---------- + atomgroup : :class:`AtomGroup` + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are + not accepted. + n_dots : int + Resolution of the surface of each atom. A higher number of points results + in more precise measurements, but slows down the calculation. Defaults to 256. + probe_radius : float + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly + the radius of a water molecule. + radii_dict : dict + User-provided dictionary of atomic radii to use in the calculation. Values + will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. + For unknown particles radii defaults to 2.0 :math:`Angstroms`. + """ + if isinstance(ag, groups.UpdatingAtomGroup): + raise TypeError( + f"UpdatingAtomGroups are not valid for surface calculations") + + super(SASA, self).__init__(ag.universe.trajectory, **kwargs) + + # Check input parameters and if AtomGroup has 'elements' property + if probe_radius < 0.0: + raise ValueError( + f"Probe radius must be a positive number: {probe_radius} <= 0") + if n_dots < 1: + raise ValueError( + f"Number of sphere dots must be larger than 1: {n_dots}") + if not hasattr(ag, "elements"): + raise ValueError( + "Cannot assign atomic radii: Universe has no 'elements' property") + + # Locals + self.ag = ag + self.probe_radius = float(probe_radius) + self.n_dots = int(n_dots) + + # Import internal VDW radii table and update with user values + self.radii_dict = collections.defaultdict(lambda: 2.0) + self.radii_dict.update(vdwradii) + if radii_dict is not None: + self.radii_dict.update(radii_dict) + + # Assign atoms radii based on elements property + self.radii = np.vectorize(self.radii_dict.get)(self.ag.elements) + self.radii += self.probe_radius + self._max_radii = 2 * np.max(self.radii) + + # Issue a warning if any element is not in radii table. + if not set(self.ag.elements).issubset(self.radii_dict.keys()): + logger.warning( + "Element could not be assigned a radius: Using default radius") + + # Pre-compute Fibonacci sphere + self._sphere = self._compute_sphere(self.n_dots) + + @staticmethod + def _compute_sphere(n_dots): + """Generate sphere with equidistant points (Fibonacci sphere)""" + dl = np.pi * (3 - np.sqrt(5)) + dz = 2.0 / n_dots + longitude = 0 + z = 1 - dz / 2 + xyz = np.zeros((n_dots, 3), dtype=np.float32) + for i in range(n_dots): + r = np.sqrt(1 - z * z) + xyz[i, 0] = np.cos(longitude) * r + xyz[i, 1] = np.sin(longitude) * r + xyz[i, 2] = z + z -= dz + longitude += dl + return xyz + + def _prepare(self): + self.results.area = np.zeros(self.ag.n_atoms) + + def _single_frame(self): + # Find atom's neighbors using KDTree + kdt = scipy.spatial.KDTree(self.ag.positions, 10) + pt_available = set(range(self.n_dots)) + + result = np.zeros(self.ag.n_atoms) + for i in range(self.ag.n_atoms): + # Scale sphere and move it to the i-th atom position + sphere = self._sphere.copy() * self.radii[i] + sphere += self.ag.positions[i] + available = pt_available.copy() + kdt_sphere = scipy.spatial.KDTree(sphere, 10) + + # Iterate over neighbors of atom i + for j in kdt.query_ball_point(self.ag.positions[i], self._max_radii, workers=-1): + if j == i: + continue + if self.radii[j] < (self.radii[i] + self.radii[j]): + available -= { + n for n in kdt_sphere.query_ball_point( + self.ag.positions[j], + self.radii[j] + ) + } + result[i] = len(available) + + # Convert accessible point count to surface area in A^2 + self.results.area += 4 * np.pi * self.radii ** 2 * result / self.n_dots + + def _conclude(self): + # Average for number of trajectory frames + if self.n_frames != 0: + self.results.area /= self.n_frames + + +class RSASA(AnalysisBase): + """ + Calculate Relative Solvent-Accessible Surface Area for residues in selection + using the Shrake-Rupley algorithm. + + Parameters + ---------- + atomgroup : :class:`AtomGroup` + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are + not accepted. + subsele : str + Calculate surface only for sub-selection within the atomgroup e.g. + side-chain atoms. Defaults to `None`. + n_dots : int + Resolution of the surface of each atom. A higher number of points results + in more precise measurements, but slows down the calculation. Defaults to 256. + probe_radius : float + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly + the radius of a water molecule. + radii_dict : dict + User-provided dictionary of atomic radii to use in the calculation. Values + will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. + For unknown particles radii defaults to 2.0 :math:`Angstroms`. + + Attributes + ---------- + results.relative_area : :class:`numpy.ndarray` + Residue-wise Relative Solvent Exposed Surface Area. Ranges from 0 to 1. + radii : :class:`numpy.ndarray` + Atomic radii (with probe) used in calculation. + radii_dict : :class:`collections.defaultdict` + Dictionary of atomic radii used for assignment. + probe_radius : float + Radius of the solvent probe used in calculation. + n_dots : int + Resolution used for calculation. + n_frames : int + Number of frames included in calculation. + + Examples + -------- + >>> R = RSASA(u.atoms).run() + >>> R = RSASA(u.atoms, n_dots=256).run() + >>> R = RSASA(u.atoms, probe_radius=1.4).run() + >>> R = RSASA(u.atoms, radii_dict={"H": 1.2}).run() + >>> R = RSASA(u.atoms, subsele="not backbone").run() + >>> R.results.relative_area + [ 0.215 0.232 0.002 0.000 ... 0.321 0.044 0.605 ] + + + .. versionadded:: 2.8.0 + """ + + def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs): + """ + Parameters + ---------- + atomgroup : :class:`AtomGroup` + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are + not accepted. + subsele : str + Calculate surface only for sub-selection within the atomgroup e.g. + side-chain atoms. Defaults to `None`. + n_dots : int + Resolution of the surface of each atom. A higher number of points results + in more precise measurements, but slows down the calculation. Defaults to 256. + probe_radius : float + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly + the radius of a water molecule. + radii_dict : dict + User-provided dictionary of atomic radii to use in the calculation. Values + will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. + For unknown particles radii defaults to 2.0 :math:`Angstroms`. + """ + if isinstance(ag, groups.UpdatingAtomGroup): + raise TypeError( + f"UpdatingAtomGroups are not valid for surface calculations") + + super(RSASA, self).__init__(ag.universe.trajectory, **kwargs) + + # Check input parameters and if AtomGroup has 'elements' and 'bonds' property + if probe_radius < 0.0: + raise ValueError( + f"Probe radius must be a positive number: {probe_radius} <= 0") + if n_dots < 1: + raise ValueError( + f"Number of sphere dots must be larger than 1: {n_dots}") + if not hasattr(ag, "elements"): + raise ValueError( + "Cannot assign atomic radii: Universe has no 'elements' property") + if not hasattr(ag, "bonds"): + raise ValueError( + "Universe has no 'bonds' property") + + # Locals + self.ag = ag + self._subsele = subsele if subsele else "all" + self.probe_radius = float(probe_radius) + self.n_dots = int(n_dots) + + # Import MDAnalysis VDW radii table and update with user values + self.radii_dict = collections.defaultdict(lambda: 2.0) + self.radii_dict.update(vdwradii) + if radii_dict is not None: + self.radii_dict.update(radii_dict) + + # Assign atoms radii (for user to see) and issue a warning if any element is not in radii table + self.radii = np.vectorize(self.radii_dict.get)(self.ag.elements) + self.radii += self.probe_radius + if not set(self.ag.elements).issubset(self.radii_dict.keys()): + logger.warning( + f"Element could not be assigned a radius: Using default radius") + + # Pre-compute Fibonacci sphere + self._sphere = self._compute_sphere(self.n_dots) + + @staticmethod + def _compute_sphere(n_dots): + """Generate sphere with equidistant points (Fibonacci sphere)""" + dl = np.pi * (3 - np.sqrt(5)) + dz = 2.0 / n_dots + longitude = 0 + z = 1 - dz / 2 + xyz = np.zeros((n_dots, 3), dtype=np.float32) + for i in range(n_dots): + r = np.sqrt(1 - z * z) + xyz[i, 0] = np.cos(longitude) * r + xyz[i, 1] = np.sin(longitude) * r + xyz[i, 2] = z + z -= dz + longitude += dl + return xyz + + def _get_sasa(self, ag): + """Calculate SASA for given AtomGroup""" + # Get radii for AtomGroup + radii = np.vectorize(self.radii_dict.get)(ag.elements) + radii += self.probe_radius + max_radii = 2 * np.max(radii) + + # Find atom's neighbors using KDTree + kdt = scipy.spatial.KDTree(ag.positions, 10) + pt_available = set(range(self.n_dots)) + + result = np.zeros(ag.n_atoms) + for i in range(ag.n_atoms): + # Scale sphere and move it to the i-th atom position + sphere = self._sphere.copy() * radii[i] + sphere += ag.positions[i] + available = pt_available.copy() + kdt_sphere = scipy.spatial.KDTree(sphere, 10) + + # Iterate over neighbors of atom i + for j in kdt.query_ball_point(ag.positions[i], max_radii, workers=-1): + if j == i: + continue + if radii[j] < (radii[i] + radii[j]): + available -= { + n for n in kdt_sphere.query_ball_point( + ag.positions[j], + radii[j] + ) + } + result[i] = len(available) + + # Convert accessible point count to surface area in A^2 + return 4 * np.pi * radii ** 2 * result / self.n_dots + + def _prepare(self): + self.results.relative_area = np.zeros(self.ag.n_residues) + + def _single_frame(self): + # Calculate SASA for (sub)selection and accumulate by residues + sub = self.ag.select_atoms(self._subsele) + area = self._get_sasa(sub) + result = collections.defaultdict(float) + for i, atom in enumerate(sub.atoms): + result[atom.resid] += area[i] + + # Calculate SASA for each isolated tripeptide + for resid in self.ag.residues.resids: + tripep = self.ag.select_atoms( + f"(byres (bonded resid {resid})) and ({self._subsele})") + area = self._get_sasa(tripep) + exposed_area = sum( + [a for a, id in zip(area, tripep.resids) if id == resid]) + if exposed_area == 0.0: + continue + result[resid] /= exposed_area + + # Update the result and account for residues that have empty selections + self.results.relative_area += np.array( + [result[id] for id in self.ag.residues.resids]) + + def _conclude(self): + # Average for number of trajectory frames + if self.n_frames != 0: + self.results.relative_area /= self.n_frames From ee726b53a75d203010f68f90302d5a4246c49df1 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:51:59 +0100 Subject: [PATCH 05/18] Renamed functions --- package/MDAnalysis/analysis/sasa.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index 145a6bb0bde..393154b6f77 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -300,10 +300,10 @@ def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs) "Element could not be assigned a radius: Using default radius") # Pre-compute Fibonacci sphere - self._sphere = self._compute_sphere(self.n_dots) + self._sphere = self._fib_sphere(self.n_dots) @staticmethod - def _compute_sphere(n_dots): + def _fib_sphere(n_dots): """Generate sphere with equidistant points (Fibonacci sphere)""" dl = np.pi * (3 - np.sqrt(5)) dz = 2.0 / n_dots @@ -471,10 +471,10 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N f"Element could not be assigned a radius: Using default radius") # Pre-compute Fibonacci sphere - self._sphere = self._compute_sphere(self.n_dots) + self._sphere = self._fib_sphere(self.n_dots) @staticmethod - def _compute_sphere(n_dots): + def _fib_sphere(n_dots): """Generate sphere with equidistant points (Fibonacci sphere)""" dl = np.pi * (3 - np.sqrt(5)) dz = 2.0 / n_dots From 009523124c03b29e82f9be6ee6bef64daef5bc70 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:52:14 +0100 Subject: [PATCH 06/18] Added tests --- .../MDAnalysisTests/analysis/test_sasa.py | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 testsuite/MDAnalysisTests/analysis/test_sasa.py diff --git a/testsuite/MDAnalysisTests/analysis/test_sasa.py b/testsuite/MDAnalysisTests/analysis/test_sasa.py new file mode 100644 index 00000000000..8181286ac37 --- /dev/null +++ b/testsuite/MDAnalysisTests/analysis/test_sasa.py @@ -0,0 +1,149 @@ +# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*- +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 fileencoding=utf-8 +# +# MDAnalysis --- https://www.mdanalysis.org +# Copyright (c) 2006-2024 The MDAnalysis Development Team and contributors +# (see the file AUTHORS for the full list of names) +# +# Released under the GNU Public Licence, v2 or any higher version +# +# Please cite your use of MDAnalysis in published work: +# +# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, +# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. +# MDAnalysis: A Python package for the rapid analysis of molecular dynamics +# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th +# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. +# doi: 10.25080/majora-629e541a-00e +# +# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. +# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. +# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 +# +import pytest + +import MDAnalysis +from MDAnalysis.analysis.sasa import SASA, RSASA +from MDAnalysis.transformations import unwrap +from MDAnalysisTests.datafiles import TPR, XTC, GRO + +import numpy as np +from numpy.testing import assert_almost_equal + + +@pytest.fixture +def u(): + """Returns AdK protein AtomGroup""" + u = MDAnalysis.Universe(TPR, GRO) + u.trajectory.add_transformations(unwrap(u.atoms)) + return u + + +@pytest.fixture +def protein(u): + """Returns AdK protein AtomGroup""" + return u.select_atoms("protein") + + +@pytest.fixture +def residue(u): + """Returns AdK 1st residue AtomGroup""" + return u.select_atoms("resid 1") + + +@pytest.fixture +def co(): + """Return Carbon Monoxide (CO) AtomGroup""" + u = MDAnalysis.Universe.empty(2, trajectory=True) + u.add_TopologyAttr("elements", ["O", "C"]) + u.atoms.positions = [[0.5285, 0., 0.], [-0.5285, 0., 0.]] + return u.atoms + + +@pytest.fixture +def traj(): + """Returns AdK protein trajectory AtomGroup""" + u = MDAnalysis.Universe(TPR, XTC) + u.trajectory.add_transformations(unwrap(u.atoms)) + return u.select_atoms("protein") + + +@pytest.fixture +def radii_dict(): + """Returns custom radii dictionary""" + # This is to ensure same result if the built-in vdw table ever updates + return {"H": 1.1, "C": 1.7, "N": 1.55, "O": 1.52} + + +@pytest.fixture +def analytical_co(co, radii_dict): + """Analytical solution for two particle overlap""" + r1 = radii_dict[co.atoms[0].element] + r2 = radii_dict[co.atoms[1].element] + d = np.linalg.norm(co.atoms[0].position - co.atoms[1].position) + h1 = 0.5 * (r2 - r1 + d) * (r2 + r1 - d) / d + h2 = 0.5 * (r1 - r2 + d) * (r1 + r2 - d) / d + a1 = (4 * np.pi * r1 ** 2) - (2 * np.pi * r1 * h1) + a2 = (4 * np.pi * r2 ** 2) - (2 * np.pi * r2 * h2) + return [a1, a2] + + +class TestSASA(object): + + def test_sasa_analytical(self, co, analytical_co, radii_dict): + R = SASA(co, n_dots=1_024, probe_radius=0, radii_dict=radii_dict).run() + assert_almost_equal(R.results.area, analytical_co, decimal=1) + + def test_sasa_residue(self, residue, radii_dict): + R = SASA(residue, radii_dict=radii_dict).run() + + @pytest.mark.parametrize('n_dots', [1, 1000]) + def test_sasa_dots(self, residue, n_dots): + R = SASA(residue, n_dots=n_dots).run() + + @pytest.mark.parametrize('probe_radius', [0., 2.]) + def test_sasa_probe_radius(self, residue, probe_radius): + R = SASA(residue, probe_radius=probe_radius).run() + + def test_sasa_single_frame(self, protein, radii_dict): + R = SASA(protein, radii_dict=radii_dict).run() + + def test_sasa(self, traj, radii_dict): + # 2 frames are stressful enough + R = SASA(traj, radii_dict=radii_dict).run(step=5) + + +class TestSASA_r(object): + + def test_rsasa_analytical(self, protein, co, analytical_co, radii_dict): + # HACK: Initiate class but call private method on CO data instead + RS = RSASA(protein, n_dots=1_024, probe_radius=0, radii_dict=radii_dict) + area = RS._get_sasa(co) + assert_almost_equal(area, analytical_co, decimal=1) + + def test_rsasa_residue(self, residue, radii_dict): + RS = RSASA(residue.atoms, radii_dict=radii_dict).run() + assert RS.results.relative_area == 1.0 + + @pytest.mark.parametrize('n_dots', [1, 1000]) + def test_rsasa_dots(self, residue, n_dots): + RS = RSASA(residue, n_dots=n_dots).run() + assert all(0 <= a <= 1 for a in RS.results.relative_area) + + @pytest.mark.parametrize('probe_radius', [0., 2.]) + def test_rsasa_probe_radius(self, residue, probe_radius): + RS = RSASA(residue, probe_radius=probe_radius).run() + assert all(0 <= a <= 1 for a in RS.results.relative_area) + + def test_rsasa_subsele(self, protein): + RS = RSASA(protein, subsele="not backbone").run() + assert all(0 <= a <= 1 for a in RS.results.relative_area) + + def test_rsasa_single_frame(self, protein, radii_dict): + RS = RSASA(protein, radii_dict=radii_dict).run() + assert all(0 <= a <= 1 for a in RS.results.relative_area) + + def test_rsasa(self, traj, radii_dict): + # 2 frames are stressful enough + RS = RSASA(traj, radii_dict=radii_dict).run(step=5) + assert all(0 <= a <= 1 for a in RS.results.relative_area) From ffc59567bb80fae152d42c20314b903f58fe687b Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 20:53:51 +0100 Subject: [PATCH 07/18] Added relevant references --- package/doc/sphinx/source/references.bib | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/package/doc/sphinx/source/references.bib b/package/doc/sphinx/source/references.bib index 68c95e9133b..a6eee5efba1 100644 --- a/package/doc/sphinx/source/references.bib +++ b/package/doc/sphinx/source/references.bib @@ -770,3 +770,30 @@ @article{Kulke2022 pages = {6161--6171}, doi = {10.1021/acs.jctc.2c00327} } + +@article{Shrake1973, + author = {A. Shrake and J.A. Rupley}, + title = {Environment and exposure to solvent of protein atoms. Lysozyme and insulin}, + journal = {Journal of Molecular Biology}, + volume = {79}, + number = {2}, + pages = {351-371}, + year = {1973}, + issn = {0022-2836}, + doi = {https://doi.org/10.1016/0022-2836(73)90011-9}, + url = {https://www.sciencedirect.com/science/article/pii/0022283673900119}, +} + +@article{Tien2013, + author = {Tien, Matthew Z. AND Meyer, Austin G. AND Sydykova, Dariya K. AND Spielman, Stephanie J. AND Wilke, Claus O.}, + journal = {PLOS ONE}, + publisher = {Public Library of Science}, + title = {Maximum Allowed Solvent Accessibilites of Residues in Proteins}, + year = {2013}, + month = {11}, + number = {11}, + volume = {8}, + pages = {1-8}, + url = {https://doi.org/10.1371/journal.pone.0080635}, + doi = {10.1371/journal.pone.0080635}, +} From 050230dc284342a797d22ba64df55277869e1c85 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 21:27:26 +0100 Subject: [PATCH 08/18] Minor fixes --- package/MDAnalysis/analysis/sasa.py | 63 ++++++++++++++--------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index 393154b6f77..fb01387afa7 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -85,7 +85,7 @@ -------- For example, we can find how the average area of adenylate kinase (AdK). The -trajectory is included within the test data files: +structure is included within the test data files: .. code-block:: python @@ -199,7 +199,7 @@ class SASA(AnalysisBase): Parameters ---------- - atomgroup : :class:`AtomGroup` + ag : :class:`AtomGroup` An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are not accepted. n_dots : int @@ -216,7 +216,7 @@ class SASA(AnalysisBase): Attributes ---------- results.area : :class:`numpy.ndarray` - Atom-wise Solvent Exposed Surface Area in :math:`Angstrom^2`. + Atom-wise Solvent-Accessible Surface Area in :math:`Angstrom^2`. radii : :class:`numpy.ndarray` Atomic radii (with probe) used in calculation. radii_dict : :class:`collections.defaultdict` @@ -247,7 +247,7 @@ def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs) """ Parameters ---------- - atomgroup : :class:`AtomGroup` + ag : :class:`AtomGroup` An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are not accepted. n_dots : int @@ -300,10 +300,10 @@ def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs) "Element could not be assigned a radius: Using default radius") # Pre-compute Fibonacci sphere - self._sphere = self._fib_sphere(self.n_dots) + self._sphere = self._get_sphere(self.n_dots) @staticmethod - def _fib_sphere(n_dots): + def _get_sphere(n_dots): """Generate sphere with equidistant points (Fibonacci sphere)""" dl = np.pi * (3 - np.sqrt(5)) dz = 2.0 / n_dots @@ -325,14 +325,14 @@ def _prepare(self): def _single_frame(self): # Find atom's neighbors using KDTree kdt = scipy.spatial.KDTree(self.ag.positions, 10) - pt_available = set(range(self.n_dots)) + dots_available = set(range(self.n_dots)) - result = np.zeros(self.ag.n_atoms) + dots = np.zeros(self.ag.n_atoms) for i in range(self.ag.n_atoms): # Scale sphere and move it to the i-th atom position sphere = self._sphere.copy() * self.radii[i] sphere += self.ag.positions[i] - available = pt_available.copy() + available = dots_available.copy() kdt_sphere = scipy.spatial.KDTree(sphere, 10) # Iterate over neighbors of atom i @@ -346,10 +346,10 @@ def _single_frame(self): self.radii[j] ) } - result[i] = len(available) + dots[i] = len(available) - # Convert accessible point count to surface area in A^2 - self.results.area += 4 * np.pi * self.radii ** 2 * result / self.n_dots + # Convert accessible points to surface area in A^2 + self.results.area += 4 * np.pi * self.radii ** 2 * dots / self.n_dots def _conclude(self): # Average for number of trajectory frames @@ -364,7 +364,7 @@ class RSASA(AnalysisBase): Parameters ---------- - atomgroup : :class:`AtomGroup` + ag : :class:`AtomGroup` An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are not accepted. subsele : str @@ -384,7 +384,7 @@ class RSASA(AnalysisBase): Attributes ---------- results.relative_area : :class:`numpy.ndarray` - Residue-wise Relative Solvent Exposed Surface Area. Ranges from 0 to 1. + Residue-wise Relative Solvent-Accessible Surface Area. Ranges from 0 to 1. radii : :class:`numpy.ndarray` Atomic radii (with probe) used in calculation. radii_dict : :class:`collections.defaultdict` @@ -414,7 +414,7 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N """ Parameters ---------- - atomgroup : :class:`AtomGroup` + ag : :class:`AtomGroup` An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are not accepted. subsele : str @@ -471,10 +471,10 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N f"Element could not be assigned a radius: Using default radius") # Pre-compute Fibonacci sphere - self._sphere = self._fib_sphere(self.n_dots) + self._sphere = self._get_sphere(self.n_dots) @staticmethod - def _fib_sphere(n_dots): + def _get_sphere(n_dots): """Generate sphere with equidistant points (Fibonacci sphere)""" dl = np.pi * (3 - np.sqrt(5)) dz = 2.0 / n_dots @@ -492,21 +492,21 @@ def _fib_sphere(n_dots): def _get_sasa(self, ag): """Calculate SASA for given AtomGroup""" - # Get radii for AtomGroup + # Get radii for current AtomGroup radii = np.vectorize(self.radii_dict.get)(ag.elements) radii += self.probe_radius max_radii = 2 * np.max(radii) # Find atom's neighbors using KDTree kdt = scipy.spatial.KDTree(ag.positions, 10) - pt_available = set(range(self.n_dots)) + dots_available = set(range(self.n_dots)) - result = np.zeros(ag.n_atoms) + dots = np.zeros(ag.n_atoms) for i in range(ag.n_atoms): # Scale sphere and move it to the i-th atom position sphere = self._sphere.copy() * radii[i] sphere += ag.positions[i] - available = pt_available.copy() + available = dots_available.copy() kdt_sphere = scipy.spatial.KDTree(sphere, 10) # Iterate over neighbors of atom i @@ -520,34 +520,33 @@ def _get_sasa(self, ag): radii[j] ) } - result[i] = len(available) + dots[i] = len(available) - # Convert accessible point count to surface area in A^2 - return 4 * np.pi * radii ** 2 * result / self.n_dots + # Convert accessible points to surface area in A^2 + return 4 * np.pi * radii ** 2 * dots / self.n_dots def _prepare(self): self.results.relative_area = np.zeros(self.ag.n_residues) def _single_frame(self): - # Calculate SASA for (sub)selection and accumulate by residues + # Calculate surface of (sub)selection and accumulate by residues sub = self.ag.select_atoms(self._subsele) area = self._get_sasa(sub) result = collections.defaultdict(float) for i, atom in enumerate(sub.atoms): result[atom.resid] += area[i] - # Calculate SASA for each isolated tripeptide + # Calculate surface of each isolated "tripeptide" for resid in self.ag.residues.resids: tripep = self.ag.select_atoms( f"(byres (bonded resid {resid})) and ({self._subsele})") - area = self._get_sasa(tripep) + tripep_area = self._get_sasa(tripep) exposed_area = sum( - [a for a, id in zip(area, tripep.resids) if id == resid]) - if exposed_area == 0.0: - continue - result[resid] /= exposed_area + [a for a, id in zip(tripep_area, tripep.resids) if id == resid]) + if exposed_area != 0.0: + result[resid] /= exposed_area - # Update the result and account for residues that have empty selections + # Update the result and account for residues that might have empty selection self.results.relative_area += np.array( [result[id] for id in self.ag.residues.resids]) From ece1a70a2f90a040f735751190002ab0f9936ca4 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 21:54:31 +0100 Subject: [PATCH 09/18] Fixed line length issue --- package/MDAnalysis/analysis/sasa.py | 125 ++++++++++++++++------------ 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index fb01387afa7..721405316e1 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -179,7 +179,7 @@ ) due.cite( Doi("10.1371/journal.pone.0080635"), - description="Maximum Allowed Solvent Accessibilites of Residues in Proteins", + description="Max Allowed Solvent Accessibility of Residues in Proteins", path="MDAnalysis.analysis.sasa", cite_module=True, ) @@ -200,18 +200,20 @@ class SASA(AnalysisBase): Parameters ---------- ag : :class:`AtomGroup` - An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are - not accepted. + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances + are not accepted. n_dots : int - Resolution of the surface of each atom. A higher number of points results - in more precise measurements, but slows down the calculation. Defaults to 256. + Resolution of the surface of each atom. A higher number of points + results in more precise measurements, but slows down the calculation. + Defaults to 256. probe_radius : float - Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly - the radius of a water molecule. + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, + roughly the radius of a water molecule. radii_dict : dict - User-provided dictionary of atomic radii to use in the calculation. Values - will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. - For unknown particles radii defaults to 2.0 :math:`Angstroms`. + User-provided dictionary of atomic radii to use in the calculation. + Values will replace or complement those in + :data:`MDAnalysis.topology.tables.vdwradii`.For unknown particles radii + defaults to 2.0 :math:`Angstroms`. Attributes ---------- @@ -239,27 +241,30 @@ class SASA(AnalysisBase): >>> R.results.area.sum() 12146.27 - + .. versionadded:: 2.8.0 """ - def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs): + def __init__(self, ag, probe_radius=1.40, n_dots=256, + radii_dict=None, **kwargs): """ Parameters ---------- ag : :class:`AtomGroup` - An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are - not accepted. + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` + instances are not accepted. n_dots : int - Resolution of the surface of each atom. A higher number of points results - in more precise measurements, but slows down the calculation. Defaults to 256. + Resolution of the surface of each atom. A higher number of points + results in more precise measurements, but slows down the + calculation. Defaults to 256. probe_radius : float - Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly - the radius of a water molecule. + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, + roughly the radius of a water molecule. radii_dict : dict - User-provided dictionary of atomic radii to use in the calculation. Values - will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. - For unknown particles radii defaults to 2.0 :math:`Angstroms`. + User-provided dictionary of atomic radii to use in the calculation. + Values will replace or complement those in + :data:`MDAnalysis.topology.tables.vdwradii`. For unknown particles + radii defaults to 2.0 :math:`Angstroms`. """ if isinstance(ag, groups.UpdatingAtomGroup): raise TypeError( @@ -276,7 +281,8 @@ def __init__(self, ag, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs) f"Number of sphere dots must be larger than 1: {n_dots}") if not hasattr(ag, "elements"): raise ValueError( - "Cannot assign atomic radii: Universe has no 'elements' property") + "Cannot assign atomic radii:" + "Universe has no 'elements' property") # Locals self.ag = ag @@ -336,7 +342,8 @@ def _single_frame(self): kdt_sphere = scipy.spatial.KDTree(sphere, 10) # Iterate over neighbors of atom i - for j in kdt.query_ball_point(self.ag.positions[i], self._max_radii, workers=-1): + for j in kdt.query_ball_point(self.ag.positions[i], + self._max_radii, workers=-1): if j == i: continue if self.radii[j] < (self.radii[i] + self.radii[j]): @@ -359,32 +366,35 @@ def _conclude(self): class RSASA(AnalysisBase): """ - Calculate Relative Solvent-Accessible Surface Area for residues in selection - using the Shrake-Rupley algorithm. + Calculate Relative Solvent-Accessible Surface Area for residues in + selection using the Shrake-Rupley algorithm. Parameters ---------- ag : :class:`AtomGroup` - An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are - not accepted. + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances + are not accepted. subsele : str Calculate surface only for sub-selection within the atomgroup e.g. side-chain atoms. Defaults to `None`. n_dots : int - Resolution of the surface of each atom. A higher number of points results - in more precise measurements, but slows down the calculation. Defaults to 256. + Resolution of the surface of each atom. A higher number of points + results in more precise measurements, but slows down the calculation. + Defaults to 256. probe_radius : float - Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly - the radius of a water molecule. + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, + roughly the radius of a water molecule. radii_dict : dict - User-provided dictionary of atomic radii to use in the calculation. Values - will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. - For unknown particles radii defaults to 2.0 :math:`Angstroms`. + User-provided dictionary of atomic radii to use in the calculation. + Values will replace or complement those in + :data:`MDAnalysis.topology.tables.vdwradii`. For unknown particles + radii defaults to 2.0 :math:`Angstroms`. Attributes ---------- results.relative_area : :class:`numpy.ndarray` - Residue-wise Relative Solvent-Accessible Surface Area. Ranges from 0 to 1. + Residue-wise Relative Solvent-Accessible Surface Area. + Ranges from 0 to 1. radii : :class:`numpy.ndarray` Atomic radii (with probe) used in calculation. radii_dict : :class:`collections.defaultdict` @@ -406,30 +416,33 @@ class RSASA(AnalysisBase): >>> R.results.relative_area [ 0.215 0.232 0.002 0.000 ... 0.321 0.044 0.605 ] - + .. versionadded:: 2.8.0 """ - def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=None, **kwargs): + def __init__(self, ag, subsele=None, probe_radius=1.40, + n_dots=256, radii_dict=None, **kwargs): """ Parameters ---------- ag : :class:`AtomGroup` - An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` instances are - not accepted. + An MDAnalysis :class:`AtomGroup`. :class:`UpdatingAtomGroup` + instances are not accepted. subsele : str Calculate surface only for sub-selection within the atomgroup e.g. side-chain atoms. Defaults to `None`. n_dots : int - Resolution of the surface of each atom. A higher number of points results - in more precise measurements, but slows down the calculation. Defaults to 256. + Resolution of the surface of each atom. A higher number of points + results in more precise measurements, but slows down the + calculation. Defaults to 256. probe_radius : float - Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, roughly - the radius of a water molecule. + Radius of the solvent probe in :math:`Angstroms`. Defaults to 1.40, + roughly the radius of a water molecule. radii_dict : dict - User-provided dictionary of atomic radii to use in the calculation. Values - will replace or complement those in :data:`MDAnalysis.topology.tables.vdwradii`. - For unknown particles radii defaults to 2.0 :math:`Angstroms`. + User-provided dictionary of atomic radii to use in the calculation. + Values will replace or complement those in + :data:`MDAnalysis.topology.tables.vdwradii`. For unknown particles + radii defaults to 2.0 :math:`Angstroms`. """ if isinstance(ag, groups.UpdatingAtomGroup): raise TypeError( @@ -437,7 +450,8 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N super(RSASA, self).__init__(ag.universe.trajectory, **kwargs) - # Check input parameters and if AtomGroup has 'elements' and 'bonds' property + # Check input parameters and if AtomGroup has + # 'elements' and 'bonds' property if probe_radius < 0.0: raise ValueError( f"Probe radius must be a positive number: {probe_radius} <= 0") @@ -445,8 +459,8 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N raise ValueError( f"Number of sphere dots must be larger than 1: {n_dots}") if not hasattr(ag, "elements"): - raise ValueError( - "Cannot assign atomic radii: Universe has no 'elements' property") + raise ValueError("Cannot assign atomic radii:" + "Universe has no 'elements' property") if not hasattr(ag, "bonds"): raise ValueError( "Universe has no 'bonds' property") @@ -463,12 +477,13 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, n_dots=256, radii_dict=N if radii_dict is not None: self.radii_dict.update(radii_dict) - # Assign atoms radii (for user to see) and issue a warning if any element is not in radii table + # Assign atoms radii (for user to see) and issue a warning + # if any element is not in radii table self.radii = np.vectorize(self.radii_dict.get)(self.ag.elements) self.radii += self.probe_radius if not set(self.ag.elements).issubset(self.radii_dict.keys()): logger.warning( - f"Element could not be assigned a radius: Using default radius") + "Element could not be assigned a radius: Using default radius") # Pre-compute Fibonacci sphere self._sphere = self._get_sphere(self.n_dots) @@ -510,7 +525,8 @@ def _get_sasa(self, ag): kdt_sphere = scipy.spatial.KDTree(sphere, 10) # Iterate over neighbors of atom i - for j in kdt.query_ball_point(ag.positions[i], max_radii, workers=-1): + for j in kdt.query_ball_point(ag.positions[i], + max_radii, workers=-1): if j == i: continue if radii[j] < (radii[i] + radii[j]): @@ -542,11 +558,12 @@ def _single_frame(self): f"(byres (bonded resid {resid})) and ({self._subsele})") tripep_area = self._get_sasa(tripep) exposed_area = sum( - [a for a, id in zip(tripep_area, tripep.resids) if id == resid]) + [a for a, id in zip(tripep_area, tripep.resids)if id == resid]) if exposed_area != 0.0: result[resid] /= exposed_area - # Update the result and account for residues that might have empty selection + # Update the result and account for residues that + # might have empty selection self.results.relative_area += np.array( [result[id] for id in self.ag.residues.resids]) From 3052cd8eef283ff4479ead9fe54c9d3386b0dfb7 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 21:56:58 +0100 Subject: [PATCH 10/18] Fixed `pi` issue --- package/MDAnalysis/analysis/sasa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index 721405316e1..0f7569fc99c 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -20,7 +20,7 @@ # MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. # J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 # -"""\ +r"""\ Solvent-Accessible Surface Area --- :mod:`MDAnalysis.analysis.sasa` =================================================================== From 3b300c989d7be468043305ca284e78930d3a7b10 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 21:58:24 +0100 Subject: [PATCH 11/18] Fixed line length issue --- testsuite/MDAnalysisTests/analysis/test_sasa.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testsuite/MDAnalysisTests/analysis/test_sasa.py b/testsuite/MDAnalysisTests/analysis/test_sasa.py index 8181286ac37..b28124394e9 100644 --- a/testsuite/MDAnalysisTests/analysis/test_sasa.py +++ b/testsuite/MDAnalysisTests/analysis/test_sasa.py @@ -117,7 +117,8 @@ class TestSASA_r(object): def test_rsasa_analytical(self, protein, co, analytical_co, radii_dict): # HACK: Initiate class but call private method on CO data instead - RS = RSASA(protein, n_dots=1_024, probe_radius=0, radii_dict=radii_dict) + RS = RSASA(protein, n_dots=1_024, + probe_radius=0, radii_dict=radii_dict) area = RS._get_sasa(co) assert_almost_equal(area, analytical_co, decimal=1) From 81a7519373e5dcd36087d98f991f0ebf21f8438c Mon Sep 17 00:00:00 2001 From: JureCerar Date: Mon, 8 Jan 2024 22:16:27 +0100 Subject: [PATCH 12/18] Fixed type in docs --- package/MDAnalysis/analysis/sasa.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index 0f7569fc99c..c42952002d1 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -136,23 +136,24 @@ control which frames are used for calculations. Note that computation of SASA can be intensive for large systems or long trajectories. +References +---------- + +.. footbibliography:: + + Classes ------- .. autoclass:: SASA .. autoclass:: RSASA -References ----------- - -.. footbibliography:: - .. _`Solvent-Accessible Surface Area`: https://en.wikipedia.org/wiki/Accessible_surface_area .. _`Accessible Surface Area`: https://en.wikipedia.org/wiki/Accessible_surface_area -.. _`Relative Solvent-Accessible Surface Area`: +.. _`Relative Solvent-Exposed Surface Area`: https://en.wikipedia.org/wiki/Relative_accessible_surface_area .. _`Relative Solvent Accessibility`: https://en.wikipedia.org/wiki/Relative_accessible_surface_area From 9ff61704a858579b6bde339c59ea301368316249 Mon Sep 17 00:00:00 2001 From: JureCerar Date: Tue, 9 Jan 2024 00:45:21 +0100 Subject: [PATCH 13/18] Fixed bug with dictionary --- package/MDAnalysis/analysis/sasa.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index c42952002d1..485797035e3 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -222,7 +222,7 @@ class SASA(AnalysisBase): Atom-wise Solvent-Accessible Surface Area in :math:`Angstrom^2`. radii : :class:`numpy.ndarray` Atomic radii (with probe) used in calculation. - radii_dict : :class:`collections.defaultdict` + radii_dict : dict Dictionary of atomic radii used for assignment. probe_radius : float Radius of the solvent probe used in calculation. @@ -291,13 +291,14 @@ def __init__(self, ag, probe_radius=1.40, n_dots=256, self.n_dots = int(n_dots) # Import internal VDW radii table and update with user values - self.radii_dict = collections.defaultdict(lambda: 2.0) + self.radii_dict = dict() self.radii_dict.update(vdwradii) if radii_dict is not None: self.radii_dict.update(radii_dict) # Assign atoms radii based on elements property - self.radii = np.vectorize(self.radii_dict.get)(self.ag.elements) + self.radii = np.array( + [self.radii_dict.get(e, 2.0) for e in self.ag.elements]) self.radii += self.probe_radius self._max_radii = 2 * np.max(self.radii) @@ -398,7 +399,7 @@ class RSASA(AnalysisBase): Ranges from 0 to 1. radii : :class:`numpy.ndarray` Atomic radii (with probe) used in calculation. - radii_dict : :class:`collections.defaultdict` + radii_dict : dict Dictionary of atomic radii used for assignment. probe_radius : float Radius of the solvent probe used in calculation. @@ -473,14 +474,15 @@ def __init__(self, ag, subsele=None, probe_radius=1.40, self.n_dots = int(n_dots) # Import MDAnalysis VDW radii table and update with user values - self.radii_dict = collections.defaultdict(lambda: 2.0) + self.radii_dict = dict() self.radii_dict.update(vdwradii) if radii_dict is not None: self.radii_dict.update(radii_dict) # Assign atoms radii (for user to see) and issue a warning # if any element is not in radii table - self.radii = np.vectorize(self.radii_dict.get)(self.ag.elements) + self.radii = np.array( + [self.radii_dict.get(e, 2.0) for e in self.ag.elements]) self.radii += self.probe_radius if not set(self.ag.elements).issubset(self.radii_dict.keys()): logger.warning( From 86e8a67781687b641c933bf4d57710b0bb11957c Mon Sep 17 00:00:00 2001 From: JureCerar Date: Tue, 9 Jan 2024 00:46:03 +0100 Subject: [PATCH 14/18] Added tests for errors and warnings --- .../MDAnalysisTests/analysis/test_sasa.py | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/testsuite/MDAnalysisTests/analysis/test_sasa.py b/testsuite/MDAnalysisTests/analysis/test_sasa.py index b28124394e9..9e892039482 100644 --- a/testsuite/MDAnalysisTests/analysis/test_sasa.py +++ b/testsuite/MDAnalysisTests/analysis/test_sasa.py @@ -27,6 +27,7 @@ from MDAnalysis.transformations import unwrap from MDAnalysisTests.datafiles import TPR, XTC, GRO +import logging import numpy as np from numpy.testing import assert_almost_equal @@ -91,31 +92,68 @@ def analytical_co(co, radii_dict): class TestSASA(object): def test_sasa_analytical(self, co, analytical_co, radii_dict): + """Compare to analytical result""" R = SASA(co, n_dots=1_024, probe_radius=0, radii_dict=radii_dict).run() assert_almost_equal(R.results.area, analytical_co, decimal=1) def test_sasa_residue(self, residue, radii_dict): + """Test for a single residue""" R = SASA(residue, radii_dict=radii_dict).run() @pytest.mark.parametrize('n_dots', [1, 1000]) def test_sasa_dots(self, residue, n_dots): + """Test for different number of dots""" R = SASA(residue, n_dots=n_dots).run() @pytest.mark.parametrize('probe_radius', [0., 2.]) def test_sasa_probe_radius(self, residue, probe_radius): + """Test for different probe radius""" R = SASA(residue, probe_radius=probe_radius).run() def test_sasa_single_frame(self, protein, radii_dict): + """Test calculation on a single frame""" R = SASA(protein, radii_dict=radii_dict).run() def test_sasa(self, traj, radii_dict): + """Test calculation on a trajectory""" # 2 frames are stressful enough R = SASA(traj, radii_dict=radii_dict).run(step=5) + def test_sasa_updating_atom_group(self, protein): + """Error if UpdatingAtomGroup""" + updating = protein.select_atoms("prop x < 1", updating=True) + with pytest.raises(TypeError): + R = SASA(updating) + + def test_sasa_no_element_warning(self, residue, caplog): + """Check if warning is logged if unknown element""" + unknown = residue.copy() + unknown.atoms[0].element = "X" + R = SASA(unknown) + assert any( + record.levelno == logging.WARNING for record in caplog.records) + + def test_sasa_wrong_probe_radius(self, protein): + """Error if probe radius less than 0""" + with pytest.raises(ValueError): + R = SASA(protein, probe_radius=-1.0) + + def test_sasa_wrong_n_dots(self, protein): + """Error if number of dots less than 1""" + with pytest.raises(ValueError): + R = SASA(protein, n_dots=0) + + def test_sasa_no_elements_attribute(self, protein): + """Error if AtomGroup has no elements attribute""" + no_elements = protein.copy() + no_elements.universe.del_TopologyAttr("elements") + with pytest.raises(ValueError): + R = SASA(no_elements) class TestSASA_r(object): def test_rsasa_analytical(self, protein, co, analytical_co, radii_dict): + """Compare to analytical result""" # HACK: Initiate class but call private method on CO data instead RS = RSASA(protein, n_dots=1_024, probe_radius=0, radii_dict=radii_dict) @@ -123,28 +161,70 @@ def test_rsasa_analytical(self, protein, co, analytical_co, radii_dict): assert_almost_equal(area, analytical_co, decimal=1) def test_rsasa_residue(self, residue, radii_dict): + """Test for a single residue""" RS = RSASA(residue.atoms, radii_dict=radii_dict).run() assert RS.results.relative_area == 1.0 @pytest.mark.parametrize('n_dots', [1, 1000]) def test_rsasa_dots(self, residue, n_dots): + """Test for different number of dots""" RS = RSASA(residue, n_dots=n_dots).run() assert all(0 <= a <= 1 for a in RS.results.relative_area) @pytest.mark.parametrize('probe_radius', [0., 2.]) def test_rsasa_probe_radius(self, residue, probe_radius): + """Test for different probe radius""" RS = RSASA(residue, probe_radius=probe_radius).run() assert all(0 <= a <= 1 for a in RS.results.relative_area) def test_rsasa_subsele(self, protein): + """Test for a sub-selection""" RS = RSASA(protein, subsele="not backbone").run() assert all(0 <= a <= 1 for a in RS.results.relative_area) def test_rsasa_single_frame(self, protein, radii_dict): + """Test calculation on a single frame""" RS = RSASA(protein, radii_dict=radii_dict).run() assert all(0 <= a <= 1 for a in RS.results.relative_area) def test_rsasa(self, traj, radii_dict): + """Test calculation on a trajectory""" # 2 frames are stressful enough RS = RSASA(traj, radii_dict=radii_dict).run(step=5) assert all(0 <= a <= 1 for a in RS.results.relative_area) + + def test_rsasa_updating_atom_group(self, protein): + """Error if UpdatingAtomGroup""" + updating = protein.select_atoms("prop x < 1", updating=True) + with pytest.raises(TypeError): + RS = RSASA(updating).run() + + def test_rsasa_no_element_warning(self, residue, caplog): + """Check if warning is logged if unknown element""" + unknown = residue.copy() + unknown.atoms[0].element = "X" + RS = RSASA(unknown) + assert any( + record.levelno == logging.WARNING for record in caplog.records) + + def test_rsasa_wrong_probe_radius(self, protein): + """Error if probe radius less than 0""" + with pytest.raises(ValueError): + RS = RSASA(protein, probe_radius=-1.0).run() + + def test_rsasa_wrong_n_dots(self, protein): + """Error if number of dots less than 1""" + with pytest.raises(ValueError): + RS = RSASA(protein, n_dots=0).run() + + def test_rsasa_no_elements_attribute(self, protein): + """Error if AtomGroup has no elements attribute""" + no_elements = protein.copy() + no_elements.universe.del_TopologyAttr("elements") + with pytest.raises(ValueError): + RS = RSASA(no_elements).run() + + def test_rsasa_no_bonds_attribute(self, co): + """Error if AtomGroup has no bonds attribute""" + with pytest.raises(ValueError): + RS = RSASA(co).run() From ea102e12330a6bd7b07d661ac1e818bd2bb17c9b Mon Sep 17 00:00:00 2001 From: JureCerar Date: Wed, 17 Jan 2024 19:11:00 +0100 Subject: [PATCH 15/18] Fixed PEP8 spaces issue --- testsuite/MDAnalysisTests/analysis/test_sasa.py | 1 + 1 file changed, 1 insertion(+) diff --git a/testsuite/MDAnalysisTests/analysis/test_sasa.py b/testsuite/MDAnalysisTests/analysis/test_sasa.py index 9e892039482..78f2cfc4e31 100644 --- a/testsuite/MDAnalysisTests/analysis/test_sasa.py +++ b/testsuite/MDAnalysisTests/analysis/test_sasa.py @@ -150,6 +150,7 @@ def test_sasa_no_elements_attribute(self, protein): with pytest.raises(ValueError): R = SASA(no_elements) + class TestSASA_r(object): def test_rsasa_analytical(self, protein, co, analytical_co, radii_dict): From 0e5d5abee588d2c36375437c547477a2063b9ddf Mon Sep 17 00:00:00 2001 From: Jure Cerar Date: Wed, 10 Jul 2024 00:10:15 +0200 Subject: [PATCH 16/18] Sync? --- .github/actions/build-src/action.yaml | 4 +- .github/actions/setup-deps/action.yaml | 3 + .github/dependabot.yaml | 10 + .github/workflows/darkerbot.yaml | 6 +- .github/workflows/deploy.yaml | 27 +- .github/workflows/gh-ci-cron.yaml | 15 +- .github/workflows/gh-ci.yaml | 29 +- .github/workflows/labels.yaml | 2 +- .github/workflows/linters.yaml | 19 +- LICENSE | 27 + README.rst | 13 +- azure-pipelines.yml | 12 +- maintainer/conda/environment.yml | 6 +- package/AUTHORS | 12 +- package/CHANGELOG | 53 +- package/MDAnalysis/analysis/align.py | 138 +- package/MDAnalysis/analysis/base.py | 13 +- package/MDAnalysis/analysis/contacts.py | 10 + package/MDAnalysis/analysis/diffusionmap.py | 9 +- package/MDAnalysis/analysis/dssp/__init__.py | 7 + package/MDAnalysis/analysis/dssp/dssp.py | 427 ++++ .../MDAnalysis/analysis/dssp/pydssp_numpy.py | 269 +++ package/MDAnalysis/analysis/helix_analysis.py | 2 +- package/MDAnalysis/analysis/hole2/__init__.py | 286 +-- package/MDAnalysis/analysis/hole2/hole.py | 1418 ----------- .../MDAnalysis/analysis/hole2/templates.py | 139 -- package/MDAnalysis/analysis/hole2/utils.py | 559 ----- package/MDAnalysis/analysis/pca.py | 55 +- package/MDAnalysis/analysis/rdf.py | 2 +- package/MDAnalysis/converters/OpenMM.py | 4 +- package/MDAnalysis/converters/ParmEd.py | 20 +- package/MDAnalysis/converters/RDKit.py | 10 +- package/MDAnalysis/coordinates/H5MD.py | 1 - package/MDAnalysis/coordinates/LAMMPS.py | 131 +- package/MDAnalysis/coordinates/PDB.py | 4 +- package/MDAnalysis/coordinates/TNG.py | 12 +- package/MDAnalysis/coordinates/base.py | 7 +- package/MDAnalysis/coordinates/chain.py | 24 +- package/MDAnalysis/core/groups.py | 569 +++-- package/MDAnalysis/core/topologyattrs.py | 15 + .../MDAnalysis/lib/formats/cython_util.pyx | 6 +- .../lib/formats/include/__init__.py | 0 .../MDAnalysis/lib/formats/src/__init__.py | 0 package/MDAnalysis/lib/include/__init__.py | 0 .../MDAnalysis/lib/libmdanalysis/__init__.py | 0 package/MDAnalysis/lib/log.py | 5 +- package/MDAnalysis/lib/picklable_file_io.py | 62 +- .../lib/src/transformations/__init__.py | 0 package/MDAnalysis/lib/transformations.py | 13 +- package/MDAnalysis/lib/util.py | 40 + package/MDAnalysis/topology/PSFParser.py | 9 +- package/MDAnalysis/topology/TPRParser.py | 1 + package/MDAnalysis/topology/tpr/setting.py | 2 +- package/MDAnalysis/transformations/nojump.py | 5 +- .../visualization/streamlines_3D.py | 4 +- package/doc/sphinx/source/conf.py | 1 + .../documentation_pages/analysis/dssp.rst | 1 + .../documentation_pages/analysis/hole2.rst | 14 + .../documentation_pages/analysis_modules.rst | 1 + package/doc/sphinx/source/references.bib | 25 + package/pyproject.toml | 53 +- package/setup.py | 107 +- testsuite/LICENSE | 1206 ++++++++++ .../MDAnalysisTests/analysis/test_align.py | 171 +- .../MDAnalysisTests/analysis/test_base.py | 48 +- .../MDAnalysisTests/analysis/test_bat.py | 23 +- .../MDAnalysisTests/analysis/test_contacts.py | 33 +- .../analysis/test_diffusionmap.py | 17 + .../analysis/test_dihedrals.py | 20 +- .../MDAnalysisTests/analysis/test_dssp.py | 68 + .../MDAnalysisTests/analysis/test_encore.py | 58 +- .../MDAnalysisTests/analysis/test_hole2.py | 779 +----- .../MDAnalysisTests/analysis/test_pca.py | 6 + .../MDAnalysisTests/converters/test_openmm.py | 5 + .../MDAnalysisTests/converters/test_parmed.py | 10 +- .../MDAnalysisTests/converters/test_rdkit.py | 3 + .../converters/test_rdkit_parser.py | 11 +- testsuite/MDAnalysisTests/coordinates/base.py | 19 + .../MDAnalysisTests/coordinates/reference.py | 13 +- .../coordinates/test_chainreader.py | 19 + .../coordinates/test_lammps.py | 72 +- .../MDAnalysisTests/core/test_atomgroup.py | 16 + .../core/test_atomselections.py | 16 +- .../MDAnalysisTests/core/test_universe.py | 6 +- .../MDAnalysisTests/data/1a2c_ins_code.psf | 2086 +++++++++++++++++ .../MDAnalysisTests/data/Amber/__init__.py | 0 .../MDAnalysisTests/data/analysis/__init__.py | 0 .../MDAnalysisTests/data/capping/__init__.py | 0 .../MDAnalysisTests/data/contacts/__init__.py | 0 .../data/coordinates/__init__.py | 0 .../MDAnalysisTests/data/dlpoly/__init__.py | 0 .../MDAnalysisTests/data/dssp/1ahsA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1ahsA.pdb.gz | Bin 0 -> 16671 bytes .../MDAnalysisTests/data/dssp/1bvyF.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1bvyF.pdb.gz | Bin 0 -> 20294 bytes .../MDAnalysisTests/data/dssp/1dx5I.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1dx5I.pdb.gz | Bin 0 -> 15723 bytes .../MDAnalysisTests/data/dssp/1eteA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1eteA.pdb.gz | Bin 0 -> 19225 bytes .../MDAnalysisTests/data/dssp/1h4aX.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1h4aX.pdb.gz | Bin 0 -> 25282 bytes .../MDAnalysisTests/data/dssp/1i8nA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1i8nA.pdb.gz | Bin 0 -> 12685 bytes .../MDAnalysisTests/data/dssp/1lpbA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1lpbA.pdb.gz | Bin 0 -> 13756 bytes .../MDAnalysisTests/data/dssp/1mr1D.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1mr1D.pdb.gz | Bin 0 -> 13923 bytes .../data/dssp/1mr1D_failing.pdb.gz | Bin 0 -> 13905 bytes .../MDAnalysisTests/data/dssp/1or4A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1or4A.pdb.gz | Bin 0 -> 24503 bytes .../MDAnalysisTests/data/dssp/1pdoA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1pdoA.pdb.gz | Bin 0 -> 19105 bytes .../MDAnalysisTests/data/dssp/1v7mV.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1v7mV.pdb.gz | Bin 0 -> 19477 bytes .../MDAnalysisTests/data/dssp/1y1lA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/1y1lA.pdb.gz | Bin 0 -> 16962 bytes .../MDAnalysisTests/data/dssp/2a2lA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2a2lA.pdb.gz | Bin 0 -> 20799 bytes .../MDAnalysisTests/data/dssp/2cayA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2cayA.pdb.gz | Bin 0 -> 20782 bytes .../MDAnalysisTests/data/dssp/2cviA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2cviA.pdb.gz | Bin 0 -> 11914 bytes .../MDAnalysisTests/data/dssp/2fvvA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2fvvA.pdb.gz | Bin 0 -> 19453 bytes .../MDAnalysisTests/data/dssp/2gu3A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2gu3A.pdb.gz | Bin 0 -> 17627 bytes .../MDAnalysisTests/data/dssp/2i39A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2i39A.pdb.gz | Bin 0 -> 17171 bytes .../MDAnalysisTests/data/dssp/2j49A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2j49A.pdb.gz | Bin 0 -> 19735 bytes .../MDAnalysisTests/data/dssp/2qdlA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2qdlA.pdb.gz | Bin 0 -> 21195 bytes .../MDAnalysisTests/data/dssp/2va0A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2va0A.pdb.gz | Bin 0 -> 14274 bytes .../MDAnalysisTests/data/dssp/2xcjA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2xcjA.pdb.gz | Bin 0 -> 11882 bytes .../MDAnalysisTests/data/dssp/2xdgA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2xdgA.pdb.gz | Bin 0 -> 11679 bytes .../MDAnalysisTests/data/dssp/2xr6A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/2xr6A.pdb.gz | Bin 0 -> 18880 bytes .../MDAnalysisTests/data/dssp/3a4rA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3a4rA.pdb.gz | Bin 0 -> 20900 bytes .../MDAnalysisTests/data/dssp/3aqgA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3aqgA.pdb.gz | Bin 0 -> 18554 bytes .../MDAnalysisTests/data/dssp/3e8mA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3e8mA.pdb.gz | Bin 0 -> 45326 bytes .../MDAnalysisTests/data/dssp/3ejfA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3ejfA.pdb.gz | Bin 0 -> 22840 bytes .../MDAnalysisTests/data/dssp/3fhkA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3fhkA.pdb.gz | Bin 0 -> 19442 bytes .../MDAnalysisTests/data/dssp/3gfsA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3gfsA.pdb.gz | Bin 0 -> 22295 bytes .../MDAnalysisTests/data/dssp/3gknA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3gknA.pdb.gz | Bin 0 -> 21372 bytes .../MDAnalysisTests/data/dssp/3gwiA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3gwiA.pdb.gz | Bin 0 -> 23203 bytes .../MDAnalysisTests/data/dssp/3hklA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3hklA.pdb.gz | Bin 0 -> 19129 bytes .../MDAnalysisTests/data/dssp/3ieyB.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3ieyB.pdb.gz | Bin 0 -> 22911 bytes .../MDAnalysisTests/data/dssp/3ii2A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3ii2A.pdb.gz | Bin 0 -> 22526 bytes .../MDAnalysisTests/data/dssp/3k7pA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3k7pA.pdb.gz | Bin 0 -> 22820 bytes .../MDAnalysisTests/data/dssp/3l4rA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3l4rA.pdb.gz | Bin 0 -> 21305 bytes .../MDAnalysisTests/data/dssp/3lqcA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3lqcA.pdb.gz | Bin 0 -> 20483 bytes .../MDAnalysisTests/data/dssp/3nbkA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3nbkA.pdb.gz | Bin 0 -> 25387 bytes .../MDAnalysisTests/data/dssp/3nngA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3nngA.pdb.gz | Bin 0 -> 21544 bytes .../MDAnalysisTests/data/dssp/3ny7A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3ny7A.pdb.gz | Bin 0 -> 16026 bytes .../MDAnalysisTests/data/dssp/3nzmA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3nzmA.pdb.gz | Bin 0 -> 22316 bytes .../MDAnalysisTests/data/dssp/3on9A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3on9A.pdb.gz | Bin 0 -> 22010 bytes .../MDAnalysisTests/data/dssp/3pivA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3pivA.pdb.gz | Bin 0 -> 22941 bytes .../MDAnalysisTests/data/dssp/3q4oA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3q4oA.pdb.gz | Bin 0 -> 27005 bytes .../MDAnalysisTests/data/dssp/3so6A.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3so6A.pdb.gz | Bin 0 -> 19033 bytes .../MDAnalysisTests/data/dssp/3t5gB.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3t5gB.pdb.gz | Bin 0 -> 21071 bytes .../MDAnalysisTests/data/dssp/3vjzA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/3vjzA.pdb.gz | Bin 0 -> 22951 bytes .../MDAnalysisTests/data/dssp/4dkcA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/4dkcA.pdb.gz | Bin 0 -> 23213 bytes .../MDAnalysisTests/data/dssp/4gcnA.pdb.dssp | 1 + .../MDAnalysisTests/data/dssp/4gcnA.pdb.gz | Bin 0 -> 18182 bytes testsuite/MDAnalysisTests/data/dssp/README.md | 1 + .../MDAnalysisTests/data/gms/__init__.py | 0 .../MDAnalysisTests/data/gromacs/__init__.py | 0 .../gromacs/gromos54a7_edited.ff/__init__.py | 0 .../MDAnalysisTests/data/gromos11/__init__.py | 0 .../MDAnalysisTests/data/lammps/__init__.py | 0 .../data/lammps/additional_columns.data | 29 + .../data/lammps/additional_columns.lammpstrj | 19 + .../data/merge/2zmm/__init__.py | 0 .../MDAnalysisTests/data/merge/__init__.py | 0 .../MDAnalysisTests/data/mol2/__init__.py | 0 .../data/tprs/2lyz_gmx_2024.tpr | Bin 0 -> 515488 bytes .../MDAnalysisTests/data/tprs/__init__.py | 0 .../data/tprs/all_bonded/__init__.py | 0 .../data/tprs/all_bonded/dummy_2024.tpr | Bin 0 -> 5152 bytes .../data/tprs/virtual_sites/__init__.py | 0 .../virtual_sites/extra-interactions-2024.tpr | Bin 0 -> 16088 bytes .../MDAnalysisTests/data/windows/__init__.py | 0 testsuite/MDAnalysisTests/datafiles.py | 20 +- .../MDAnalysisTests/parallelism/__init__.py | 0 .../MDAnalysisTests/topology/test_itp.py | 13 +- .../MDAnalysisTests/topology/test_psf.py | 6 + .../topology/test_tprparser.py | 13 +- testsuite/MDAnalysisTests/util.py | 7 + .../MDAnalysisTests/utils/test_duecredit.py | 14 +- .../MDAnalysisTests/utils/test_pickleio.py | 4 +- testsuite/pyproject.toml | 153 ++ testsuite/setup.cfg | 26 - testsuite/setup.py | 141 +- 221 files changed, 5958 insertions(+), 3961 deletions(-) create mode 100644 .github/dependabot.yaml create mode 100644 package/MDAnalysis/analysis/dssp/__init__.py create mode 100644 package/MDAnalysis/analysis/dssp/dssp.py create mode 100644 package/MDAnalysis/analysis/dssp/pydssp_numpy.py delete mode 100644 package/MDAnalysis/analysis/hole2/hole.py delete mode 100644 package/MDAnalysis/analysis/hole2/templates.py delete mode 100644 package/MDAnalysis/analysis/hole2/utils.py create mode 100644 package/MDAnalysis/lib/formats/include/__init__.py create mode 100644 package/MDAnalysis/lib/formats/src/__init__.py create mode 100644 package/MDAnalysis/lib/include/__init__.py create mode 100644 package/MDAnalysis/lib/libmdanalysis/__init__.py create mode 100644 package/MDAnalysis/lib/src/transformations/__init__.py create mode 100644 package/doc/sphinx/source/documentation_pages/analysis/dssp.rst create mode 100644 testsuite/MDAnalysisTests/analysis/test_dssp.py create mode 100644 testsuite/MDAnalysisTests/data/1a2c_ins_code.psf create mode 100644 testsuite/MDAnalysisTests/data/Amber/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/analysis/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/capping/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/contacts/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/coordinates/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/dlpoly/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1h4aX.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1h4aX.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1mr1D.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1mr1D.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1mr1D_failing.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1or4A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1or4A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1pdoA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1pdoA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2gu3A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2gu3A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2i39A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2i39A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xdgA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xdgA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3a4rA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3a4rA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3aqgA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3aqgA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ejfA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ejfA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gwiA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3gwiA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ii2A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ii2A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3k7pA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3k7pA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nngA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nngA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ny7A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3ny7A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3pivA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3pivA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3so6A.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3so6A.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/3vjzA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/3vjzA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/4gcnA.pdb.dssp create mode 100644 testsuite/MDAnalysisTests/data/dssp/4gcnA.pdb.gz create mode 100644 testsuite/MDAnalysisTests/data/dssp/README.md create mode 100644 testsuite/MDAnalysisTests/data/gms/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/gromacs/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/gromacs/gromos54a7_edited.ff/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/gromos11/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/lammps/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/lammps/additional_columns.data create mode 100644 testsuite/MDAnalysisTests/data/lammps/additional_columns.lammpstrj create mode 100644 testsuite/MDAnalysisTests/data/merge/2zmm/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/merge/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/mol2/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/tprs/2lyz_gmx_2024.tpr create mode 100644 testsuite/MDAnalysisTests/data/tprs/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/tprs/all_bonded/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/tprs/all_bonded/dummy_2024.tpr create mode 100644 testsuite/MDAnalysisTests/data/tprs/virtual_sites/__init__.py create mode 100644 testsuite/MDAnalysisTests/data/tprs/virtual_sites/extra-interactions-2024.tpr create mode 100644 testsuite/MDAnalysisTests/data/windows/__init__.py create mode 100644 testsuite/MDAnalysisTests/parallelism/__init__.py create mode 100644 testsuite/pyproject.toml delete mode 100644 testsuite/setup.cfg diff --git a/.github/actions/build-src/action.yaml b/.github/actions/build-src/action.yaml index fa6885abd9c..8abab0f13e9 100644 --- a/.github/actions/build-src/action.yaml +++ b/.github/actions/build-src/action.yaml @@ -63,8 +63,8 @@ runs: which python which pip pip list - conda info - conda list + micromamba info + micromamba list - name: build_mda_main shell: bash -l {0} diff --git a/.github/actions/setup-deps/action.yaml b/.github/actions/setup-deps/action.yaml index 392aeeb428c..e5a0794450c 100644 --- a/.github/actions/setup-deps/action.yaml +++ b/.github/actions/setup-deps/action.yaml @@ -31,6 +31,8 @@ inputs: default: 'hypothesis' matplotlib: default: 'matplotlib-base' + mdahole2: + default: 'mdahole2-base' mda_xdrlib: default: 'mda-xdrlib' mmtf-python: @@ -116,6 +118,7 @@ runs: ${{ inputs.griddataformats }} ${{ inputs.hypothesis }} ${{ inputs.matplotlib }} + ${{ inputs.mdahole2 }} ${{ inputs.mda_xdrlib }} ${{ inputs.mmtf-python }} ${{ inputs.numpy }} diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 00000000000..2390d8c809e --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + groups: + github-actions: + patterns: + - "*" diff --git a/.github/workflows/darkerbot.yaml b/.github/workflows/darkerbot.yaml index 41cc813d47e..88d0a085159 100644 --- a/.github/workflows/darkerbot.yaml +++ b/.github/workflows/darkerbot.yaml @@ -23,16 +23,16 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: setup_dependencies run: | pip install PyGithub - name: 'Download artifact' - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index dda5b67e78f..9ce7d4af839 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -40,6 +40,7 @@ jobs: - [ubuntu-22.04, manylinux_x86_64, x86_64] - [macos-11, macosx_*, x86_64] - [windows-2019, win_amd64, AMD64] + - [macos-14, macosx_*, arm64] python: ["cp39", "cp310", "cp311", "cp312"] defaults: run: @@ -50,7 +51,7 @@ jobs: fetch-depth: 0 - name: Build wheels - uses: pypa/cibuildwheel@v2.16.2 + uses: pypa/cibuildwheel@v2.16.5 with: package-dir: package env: @@ -62,7 +63,7 @@ jobs: if: | (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/package')) || (github.event_name == 'release' && github.event.action == 'published') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl retention-days: 7 @@ -87,7 +88,7 @@ jobs: if: | (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/package')) || (github.event_name == 'release' && github.event.action == 'published') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: package/dist/*.tar.gz retention-days: 7 @@ -112,7 +113,7 @@ jobs: if: | (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/package')) || (github.event_name == 'release' && github.event.action == 'published') - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: testsuite/dist/*.tar.gz retention-days: 7 @@ -130,7 +131,7 @@ jobs: runs-on: ubuntu-latest needs: [build_wheels, build_sdist, build_sdist_tests] steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: artifact path: dist @@ -141,7 +142,7 @@ jobs: mv dist/MDAnalysisTests-* testsuite/dist - name: upload_source_and_wheels - uses: pypa/gh-action-pypi-publish@v1.8.10 + uses: pypa/gh-action-pypi-publish@v1.9.0 with: skip_existing: true repository_url: https://test.pypi.org/legacy/ @@ -159,7 +160,7 @@ jobs: runs-on: ubuntu-latest needs: [build_wheels, build_sdist, build_sdist_tests] steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: artifact path: dist @@ -170,7 +171,7 @@ jobs: mv dist/MDAnalysisTests-* testsuite/dist - name: upload_tests - uses: pypa/gh-action-pypi-publish@v1.8.10 + uses: pypa/gh-action-pypi-publish@v1.9.0 with: packages_dir: testsuite/dist skip_existing: true @@ -189,7 +190,7 @@ jobs: runs-on: ubuntu-latest needs: [build_wheels, build_sdist, build_sdist_tests] steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: artifact path: dist @@ -200,7 +201,7 @@ jobs: mv dist/MDAnalysisTests-* testsuite/dist - name: upload_source_and_wheels - uses: pypa/gh-action-pypi-publish@v1.8.10 + uses: pypa/gh-action-pypi-publish@v1.9.0 upload_pypi_mdanalysistests: if: | @@ -215,7 +216,7 @@ jobs: runs-on: ubuntu-latest needs: [build_wheels, build_sdist, build_sdist_tests] steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: artifact path: dist @@ -226,7 +227,7 @@ jobs: mv dist/MDAnalysisTests-* testsuite/dist - name: upload_tests - uses: pypa/gh-action-pypi-publish@v1.8.10 + uses: pypa/gh-action-pypi-publish@v1.9.0 with: packages_dir: testsuite/dist @@ -242,7 +243,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] type: ["FULL", "MIN"] exclude: # Multiple deps don't like windows diff --git a/.github/workflows/gh-ci-cron.yaml b/.github/workflows/gh-ci-cron.yaml index 641a3b3e76c..72c7e365385 100644 --- a/.github/workflows/gh-ci-cron.yaml +++ b/.github/workflows/gh-ci-cron.yaml @@ -194,7 +194,7 @@ jobs: with: os-type: "ubuntu" - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} @@ -224,7 +224,7 @@ jobs: fail-fast: false matrix: os: [ubuntu, macos] - python-version: ["3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 @@ -264,14 +264,17 @@ jobs: pypi-latest-release: # A set of runner to check that the latest conda release works as expected if: "github.repository == 'MDAnalysis/mdanalysis'" - runs-on: ${{ matrix.os }}-latest + runs-on: ${{ matrix.os }} timeout-minutes: 60 strategy: fail-fast: false matrix: - os: [ubuntu, macos, windows] - python-version: ["3.9", "3.10", "3.11"] + os: [ubuntu-latest, macos-latest, macos-14, windows-latest] + python-version: ["3.9", "3.10", "3.11", "3.12"] wheels: ['true', 'false'] + exclude: + - os: "macos-14" + python-version: "3.9" steps: # Checkout to have access to local actions (i.e. setup-os) - uses: actions/checkout@v4 @@ -282,7 +285,7 @@ jobs: with: os-type: ${{ matrix.os }} - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/gh-ci.yaml b/.github/workflows/gh-ci.yaml index d4878849680..05bda86b3cd 100644 --- a/.github/workflows/gh-ci.yaml +++ b/.github/workflows/gh-ci.yaml @@ -28,24 +28,29 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, ] - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] full-deps: [true, ] codecov: [true, ] include: - name: macOS_monterey_py311 os: macOS-12 - python-version: "3.11" + python-version: "3.12" full-deps: true codecov: true + - name: macOS_14_arm64_py312 + os: macOS-14 + python-version: "3.12" + full-deps: false + codecov: true - name: numpy_min os: ubuntu-latest - python-version: 3.9 + python-version: "3.10" full-deps: false codecov: true numpy: numpy=1.23.2 - name: asv_check os: ubuntu-latest - python-version: 3.9 + python-version: "3.10" full-deps: true codecov: false extra-pip-deps: asv @@ -118,11 +123,11 @@ jobs: - name: codecov if: matrix.codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} file: coverage.xml - fail_ci_if_error: True + fail_ci_if_error: False verbose: True @@ -142,7 +147,7 @@ jobs: with: environment-name: mda create-args: >- - python=3.9 + python=3.10 pip # using jaime's shim to avoid pulling down the cudatoolkit condarc: | @@ -235,7 +240,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: 3.11 @@ -254,13 +259,13 @@ jobs: - name: check_package_build run: | - DISTRIBUTION=$(ls -t1 dist/MDAnalysis-*.tar.gz | head -n1) + DISTRIBUTION=$(ls -t1 dist/mdanalysis-*.tar.gz | head -n1) test -n "${DISTRIBUTION}" || { echo "no distribution dist/MDAnalysis-*.tar.gz found"; exit 1; } twine check $DISTRIBUTION - name: check_testsuite_build run: | - DISTRIBUTION=$(ls -t1 dist/MDAnalysisTests-*.tar.gz | head -n1) + DISTRIBUTION=$(ls -t1 dist/mdanalysistests-*.tar.gz | head -n1) test -n "${DISTRIBUTION}" || { echo "no distribution dist/MDAnalysisTests-*.tar.gz found"; exit 1; } twine check $DISTRIBUTION @@ -268,8 +273,8 @@ jobs: working-directory: ./dist run: | ls -a . - python -m pip install MDAnalysis-*.tar.gz - python -m pip install MDAnalysisTests-*.tar.gz + python -m pip install mdanalysis-*.tar.gz + python -m pip install mdanalysistests-*.tar.gz - name: run tests working-directory: ./dist diff --git a/.github/workflows/labels.yaml b/.github/workflows/labels.yaml index 2cac7d8e087..503be1ee03b 100644 --- a/.github/workflows/labels.yaml +++ b/.github/workflows/labels.yaml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 steps: - - uses: actions/labeler@v3 + - uses: actions/labeler@v5 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" configuration-path: ".github/pr_path_labeler.yml" diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml index 8a708169d1c..de5eb68fa86 100644 --- a/.github/workflows/linters.yaml +++ b/.github/workflows/linters.yaml @@ -31,13 +31,13 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: darker-main-code id: darker-main-code - uses: akaihola/darker@1.6.1 + uses: akaihola/darker@v2.1.1 continue-on-error: true with: version: "~=1.6.1" @@ -48,7 +48,7 @@ jobs: - name: darker-test-code id: darker-test-code - uses: akaihola/darker@1.6.1 + uses: akaihola/darker@v2.1.1 continue-on-error: true with: version: "~=1.6.1" @@ -58,7 +58,7 @@ jobs: lint: "flake8" - name: get-pr-info - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: const prNumber = context.payload.number; @@ -90,7 +90,7 @@ jobs: run: cat darker_results/status.json - name: upload-status - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: darkerlint path: darker_results/ @@ -104,9 +104,9 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: install run: | @@ -131,7 +131,7 @@ jobs: with: environment-name: mda create-args: >- - python=3.9 + python=3.10 pip # using jaime's shim to avoid pulling down the cudatoolkit condarc: | @@ -146,6 +146,7 @@ jobs: micromamba: true full-deps: true numpy: numpy=1.23.2 + rdkit: rdkit=2023.09.3 - name: install run: | diff --git a/LICENSE b/LICENSE index b6b2162c890..59b77146988 100644 --- a/LICENSE +++ b/LICENSE @@ -1765,6 +1765,33 @@ PyQCPROT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================================================== + +DSSP module code for protein secondary structure assignment + - analysis/dssp/pydssp_numpy.py + +MIT License + +Copyright (c) 2022 Shintaro Minami + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + ========================================================================== MDAnalysis logo (see doc/sphinx/source/logos) diff --git a/README.rst b/README.rst index c539704e74a..339829ef056 100644 --- a/README.rst +++ b/README.rst @@ -102,19 +102,18 @@ Citation When using MDAnalysis in published work, please cite the following two papers: -* R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, - M. N. Melo, S. L. Seyler, D. L. Dotson, J. Domanski, - S. Buchoux, I. M. Kenney, and O. Beckstein. MDAnalysis: +* R\. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, + M\. N. Melo, S. L. Seyler, D. L. Dotson, J. Domanski, + S\. Buchoux, I. M. Kenney, and O. Beckstein. MDAnalysis: A Python package for the rapid analysis of molecular dynamics simulations. In S. Benthall and S. Rostrup, editors, Proceedings of the 15th Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. - doi:`10.25080/Majora-629e541a-00e`_ - + doi: `10.25080/Majora-629e541a-00e`_ * N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. *J. Comput. Chem.* **32** (2011), 2319--2327. - doi:`10.1002/jcc.21787`_ + doi: `10.1002/jcc.21787`_ For citations of included algorithms and sub-modules please see the references_. @@ -194,4 +193,4 @@ For citations of included algorithms and sub-modules please see the references_. .. |discussions| image:: https://img.shields.io/github/discussions/MDAnalysis/MDAnalysis :alt: GitHub Discussions - :target: https://github.com/MDAnalysis/mdanalysis/discussions \ No newline at end of file + :target: https://github.com/MDAnalysis/mdanalysis/discussions diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4affb137b55..41424cf50de 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -21,8 +21,8 @@ jobs: MPLBACKEND: agg strategy: matrix: - Win-Python39-64bit-full: - PYTHON_VERSION: '3.9' + Win-Python310-64bit-full: + PYTHON_VERSION: '3.10' PYTHON_ARCH: 'x64' BUILD_TYPE: 'normal' imageName: 'windows-2019' @@ -37,8 +37,8 @@ jobs: BUILD_TYPE: 'wheel' NUMPY_MIN: '1.26.0' imageName: 'windows-2019' - Win-Python39-64bit-full-wheel: - PYTHON_VERSION: '3.9' + Win-Python310-64bit-full-wheel: + PYTHON_VERSION: '3.10' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' NUMPY_MIN: '1.23.2' @@ -49,8 +49,8 @@ jobs: BUILD_TYPE: 'wheel' NUMPY_MIN: '1.26.0' imageName: 'ubuntu-latest' - Linux-Python39-64bit-full-wheel: - PYTHON_VERSION: '3.9' + Linux-Python310-64bit-full-wheel: + PYTHON_VERSION: '3.10' PYTHON_ARCH: 'x64' BUILD_TYPE: 'wheel' NUMPY_MIN: '1.23.2' diff --git a/maintainer/conda/environment.yml b/maintainer/conda/environment.yml index ea3e2b50028..cd324d25cda 100644 --- a/maintainer/conda/environment.yml +++ b/maintainer/conda/environment.yml @@ -20,7 +20,7 @@ dependencies: - networkx - numpy>=1.23.2 - pytest - - python==3.9 + - python==3.10 - pytng>=0.2.3 - scikit-learn - scipy @@ -29,7 +29,11 @@ dependencies: - tidynamics>=1.0.0 - tqdm>=4.43.0 - sphinxcontrib-bibtex + - mdaencore + - waterdynamics - pip: + - mdahole2 + - pathsimanalysis - duecredit - parmed - sphinx-sitemap diff --git a/package/AUTHORS b/package/AUTHORS index d8259f6410f..db72bf2e286 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -233,8 +233,16 @@ Chronological list of authors - Lawson Woods - Johannes Stöckelmaier - Jenna M. Swarthout Goddard -2024 - - Jure Cerar + 2024 + - Aditya Keshari + - Philipp Stärk + - Kai Niklas Spauszus + - Sampurna Mukherjee + - Leon Wehrhan + - Valerij Talagayev + - Kurt McKee + + External code ------------- diff --git a/package/CHANGELOG b/package/CHANGELOG index 7a706d5e247..48e43d9b936 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -14,19 +14,70 @@ The rules for this file: ------------------------------------------------------------------------------- -??/??/?? IAlibay +??/??/?? IAlibay, HeetVekariya, marinegor, lilyminium, RMeli, + ljwoods2, aditya292002, pstaerk, PicoCentauri, BFedder, + tyler.je.reddy, SampurnaM, leonwehrhan, kainszs, orionarcher, + yuxuanzhuang * 2.8.0 Fixes + * Fix failure in double-serialization of TextIOPicklable file reader. + (Issue #3723, PR #3722) + * Fix failure to preserve modification of coordinates after serialization, + e.g. with transformations + (Issue #4633, PR #3722) + * Fix PSFParser error when encoutering string-like resids + * (Issue #2053, Issue #4189 PR #4582) + * Fix `MDAnalysis.analysis.align.AlignTraj` not accepting writer kwargs + (Issue #4564, PR #4565) + * Fix #4259 via removing argument `parallelizable` of `NoJump` transformation. + * Fix doctest errors of analysis/pca.py related to rounding issues + (Issue #3925, PR #4377) + * Convert openmm Quantity to raw value for KE and PE in OpenMMSimulationReader. + * Atomname methods can handle empty groups (Issue #2879, PR #4529) + * Add support for TPR files produced by Gromacs 2024.1 (PR #4523) + * Remove mutable data from ``progressbar_kwargs`` argument in ``AnalysisBase.run()`` + (PR #4459) + * Fix ChainReader `__repr__()` method when sub-reader is MemoryReader + (Issue #3349, PR #4407) + * Fix bug in PCA preventing use of `frames=...` syntax (PR #4423) + * Fix `analysis/diffusionmap.py` iteration through trajectory to iteration + over `self._sliced_trajectory`, hence supporting + `DistanceMatrix.run(frames=...)` (PR #4433) + * Fix doctest errors of lib/picklable_file_io.py (Issue #3925, PR #4371) * Fix deploy action to use the correct version of the pypi upload action. + * Fix groups.py doctests using sphinx directives (Issue #3925, PR #4374) Enhancements + * Add `analysis.DSSP` module for protein secondary structure assignment, based on [pydssp](https://github.com/ShintaroMinami/PyDSSP) + * Added a tqdm progress bar for `MDAnalysis.analysis.pca.PCA.transform()` + (PR #4531) + * Improved performance of PDBWriter (Issue #2785, PR #4472) + * Added parsing of arbitrary columns of the LAMMPS dump parser. (Issue #3504) + * Documented the r0 attribute in the `Contacts` class and added the + `n_initial_contacts` attribute, with documentation. (Issue #2604, PR #4415) + * Implement average structures with iterative algorithm from + DOI 10.1021/acs.jpcb.7b11988. (Issue #2039, PR #4524) Changes + * MDAnalysis now builds against numpy 2.0 rather than the + minimum supported numpy version (PR #4620) + * As per SPEC0 the minimum supported Python version has been raised + to 3.10 (PR #4502) + * MDAnalysis.analysis.hole2 is now directly imported from the mdakit + mdahole2. This module is deprecated and will be fully removed in + MDAnalysis version 3.0 (PR #4464) + * Testsuite packaging now uses a pyproject.toml file (PR #4463) + * Improvement of setuptools packaging, including deduplication of + dependency lists (PR #4424) * As per NEP29, the minimum version of numpy has been raised to 1.23. We have opted to pin to 1.23.2 to ensure the same minimum numpy version is used from python 3.9 to 3.11 (Issue #4401, PR #4402) + * updated tests that used assert_almost_equal(..., decimal={N}) with + equivalent assert_allclose(... rtol=0, atol=1.5e-{N}) (issue modernize + testing code #3743, PR Replaced numpy.testing.assert_almost_equal to + numpy.testing.assert_allclose #4438) Deprecations * The MDAnalysis.analysis.waterdynamics module has been deprecated in favour diff --git a/package/MDAnalysis/analysis/align.py b/package/MDAnalysis/analysis/align.py index 6b85b5d533f..2bc80042b69 100644 --- a/package/MDAnalysis/analysis/align.py +++ b/package/MDAnalysis/analysis/align.py @@ -80,14 +80,14 @@ Note that in this example translations have not been removed. In order to look at the pure rotation one needs to superimpose the centres of -mass (or geometry) first: +mass (or geometry) first:: >>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions, center=True) 21.892591663632704 This has only done a translational superposition. If you want to also do a rotational superposition use the superposition keyword. This will calculate a -minimized RMSD between the reference and mobile structure. +minimized RMSD between the reference and mobile structure:: >>> rmsd(mobile.select_atoms('name CA').positions, ref.select_atoms('name CA').positions, ... superposition=True) @@ -174,6 +174,7 @@ .. autoclass:: AlignTraj .. autoclass:: AverageStructure .. autofunction:: rotation_matrix +.. autofunction:: iterative_average Helper functions @@ -212,6 +213,8 @@ from MDAnalysis.coordinates.memory import MemoryReader from MDAnalysis.lib.util import get_weights from MDAnalysis.lib.util import deprecate # remove 3.0 +from MDAnalysis.lib.log import ProgressBar +from ..due import due, Doi from .base import AnalysisBase @@ -541,6 +544,125 @@ def alignto(mobile, reference, select=None, weights=None, return old_rmsd, new_rmsd +@due.dcite( + Doi("10.1021/acs.jpcb.7b11988"), + description="Iterative Calculation of Opimal Reference", + path="MDAnalysis.analysis.align.iterative_average" +) +def iterative_average( + mobile, reference=None, select='all', weights=None, niter=100, + eps=1e-6, verbose=False, **kwargs +): + """Iteratively calculate an optimal reference that is also the average + structure after an RMSD alignment. + + The optimal reference is defined as average + structure of a trajectory, with the optimal reference used as input. + This function computes the optimal reference by using a starting + reference for the average structure, which is used as the reference + to calculate the average structure again. This is repeated until the + reference structure has converged. :footcite:p:`Linke2018` + + Parameters + ---------- + mobile : mda.Universe + Universe containing trajectory to be fitted to reference. + reference : mda.Universe (optional) + Universe containing the initial reference structure. + select : str or tuple or dict (optional) + Atom selection for fitting a substructue. Default is set to all. + Can be tuple or dict to define different selection strings for + mobile and target. + weights : str, array_like (optional) + Weights that can be used. If `None` use equal weights, if `'mass'` + use masses of ref as weights or give an array of arbitrary weights. + niter : int (optional) + Maximum number of iterations. + eps : float (optional) + RMSD distance at which reference and average are assumed to be + equal. + verbose : bool (optional) + Verbosity. + **kwargs : dict (optional) + AverageStructure kwargs. + + Returns + ------- + avg_struc : AverageStructure + AverageStructure result from the last iteration. + + Example + ------- + `iterative_average` can be used to obtain a :class:`MDAnalysis.Universe` + with the optimal reference structure. + + :: + + import MDAnalysis as mda + from MDAnalysis.analysis import align + from MDAnalysisTests.datafiles import PSF, DCD + + u = mda.Universe(PSF, DCD) + av = align.iterative_average(u, u, verbose=True) + + averaged_universe = av.results.universe + + References + ---------- + + .. footbibliography:: + + .. versionadded:: 2.8.0 + """ + if not reference: + reference = mobile + + select = rms.process_selection(select) + ref = mda.Merge(reference.select_atoms(*select['reference'])) + sel_mobile = select['mobile'][0] + + weights = get_weights(ref.atoms, weights) + + drmsd = np.inf + for i in ProgressBar(range(niter)): + # found a converged structure + if drmsd < eps: + break + + avg_struc = AverageStructure( + mobile, reference=ref, select={ + 'mobile': sel_mobile, 'reference': 'all' + }, + weights=weights, **kwargs + ).run() + drmsd = rms.rmsd(ref.atoms.positions, avg_struc.results.positions, + weights=weights) + ref = avg_struc.results.universe + + if verbose: + logger.debug( + f"iterative_average(): i = {i}, " + f"rmsd-change = {drmsd:.5f}, " + f"ave-rmsd = {avg_struc.results.rmsd:.5f}" + ) + + else: + errmsg = ( + "iterative_average(): Did not converge in " + f"{niter} iterations to DRMSD < {eps}. " + f"Final average RMSD = {avg_struc.results.rmsd:.5f}" + ) + logger.error(errmsg) + raise RuntimeError(errmsg) + + logger.info( + f"iterative_average(): Converged to DRMSD < {eps}. " + f"Final average RMSD = {avg_struc.results.rmsd:.5f}" + ) + + return avg_struc + + class AlignTraj(AnalysisBase): """RMS-align trajectory to a reference structure using a selection. @@ -559,6 +681,7 @@ class AlignTraj(AnalysisBase): def __init__(self, mobile, reference, select='all', filename=None, prefix='rmsfit_', weights=None, tol_mass=0.1, match_atoms=True, strict=False, force=True, in_memory=False, + writer_kwargs=None, **kwargs): """Parameters ---------- @@ -598,6 +721,8 @@ def __init__(self, mobile, reference, select='all', filename=None, verbose : bool (optional) Set logger to show more information and show detailed progress of the calculation if set to ``True``; the default is ``False``. + writer_kwargs : dict (optional) + kwarg dict to be passed to the constructed writer Attributes @@ -658,6 +783,9 @@ def __init__(self, mobile, reference, select='all', filename=None, :attr:`rmsd` results are now stored in a :class:`MDAnalysis.analysis.base.Results` instance. + .. versionchanged:: 2.8.0 + Added ``writer_kwargs`` kwarg dict to pass to the writer + """ select = rms.process_selection(select) self.ref_atoms = reference.select_atoms(*select['reference']) @@ -694,10 +822,12 @@ def __init__(self, mobile, reference, select='all', filename=None, self.ref_atoms, self.mobile_atoms, tol_mass=tol_mass, strict=strict, match_atoms=match_atoms) + if writer_kwargs is None: + writer_kwargs = {} # with self.filename == None (in_memory), the NullWriter is chosen # (which just ignores input) and so only the in_memory trajectory is # retained - self._writer = mda.Writer(self.filename, natoms) + self._writer = mda.Writer(self.filename, natoms, **writer_kwargs) self._weights = get_weights(self.ref_atoms, weights) @@ -1539,4 +1669,4 @@ def get_atoms_byres(g, match_mask=np.logical_not(mismatch_mask)): logger.error(errmsg) raise SelectionError(errmsg) - return ag1, ag2 + return ag1, ag2 \ No newline at end of file diff --git a/package/MDAnalysis/analysis/base.py b/package/MDAnalysis/analysis/base.py index 4e3638cc18c..04a0d25b506 100644 --- a/package/MDAnalysis/analysis/base.py +++ b/package/MDAnalysis/analysis/base.py @@ -390,7 +390,7 @@ def _conclude(self): pass # pylint: disable=unnecessary-pass def run(self, start=None, stop=None, step=None, frames=None, - verbose=None, *, progressbar_kwargs={}): + verbose=None, *, progressbar_kwargs=None): """Perform the calculation Parameters @@ -411,10 +411,11 @@ def run(self, start=None, stop=None, step=None, frames=None, verbose : bool, optional Turn on verbosity - + progressbar_kwargs : dict, optional - ProgressBar keywords with custom parameters regarding progress bar position, etc; - see :class:`MDAnalysis.lib.log.ProgressBar` for full list. + ProgressBar keywords with custom parameters regarding progress bar + position, etc; see :class:`MDAnalysis.lib.log.ProgressBar` for full + list. .. versionchanged:: 2.2.0 @@ -422,7 +423,7 @@ def run(self, start=None, stop=None, step=None, frames=None, frame indices in the `frames` keyword argument. .. versionchanged:: 2.5.0 - Add `progressbar_kwargs` parameter, + Add `progressbar_kwargs` parameter, allowing to modify description, position etc of tqdm progressbars """ logger.info("Choosing frames to analyze") @@ -436,6 +437,8 @@ def run(self, start=None, stop=None, step=None, frames=None, self._prepare() logger.info("Starting analysis loop over %d trajectory frames", self.n_frames) + if progressbar_kwargs is None: + progressbar_kwargs = {} for i, ts in enumerate(ProgressBar( self._sliced_trajectory, diff --git a/package/MDAnalysis/analysis/contacts.py b/package/MDAnalysis/analysis/contacts.py index c51f96d5222..7d6804f1a73 100644 --- a/package/MDAnalysis/analysis/contacts.py +++ b/package/MDAnalysis/analysis/contacts.py @@ -405,6 +405,13 @@ def __init__(self, u, select, refgroup, method="hard_cut", radius=4.5, Show detailed progress of the calculation if set to ``True``; the default is ``False``. + Attributes + ---------- + n_initial_contacts : int + Total number of initial contacts. + r0 : list[numpy.ndarray] + List of distance arrays between reference groups. + Notes ----- @@ -455,6 +462,9 @@ def __init__(self, u, select, refgroup, method="hard_cut", radius=4.5, box=self._get_box(refA.universe))) self.initial_contacts.append(contact_matrix(self.r0[-1], radius)) + self.n_initial_contacts = self.initial_contacts[0].sum() + + @staticmethod def _get_atomgroup(u, sel): select_error_message = ("selection must be either string or a " diff --git a/package/MDAnalysis/analysis/diffusionmap.py b/package/MDAnalysis/analysis/diffusionmap.py index 9b490e52fd4..1c63357a160 100644 --- a/package/MDAnalysis/analysis/diffusionmap.py +++ b/package/MDAnalysis/analysis/diffusionmap.py @@ -231,6 +231,9 @@ class DistanceMatrix(AnalysisBase): :class:`MDAnalysis.analysis.base.Results` instance. .. versionchanged:: 2.2.0 :class:`DistanceMatrix` now also accepts `AtomGroup`. + .. versionchanged:: 2.8.0 + :class:`DistanceMatrix` is now correctly works with `frames=...` + parameter (#4432) by iterating over `self._sliced_trajectory` """ def __init__(self, universe, select='all', metric=rmsd, cutoff=1E0-5, weights=None, **kwargs): @@ -254,12 +257,12 @@ def _prepare(self): self.results.dist_matrix = np.zeros((self.n_frames, self.n_frames)) def _single_frame(self): - iframe = self._ts.frame + iframe = self._frame_index i_ref = self.atoms.positions # diagonal entries need not be calculated due to metric(x,x) == 0 in # theory, _ts not updated properly. Possible savings by setting a # cutoff for significant decimal places to sparsify matrix - for j, ts in enumerate(self._trajectory[iframe:self.stop:self.step]): + for j, ts in enumerate(self._sliced_trajectory[iframe:]): self._ts = ts j_ref = self.atoms.positions dist = self._metric(i_ref, j_ref, weights=self._weights) @@ -270,7 +273,7 @@ def _single_frame(self): self._frame_index] = ( self.results.dist_matrix[self._frame_index, j+self._frame_index]) - self._ts = self._trajectory[iframe] + self._ts = self._sliced_trajectory[iframe] @property def dist_matrix(self): diff --git a/package/MDAnalysis/analysis/dssp/__init__.py b/package/MDAnalysis/analysis/dssp/__init__.py new file mode 100644 index 00000000000..870cb65d63f --- /dev/null +++ b/package/MDAnalysis/analysis/dssp/__init__.py @@ -0,0 +1,7 @@ +__all__ = [ + "DSSP", + "assign", + "translate", +] + +from .dssp import DSSP, assign, translate diff --git a/package/MDAnalysis/analysis/dssp/dssp.py b/package/MDAnalysis/analysis/dssp/dssp.py new file mode 100644 index 00000000000..7d515926f25 --- /dev/null +++ b/package/MDAnalysis/analysis/dssp/dssp.py @@ -0,0 +1,427 @@ +""" +Secondary structure assignment (helix, sheet and loop) --- :mod:`MDAnalysis.analysis.dssp` +========================================================================================== + +:Author: Egor Marin +:Year: 2024 +:Copyright: LGPL v2.1+ + +.. versionadded:: 2.8.0 + +The module contains code to build hydrogend bond contact map, +and use it to assign protein secondary structure (:class:`DSSP`). + +This module uses the python version of the original algorithm :footcite:p:`Kabsch1983`, +re-implemented by @ShintaroMinami and available under MIT license from +`ShintaroMinami/PyDSSP `_. + + +.. Note:: + This implementation does not discriminate different types of + beta-sheets, as well as different types of helices, meaning you will get + :math:`3_{10}` helices and π-helices labelled as "helix" too. + + +.. rubric:: Using original `pydssp` +The default implementation uses the original *pydssp* (v.0.9.0) code, rewritten +without usage of the *einops* library and hence having no dependencies. If you want +to explicitly use *pydssp* (or its particular version), install it to your +current environment with ``python -m pip install pydssp``. Please note that the +way MDAnalysis uses *pydssp* does not support *pydssp* 's capability for batch +processing or its use of the *pytorch* library. + +When using this module in published work please cite :footcite:p:`Kabsch1983`. + +.. rubric:: References + +.. footbibliography:: + + +Example applications +-------------------- + +Assigning secondary structure of a PDB file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this example we will simply print a string representing a protein's secondary +structure. + +.. code-block:: python + + from MDAnalysis.tests.datafiles import PDB + from MDAnalysis.analysis.dssp import DSSP + u = mda.Universe(PDB) + s = ''.join(DSSP(u).run().results.dssp[0]) + print(s) + + +Calculating average secondary structure of a trajectory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here we take a trajectory and calculate its average secondary structure, i.e. +assign a secondary structure label 'X' to a residue if most of the frames in the +trajectory got assigned the 'X' label. + +.. code-block:: python + + from MDAnalysis.analysis.dssp import DSSP, translate + from MDAnalysisTests.datafiles import TPR, XTC + u = mda.Universe(TPR, XTC) + long_run = DSSP(u).run() + mean_secondary_structure = translate(long_run.results.dssp_ndarray.mean(axis=0)) + print(''.join(mean_secondary_structure)) + +Running this code produces :: + + '--EEEE----------HHHHHHH----EE----HHHHH------HHHHHHHHHH------HHHHHHHHHHH---------EEEE-----HHHHHHHHH------EEEEEE--HHHHHH----EE--------EE---E----------------------HHHHHHHHHHHHHHHHHHHHHHHHHHHH----EEEEE------HHHHHHHHH--' + +Find parts of the protein that maintain their secondary structure during simulation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In this example, we will find residue groups that maintain their secondary structure +along the simulation, and have some meaningful ('E' or 'H') secondary structure +during more than set `threshold` fraction of frames. We will call these residues +"persistent", for clarity, and label them according to the structure +that they maintain during the run: + +.. code-block:: python + + from MDAnalysis.analysis.dssp import DSSP, translate + from MDAnalysisTests.datafiles import TPR, XTC + u = mda.Universe(TPR, XTC) + threshold = 0.8 + + long_run = DSSP(u).run() + persistent_residues = translate( + long_run + .results + .dssp_ndarray + .mean(axis=0) > threshold + ) + print(''.join(persistent_residues)[:20]) + +Running this code produces :: + + '--EEEE----------HHHH' + + +Analysis classes +---------------- + +.. autoclass:: DSSP + :members: + :inherited-members: + + .. attribute:: results.dssp + + Contains the time series of the DSSP assignment as a + :class:`numpy.ndarray` array of shape ``(n_frames, n_residues)`` where each row + contains the assigned secondary structure character for each residue (whose + corresponding resid is stored in :attr:`results.resids`). The three characters + are ['H', 'E', '-'] and representi alpha-helix, sheet and loop, respectively. + + .. attribute:: results.dssp_ndarray + + Contains the one-hot encoding of the time series of the DSSP assignment + as a :class:`numpy.ndarray` Boolean array of shape ``(n_frames, n_residues, 3)`` + where for each residue the encoding is stored as ``(3,)`` shape + :class:`numpy.ndarray` of Booleans so that ``True`` at index 0 represents loop + ('-'), ``True`` at index 1 represents helix ('H'), and ``True`` at index 2 + represents sheet 'E'. + + .. SeeAlso:: :func:`translate` + + + .. attribute:: results.resids + + A :class:`numpy.ndarray` of length ``n_residues`` that contains the residue IDs + (resids) for the protein residues that were assigned a secondary structure. + + +Functions +--------- + +.. autofunction:: assign +.. autofunction:: translate +""" + +from typing import Union +import numpy as np +from MDAnalysis import Universe, AtomGroup + +from ..base import AnalysisBase +from ...due import due, Doi + +due.cite( + Doi("10.1002/bip.360221211"), + description="DSSP algorithm description", + path="MDAnalysis.analysis.dssp", + cite_module=True, +) + +del Doi + + +try: # pragma: no cover + from pydssp.pydssp_numpy import ( + assign, + _get_hydrogen_atom_position, + ) + + HAS_PYDSSP = True + +except ModuleNotFoundError: + HAS_PYDSSP = False + from .pydssp_numpy import ( + assign, + _get_hydrogen_atom_position, + ) + + +class DSSP(AnalysisBase): + """Assign secondary structure using the DSSP algorithm. + + Analyze a selection containing a protein and assign secondary structure + using the Kabsch-Sander algorithm :footcite:p:`Kabsch1983`. Only a subset + of secondary structure categories are implemented: + + - 'H' represents a generic helix (α-helix, π-helix or :math:`3_{10}` helix) + - 'E' represents 'extended strand', participating in beta-ladder (parallel + or antiparallel) + - '-' represents unordered part ("loop") + + The implementation was taken from the pydssp package (v. 0.9.0) + https://github.com/ShintaroMinami/PyDSSP by Shintaro Minami under the + MIT license. + + .. Warning:: + For DSSP to work properly, your atoms must represent a protein. The + hydrogen atom bound to the backbone nitrogen atom is matched by name + as given by the keyword argument `hydrogen_atom`. There may only be + a single backbone nitrogen hydrogen atom per residue; the one exception + is proline, for which there should not exist any such hydrogens. + The default value of `hydrogen_atom` should handle the common naming + conventions in the PDB and in force fields but if you encounter an error + or unusual results during your run, try to figure out how to select the + correct hydrogen atoms and report an issue in the MDAnalysis + `issue tracker `_. + + Parameters + ---------- + atoms : Union[Universe, AtomGroup] + input Universe or AtomGroup. In both cases, only protein residues will + be chosen prior to the analysis via `select_atoms('protein')`. + Heavy atoms of the protein are then selected by name + `heavyatom_names`, and hydrogens are selected by name + `hydrogen_name`. + guess_hydrogens : bool, optional + whether you want to guess hydrogens positions, by default ``True``. + Guessing is made assuming perfect 120 degrees for all bonds that N + atom makes, and a N-H bond length of 1.01 A. + If ``guess_hydrogens`` is False, hydrogen atom positions on N atoms + will be parsed from the trajectory, except for the "hydrogen" atom + positions on PRO residues, and an N-terminal residue. + heavyatom_names : tuple[str], default ("N", "CA", "C", "O O1 OT1") + selection names that will be used to select "N", "CA", "C" and "O" + atom coordinates for the secondary structure determination. The last + string contains multiple values for "O" to account for C-term residues. + hydrogen_name : str, default "H HN HT1 HT2 HT3" + This selection should only select a single hydrogen atom in each residue + (except proline), namely the one bound to the backbone nitrogen. + + .. Note:: + To work with different hydrogen-naming conventions by default, the + default selection is broad but if hydrogens are incorrectly selected + (e.g., a :exc:`ValueError` is raised) you must customize `hydrogen_name` + for your specific case. + + + Raises + ------ + ValueError + if ``guess_hydrogens`` is True but some non-PRO hydrogens are missing. + + Examples + -------- + + For example, you can assign secondary structure for a single PDB file: + + >>> from MDAnalysis.analysis.dssp import DSSP + >>> from MDAnalysisTests.datafiles import PDB + >>> import MDAnalysis as mda + >>> u = mda.Universe(PDB) + >>> run = DSSP(u).run() + >>> print("".join(run.results.dssp[0, :20])) + --EEEEE-----HHHHHHHH + + The :attr:`results.dssp` holds the time series of assigned secondary + structure, with one character for each residue. + + (Note that for displaying purposes we only print the first 20 residues + of frame 0 with ``run.results.dssp[0, :20]`` but one would typically look + at all residues ``run.results.dssp[0]``.) + + The :attr:`results.dssp_ndarray` attribute holds a + ``(n_frames, n_residues, 3)`` shape ndarray with a *one-hot encoding* + of *loop* '-' (index 0), *helix* 'H' (index 1), and *sheet* 'E' + (index 2), respectively for each frame of the trajectory. It can be + used to compute, for instance, the **average secondary structure**: + + >>> from MDAnalysis.analysis.dssp import translate, DSSP + >>> from MDAnalysisTests.datafiles import TPR, XTC + >>> u = mda.Universe(TPR, XTC) + >>> run = DSSP(u).run() + >>> mean_secondary_structure = translate(run.results.dssp_ndarray.mean(axis=0)) + >>> print(''.join(mean_secondary_structure)[:20]) + -EEEEEE------HHHHHHH + + + .. versionadded:: 2.8.0 + """ + + def __init__( + self, + atoms: Union[Universe, AtomGroup], + guess_hydrogens: bool = True, + *, + heavyatom_names: tuple[str] = ("N", "CA", "C", "O O1 OT1"), + hydrogen_name: str = "H HN HT1 HT2 HT3", + ): + self._guess_hydrogens = guess_hydrogens + + ag: AtomGroup = atoms.select_atoms("protein") + super().__init__(ag.universe.trajectory) + + # define necessary selections + self._heavy_atoms: dict[str, "AtomGroup"] = { + t: ag.atoms[ + np.isin( + ag.names, t.split() + ) # need split() since `np.isin` takes an iterable as second argument + # and "N".split() -> ["N"] + ] + for t in heavyatom_names + } + self._hydrogens: list["AtomGroup"] = [ + res.atoms.select_atoms(f"name {hydrogen_name}") for res in ag.residues + ] + # can't do it the other way because I need missing values to exist + # so that I could fill them in later + if not self._guess_hydrogens: + # zip() assumes that _heavy_atoms and _hydrogens is ordered in the + # same way. This is true as long as the original AtomGroup ag is + # sorted. With the hard-coded protein selection for ag this is always + # true but if the code on L277 ever changes, make sure to sort first! + for calpha, hydrogen in zip( + self._heavy_atoms["CA"][1:], self._hydrogens[1:] + ): + if (calpha.resname != "PRO" and len(hydrogen) != 1) or ( + calpha.resname == "PRO" and hydrogen + ): + raise ValueError( + ( + "Residue {calpha.residue} contains wrong number of hydrogens: " + "exactly 1 hydrogen is expected for non-PRO residues, and " + "zero hydrogens for PRO residues." + ) + ) + + positions = [group.positions for group in self._heavy_atoms.values()] + if len(set(map(lambda arr: arr.shape[0], positions))) != 1: + raise ValueError( + ( + "Universe contains unequal numbers of (N,CA,C,O) atoms ('name' field)." + " Please select appropriate AtomGroup manually." + ) + ) + + def _prepare(self): + self.results.dssp_ndarray = [] + + def _get_coords(self) -> np.ndarray: + """Returns coordinates of (N,CA,C,O,H) atoms, as required by + :func:`get_hbond_map` and :func:`assign` functions. + + Returns + ------- + np.ndarray + coordinates of (N,CA,C,O,H) atoms + + Raises + ------ + ValueError + if input Universe contains different number of (N,CA,C,O) atoms + + """ + # NOTE: here we explicitly rely on the fact that `self._heavy_atoms` + # dictionary maintains order of the keys since python 3.7 + positions = [group.positions for group in self._heavy_atoms.values()] + coords = np.array(positions) + + if not self._guess_hydrogens: + guessed_h_coords = _get_hydrogen_atom_position(coords.swapaxes(0, 1)) + + h_coords = np.array( + [ + group.positions[0] if group else guessed_h_coords[idx] + for idx, group in enumerate(self._hydrogens) + ] + ) + h_coords = np.expand_dims(h_coords, axis=0) + coords = np.vstack([coords, h_coords]) + + coords = coords.swapaxes(0, 1) + return coords + + def _single_frame(self): + coords = self._get_coords() + dssp = assign(coords) + self.results.dssp_ndarray.append(dssp) + + def _conclude(self): + self.results.dssp = translate(np.array(self.results.dssp_ndarray)) + self.results.dssp_ndarray = np.array(self.results.dssp_ndarray) + self.results.resids = self._heavy_atoms["CA"].resids + + +def translate(onehot: np.ndarray) -> np.ndarray: + """Translate a one-hot encoding summary into char-based secondary structure + assignment. + + One-hot encoding corresponds to C3 notation: + '-', 'H', 'E' are loop, helix and sheet, respectively. Input array must + have its last axis of shape 3: ``(n_residues, 3)`` or ``(n_frames, n_residues, 3)`` + + Examples + -------- + + .. code-block:: python + + from MDAnalysis.analysis.dssp import translate + import numpy as np + # encoding 'HE-' + onehot = np.array([[False, True, False], # 'H' + [False, False, True], # 'E' + [True, False, False]]) # '-' + ''.join(translate(onehot)) + print(''.join(translate(onehot))) + + Running this code produces :: + + HE- + + Parameters + ---------- + onehot : np.ndarray + input array of one-hot encoding in ('-', 'H', 'E') order + + Returns + ------- + np.ndarray + array of '-', 'H' and 'E' symbols with secondary structure + + + .. versionadded:: 2.8.0 + """ + C3_ALPHABET = np.array(["-", "H", "E"]) + index = np.argmax(onehot, axis=-1) + return C3_ALPHABET[index] diff --git a/package/MDAnalysis/analysis/dssp/pydssp_numpy.py b/package/MDAnalysis/analysis/dssp/pydssp_numpy.py new file mode 100644 index 00000000000..1ae8ac369ea --- /dev/null +++ b/package/MDAnalysis/analysis/dssp/pydssp_numpy.py @@ -0,0 +1,269 @@ +""" +A re-implementation of DSSP algorithm :footcite:p:`Kabsch1983`, taken from +*pydssp* v.0.9.0 (https://github.com/ShintaroMinami/PyDSSP) by Shintaro Minami, +distributed under MIT license. + +Current implementation doesn't use `einops` as a dependency, instead directly +using `numpy` operations for axis rearrangement. However, this implementation +does not allow for batch computation, in contrast with `pydssp`, since it's +designed to be used in per-frame manner in protein trajectories. +""" + +import numpy as np + +CONST_Q1Q2 = 0.084 +CONST_F = 332 +DEFAULT_CUTOFF = -0.5 +DEFAULT_MARGIN = 1.0 + + +def _upsample(a: np.ndarray, window: int) -> np.ndarray: + """Performs array upsampling with given window along given axis. + + Example + ------- + .. code-block:: python + hbmap = np.arange(4*4).reshape(4,4) + print(hbmap) + # [[ 0 1 2 3] + # [ 4 5 6 7] + # [ 8 9 10 11] + # [12 13 14 15]] + + print(_upsample(hbmap)) + # [[[[ 0 1 2] + # [ 4 5 6] + # [ 8 9 10]] + + # [[ 1 2 3] + # [ 5 6 7] + # [ 9 10 11]]] + + + # [[[ 4 5 6] + # [ 8 9 10] + # [12 13 14]] + + # [[ 5 6 7] + # [ 9 10 11] + # [13 14 15]]]] + + Parameters + ---------- + a : np.ndarray + input array + window : int + upsample window + + Returns + ------- + np.ndarray + unfolded array + """ + return _unfold(_unfold(a, window, -2), window, -2) + + +def _unfold(a: np.ndarray, window: int, axis: int): + "Helper function for 2D array upsampling" + idx = np.arange(window)[:, None] + np.arange(a.shape[axis] - window + 1)[None, :] + unfolded = np.take(a, idx, axis=axis) + return np.moveaxis(unfolded, axis - 1, -1) + + +def _get_hydrogen_atom_position(coord: np.ndarray) -> np.ndarray: + """Fills in hydrogen atoms positions if they are abscent, under the + assumption that C-N-H and H-N-CA angles are perfect 120 degrees, + and N-H bond length is 1.01 A. + + Parameters + ---------- + coord : np.ndarray + input coordinates in Angstrom, shape (n_atoms, 4, 3), + where second axes corresponds to (N, CA, C, O) atom coordinates + + Returns + ------- + np.ndarray + coordinates of additional hydrogens, shape (n_atoms-1, 3) + + .. versionadded:: 2.8.0 + """ + # C_i, N_i, H_i and CA_{i+1} are all in the peptide bond plane + # we wanna get C_{i+1} - N_{i} vectors and normalize them + # --------- + # v1 = vec(C_i, N_i) + # v2 = vec(CA_{i+1}, N_i) + # v3 = vec(N_i, H_i) = ? + # we use the assumption that all the angles are 120 degrees, + # and |v3| = 1.01, hence + # we can derive v3 = (v1/|v1| + v2/|v2|)*|v3| + + # get v1 = vec(C_i, N_i) + vec_cn = coord[1:, 0] - coord[:-1, 2] + vec_cn = vec_cn / np.linalg.norm(vec_cn, axis=-1, keepdims=True) + + # get v2 = vec(CA_{i+1}, N_{i}) + vec_can = coord[1:, 0] - coord[1:, 1] + vec_can = vec_can / np.linalg.norm(vec_can, axis=-1, keepdims=True) + + vec_nh = vec_cn + vec_can + vec_nh = vec_nh / np.linalg.norm(vec_nh, axis=-1, keepdims=True) + + # vec_(0, H) = vec(0, N) + vec_nh + return coord[1:, 0] + 1.01 * vec_nh + + +def get_hbond_map( + coord: np.ndarray, + cutoff: float = DEFAULT_CUTOFF, + margin: float = DEFAULT_MARGIN, + return_e: bool = False, +) -> np.ndarray: + """Returns hydrogen bond map + + Parameters + ---------- + coord : np.ndarray + input coordinates in either (n, 4, 3) or (n, 5, 3) shape + (without or with hydrogens). If hydrogens are not present, then + ideal positions (see :func:_get_hydrogen_atom_positions) are used. + cutoff : float, optional + cutoff, by default DEFAULT_CUTOFF + margin : float, optional + margin, by default DEFAULT_MARGIN + return_e : bool, optional + if to return energy instead of hbond map, by default False + + Returns + ------- + np.ndarray + output hbond map or energy depending on return_e param + + + .. versionadded:: 2.8.0 + """ + n_atoms, n_atom_types, _ = coord.shape + assert n_atom_types in ( + 4, + 5, + ), "Number of atoms should be 4 (N,CA,C,O) or 5 (N,CA,C,O,H)" + + if n_atom_types == 4: + h_1 = _get_hydrogen_atom_position(coord) + elif n_atom_types == 5: + h_1 = coord[1:, 4] + coord = coord[:, :4] + else: # pragma: no cover + raise ValueError("Number of atoms should be 4 (N,CA,C,O) or 5 (N,CA,C,O,H)") + # after this: + # h.shape == (n_atoms, 3) + # coord.shape == (n_atoms, 4, 3) + + # distance matrix + n_1, c_0, o_0 = coord[1:, 0], coord[0:-1, 2], coord[0:-1, 3] + + n = n_atoms - 1 + cmap = np.tile(c_0, (n, 1, 1)) + omap = np.tile(o_0, (n, 1, 1)) + nmap = np.tile(n_1, (1, 1, n)).reshape(n, n, 3) + hmap = np.tile(h_1, (1, 1, n)).reshape(n, n, 3) + + d_on = np.linalg.norm(omap - nmap, axis=-1) + d_ch = np.linalg.norm(cmap - hmap, axis=-1) + d_oh = np.linalg.norm(omap - hmap, axis=-1) + d_cn = np.linalg.norm(cmap - nmap, axis=-1) + + # electrostatic interaction energy + # e[i, j] = e(CO_i) - e(NH_j) + e = np.pad( + CONST_Q1Q2 * (1.0 / d_on + 1.0 / d_ch - 1.0 / d_oh - 1.0 / d_cn) * CONST_F, + [[1, 0], [0, 1]], + ) + + if return_e: # pragma: no cover + return e + + # mask for local pairs (i,i), (i,i+1), (i,i+2) + local_mask = ~np.eye(n_atoms, dtype=bool) + local_mask *= ~np.diag(np.ones(n_atoms - 1, dtype=bool), k=-1) + local_mask *= ~np.diag(np.ones(n_atoms - 2, dtype=bool), k=-2) + # hydrogen bond map (continuous value extension of original definition) + hbond_map = np.clip(cutoff - margin - e, a_min=-margin, a_max=margin) + hbond_map = (np.sin(hbond_map / margin * np.pi / 2) + 1.0) / 2 + hbond_map = hbond_map * local_mask + + return hbond_map + + +def assign(coord: np.ndarray) -> np.ndarray: + """Assigns secondary structure for a given coordinate array, + either with or without assigned hydrogens + + Parameters + ---------- + coord : np.ndarray + input coordinates in either (n, 4, 3) or (n, 5, 3) shape, + without or with hydrogens, respectively. Second dimension `k` represents + (N, CA, C, O) atoms coordinates (if k=4), or (N, CA, C, O, H) coordinates + (when k=5). + + Returns + ------- + np.ndarray + output (n,) array with one-hot labels in C3 notation ('-', 'H', 'E'), + representing loop, helix and sheet, respectively. + + + .. versionadded:: 2.8.0 + """ + # get hydrogen bond map + hbmap = get_hbond_map(coord) + hbmap = np.swapaxes(hbmap, -1, -2) # convert into "i:C=O, j:N-H" form + + # identify turn 3, 4, 5 + turn3 = np.diagonal(hbmap, offset=3) > 0.0 + turn4 = np.diagonal(hbmap, offset=4) > 0.0 + turn5 = np.diagonal(hbmap, offset=5) > 0.0 + + # assignment of helical secondary structures + h3 = np.pad(turn3[:-1] * turn3[1:], [[1, 3]]) + h4 = np.pad(turn4[:-1] * turn4[1:], [[1, 4]]) + h5 = np.pad(turn5[:-1] * turn5[1:], [[1, 5]]) + + # helix4 first, as alpha helix + helix4 = h4 + np.roll(h4, 1, 0) + np.roll(h4, 2, 0) + np.roll(h4, 3, 0) + h3 = h3 * ~np.roll(helix4, -1, 0) * ~helix4 # helix4 is higher prioritized + h5 = h5 * ~np.roll(helix4, -1, 0) * ~helix4 # helix4 is higher prioritized + helix3 = h3 + np.roll(h3, 1, 0) + np.roll(h3, 2, 0) + helix5 = ( + h5 + + np.roll(h5, 1, 0) + + np.roll(h5, 2, 0) + + np.roll(h5, 3, 0) + + np.roll(h5, 4, 0) + ) + + # identify bridge + unfoldmap = _upsample(hbmap, 3) > 0.0 + unfoldmap_rev = np.swapaxes(unfoldmap, 0, 1) + + p_bridge = (unfoldmap[:, :, 0, 1] * unfoldmap_rev[:, :, 1, 2]) + ( + unfoldmap_rev[:, :, 0, 1] * unfoldmap[:, :, 1, 2] + ) + p_bridge = np.pad(p_bridge, [[1, 1], [1, 1]]) + + a_bridge = (unfoldmap[:, :, 1, 1] * unfoldmap_rev[:, :, 1, 1]) + ( + unfoldmap[:, :, 0, 2] * unfoldmap_rev[:, :, 0, 2] + ) + a_bridge = np.pad(a_bridge, [[1, 1], [1, 1]]) + + # ladder + ladder = (p_bridge + a_bridge).sum(-1) > 0.0 + + # H, E, L of C3 + helix = (helix3 + helix4 + helix5) > 0.0 + strand = ladder + loop = ~helix * ~strand + + onehot = np.stack([loop, helix, strand], axis=-1) + return onehot diff --git a/package/MDAnalysis/analysis/helix_analysis.py b/package/MDAnalysis/analysis/helix_analysis.py index 7bf07b8f231..da57fbc1ab6 100644 --- a/package/MDAnalysis/analysis/helix_analysis.py +++ b/package/MDAnalysis/analysis/helix_analysis.py @@ -121,7 +121,7 @@ def vector_of_best_fit(coordinates): """ centered = coordinates - coordinates.mean(axis=0) Mt_M = np.matmul(centered.T, centered) - u, s, vh = np.linalg.linalg.svd(Mt_M) + u, s, vh = np.linalg.svd(Mt_M) vector = vh[0] # does vector face first local helix origin? diff --git a/package/MDAnalysis/analysis/hole2/__init__.py b/package/MDAnalysis/analysis/hole2/__init__.py index beab152b301..8bcb8575781 100644 --- a/package/MDAnalysis/analysis/hole2/__init__.py +++ b/package/MDAnalysis/analysis/hole2/__init__.py @@ -34,280 +34,14 @@ :footcite:p:`Smart1993,Smart1996` to analyse an ion channel pore or transporter pathway :footcite:p:`Stelzl2014`. -Using HOLE on a PDB file ------------------------- - -Use the :func:``hole`` function to run `HOLE`_ on a single PDB file. For example, -the code below runs the `HOLE`_ program installed at '~/hole2/exe/hole' :: - - from MDAnalysis.tests.datafiles import PDB_HOLE - from MDAnalysis.analysis import hole2 - profiles = hole2.hole(PDB_HOLE, executable='~/hole2/exe/hole') - # to create a VMD surface of the pore - hole2.create_vmd_surface(filename='hole.vmd') - -``profiles`` is a dictionary of HOLE profiles, indexed by the frame number. If only -a PDB file is passed to the function, there will only be one profile at frame 0. -You can visualise the pore by loading your PDB file into VMD, and in -Extensions > Tk Console, type:: - - source hole.vmd - -You can also pass a DCD trajectory with the same atoms in the same order as -your PDB file with the ``dcd`` keyword argument. In that case, ``profiles`` will -contain multiple HOLE profiles, indexed by frame. - -The HOLE program will create some output files: - -* an output file (default name: hole.out) -* an sphpdb file (default name: hole.sph) -* a file of van der Waals' radii - (if not specified with ``vdwradii_file``. Default name: simple2.rad) -* a symlink of your PDB or DCD files (if the original name is too long) -* the input text (if you specify ``infile``) - -By default (`keep_files=True`), these files are kept. If you would like to -delete the files after the function is wrong, set `keep_files=False`. Keep in -mind that if you delete the sphpdb file, you cannot then create a VMD surface. - - -Using HOLE on a trajectory --------------------------- - -You can also run HOLE on a trajectory through the :class:`HoleAnalysis` class. -This behaves similarly to the ``hole`` function, although arguments such as ``cpoint`` -and ``cvect`` become runtime arguments for the :meth:`~HoleAnalysis.run` function. - -The class can be set-up and run like a normal MDAnalysis analysis class:: - - import MDAnalysis as mda - from MDAnalysis.tests.datafiles import MULTIPDB_HOLE - from MDAnalysis.analysis import hole2 - - u = mda.Universe(MULTIPDB_HOLE) - - ha = hole2.HoleAnalysis(u, executable='~/hole2/exe/hole') as h2: - ha.run() - ha.create_vmd_surface(filename='hole.vmd') - -The VMD surface created by the class updates the pore for each frame of the trajectory. -Use it as normal by loading your trajectory in VMD and sourcing the file in the Tk Console. - -You can access the actual profiles generated in the ``results`` attribute:: - - print(ha.results.profiles) - -Again, HOLE writes out files for each frame. If you would like to delete these files -after the analysis, you can call :meth:`~HoleAnalysis.delete_temporary_files`:: - - ha.delete_temporary_files() - -Alternatively, you can use HoleAnalysis as a context manager that deletes temporary -files when you are finished with the context manager:: - - with hole2.HoleAnalysis(u, executable='~/hole2/exe/hole') as h2: - h2.run() - h2.create_vmd_surface() - - -Using HOLE with VMD -------------------- - -The :program:`sos_triangle` program that is part of HOLE_ can write an input -file for VMD_ to display a triangulated surface of the pore found by -:program:`hole`. This functionality is available with the -:meth:`HoleAnalysis.create_vmd_surface` method -[#create_vmd_surface_function]_. For an input trajectory MDAnalysis writes a -*trajectory* of pore surfaces that can be animated in VMD together with the -frames from the trajectory. - - -Analyzing a full trajectory -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -To analyze a full trajectory and write pore surfaces for all frames to file -:file:`hole_surface.vmd`, use :: - - import MDAnalysis as mda - from MDAnalysis.analysis import hole2 - - # load example trajectory MULTIPDB_HOLE - from MDAnalysis.tests.datafiles import MULTIPDB_HOLE - - u = mda.Universe(MULTIPDB_HOLE) - - with hole2.HoleAnalysis(u, executable='~/hole2/exe/hole') as h2: - h2.run() - h2.create_vmd_surface(filename="hole_surface.vmd") - -In VMD, load your trajectory and then in the tcl console -(e.g.. :menuselection:`Extensions --> Tk Console`) load the surface -trajectory: - -.. code-block:: tcl - - source hole_surface.vmd - -If you only want to *subsample the trajectory* and only show the surface at -specific frames then you can either load the trajectory with the same -subsampling into VMD or create a subsampled trajectory. - - -Creating subsampled HOLE surface -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For example, if we want to start displaying at frame 1 (i.e., skip frame 0), stop at frame 7, and -only show every other frame (step 2) then the HOLE analysis will be :: - - with hole2.HoleAnalysis(u, executable='~/hole2/exe/hole') as h2: - h2.run(start=1, stop=9, step=2) - h2.create_vmd_surface(filename="hole_surface_subsampled.vmd") - -The commands produce the file ``hole_surface_subsampled.vmd`` that can be loaded into VMD. - -.. Note:: - - Python (and MDAnalysis) stop indices are *exclusive* so the parameters - ``start=1``, ``stop=9``, and ``step=2`` will analyze frames 1, 3, 5, 7. - -.. _Loading-a-trajectory-into-VMD-with-subsampling: - -Loading a trajectory into VMD with subsampling -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Load your system into VMD. This can mean to load the topology file with -:menuselection:`File --> New Molecule` and adding the trajectory with -:menuselection:`File --> Load Data into Molecule` or just :menuselection:`File ---> New Molecule`. - -When loading the trajectory, subsample the frames by setting parametes in in -the :guilabel:`Frames` section. Select *First: 1*, *Last: 7*, *Stride: 2*. Then -:guilabel:`Load` everything. - -.. Note:: - - VMD considers the stop/last frame to be *inclusive* so you need to typically - choose one less than the ``stop`` value that you selected in MDAnalysis. - -Then load the surface trajectory: - -.. code-block:: tcl - - source hole_surface_subsampled.vmd - -You should see a different surface for each frame in the trajectory. [#vmd_extra_frame]_ - - -Creating a subsampled trajectory -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Instead of having VMD subsample the trajectory as described in -:ref:`Loading-a-trajectory-into-VMD-with-subsampling` we can write a subsampled -trajectory to a file. Although it requires more disk space, it can be -convenient if we want to visualize the system repeatedly. - -The example trajectory comes as a multi-PDB file so we need a suitable topology -file. If you already have a topology file such as a PSF, TPR, or PRMTOP file -then skip this step. We write frame 0 as a PDB :file:`frame0.pdb` (which we -will use as the topology in VMD):: - - u.atoms.write("frame0.pdb") - -Then write the actual trajectory in a convenient format such as TRR (or -DCD). Note that we apply the same slicing (``start=1``, ``stop=9``, ``step=2``) -to the trajectory itself and then use it as the value for the ``frames`` -parameter of :meth:`AtomGroup.write` -method:: - - u.atoms.write("subsampled.trr", frames=u.trajectory[1:9:2]) - -This command creates the subsampled trajectory file :file:`subsampled.trr` in -TRR format. - -In VMD we load the topology and the trajectory and then load the surface. In -our example we have a PDB file (:file:`frame0.pdb`) as topology so we need to -remove the first frame [#vmd_extra_frame]_ (skip the "trim" step below if you -are using a true topology file such as PSF, TPR, or PRMTOP). To keep this -example compact, we are using the tcl command line interface in VMD_ -(:menuselection:`Extensions --> Tk Console`) for loading and trimming the -trajectory; you can use the menu commands if you prefer. - -.. code-block:: tcl - - # load topology and subsampled trajectory - mol load pdb frame0.pdb trr subsampled.trr - - # trim first frame (frame0) -- SKIP if using PSF, TPR, PRMTOP - animate delete beg 0 end 0 - - # load the HOLE surface trajectory - source hole_surface_subsampled.vmd - -You can now animate your molecule together with the surface and render it. - - -.. _HOLE: http://www.holeprogram.org -.. _VMD: https://www.ks.uiuc.edu/Research/vmd/ - -Functions and classes ---------------------- - -.. autofunction:: hole - -.. autoclass:: HoleAnalysis - :members: - - -.. rubric:: References - -.. footbibliography:: - -.. rubric:: Footnotes - -.. Footnotes - -.. [#create_vmd_surface_function] If you use the :class:`hole` class to run - :program:`hole` on a single PDB file then you can use - :func:`MDAnalysis.analysis.hole2.utils.create_vmd_surface` - function to manually run :program:`sph_process` and - :program:`sos_triangle` on the output files andcr eate a surface - file. - -.. [#vmd_extra_frame] If you loaded your system in VMD_ from separate topology - and trajectory files and the topology file contained coordinates - (such as a PDB or GRO) file then your trajectory will have an - extra initial frame containing the coordinates from your topology - file. Delete the initial frame with :menuselection:`Molecule --> - Delete Frames` by setting *First* to 0 and *Last* to 0 and - selecting :guilabel:`Delete`. - -.. [#HOLEDCD] PDB files are not the only files that :program:`hole` can - read. In principle, it is also able to read CHARMM DCD - trajectories and generate a hole profile for each frame. However, - native support for DCD in :program:`hole` is patchy and not every - DCD is recognized. In particular, At the moment, DCDs generated - with MDAnalysis are not accepted by HOLE. To overcome this - PDB / DCD limitation, use :class:`HoleAnalysis` which creates - temporary PDB files for each frame of a - :class:`~MDAnalysis.core.universe.Universe` or - :class:`~MDAnalysis.core.universe.AtomGroup` and runs - :func:``hole`` on each of them. - """ -from ...due import due, Doi -from .hole import hole, HoleAnalysis -from .utils import create_vmd_surface - -due.cite(Doi("10.1016/S0006-3495(93)81293-1"), - description="HOLE program", - path="MDAnalysis.analysis.hole2", - cite_module=True) -due.cite(Doi("10.1016/S0263-7855(97)00009-X"), - description="HOLE program", - path="MDAnalysis.analysis.hole2", - cite_module=True) -due.cite(Doi("10.1016/j.jmb.2013.10.024"), - description="HOLE trajectory analysis with orderparameters", - path="MDAnalysis.analysis.hole2", - cite_module=True) -del Doi +import warnings +from mdahole2.analysis.hole import hole, HoleAnalysis +from mdahole2.analysis import utils, templates +from mdahole2.analysis.utils import create_vmd_surface + +wmsg = ("Deprecated in version 2.8.0\n" + "MDAnalysis.analysis.hole2 is deprecated in favour of the " + "MDAKit madahole2 (https://www.mdanalysis.org/mdahole2/) " + "and will be removed in MDAnalysis version 3.0.0") +warnings.warn(wmsg, category=DeprecationWarning) diff --git a/package/MDAnalysis/analysis/hole2/hole.py b/package/MDAnalysis/analysis/hole2/hole.py deleted file mode 100644 index 4167e0e50c8..00000000000 --- a/package/MDAnalysis/analysis/hole2/hole.py +++ /dev/null @@ -1,1418 +0,0 @@ -# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*- -# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -# -# MDAnalysis --- https://www.mdanalysis.org -# Copyright (c) 2006-2020 The MDAnalysis Development Team and contributors -# (see the file AUTHORS for the full list of names) -# -# Released under the GNU Public Licence, v2 or any higher version -# -# Please cite your use of MDAnalysis in published work: -# -# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, -# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. -# MDAnalysis: A Python package for the rapid analysis of molecular dynamics -# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th -# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. -# doi: 10.25080/majora-629e541a-00e -# -# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. -# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. -# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 -# -import os -import errno -import shutil -import tempfile -import textwrap -import logging -import itertools -import warnings - -import numpy as np -import matplotlib -import matplotlib.pyplot as plt -from collections import OrderedDict - -from MDAnalysis.lib.util import deprecate -from ...exceptions import ApplicationError -from ..base import AnalysisBase -from ...lib import util -from .utils import (check_and_fix_long_filename, write_simplerad2, - set_up_hole_input, run_hole, collect_hole, - create_vmd_surface) -from .templates import (hole_input, hole_lines, vmd_script_array, - vmd_script_function, exe_err, - IGNORE_RESIDUES) - -logger = logging.getLogger(__name__) - - -@deprecate(release="2.6.0", remove="3.0.0", - message=("This method has been moved to the MDAKit hole2-mdakit: " - "https://github.com/MDAnalysis/hole2-mdakit")) -def hole(pdbfile, - infile_text=None, - infile=None, - outfile='hole.out', - sphpdb_file='hole.sph', - vdwradii_file=None, - executable='hole', - tmpdir=os.path.curdir, - sample=0.2, - end_radius=22.0, - cpoint=None, - cvect=None, - random_seed=None, - ignore_residues=IGNORE_RESIDUES, - output_level=0, - dcd=None, - dcd_iniskip=0, - dcd_step=1, - keep_files=True): - r"""Run :program:`hole` on a single frame or a DCD trajectory. - - :program:`hole` is part of the HOLE_ suite of programs. It is used to - analyze channels and cavities in proteins, especially ion channels. - - Only a subset of all `HOLE control parameters `_ - is supported and can be set with keyword arguments. - - Parameters - ---------- - - pdbfile : str - The `filename` is used as input for HOLE in the "COORD" card of the - input file. It specifies the name of a PDB coordinate file to be - used. This must be in Brookhaven protein databank format or - something closely approximating this. Both ATOM and HETATM records - are read. - infile_text: str, optional - HOLE input text or template. If set to ``None``, the function will - create the input text from the other parameters. - infile: str, optional - File to write the HOLE input text for later inspection. If set to - ``None``, the input text is not written out. - outfile : str, optional - file name of the file collecting HOLE's output (which can be - parsed using :meth:`collect_hole(outfile)`. - sphpdb_file : str, optional - path to the HOLE sph file, a PDB-like file containing the - coordinates of the pore centers. - The coordinates are set to the sphere centres and the occupancies - are the sphere radii. All centres are assigned the atom name QSS and - residue name SPH and the residue number is set to the storage - number of the centre. In VMD, sph - objects are best displayed as "Points". Displaying .sph objects - rather than rendered or dot surfaces can be useful to analyze the - distance of particular atoms from the sphere-centre line. - .sph files can be used to produce molecular graphical - output from a hole run, by using the - :program:`sph_process` program to read the .sph file. - vdwradii_file: str, optional - path to the file specifying van der Waals radii for each atom. If - set to ``None``, then a set of default radii, - :data:`SIMPLE2_RAD`, is used (an extension of ``simple.rad`` from - the HOLE distribution). - executable: str, optional - Path to the :program:`hole` executable. - (e.g. ``~/hole2/exe/hole``). If - :program:`hole` is found on the :envvar:`PATH`, then the bare - executable name is sufficient. - tmpdir: str, optional - The temporary directory that files can be symlinked to, to shorten - the path name. HOLE can only read filenames up to a certain length. - sample : float, optional - distance of sample points in Å. - Specifies the distance between the planes used in the HOLE - procedure. The default value should be reasonable for most - purposes. However, if you wish to visualize a very tight - constriction then specify a smaller value. - This value determines how many points in the pore profile are - calculated. - end_radius : float, optional - Radius in Å, which is considered to be the end of the pore. This - keyword can be used to specify the radius above which the - program regards a result as indicating that the end of the pore - has been reached. This may need to be increased for large channels, - or reduced for small channels. - cpoint : array_like, 'center_of_geometry' or None, optional - coordinates of a point inside the pore, e.g. ``[12.3, 0.7, - 18.55]``. If set to ``None`` (the default) then HOLE's own search - algorithm is used. - ``cpoint`` specifies a point which lies within the channel. For - simple channels (e.g. gramicidin), results do not show great - sensitivity to the exact point taken. An easy way to produce an - initial point is to use molecular graphics to find two atoms which - lie either side of the pore and to average their coordinates. Or - if the channel structure contains water molecules or counter ions - then take the coordinates of one of these (and use the - ``ignore_residues`` keyword to ignore them in the pore radius - calculation). - If this card is not specified, then HOLE (from version 2.2) - attempts to guess where the channel will be. The procedure - assumes the channel is reasonably symmetric. The initial guess on - cpoint will be the centroid of all alpha carbon atoms (name 'CA' - in pdb file). This is then refined by a crude grid search up to 5 - Å from the original position. This procedure works most of the - time but is far from infallible — results should be - carefully checked (with molecular graphics) if it is used. - cvect : array_like, optional - Search direction, should be parallel to the pore axis, - e.g. ``[0,0,1]`` for the z-axis. - If this keyword is ``None`` (the default), then HOLE attempts to guess - where the channel will be. The procedure assumes that the channel is - reasonably symmetric. The guess will be either along the X axis - (1,0,0), Y axis (0,1,0) or Z axis (0,0,1). If the structure is not - aligned on one of these axis the results will clearly be - approximate. If a guess is used then results should be carefully - checked. - random_seed : int, optional - integer number to start the random number generator. - By default, - :program:`hole` will use the time of the day. - For reproducible runs (e.g., for testing) set ``random_seed`` - to an integer. - ignore_residues : array_like, optional - sequence of three-letter residues that are not taken into - account during the calculation; wildcards are *not* - supported. Note that all residues must have 3 letters. Pad - with space on the right-hand side if necessary. - output_level : int, optional - Determines the output of output in the ``outfile``. - For automated processing, this must be < 3. - 0: Full text output, - 1: All text output given except "run in progress" (i.e., - detailed contemporary description of what HOLE is doing). - 2: Ditto plus no graph type output - only leaving minimum - radius and conductance calculations. - 3: All text output other than input card mirroring and error messages - turned off. - dcd : str, optional - File name of CHARMM-style DCD trajectory (must be supplied together with a - matching PDB file `filename`) and then HOLE runs its analysis on - each frame. HOLE can *not* read DCD trajectories written by MDAnalysis, - which are NAMD-style (see Notes). Note that structural parameters - determined for each individual structure are written in a tagged - format so that it is possible to extract the information from the text - output file using a :program:`grep` command. The reading of the file - can be controlled by the ``dcd_step`` keyword and/or setting - ``dcd_iniskip`` to the number of frames to be skipped - initially. - dcd_step : int, optional - step size for going through the trajectory (skips ``dcd_step-1`` - frames). - keep_files : bool, optional - Whether to keep the HOLE output files and possible temporary - symlinks after running the function. - - - Returns - ------- - - dict - A dictionary of :class:`numpy.recarray`\ s, indexed by frame. - - - Notes - ----- - - HOLE is very picky and does not read all DCD-like formats [#HOLEDCD]_. - If in doubt, look into the `outfile` for error diagnostics. - - - .. versionadded:: 1.0 - - """ - - if output_level > 3: - msg = 'output_level ({}) needs to be < 3 in order to extract a HOLE profile!' - warnings.warn(msg.format(output_level)) - - # get executable - exe = shutil.which(executable) - if exe is None: - raise OSError(errno.ENOENT, exe_err.format(name=executable, - kw='executable')) - - # get temp files - tmp_files = [outfile, sphpdb_file] - - short_filename = check_and_fix_long_filename(pdbfile, tmpdir=tmpdir) - if os.path.islink(short_filename): - tmp_files.append(short_filename) - - if dcd is not None: - dcd = check_and_fix_long_filename(dcd, tmpdir=tmpdir) - if os.path.islink(dcd): - tmp_files.append(dcd) - - if vdwradii_file is not None: - vdwradii_file = check_and_fix_long_filename(vdwradii_file, - tmpdir=tmpdir) - else: - vdwradii_file = write_simplerad2() - tmp_files.append(vdwradii_file) - - infile_text = set_up_hole_input(short_filename, - infile_text=infile_text, - infile=infile, - sphpdb_file=sphpdb_file, - vdwradii_file=vdwradii_file, - tmpdir=tmpdir, sample=sample, - end_radius=end_radius, - cpoint=cpoint, cvect=cvect, - random_seed=random_seed, - ignore_residues=ignore_residues, - output_level=output_level, - dcd=dcd, - dcd_iniskip=dcd_iniskip, - dcd_step=dcd_step-1) - - run_hole(outfile=outfile, infile_text=infile_text, executable=exe) - recarrays = collect_hole(outfile=outfile) - - if not keep_files: - for file in tmp_files: - try: - os.unlink(file) - except OSError: - pass - - return recarrays - - -class HoleAnalysis(AnalysisBase): - r""" - Run :program:`hole` on a trajectory. - - :program:`hole` is part of the HOLE_ suite of programs. It is used to - analyze channels and cavities in proteins, especially ion channels. - - Only a subset of all `HOLE control parameters `_ - is supported and can be set with keyword arguments. - - This class creates temporary PDB files for each frame and runs HOLE on - the frame. It can be used normally, or as a context manager. If used as a - context manager, the class will try to delete any temporary files created - by HOLE, e.g. sphpdb files and logfiles. :: - - with hole2.HoleAnalysis(u, executable='~/hole2/exe/hole') as h2: - h2.run() - h2.create_vmd_surface() - - Parameters - ---------- - - universe : Universe or AtomGroup - The Universe or AtomGroup to apply the analysis to. - select : string, optional - The selection string to create an atom selection that the HOLE - analysis is applied to. - vdwradii_file : str, optional - path to the file specifying van der Waals radii for each atom. If - set to ``None``, then a set of default radii, - :data:`SIMPLE2_RAD`, is used (an extension of ``simple.rad`` from - the HOLE distribution). - executable : str, optional - Path to the :program:`hole` executable. - (e.g. ``~/hole2/exe/hole``). If - :program:`hole` is found on the :envvar:`PATH`, then the bare - executable name is sufficient. - tmpdir : str, optional - The temporary directory that files can be symlinked to, to shorten - the path name. HOLE can only read filenames up to a certain length. - cpoint : array_like, 'center_of_geometry' or None, optional - coordinates of a point inside the pore, e.g. ``[12.3, 0.7, - 18.55]``. If set to ``None`` (the default) then HOLE's own search - algorithm is used. - ``cpoint`` specifies a point which lies within the channel. For - simple channels (e.g. gramicidin), results do not show great - sensitivity to the exact point taken. An easy way to produce an - initial point is to use molecular graphics to find two atoms which - lie either side of the pore and to average their coordinates. Or - if the channel structure contains water molecules or counter ions - then take the coordinates of one of these (and use the - ``ignore_residues`` keyword to ignore them in the pore radius - calculation). - If this card is not specified, then HOLE (from version 2.2) - attempts to guess where the channel will be. The procedure - assumes the channel is reasonably symmetric. The initial guess on - cpoint will be the centroid of all alpha carbon atoms (name 'CA' - in pdb file). This is then refined by a crude grid search up to 5 - Å from the original position. This procedure works most of the - time but is far from infallible — results should be - carefully checked (with molecular graphics) if it is used. - cvect : array_like, optional - Search direction, should be parallel to the pore axis, - e.g. ``[0,0,1]`` for the z-axis. - If this keyword is ``None`` (the default), then HOLE attempts to guess - where the channel will be. The procedure assumes that the channel is - reasonably symmetric. The guess will be either along the X axis - (1,0,0), Y axis (0,1,0) or Z axis (0,0,1). If the structure is not - aligned on one of these axis the results will clearly be - approximate. If a guess is used then results should be carefully - checked. - sample : float, optional - distance of sample points in Å. - Specifies the distance between the planes used in the HOLE - procedure. The default value should be reasonable for most - purposes. However, if you wish to visualize a very tight - constriction then specify a smaller value. - This value determines how many points in the pore profile are - calculated. - end_radius : float, optional - Radius in Å, which is considered to be the end of the pore. This - keyword can be used to specify the radius above which the - program regards a result as indicating that the end of the pore - has been reached. This may need to be increased for large channels, - or reduced for small channels. - output_level : int, optional - Determines the output of output in the ``outfile``. - For automated processing, this must be < 3. - 0: Full text output, - 1: All text output given except "run in progress" (i.e., - detailed contemporary description of what HOLE is doing). - 2: Ditto plus no graph type output - only leaving minimum - radius and conductance calculations. - 3: All text output other than input card mirroring and error messages - turned off. - ignore_residues : array_like, optional - sequence of three-letter residues that are not taken into - account during the calculation; wildcards are *not* - supported. Note that all residues must have 3 letters. Pad - with space on the right-hand side if necessary. - prefix : str, optional - Prefix for HOLE output files. - write_input_files : bool, optional - Whether to write out the input HOLE text as files. - Files are called `hole.inp`. - - - Attributes - ---------- - results.sphpdbs: numpy.ndarray - Array of sphpdb filenames - - .. versionadded:: 2.0.0 - - results.outfiles: numpy.ndarray - Arrau of output filenames - - .. versionadded:: 2.0.0 - - results.profiles: dict - Profiles generated by HOLE2. - A dictionary of :class:`numpy.recarray`\ s, indexed by frame. - - .. versionadded:: 2.0.0 - - sphpdbs: numpy.ndarray - Alias of :attr:`results.sphpdbs` - - .. deprecated:: 2.0.0 - This will be removed in MDAnalysis 3.0.0. Please use - :attr:`results.sphpdbs` instead. - - outfiles: numpy.ndarray - Alias of :attr:`results.outfiles` - - .. deprecated:: 2.0.0 - This will be removed in MDAnalysis 3.0.0. Please use - :attr:`results.outfiles` instead. - - profiles: dict - Alias of :attr:`results.profiles` - - .. deprecated:: 2.0.0 - This will be removed in MDAnalysis 3.0.0. Please use - :attr:`results.profiles` instead. - - .. versionadded:: 1.0 - - .. versionchanged:: 2.0.0 - :attr:`sphpdbs`, :attr:`outfiles` and :attr:`profiles ` - are now stored in a :class:`MDAnalysis.analysis.base.Results` - instance. - - .. deprecated:: 2.6.0 - This class has been moved to the MDAKit - `hole2-mdakit `_ and will - be removed for the core MDAnalysis library in version 3.0 - - """ - - input_file = '{prefix}hole{i:03d}.inp' - output_file = '{prefix}hole{i:03d}.out' - sphpdb_file = '{prefix}hole{i:03d}.sph' - - input_file = '{prefix}hole{i:03d}.inp' - output_file = '{prefix}hole{i:03d}.out' - sphpdb_file = '{prefix}hole{i:03d}.sph' - - hole_header = textwrap.dedent(""" - ! Input file for Oliver Smart's HOLE program - ! written by MDAnalysis.analysis.hole2.HoleAnalysis - ! for a Universe - ! u = mda.Universe({} - ! ) - ! Frame {{i}} - """) - - hole_body = textwrap.dedent(""" - COORD {{coordinates}} - RADIUS {radius} - SPHPDB {{sphpdb}} - SAMPLE {sample:f} - ENDRAD {end_radius:f} - IGNORE {ignore} - SHORTO {output_level:d} - """) - - _guess_cpoint = False - - def __init__(self, universe, - select='protein', - verbose=False, - ignore_residues=IGNORE_RESIDUES, - vdwradii_file=None, - executable='hole', - sos_triangle='sos_triangle', - sph_process='sph_process', - tmpdir=os.path.curdir, - cpoint=None, - cvect=None, - sample=0.2, - end_radius=22, - output_level=0, - prefix=None, - write_input_files=False): - super(HoleAnalysis, self).__init__(universe.universe.trajectory, - verbose=verbose) - - wmsg = ("This class has been moved to the MDAKit `hole2-mdakit` " - "(https://github.com/MDAnalysis/hole2-mdakit) and will be " - "removed in version 3.0.") - warnings.warn(wmsg, DeprecationWarning) - - if output_level > 3: - msg = 'output_level ({}) needs to be < 3 in order to extract a HOLE profile!' - warnings.warn(msg.format(output_level)) - - if prefix is None: - prefix = '' - - if isinstance(cpoint, str): - if 'geometry' in cpoint.lower(): - self._guess_cpoint = True - self.cpoint = '{cpoint[0]:.10f} {cpoint[1]:.10f} {cpoint[2]:.10f}' - else: - self._guess_cpoint = False - self.cpoint = cpoint - - self.prefix = prefix - self.cvect = cvect - self.sample = sample - self.end_radius = end_radius - self.output_level = output_level - self.write_input_files = write_input_files - self.select = select - self.ag = universe.select_atoms(select, updating=True) - self.universe = universe - self.tmpdir = tmpdir - self.ignore_residues = ignore_residues - - # --- finding executables ---- - hole = shutil.which(executable) - if hole is None: - raise OSError(errno.ENOENT, exe_err.format(name=executable, - kw='executable')) - self.base_path = os.path.dirname(hole) - - sos_triangle_path = shutil.which(sos_triangle) - if sos_triangle_path is None: - path = os.path.join(self.base_path, sos_triangle) - sos_triangle_path = shutil.which(path) - if sos_triangle_path is None: - raise OSError(errno.ENOENT, exe_err.format(name=sos_triangle, - kw='sos_triangle')) - sph_process_path = shutil.which(sph_process) - if sph_process_path is None: - path = os.path.join(self.base_path, sph_process) - sph_process_path = shutil.which(path) - if sph_process_path is None: - raise OSError(errno.ENOENT, exe_err.format(name=sph_process, - kw='sph_process')) - - self.exe = { - 'hole': hole, - 'sos_triangle': sos_triangle_path, - 'sph_process': sph_process_path - } - - # --- setting up temp files ---- - self.tmp_files = [] - if vdwradii_file is not None: - self.vdwradii_file = check_and_fix_long_filename(vdwradii_file, - tmpdir=self.tmpdir) - if os.path.islink(self.vdwradii_file): - self.tmp_files.append(self.vdwradii_file) - else: - self.vdwradii_file = write_simplerad2() - self.tmp_files.append(self.vdwradii_file) - - # --- setting up input header ---- - filenames = [universe.filename] - try: - filenames.extend(universe.trajectory.filenames) - except AttributeError: - filenames.append(universe.trajectory.filename) - filenames = [name for name in filenames if name is not None] - hole_filenames = '\n! '.join(filenames) - self._input_header = self.hole_header.format(hole_filenames) - - def run(self, start=None, stop=None, step=None, verbose=None, - random_seed=None): - """ - Perform the calculation - - Parameters - ---------- - start : int, optional - start frame of analysis - - stop : int, optional - stop frame of analysis - - step : int, optional - number of frames to skip between each analysed frame - - verbose : bool, optional - Turn on verbosity - - random_seed : int, optional - integer number to start the random number generator. - By default, - :program:`hole` will use the time of the day. - For reproducible runs (e.g., for testing) set ``random_seed`` - to an integer. - """ - self.random_seed = random_seed - return super(HoleAnalysis, self).run(start=start, stop=stop, - step=step, verbose=verbose) - - @property - def sphpdbs(self): - wmsg = ("The `sphpdbs` attribute was deprecated in " - "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " - "Please use `results.sphpdbs` instead.") - warnings.warn(wmsg, DeprecationWarning) - return self.results.sphpdbs - - @property - def outfiles(self): - wmsg = ("The `outfiles` attribute was deprecated in " - "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " - "Please use `results.outfiles` instead.") - warnings.warn(wmsg, DeprecationWarning) - return self.results.outfiles - - @property - def profiles(self): - wmsg = ("The `profiles` attribute was deprecated in " - "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " - "Please use `results.profiles` instead.") - warnings.warn(wmsg, DeprecationWarning) - return self.results.profiles - - def _prepare(self): - """Set up containers and generate input file text""" - # set up containers - self.results.sphpdbs = np.zeros(self.n_frames, dtype=object) - self.results.outfiles = np.zeros(self.n_frames, dtype=object) - self.results.profiles = {} - - # generate input file - body = set_up_hole_input('', - infile_text=self.hole_body, - infile=None, - vdwradii_file=self.vdwradii_file, - tmpdir=self.tmpdir, - sample=self.sample, - end_radius=self.end_radius, - cpoint=self.cpoint, - cvect=self.cvect, - random_seed=self.random_seed, - ignore_residues=self.ignore_residues, - output_level=self.output_level, - dcd=None) - - self.infile_text = self._input_header + body - - def guess_cpoint(self): - """Guess a point inside the pore. - - This method simply uses the center of geometry of the selection as a - guess. - - Returns - ------- - float: - center of geometry of selected AtomGroup - """ - return self.ag.center_of_geometry() - - def _single_frame(self): - """Run HOLE analysis and collect profiles""" - # set up files - frame = self._ts.frame - i = self._frame_index - outfile = self.output_file.format(prefix=self.prefix, i=frame) - sphpdb = self.sphpdb_file.format(prefix=self.prefix, i=frame) - self.results.sphpdbs[i] = sphpdb - self.results.outfiles[i] = outfile - if outfile not in self.tmp_files: - self.tmp_files.append(outfile) - if sphpdb not in self.tmp_files: - self.tmp_files.append(sphpdb) - else: - self.tmp_files.append(sphpdb + '.old') - - # temp pdb - logger.info('HOLE analysis frame {}'.format(frame)) - fd, pdbfile = tempfile.mkstemp(suffix='.pdb') - os.close(fd) # close immediately (Issue 129) - - # get infile text - fmt_kwargs = {'i': frame, 'coordinates': pdbfile, 'sphpdb': sphpdb} - if self._guess_cpoint: - fmt_kwargs['cpoint'] = self.guess_cpoint() - infile_text = self.infile_text.format(**fmt_kwargs) - - if self.write_input_files: - infile = self.input_file.format(prefix=self.prefix, i=frame) - with open(infile, 'w') as f: - f.write(infile_text) - - try: - self.ag.write(pdbfile) - run_hole(outfile=outfile, infile_text=infile_text, - executable=self.exe['hole']) - finally: - try: - os.unlink(pdbfile) - except OSError: - pass - - recarrays = collect_hole(outfile=outfile) - try: - self.results.profiles[frame] = recarrays[0] - except KeyError: - msg = 'No profile found in HOLE output. Output level: {}' - logger.info(msg.format(self.output_level)) - - def create_vmd_surface(self, filename='hole.vmd', dot_density=15, - no_water_color='red', one_water_color='green', - double_water_color='blue'): - """Process HOLE output to create a smooth pore surface suitable for VMD. - - Takes the ``sphpdb`` file for each frame and feeds it to `sph_process - `_ and - `sos_triangle - `_ as - described under `Visualization of HOLE results - `_. - - Load the output file *filename* into VMD in :menuselection:`Extensions - --> Tk Console` :: - - source hole.vmd - - The level of detail is determined by ``dot_density``. - The surface will be colored by ``no_water_color``, ``one_water_color``, and - ``double_water_color``. You can change these in the - Tk Console:: - - set no_water_color blue - - - Parameters - ---------- - filename: str, optional - file to write the pore surfaces to. - - dot_density: int, optional - density of facets for generating a 3D pore representation. - The number controls the density of dots that will be used. - A sphere of dots is placed on each centre determined in the - Monte Carlo procedure. The actual number of dots written is - controlled by ``dot_density`` and the ``sample`` level of the - original analysis. ``dot_density`` should be set between 5 - (few dots per sphere) and 35 (many dots per sphere). - - no_water_color: str, optional - Color of the surface where the pore radius is too tight for a - water molecule. - - one_water_color: str, optional - Color of the surface where the pore can fit one water molecule. - - double_water_color: str, optional - Color of the surface where the radius is at least double the - minimum radius for one water molecule. - - - Returns - ------- - str - ``filename`` with the pore surfaces. - - """ - if not np.any(self.results.get("sphpdbs", [])): - raise ValueError('No sphpdb files to read. Try calling run()') - - frames = [] - for i, frame in enumerate(self.frames): - sphpdb = self.results.sphpdbs[i] - tmp_tri = create_vmd_surface(sphpdb=sphpdb, - sph_process=self.exe['sph_process'], - sos_triangle=self.exe['sos_triangle'], - dot_density=dot_density) - - shapes = [[], [], []] - with open(tmp_tri) as f: - for line in f: - if line.startswith('draw color'): - color = line.split()[-1].lower() - if color == 'red': - dest = shapes[0] - elif color == 'green': - dest = shapes[1] - elif color == 'blue': - dest = shapes[2] - else: - msg = 'Encountered unknown color {}' - raise ValueError(msg.format(color)) - - if line.startswith('draw trinorm'): - line = line.strip('draw trinorm').strip() - dest.append('{{ {} }}'.format(line)) - try: - os.unlink(tmp_tri) - except OSError: - pass - - tri = '{ { ' + ' } { '.join(list(map(' '.join, shapes))) + ' } }' - frames.append(f'set triangles({i}) ' + tri) - - trinorms = '\n'.join(frames) - vmd_1 = vmd_script_array.format(no_water_color=no_water_color, - one_water_color=one_water_color, - double_water_color=double_water_color) - vmd_text = vmd_1 + trinorms + vmd_script_function - - with open(filename, 'w') as f: - f.write(vmd_text) - - return filename - - def min_radius(self): - """Return the minimum radius over all profiles as a function of q""" - profiles = self.results.get("profiles") - if not profiles: - raise ValueError('No profiles available. Try calling run()') - return np.array([[q, p.radius.min()] for q, p in profiles.items()]) - - def delete_temporary_files(self): - """Delete temporary files""" - for f in self.tmp_files: - try: - os.unlink(f) - except OSError: - pass - self.tmp_files = [] - self.results.outfiles = [] - self.results.sphpdbs = [] - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - """Delete temporary files on exit""" - self.delete_temporary_files() - - def _process_plot_kwargs(self, frames=None, - color=None, cmap='viridis', - linestyle='-'): - """Process the colors and linestyles for plotting - - Parameters - ---------- - frames : array-like, optional - Frames to plot. If ``None``, plots all of them. - color : str or array-like, optional - Color or colors for the plot. If ``None``, colors are - drawn from ``cmap``. - cmap : str, optional - color map to make colors for the plot if ``color`` is - not given. Names should be from the ``matplotlib.pyplot.cm`` - module. - linestyle : str or array-like, optional - Line style for the plot. - - - Returns - ------- - (array-like, array-like, array-like) - frames, colors, linestyles - """ - - if frames is None: - frames = self.frames - else: - frames = util.asiterable(frames) - - if color is None: - colormap = matplotlib.colormaps.get_cmap(cmap) - norm = matplotlib.colors.Normalize(vmin=min(frames), - vmax=max(frames)) - colors = colormap(norm(frames)) - else: - colors = itertools.cycle(util.asiterable(color)) - - linestyles = itertools.cycle(util.asiterable(linestyle)) - - return frames, colors, linestyles - - def plot(self, frames=None, - color=None, cmap='viridis', - linestyle='-', y_shift=0.0, - label=True, ax=None, - legend_loc='best', **kwargs): - r"""Plot HOLE profiles :math:`R(\zeta)` in a 1D graph. - - Lines are colored according to the specified ``color`` or - drawn from the color map ``cmap``. One line is - plotted for each trajectory frame. - - Parameters - ---------- - frames: array-like, optional - Frames to plot. If ``None``, plots all of them. - color: str or array-like, optional - Color or colors for the plot. If ``None``, colors are - drawn from ``cmap``. - cmap: str, optional - color map to make colors for the plot if ``color`` is - not given. Names should be from the ``matplotlib.pyplot.cm`` - module. - linestyle: str or array-like, optional - Line style for the plot. - y_shift : float, optional - displace each :math:`R(\zeta)` profile by ``y_shift`` in the - :math:`y`-direction for clearer visualization. - label : bool or string, optional - If ``False`` then no legend is - displayed. - ax : :class:`matplotlib.axes.Axes` - If no `ax` is supplied or set to ``None`` then the plot will - be added to the current active axes. - legend_loc : str, optional - Location of the legend. - kwargs : `**kwargs` - All other `kwargs` are passed to :func:`matplotlib.pyplot.plot`. - - - Returns - ------- - ax : :class:`~matplotlib.axes.Axes` - Axes with the plot, either `ax` or the current axes. - - """ - - if not self.results.get("profiles"): - raise ValueError('No profiles available. Try calling run()') - - if ax is None: - fig, ax = plt.subplots() - - fcl = self._process_plot_kwargs(frames=frames, color=color, - cmap=cmap, linestyle=linestyle) - - for i, (frame, c, ls) in enumerate(zip(*fcl)): - profile = self.results.profiles[frame] - dy = i*y_shift - ax.plot(profile.rxn_coord, profile.radius+dy, color=c, - linestyle=ls, zorder=-frame, label=str(frame), - **kwargs) - - ax.set_xlabel(r"Pore coordinate $\zeta$ ($\AA$)") - ax.set_ylabel(r"HOLE radius $R$ ($\AA$)") - if label == True: - ax.legend(loc=legend_loc) - return ax - - def plot3D(self, frames=None, - color=None, cmap='viridis', - linestyle='-', ax=None, r_max=None, - ylabel='Frames', **kwargs): - r"""Stacked 3D graph of profiles :math:`R(\zeta)`. - - Lines are colored according to the specified ``color`` or - drawn from the color map ``cmap``. One line is - plotted for each trajectory frame. - - Parameters - ---------- - frames : array-like, optional - Frames to plot. If ``None``, plots all of them. - color : str or array-like, optional - Color or colors for the plot. If ``None``, colors are - drawn from ``cmap``. - cmap : str, optional - color map to make colors for the plot if ``color`` is - not given. Names should be from the ``matplotlib.pyplot.cm`` - module. - linestyle : str or array-like, optional - Line style for the plot. - r_max : float, optional - only display radii up to ``r_max``. If ``None``, all radii are - plotted. - ax : :class:`matplotlib.axes.Axes` - If no `ax` is supplied or set to ``None`` then the plot will - be added to the current active axes. - ylabel : str, optional - Y-axis label. - **kwargs : - All other `kwargs` are passed to :func:`matplotlib.pyplot.plot`. - - - Returns - ------- - ax : :class:`~mpl_toolkits.mplot3d.Axes3D` - Axes with the plot, either `ax` or the current axes. - - """ - - if not self.results.get("profiles"): - raise ValueError('No profiles available. Try calling run()') - - from mpl_toolkits.mplot3d import Axes3D - - if ax is None: - fig = plt.figure() - ax = fig.add_subplot(111, projection='3d') - - fcl = self._process_plot_kwargs(frames=frames, - color=color, cmap=cmap, - linestyle=linestyle) - - for frame, c, ls in zip(*fcl): - profile = self.results.profiles[frame] - if r_max is None: - radius = profile.radius - rxn_coord = profile.rxn_coord - else: - # does not seem to work with masked arrays but with nan hack! - # http://stackoverflow.com/questions/4913306/python-matplotlib-mplot3d-how-do-i-set-a-maximum-value-for-the-z-axis - rxn_coord = profile.rxn_coord - radius = profile.radius.copy() - radius[radius > r_max] = np.nan - ax.plot(rxn_coord, frame*np.ones_like(rxn_coord), radius, - color=c, linestyle=ls, zorder=-frame, label=str(frame), - **kwargs) - - ax.set_xlabel(r"Pore coordinate $\zeta$ ($\AA$)") - ax.set_ylabel(ylabel) - ax.set_zlabel(r"HOLE radius $R$ ($\AA$)") - plt.tight_layout() - - return ax - - def over_order_parameters(self, order_parameters, frames=None): - """Get HOLE profiles sorted over order parameters ``order_parameters``. - - Parameters - ---------- - order_parameters : array-like or string - Sequence or text file containing order parameters (float - numbers) corresponding to the frames in the trajectory. Must - be same length as trajectory. - frames : array-like, optional - Selected frames to return. If ``None``, returns all of them. - - Returns - ------- - collections.OrderedDict - sorted dictionary of {order_parameter:profile} - - """ - if not self.results.get("profiles"): - raise ValueError('No profiles available. Try calling run()') - if isinstance(order_parameters, str): - try: - order_parameters = np.loadtxt(order_parameters) - except IOError: - raise ValueError('Data file not found: {}'.format(order_parameters)) - except (ValueError, TypeError): - msg = ('Could not parse given file: {}. ' - '`order_parameters` must be array-like ' - 'or a filename with array data ' - 'that can be read by np.loadtxt') - raise ValueError(msg.format(order_parameters)) - - - order_parameters = np.asarray(order_parameters) - - if len(order_parameters) != len(self._trajectory): - msg = ('The number of order parameters ({}) must match the ' - 'length of the trajectory ({} frames)') - raise ValueError(msg.format(len(order_parameters), - len(self._trajectory))) - - if frames is None: - frames = self.frames - else: - frames = np.asarray(util.asiterable(frames)) - - idx = np.argsort(order_parameters[frames]) - sorted_frames = frames[idx] - - profiles = OrderedDict() - for frame in sorted_frames: - profiles[order_parameters[frame]] = self.results.profiles[frame] - - return profiles - - def plot_order_parameters(self, order_parameters, - aggregator=min, - frames=None, - color='blue', - linestyle='-', ax=None, - ylabel=r'Minimum HOLE pore radius $r$ ($\AA$)', - xlabel='Order parameter', - **kwargs): - r"""Plot HOLE radii over order parameters. This function needs - an ``aggregator`` function to reduce the ``radius`` array to a - single value, e.g. ``min``, ``max``, or ``np.mean``. - - Parameters - ---------- - order_parameters : array-like or string - Sequence or text file containing order parameters (float - numbers) corresponding to the frames in the trajectory. Must - be same length as trajectory. - aggregator : callable, optional - Function applied to the radius array of each profile to - reduce it to one representative value. - frames : array-like, optional - Frames to plot. If ``None``, plots all of them. - color : str or array-like, optional - Color for the plot. - linestyle : str or array-like, optional - Line style for the plot. - ax : :class:`matplotlib.axes.Axes` - If no `ax` is supplied or set to ``None`` then the plot will - be added to the current active axes. - xlabel : str, optional - X-axis label. - ylabel : str, optional - Y-axis label. - **kwargs : - All other `kwargs` are passed to :func:`matplotlib.pyplot.plot`. - - - Returns - ------- - ax : :class:`~matplotlib.axes.Axes` - Axes with the plot, either `ax` or the current axes. - - """ - - op_profiles = self.over_order_parameters(order_parameters, - frames=frames) - - if ax is None: - fig, ax = plt.subplots() - - data = [[x, aggregator(p.radius)] for x, p in op_profiles.items()] - arr = np.array(data) - ax.plot(arr[:, 0], arr[:, 1], color=color, linestyle=linestyle) - - ax.set_xlabel(xlabel) - ax.set_ylabel(ylabel) - return ax - - def gather(self, frames=None, flat=False): - """Gather the fields of each profile recarray together. - - Parameters - ---------- - frames : int or iterable of ints, optional - Profiles to include by frame. If ``None``, includes - all frames. - flat : bool, optional - Whether to flatten the list of field arrays into a - single array. - - Returns - ------- - dict - dictionary of fields - """ - if frames is None: - frames = self.frames - frames = util.asiterable(frames) - profiles = [self.results.profiles[k] for k in frames] - - rxncoords = [p.rxn_coord for p in profiles] - radii = [p.radius for p in profiles] - cen_line_Ds = [p.cen_line_D for p in profiles] - - if flat: - rxncoords = np.concatenate(rxncoords) - radii = np.concatenate(radii) - cen_line_Ds = np.concatenate(cen_line_Ds) - - dct = {'rxn_coord': rxncoords, - 'radius': radii, - 'cen_line_D': cen_line_Ds} - return dct - - def bin_radii(self, frames=None, bins=100, range=None): - """Collects the pore radii into bins by reaction coordinate. - - Parameters - ---------- - frames : int or iterable of ints, optional - Profiles to include by frame. If ``None``, includes - all frames. - bins : int or iterable of edges, optional - If bins is an int, it defines the number of equal-width bins in the given - range. If bins is a sequence, it defines a monotonically increasing array of - bin edges, including the rightmost edge, allowing for non-uniform bin widths. - range : (float, float), optional - The lower and upper range of the bins. - If not provided, ``range`` is simply ``(a.min(), a.max())``, - where ``a`` is the array of reaction coordinates. - Values outside the range are ignored. The first element of the range must be - less than or equal to the second. - - - Returns - ------- - list of arrays of floats - List of radii present in each bin - array of (float, float) - Edges of each bin - """ - agg = self.gather(frames=frames, flat=True) - coords = agg['rxn_coord'] - - if not util.iterable(bins): - if range is None: - range = (coords.min(), coords.max()) - xmin, xmax = range - if xmin == xmax: - xmin -= 0.5 - xmax += 0.5 - bins = np.linspace(xmin, xmax, bins+1, endpoint=True) - else: - bins = np.asarray(bins) - bins = bins[np.argsort(bins)] - - idx = np.argsort(coords) - coords = coords[idx] - radii = agg['radius'][idx] - # left: inserts at i where coords[:i] < edge - # right: inserts at i where coords[:i] <= edge - # r_ concatenates - bin_idx = np.r_[coords.searchsorted(bins, side='right')] - binned = [radii[i:j] for i, j in zip(bin_idx[:-1], bin_idx[1:])] - return binned, bins - - def histogram_radii(self, aggregator=np.mean, frames=None, - bins=100, range=None): - """Histograms the pore radii into bins by reaction coordinate, - aggregate the radii with an `aggregator` function, and returns the - aggregated radii and bin edges. - - Parameters - ---------- - aggregator : callable, optional - this function must take an iterable of floats and return a - single value. - frames : int or iterable of ints, optional - Profiles to include by frame. If ``None``, includes - all frames. - bins : int or iterable of edges, optional - If bins is an int, it defines the number of equal-width bins in the given - range. If bins is a sequence, it defines a monotonically increasing array of - bin edges, including the rightmost edge, allowing for non-uniform bin widths. - range : (float, float), optional - The lower and upper range of the bins. - If not provided, ``range`` is simply ``(a.min(), a.max())``, - where ``a`` is the array of reaction coordinates. - Values outside the range are ignored. The first element of the range must be - less than or equal to the second. - - - Returns - ------- - array of floats - histogrammed, aggregate value of radii - array of (float, float) - Edges of each bin - """ - binned, bins = self.bin_radii(frames=frames, bins=bins, range=range) - return np.array(list(map(aggregator, binned))), bins - - def plot_mean_profile(self, bins=100, range=None, - frames=None, color='blue', - linestyle='-', ax=None, - xlabel='Frame', fill_alpha=0.3, - n_std=1, legend=True, - legend_loc='best', - **kwargs): - """Collects the pore radii into bins by reaction coordinate. - - Parameters - ---------- - frames : int or iterable of ints, optional - Profiles to include by frame. If ``None``, includes - all frames. - bins : int or iterable of edges, optional - If bins is an int, it defines the number of equal-width bins in the given - range. If bins is a sequence, it defines a monotonically increasing array of - bin edges, including the rightmost edge, allowing for non-uniform bin widths. - range : (float, float), optional - The lower and upper range of the bins. - If not provided, ``range`` is simply ``(a.min(), a.max())``, - where ``a`` is the array of reaction coordinates. - Values outside the range are ignored. The first element of the range must be - less than or equal to the second. - color : str or array-like, optional - Color for the plot. - linestyle : str or array-like, optional - Line style for the plot. - ax : :class:`matplotlib.axes.Axes` - If no `ax` is supplied or set to ``None`` then the plot will - be added to the current active axes. - xlabel : str, optional - X-axis label. - fill_alpha : float, optional - Opacity of filled standard deviation area - n_std : int, optional - Number of standard deviations from the mean to fill between. - legend : bool, optional - Whether to plot a legend. - legend_loc : str, optional - Location of legend. - **kwargs : - All other `kwargs` are passed to :func:`matplotlib.pyplot.plot`. - - Returns - ------- - ax : :class:`~matplotlib.axes.Axes` - Axes with the plot, either `ax` or the current axes. - - """ - - binned, bins = self.bin_radii(frames=frames, bins=bins, range=range) - mean = np.array(list(map(np.mean, binned))) - midpoints = 0.5 * (bins[1:] + bins[:-1]) - - fig, ax = plt.subplots() - if n_std: - std = np.array(list(map(np.std, binned))) - ax.fill_between(midpoints, mean-(n_std*std), mean+(n_std*std), - color=color, alpha=fill_alpha, - label='{} std'.format(n_std)) - ax.plot(midpoints, mean, color=color, - linestyle=linestyle, label='mean', **kwargs) - ax.set_xlabel(r"Pore coordinate $\zeta$ ($\AA$)") - ax.set_ylabel(r"HOLE radius $R$ ($\AA$)") - if legend: - ax.legend(loc=legend_loc) - return ax - - def plot3D_order_parameters(self, order_parameters, - frames=None, - color=None, - cmap='viridis', - linestyle='-', ax=None, - r_max=None, - ylabel=r'Order parameter', - **kwargs): - r"""Plot HOLE radii over order parameters as a 3D graph. - - Lines are colored according to the specified ``color`` or - drawn from the color map ``cmap``. One line is - plotted for each trajectory frame. - - Parameters - ---------- - order_parameters : array-like or string - Sequence or text file containing order parameters(float - numbers) corresponding to the frames in the trajectory. Must - be same length as trajectory. - frames : array-like, optional - Frames to plot. If ``None``, plots all of them. - color : str or array-like, optional - Color or colors for the plot. If ``None``, colors are - drawn from ``cmap``. - cmap : str, optional - color map to make colors for the plot if ``color`` is - not given. Names should be from the ``matplotlib.pyplot.cm`` - module. - linestyle : str or array-like, optional - Line style for the plot. - ax : : class: `matplotlib.axes.Axes` - If no `ax` is supplied or set to ``None`` then the plot will - be added to the current active axes. - r_max : float, optional - only display radii up to ``r_max``. If ``None``, all radii are - plotted. - ylabel : str, optional - Y-axis label. - **kwargs : - All other `kwargs` are passed to: func: `matplotlib.pyplot.plot`. - - Returns - ------- - ax: : class: `~mpl_toolkits.mplot3d.Axes3D` - Axes with the plot, either `ax` or the current axes. - - """ - op_profiles = self.over_order_parameters(order_parameters, - frames=frames) - - from mpl_toolkits.mplot3d import Axes3D - - if ax is None: - fig = plt.figure() - ax = fig.add_subplot(111, projection='3d') - - ocl = self._process_plot_kwargs(frames=list(op_profiles.keys()), - color=color, cmap=cmap, - linestyle=linestyle) - - for op, c, ls in zip(*ocl): - profile = op_profiles[op] - if r_max is None: - radius = profile.radius - rxn_coord = profile.rxn_coord - else: - # does not seem to work with masked arrays but with nan hack! - # http://stackoverflow.com/questions/4913306/python-matplotlib-mplot3d-how-do-i-set-a-maximum-value-for-the-z-axis - rxn_coord = profile.rxn_coord - radius = profile.radius.copy() - radius[radius > r_max] = np.nan - ax.plot(rxn_coord, op*np.ones_like(rxn_coord), radius, - color=c, linestyle=ls, zorder=int(-op), label=str(op), - **kwargs) - - ax.set_xlabel(r"Pore coordinate $\zeta$ ($\AA$)") - ax.set_ylabel(ylabel) - ax.set_zlabel(r"HOLE radius $R$ ($\AA$)") - plt.tight_layout() - return ax diff --git a/package/MDAnalysis/analysis/hole2/templates.py b/package/MDAnalysis/analysis/hole2/templates.py deleted file mode 100644 index 96ddb55dfa3..00000000000 --- a/package/MDAnalysis/analysis/hole2/templates.py +++ /dev/null @@ -1,139 +0,0 @@ -# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*- -# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -# -# MDAnalysis --- https://www.mdanalysis.org -# Copyright (c) 2006-2020 The MDAnalysis Development Team and contributors -# (see the file AUTHORS for the full list of names) -# -# Released under the GNU Public Licence, v2 or any higher version -# -# Please cite your use of MDAnalysis in published work: -# -# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, -# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. -# MDAnalysis: A Python package for the rapid analysis of molecular dynamics -# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th -# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. -# doi: 10.25080/majora-629e541a-00e -# -# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. -# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. -# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 -# - -"""HOLE Analysis --- :mod:`MDAnalysis.analysis.hole2.templates` -=============================================================== - -:Author: Lily Wang -:Year: 2020 -:Copyright: GNU Public License v3 - -.. versionadded:: 1.0 - -Templates used in :mod:`MDAnalysis.analysis.hole2.hole` -""" - -exe_err = ('HOLE binary {name} not found. {name} must be on the ' - 'PATH, or the path must provided with the keyword ' - 'argument: {kw}') - -IGNORE_RESIDUES = ["SOL", "WAT", "TIP", "HOH", "K ", "NA ", "CL "] - - -#: Built-in HOLE radii (based on ``simple.rad`` from the HOLE_ distribution): -#: van der Waals radii are AMBER united atom from Weiner et al. (1984), JACS, vol 106 pp765-768. -#: *Simple* - Only use one value for each element C O H etc. -#: Added radii for K+, NA+, CL- (Pauling hydration radius from Hille 2002). -#: The data file can be written with the convenience function :func:`write_simplerad2`. -SIMPLE2_RAD = r""" -remark: Time-stamp: <2005-11-21 13:57:55 oliver> [OB] -remark: van der Waals radii: AMBER united atom -remark: from Weiner et al. (1984), JACS, vol 106 pp765-768 -remark: Simple - Only use one value for each element C O H etc. -remark: van der Waals radii -remark: general last -VDWR C??? ??? 1.85 -VDWR O??? ??? 1.65 -VDWR S??? ??? 2.00 -VDWR N??? ??? 1.75 -VDWR H??? ??? 1.00 -VDWR H? ??? 1.00 -VDWR P??? ??? 2.10 -remark: ASN, GLN polar H (odd names for these atoms in xplor) -VDWR E2? GLN 1.00 -VDWR D2? ASN 1.00 -remark: amber lone pairs on sulphurs -VDWR LP?? ??? 0.00 -remark: for some funny reason it wants radius for K even though -remark: it is on the exclude list -remark: Use Pauling hydration radius (Hille 2001) [OB] -VDWR K? ??? 1.33 -VDWR NA? ??? 0.95 -VDWR CL? ??? 1.81 -remark: funny hydrogens in gA structure [OB] -VDWR 1H? ??? 1.00 -VDWR 2H? ??? 1.00 -VDWR 3H? ??? 1.00 -remark: need bond rad for molqpt option -BOND C??? 0.85 -BOND N??? 0.75 -BOND O??? 0.7 -BOND S??? 1.1 -BOND H??? 0.5 -BOND P??? 1.0 -BOND ???? 0.85 -""" - -hole_input = """ -! Input file for Oliver Smart's HOLE program -! written by MDAnalysis.analysis.hole2.hole -! filename = {filename} -COORD {coordinates} -RADIUS {radius} -SPHPDB {sphpdb} -SAMPLE {sample:f} -ENDRAD {end_radius:f} -IGNORE {ignore} -SHORTO {output_level:d} -""" - -hole_lines = { - 'cpoint': 'CPOINT {:.10f} {:.10f} {:.10f}\n', - 'cvect': 'CVECT {:.10f} {:.10f} {:.10f}\n', - 'random_seed': 'RASEED {}\n', - 'dcd': 'CHARMD {dcd}\nCHARMS {iniskip:d} {step:d}\n', -} - -vmd_script_array = """\ -set no_water_color {no_water_color} -set one_water_color {one_water_color} -set double_water_color {double_water_color} -array set triangles {{}} -""" - -vmd_script_function = r""" -global vmd_frame; -trace add variable vmd_frame([molinfo top]) write drawFrame - -proc drawFrame { name element op } { - global vmd_frame triangles no_water_color one_water_color double_water_color; - set frame $vmd_frame([molinfo top]) - draw delete all; - - draw color $no_water_color; - foreach shape [lindex $triangles($frame) 0] { - draw trinorm {*}$shape - } - draw color $one_water_color; - foreach shape [lindex $triangles($frame) 1] { - draw trinorm {*}$shape - } - draw color $double_water_color; - foreach shape [lindex $triangles($frame) 2] { - draw trinorm {*}$shape - } - } - -drawFrame 0 0 0 -""" - diff --git a/package/MDAnalysis/analysis/hole2/utils.py b/package/MDAnalysis/analysis/hole2/utils.py deleted file mode 100644 index 66b7b495d29..00000000000 --- a/package/MDAnalysis/analysis/hole2/utils.py +++ /dev/null @@ -1,559 +0,0 @@ -# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*- -# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -# -# MDAnalysis --- https://www.mdanalysis.org -# Copyright (c) 2006-2020 The MDAnalysis Development Team and contributors -# (see the file AUTHORS for the full list of names) -# -# Released under the GNU Public Licence, v2 or any higher version -# -# Please cite your use of MDAnalysis in published work: -# -# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler, -# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein. -# MDAnalysis: A Python package for the rapid analysis of molecular dynamics -# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th -# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy. -# doi: 10.25080/majora-629e541a-00e -# -# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein. -# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations. -# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 -# - - -""" -HOLE Analysis --- :mod:`MDAnalysis.analysis.hole2.helper` -========================================================= - -:Author: Lily Wang -:Year: 2020 -:Copyright: GNU Public License v3 - -.. versionadded:: 1.0 - -Helper functions used in :mod:`MDAnalysis.analysis.hole2.hole` -""" -import logging -import tempfile -import subprocess -import os -import numpy as np -import errno - -from ...lib import util -from ...exceptions import ApplicationError -from .templates import (SIMPLE2_RAD, IGNORE_RESIDUES, hole_input, - hole_lines, exe_err) - -logger = logging.getLogger(__name__) - - -def write_simplerad2(filename="simple2.rad"): - """Write the built-in radii in :data:`SIMPLE2_RAD` to `filename`. - - Does nothing if `filename` already exists. - - Parameters - ---------- - filename : str, optional - output file name; the default is "simple2.rad" - - Returns - ------- - filename : str - returns the name of the data file - """ - - if not os.path.exists(filename): - with open(filename, "w") as rad: - rad.write(SIMPLE2_RAD + "\n") - logger.debug("Created simple radii file {}".format(filename)) - return filename - - -def check_and_fix_long_filename(filename, tmpdir=os.path.curdir, - max_length=70, - make_symlink=True): - """Return a file name suitable for HOLE. - - HOLE is limited to filenames <= ``max_length``. This method - - 1. returns `filename` if HOLE can process it - 2. returns a relative path (see :func:`os.path.relpath`) if that shortens the - path sufficiently - 3. creates a symlink to `filename` (:func:`os.symlink`) in a safe temporary - directory and returns the path of the symlink. - - Parameters - ---------- - filename : str - file name to be processed - tmpdir : str, optional - By default the temporary directory is created inside the current - directory in order to keep that path name short. This can be changed - with the `tmpdir` keyword (e.g. one can use "/tmp"). The default is - the current directory :data:`os.path.curdir`. - - Returns - ------- - str - path to the file that has a length less than - ``max_length`` - - Raises - ------ - RuntimeError - If none of the tricks for filename shortening worked. In this case, - manually rename the file or recompile your version of HOLE. - """ - - if len(filename) <= max_length: - return filename - - msg = ('HOLE will not read {} ' - 'because it has more than {} characters.') - logger.debug(msg.format(filename, max_length)) - - # try a relative path - new_name = os.path.relpath(filename) - if len(new_name) <= max_length: - msg = 'Using relative path: {} -> {}' - logger.debug(msg.format(filename, new_name)) - return new_name - - if make_symlink: - # shorten path by creating a symlink inside a safe temp dir - _, ext = os.path.splitext(filename) - dirname = os.path.relpath(tempfile.mkdtemp(dir=tmpdir)) - newname = os.path.join(dirname, os.path.basename(filename)) - if len(newname) > max_length: - fd, newname = tempfile.mkstemp(suffix=ext, dir=dirname) - os.close(fd) - os.unlink(newname) - - if len(newname) > max_length: - newname = os.path.relpath(newname) - - if len(newname) <= max_length: - os.symlink(filename, newname) - msg = 'Using symlink: {} -> {}' - logger.debug(msg.format(filename, newname)) - return newname - - msg = 'Failed to shorten filename {}' - raise RuntimeError(msg.format(filename)) - - -def set_up_hole_input(pdbfile, - infile_text=None, - infile=None, - sphpdb_file='hole.sph', - vdwradii_file=None, - tmpdir=os.path.curdir, - sample=0.2, - end_radius=22, - cpoint=None, - cvect=None, - random_seed=None, - ignore_residues=IGNORE_RESIDUES, - output_level=0, - dcd=None, - dcd_iniskip=0, - dcd_step=1): - """ - Generate HOLE input for the parameters. - - Parameters - ---------- - pdbfile : str - The `filename` is used as input for HOLE in the "COORD" card of the - input file. It specifies the name of a PDB coordinate file to be - used. This must be in Brookhaven protein databank format or - something closely approximating this. Both ATOM and HETATM records - are read. - - infile_text: str, optional - HOLE input text or template. If set to ``None``, the function will - create the input text from the other parameters. - Default: ``None`` - - infile: str, optional - File to write the HOLE input text for later inspection. If set to - ``None``, the input text is not written out. - Default: ``None`` - - sphpdb_file : str, optional - path to the HOLE sph file, a PDB-like file containing the - coordinates of the pore centers. - The coordinates are set to the sphere centres and the occupancies - are the sphere radii. All centres are assigned the atom name QSS and - residue name SPH and the residue number is set to the storage - number of the centre. In VMD, sph - objects are best displayed as "Points". Displaying .sph objects - rather than rendered or dot surfaces can be useful to analyze the - distance of particular atoms from the sphere-centre line. - .sph files can be used to produce molecular graphical - output from a hole run, by using the - :program:`sph_process` program to read the .sph file. - Default: 'hole.sph' - - vdwradii_file: str, optional - path to the file specifying van der Waals radii for each atom. If - set to ``None``, then a set of default radii, - :data:`SIMPLE2_RAD`, is used (an extension of ``simple.rad`` from - the HOLE distribution). Default: ``None`` - - tmpdir: str, optional - The temporary directory that files can be symlinked to, to shorten - the path name. HOLE can only read filenames up to a certain length. - Default: current working directory - - sample : float, optional - distance of sample points in Å. - Specifies the distance between the planes used in the HOLE - procedure. The default value should be reasonable for most - purposes. However, if you wish to visualize a very tight - constriction then specify a smaller value. - This value determines how many points in the pore profile are - calculated. Default: 0.2 - - end_radius : float, optional - Radius in Å, which is considered to be the end of the pore. This - keyword can be used to specify the radius above which the - program regards a result as indicating that the end of the pore - has been reached. This may need to be increased for large channels, - or reduced for small channels. Default: 22.0 - - cpoint : array_like, 'center_of_geometry' or None, optional - coordinates of a point inside the pore, e.g. ``[12.3, 0.7, - 18.55]``. If set to ``None`` (the default) then HOLE's own search - algorithm is used. - ``cpoint`` specifies a point which lies within the channel. For - simple channels (e.g. gramicidin), results do not show great - sensitivity to the exact point taken. An easy way to produce an - initial point is to use molecular graphics to find two atoms which - lie either side of the pore and to average their coordinates. Or - if the channel structure contains water molecules or counter ions - then take the coordinates of one of these (and use the - `ignore_residues` keyword to ignore them in the pore radius - calculation). - If this card is not specified, then HOLE (from version 2.2) - attempts to guess where the channel will be. The procedure - assumes the channel is reasonably symmetric. The initial guess on - cpoint will be the centroid of all alpha carbon atoms (name 'CA' - in pdb file). This is then refined by a crude grid search up to 5 - Å from the original position. This procedure works most of the - time but is far from infallible — results should be - carefully checked (with molecular graphics) if it is used. - Default: None - - cvect : array_like, optional - Search direction, should be parallel to the pore axis, - e.g. ``[0,0,1]`` for the z-axis. - If this keyword is ``None`` (the default), then HOLE attempts to guess - where the channel will be. The procedure assumes that the channel is - reasonably symmetric. The guess will be either along the X axis - (1,0,0), Y axis (0,1,0) or Z axis (0,0,1). If the structure is not - aligned on one of these axis the results will clearly be - approximate. If a guess is used then results should be carefully - checked. Default: None - - random_seed : int, optional - integer number to start the random number generator. - By default, - :program:`hole` will use the time of the day. - For reproducible runs (e.g., for testing) set ``random_seed`` - to an integer. Default: ``None`` - - ignore_residues : array_like, optional - sequence of three-letter residues that are not taken into - account during the calculation; wildcards are *not* - supported. Note that all residues must have 3 letters. Pad - with space on the right-hand side if necessary. - Default: {}. - - output_level : int, optional - Determines the output of output in the ``outfile``. - For automated processing, this must be < 3. - 0: Full text output, - 1: All text output given except "run in progress" (i.e., - detailed contemporary description of what HOLE is doing). - 2: Ditto plus no graph type output - only leaving minimum - radius and conductance calculations. - 3: All text output other than input card mirroring and error messages - turned off. - Default: 0 - - dcd : str, optional - File name of DCD trajectory (must be supplied together with a - matching PDB file `filename`) and then HOLE runs its analysis on - each frame. - It does multiple HOLE runs on positions taken from a CHARMM binary - dynamics format DCD trajectory file. The ``dcd`` file must have - exactly the same number of atoms in exactly the same order as the - pdb file specified by ``pdbfile``. Note that if this option is used - the pdb file is used as a template only - the coordinates are - ignored. Note that structural parameters determined for each - individual structure are written in a tagged format so that it is - possible to extract the information from the text output file using - a :program:`grep` command. The reading of the file can be - controlled by the ``dcd_step`` keyword and/or setting - ``dcd_iniskip`` to the number of frames to be skipped - initially. - - dcd_step : int, optional - step size for going through the trajectory (skips ``dcd_step-1`` - frames). Default: 1 - - Returns - ------- - str - input text to run HOLE - - - .. versionadded:: 1.0 - - """.format(IGNORE_RESIDUES) - - short_filename = check_and_fix_long_filename(pdbfile, tmpdir=tmpdir) - if vdwradii_file is not None: - vdwradii_file = check_and_fix_long_filename(vdwradii_file, - tmpdir=tmpdir) - else: - vdwradii_file = write_simplerad2() - - if dcd is not None: - dcd = check_and_fix_long_filename(dcd, tmpdir=tmpdir) - - if infile_text is None: - infile_text = hole_input - - residues = ' '.join(ignore_residues) - - infile_text = infile_text.format(filename=pdbfile, - coordinates=short_filename, - radius=vdwradii_file, - sphpdb=sphpdb_file, - sample=sample, - end_radius=end_radius, - ignore=residues, - output_level=output_level) - - if random_seed is not None: - random_seed = int(random_seed) - infile_text += hole_lines['random_seed'].format(random_seed) - logger.info("Fixed random number seed {} for reproducible " - "runs.".format(random_seed)) - - if cpoint is not None: - if isinstance(cpoint, str): - infile_text += 'CPOINT ' + cpoint + '\n' - else: - infile_text += hole_lines['cpoint'].format(*cpoint) - else: - logger.info("HOLE will guess CPOINT") - - if cvect is not None: - infile_text += hole_lines['cvect'].format(*cvect) - else: - logger.info("HOLE will guess CVECT") - - if dcd is not None: - infile_text += hole_lines['dcd'].format(dcd=dcd, - iniskip=dcd_iniskip, - step=dcd_step) - - if infile is not None: - with open(infile, 'w') as f: - f.write(infile_text) - msg = 'Wrote HOLE input file {} for inspection' - logger.debug(msg.format(infile)) - - return infile_text - - -def run_hole(outfile, infile_text, executable): - """Run the HOLE program. - - Parameters - ---------- - outfile: str - Output file name - infile_text: str - HOLE input text - (typically generated by :func:`set_up_hole_input`) - executable: str - HOLE executable - - - Returns - ------- - str - Output file name - """ - with open(outfile, 'w') as output: - proc = subprocess.Popen(executable, stdin=subprocess.PIPE, - stdout=output) - stdout, stderr = proc.communicate(infile_text.encode('utf-8')) - - # check output in case of errors - with open(outfile, 'r') as output: - for line in output: - if line.strip().startswith(('*** ERROR ***', 'ERROR')): - proc.returncode = 255 - break - - # die in case of error - if proc.returncode != 0: - msg = 'HOLE failure ({}). Check output {}' - logger.fatal(msg.format(proc.returncode, outfile)) - if stderr is not None: - logger.fatal(stderr) - raise ApplicationError(proc.returncode, - msg.format(executable, outfile)) - - logger.info('HOLE finished. Output: {}'.format(outfile)) - return outfile - - -def collect_hole(outfile='hole.out'): - """Collect data from HOLE output - - Parameters - ---------- - outfile: str, optional - HOLE output file to read. Default: 'hole.out' - - - Returns - ------- - dict - Dictionary of HOLE profiles as record arrays - """ - fmt = util.FORTRANReader('3F12') - recarrays = {} - - with open(outfile, 'r') as output: - toggle_read = False - profile = 0 - records = [] - for line in output: - line = line.rstrip() # preserve columns in FORTRAN output - # multiple frames from dcd in? - if line.startswith(" Starting calculation for position number"): - fields = line.split() - profile = int(fields[5]) - records = [] - logger.debug('Started reading profile {}'.format(profile)) - continue - - # found data - if line.startswith(' cenxyz.cvec'): - toggle_read = True - logger.debug('Started reading data') - continue - - if toggle_read: - if len(line.strip()) != 0: - try: - rxncoord, radius, cenlineD = fmt.read(line) - except: - msg = 'Problem parsing line: {}. Check output file {}' - logger.exception(msg.format(line, outfile)) - raise - records.append((rxncoord, radius, cenlineD)) - continue - # end of data - else: - toggle_read = False - names = ['rxn_coord', 'radius', 'cen_line_D'] - recarr = np.rec.fromrecords(records, - formats='f8, f8, f8', - names=names) - recarrays[profile] = recarr - - return recarrays - - -def create_vmd_surface(sphpdb='hole.sph', - filename=None, - sph_process='sph_process', - sos_triangle='sos_triangle', - dot_density=15): - """Create VMD surface file from sphpdb file. - - Parameters - ---------- - sphpdb: str, optional - sphpdb file to read. Default: 'hole.sph' - filename: str, optional - output VMD surface file. If ``None``, a temporary file - is generated. Default: ``None`` - sph_process: str, optional - Executable for ``sph_process`` program. Default: 'sph_process' - sos_triangle: str, optional - Executable for ``sos_triangle`` program. Default: 'sos_triangle' - dot_density: int, optional - density of facets for generating a 3D pore representation. - The number controls the density of dots that will be used. - A sphere of dots is placed on each centre determined in the - Monte Carlo procedure. The actual number of dots written is - controlled by ``dot_density`` and the ``sample`` level of the - original analysis. ``dot_density`` should be set between 5 - (few dots per sphere) and 35 (many dots per sphere). - Default: 15 - - - Returns - ------- - str - the output filename for the VMD surface - - """ - fd, tmp_sos = tempfile.mkstemp(suffix=".sos", text=True) - os.close(fd) - - sph_process_path = util.which(sph_process) - if sph_process_path is None: - raise OSError(errno.ENOENT, exe_err.format(name=sph_process, - kw='sph_process')) - base_path = os.path.dirname(sph_process_path) - - sos_triangle_path = util.which(sos_triangle) - if sos_triangle_path is None: - path = os.path.join(base_path, sos_triangle) - sos_triangle_path = util.which(path) - if sos_triangle_path is None: - raise OSError(errno.ENOENT, exe_err.format(name=sos_triangle, - kw='sos_triangle')) - try: - output = subprocess.check_output([sph_process_path, "-sos", "-dotden", - str(dot_density), "-color", sphpdb, - tmp_sos], stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as err: - os.unlink(tmp_sos) - logger.fatal("sph_process failed ({0})".format(err.returncode)) - raise OSError(err.returncode, "sph_process failed") from None - except: - os.unlink(tmp_sos) - raise - - if filename is None: - fd, filename = tempfile.mkstemp(suffix=".sos", text=True) - os.close(fd) - try: - # Could check: os.devnull if subprocess.DEVNULL not available (>3.3) - # Suppress stderr messages of sos_triangle - with open(tmp_sos) as sos, open(filename, "w") as triangles, \ - open(os.devnull, 'w') as FNULL: - subprocess.check_call( - [sos_triangle_path, "-s"], stdin=sos, stdout=triangles, - stderr=FNULL) - except subprocess.CalledProcessError as err: - logger.fatal("sos_triangle failed ({0})".format(err.returncode)) - raise OSError(err.returncode, "sos_triangle failed") from None - finally: - os.unlink(tmp_sos) - - return filename diff --git a/package/MDAnalysis/analysis/pca.py b/package/MDAnalysis/analysis/pca.py index cad6946b2dc..e4818aabf21 100644 --- a/package/MDAnalysis/analysis/pca.py +++ b/package/MDAnalysis/analysis/pca.py @@ -118,6 +118,7 @@ import numpy as np import scipy.integrate +from tqdm.auto import tqdm from MDAnalysis import Universe from MDAnalysis.analysis.align import _fit_to @@ -142,7 +143,8 @@ class PCA(AnalysisBase): generates the principal components of the backbone of the atomgroup and then transforms those atomgroup coordinates by the direction of those variances. Please refer to the :ref:`PCA-tutorial` for more detailed - instructions. + instructions. When using mean selections, the first frame of the selected + trajectory slice is used as a reference. Parameters ---------- @@ -230,6 +232,12 @@ class PCA(AnalysisBase): ``mean`` input now accepts coordinate arrays instead of atomgroup. :attr:`p_components`, :attr:`variance` and :attr:`cumulated_variance` are now stored in a :class:`MDAnalysis.analysis.base.Results` instance. + .. versionchanged:: 2.8.0 + ``self.run()`` can now appropriately use ``frames`` parameter (bug + described by #4425 and fixed by #4423). Previously, behaviour was to + manually iterate through ``self._trajectory``, which would + incorrectly handle cases where the ``frame`` argument + was passed. """ def __init__(self, universe, select='all', align=False, mean=None, @@ -247,7 +255,7 @@ def __init__(self, universe, select='all', align=False, mean=None, def _prepare(self): # access start index - self._u.trajectory[self.start] + self._sliced_trajectory[0] # reference will be start index self._reference = self._u.select_atoms(self._select) self._atoms = self._u.select_atoms(self._select) @@ -275,7 +283,7 @@ def _prepare(self): self._ref_atom_positions -= self._ref_cog if self._calc_mean: - for ts in ProgressBar(self._u.trajectory[self.start:self.stop:self.step], + for ts in ProgressBar(self._sliced_trajectory, verbose=self._verbose, desc="Mean Calculation"): if self.align: mobile_cog = self._atoms.center_of_geometry() @@ -348,12 +356,12 @@ def n_components(self, n): n = len(self._variance) self.results.variance = self._variance[:n] self.results.cumulated_variance = (np.cumsum(self._variance) / - np.sum(self._variance))[:n] + np.sum(self._variance))[:n] self.results.p_components = self._p_components[:, :n] self._n_components = n def transform(self, atomgroup, n_components=None, start=None, stop=None, - step=None): + step=None, verbose=False): """Apply the dimensionality reduction on a trajectory Parameters @@ -375,6 +383,11 @@ def transform(self, atomgroup, n_components=None, start=None, stop=None, Include every `step` frames in the PCA transform. If set to ``None`` (the default) then every frame is analyzed (i.e., same as ``step=1``). + verbose : bool, optional + ``verbose = True`` option displays a progress bar for the + iterations of transform. ``verbose = False`` disables the + progress bar, just returns the pca_space array when the + calculations are finished. Returns ------- @@ -384,6 +397,9 @@ def transform(self, atomgroup, n_components=None, start=None, stop=None, .. versionchanged:: 0.19.0 Transform now requires that :meth:`run` has been called before, otherwise a :exc:`ValueError` is raised. + .. versionchanged:: 2.8.0 + Transform now has shows a tqdm progressbar, which can be toggled + on with ``verbose = True``, or off with ``verbose = False`` """ if not self._calculated: raise ValueError('Call run() on the PCA before using transform') @@ -391,7 +407,7 @@ def transform(self, atomgroup, n_components=None, start=None, stop=None, if isinstance(atomgroup, Universe): atomgroup = atomgroup.atoms - if(self._n_atoms != atomgroup.n_atoms): + if self._n_atoms != atomgroup.n_atoms: raise ValueError('PCA has been fit for' '{} atoms. Your atomgroup' 'has {} atoms'.format(self._n_atoms, @@ -408,7 +424,10 @@ def transform(self, atomgroup, n_components=None, start=None, stop=None, dot = np.zeros((n_frames, dim)) - for i, ts in enumerate(traj[start:stop:step]): + for i, ts in tqdm(enumerate(traj[start:stop:step]), disable=not verbose, + total=len(traj[start:stop:step]) + ): + xyz = atomgroup.positions.ravel() - self._xmean dot[i] = np.dot(xyz, self._p_components[:, :dim]) @@ -554,7 +573,7 @@ def project_single_frame(self, components=None, group=None, anchor=None): for res in group.residues: # n_common is the number of pca atoms in a residue n_common = pca_res_counts[np.where( - pca_res_indices == res.resindex)][0] + pca_res_indices == res.resindex)][0] non_pca_atoms = np.append(non_pca_atoms, res.atoms.n_atoms - n_common) # index_extrapolate records the anchor number for each non-PCA atom @@ -631,10 +650,10 @@ def rmsip(self, other, n_components=None): >>> first_interval = pca.PCA(u, select="backbone").run(start=0, stop=25) >>> second_interval = pca.PCA(u, select="backbone").run(start=25, stop=50) >>> last_interval = pca.PCA(u, select="backbone").run(start=75) - >>> first_interval.rmsip(second_interval, n_components=3) - 0.38147609331128324 - >>> first_interval.rmsip(last_interval, n_components=3) - 0.17478244043688052 + >>> round(first_interval.rmsip(second_interval, n_components=3), 6) + 0.381476 + >>> round(first_interval.rmsip(last_interval, n_components=3), 6) + 0.174782 See also @@ -807,14 +826,14 @@ def rmsip(a, b, n_components=None): >>> first_interval = pca.PCA(u, select="backbone").run(start=0, stop=25) >>> second_interval = pca.PCA(u, select="backbone").run(start=25, stop=50) >>> last_interval = pca.PCA(u, select="backbone").run(start=75) - >>> pca.rmsip(first_interval.results.p_components.T, + >>> round(pca.rmsip(first_interval.results.p_components.T, ... second_interval.results.p_components.T, - ... n_components=3) - 0.38147609331128324 - >>> pca.rmsip(first_interval.results.p_components.T, + ... n_components=3), 6) + 0.381476 + >>> round(pca.rmsip(first_interval.results.p_components.T, ... last_interval.results.p_components.T, - ... n_components=3) - 0.17478244043688052 + ... n_components=3), 6) + 0.174782 .. versionadded:: 1.0.0 diff --git a/package/MDAnalysis/analysis/rdf.py b/package/MDAnalysis/analysis/rdf.py index 0480c2adf13..9be624f2a06 100644 --- a/package/MDAnalysis/analysis/rdf.py +++ b/package/MDAnalysis/analysis/rdf.py @@ -32,7 +32,7 @@ .. math:: - g_{ab}(r) = (N_{a} N_{b})^{-1} \sum_{i=1}^{N_a} \sum_{j=1}^{N_b} + g_{ab}(r) = \frac{1}{N_{a}} \frac{1}{N_{b}/V} \sum_{i=1}^{N_a} \sum_{j=1}^{N_b} \langle \delta(|\mathbf{r}_i - \mathbf{r}_j| - r) \rangle which is normalized so that the RDF becomes 1 for large separations in a diff --git a/package/MDAnalysis/converters/OpenMM.py b/package/MDAnalysis/converters/OpenMM.py index bee09a64491..11ba70498f1 100644 --- a/package/MDAnalysis/converters/OpenMM.py +++ b/package/MDAnalysis/converters/OpenMM.py @@ -125,10 +125,10 @@ def _mda_timestep_from_omm_context(self): ts.frame = 0 ts.data["time"] = state.getTime()._value ts.data["potential_energy"] = ( - state.getPotentialEnergy().in_units_of(u.kilojoule/u.mole) + state.getPotentialEnergy().in_units_of(u.kilojoule/u.mole)._value ) ts.data["kinetic_energy"] = ( - state.getKineticEnergy().in_units_of(u.kilojoule/u.mole) + state.getKineticEnergy().in_units_of(u.kilojoule/u.mole)._value ) ts.triclinic_dimensions = state.getPeriodicBoxVectors( asNumpy=True)._value diff --git a/package/MDAnalysis/converters/ParmEd.py b/package/MDAnalysis/converters/ParmEd.py index b98e83ab7c2..174dc9fad3b 100644 --- a/package/MDAnalysis/converters/ParmEd.py +++ b/package/MDAnalysis/converters/ParmEd.py @@ -81,6 +81,9 @@ import itertools import warnings +import numpy as np +from numpy.lib import NumpyVersion + from . import base from ..coordinates.base import SingleFrameReaderBase from ..topology.tables import SYMB2Z @@ -168,11 +171,20 @@ def convert(self, obj): obj : AtomGroup or Universe or :class:`Timestep` """ try: - import parmed as pmd + # TODO: remove this guard when parmed has a release + # that supports NumPy 2 + if NumpyVersion(np.__version__) < "2.0.0": + import parmed as pmd + else: + raise ImportError except ImportError: - raise ImportError('ParmEd is required for ParmEdConverter but ' - 'is not installed. Try installing it with \n' - 'pip install parmed') + if NumpyVersion(np.__version__) >= "2.0.0": + ermsg = "ParmEd is not compatible with NumPy 2.0+" + else: + ermsg = ("ParmEd is required for ParmEdConverter but is not " + "installed. Try installing it with \n" + "pip install parmed") + raise ImportError(errmsg) try: # make sure to use atoms (Issue 46) ag_or_ts = obj.atoms diff --git a/package/MDAnalysis/converters/RDKit.py b/package/MDAnalysis/converters/RDKit.py index 139528440ab..da52e23b915 100644 --- a/package/MDAnalysis/converters/RDKit.py +++ b/package/MDAnalysis/converters/RDKit.py @@ -87,6 +87,7 @@ from io import StringIO import numpy as np +from numpy.lib import NumpyVersion from . import base from ..coordinates import memory @@ -95,8 +96,13 @@ from ..exceptions import NoDataError try: - from rdkit import Chem - from rdkit.Chem import AllChem + # TODO: remove this guard when RDKit has a release + # that supports NumPy 2 + if NumpyVersion(np.__version__) < "2.0.0": + from rdkit import Chem + from rdkit.Chem import AllChem + else: + raise ImportError except ImportError: pass else: diff --git a/package/MDAnalysis/coordinates/H5MD.py b/package/MDAnalysis/coordinates/H5MD.py index b8264f0339e..1062240b48c 100644 --- a/package/MDAnalysis/coordinates/H5MD.py +++ b/package/MDAnalysis/coordinates/H5MD.py @@ -828,7 +828,6 @@ def __setstate__(self, state): self.__dict__ = state self._particle_group = self._file['particles'][ list(self._file['particles'])[0]] - self[self.ts.frame] class H5MDWriter(base.WriterBase): diff --git a/package/MDAnalysis/coordinates/LAMMPS.py b/package/MDAnalysis/coordinates/LAMMPS.py index 0cd3874997b..e772a3e3924 100644 --- a/package/MDAnalysis/coordinates/LAMMPS.py +++ b/package/MDAnalysis/coordinates/LAMMPS.py @@ -66,22 +66,33 @@ :class:`~MDAnalysis.topology.LAMMPSParser.DATAParser`) together with a LAMMPS DCD with "*real*" provide the keyword *format="LAMMPS*":: - >>> u = MDAnalysis.Universe("lammps.data", "lammps_real.dcd", format="LAMMPS") + >>> import MDAnalysis + >>> from MDAnalysis.tests.datafiles import LAMMPSdata2, LAMMPSdcd2 + >>> u = MDAnalysis.Universe(LAMMPSdata2, LAMMPSdcd2, format="LAMMPS") -If the trajectory uses *units nano* then use :: +If the trajectory uses *units nano* then use - >>> u = MDAnalysis.Universe("lammps.data", "lammps_nano.dcd", format="LAMMPS", + >>> import MDAnalysis + >>> from MDAnalysis.tests.datafiles import LAMMPSdata2, LAMMPSdcd2 + >>> u = MDAnalysis.Universe(LAMMPSdata2, LAMMPSdcd2, format="LAMMPS", ... lengthunit="nm", timeunit="ns") To scan through a trajectory to find a desirable frame and write to a LAMMPS data file, ->>> for ts in u.trajectory: -... # analyze frame -... if take_this_frame == True: -... with mda.Writer('frame.data') as W: -... W.write(u.atoms) -... break + >>> import MDAnalysis + >>> from MDAnalysis.tests.datafiles import LAMMPSdata2, LAMMPSdcd2 + >>> u = MDAnalysis.Universe(LAMMPSdata2, LAMMPSdcd2, format="LAMMPS", + ... lengthunit="nm", timeunit="ns") + >>> take_this_frame = False + >>> for ts in u.trajectory: + ... # analyze frame + ... if ts.frame == 4: + ... take_this_frame = True + ... if take_this_frame == True: + ... with MDAnalysis.Writer('frame.data') as W: + ... W.write(u.atoms) + ... break Note ---- @@ -135,6 +146,7 @@ from ..topology.LAMMPSParser import DATAParser from ..exceptions import NoDataError from . import base +import warnings btype_sections = {'bond':'Bonds', 'angle':'Angles', 'dihedral':'Dihedrals', 'improper':'Impropers'} @@ -458,12 +470,50 @@ class DumpReader(base.ReaderBase): """Reads the default `LAMMPS dump format `__ - Supports coordinates in various LAMMPS coordinate conventions and both - orthogonal and triclinic simulation box dimensions (for more details see - `documentation `__). In - either case, MDAnalysis will always use ``(*A*, *B*, *C*, *alpha*, *beta*, - *gamma*)`` to represent the unit cell. Lengths *A*, *B*, *C* are in the - MDAnalysis length unit (Å), and angles are in degrees. + Supports coordinates in the LAMMPS "unscaled" (x,y,z), "scaled" (xs,ys,zs), + "unwrapped" (xu,yu,zu) and "scaled_unwrapped" (xsu,ysu,zsu) coordinate + conventions (see https://docs.lammps.org/dump.html for more details). + If `lammps_coordinate_convention='auto'` (default), + one will be guessed. Guessing checks whether the coordinates fit each + convention in the order "unscaled", "scaled", "unwrapped", + "scaled_unwrapped" and whichever set of coordinates is detected first will + be used. If coordinates are given in the scaled coordinate convention + (xs,ys,zs) or scaled unwrapped coordinate convention (xsu,ysu,zsu) they + will automatically be converted from their scaled/fractional representation + to their real values. + + Supports both orthogonal and triclinic simulation box dimensions (for more + details see https://docs.lammps.org/Howto_triclinic.html). In either case, + MDAnalysis will always use ``(*A*, *B*, *C*, *alpha*, *beta*, *gamma*)`` + to represent the unit cell. Lengths *A*, *B*, *C* are in the MDAnalysis + length unit (Å), and angles are in degrees. + + By using the keyword `additional_columns`, you can specify arbitrary data + to be read. The keyword expects a list of the names of the columns or + `True` to read all additional columns. The results are saved to + :attr:`Timestep.data`. For example, if your LAMMPS dump looks like this + + .. code-block:: + + ITEM: ATOMS id x y z q l + 1 2.84 8.17 -25 0.00258855 1.1 + 2 7.1 8.17 -25 6.91952e-05 1.2 + + Then you may parse the additional columns `q` and `l` via: + + .. code-block:: python + + u = mda.Universe('structure.data', 'traj.lammpsdump', + additional_columns=['q', 'l']) + + The additional data is then available for each time step via: + + .. code-block:: python + + for ts in u.trajectory: + charges = ts.data['q'] # Access additional data, sorted by the id + ls = ts.data['l'] + ... Parameters ---------- @@ -497,6 +547,9 @@ class DumpReader(base.ReaderBase): **kwargs Other keyword arguments used in :class:`~MDAnalysis.coordinates.base.ReaderBase` + .. versionchanged:: 2.7.0 + Reading of arbitrary, additional columns is now supported. + (Issue #3608) .. versionchanged:: 2.4.0 Now imports velocities and forces, translates the box to the origin, and optionally unwraps trajectories with image flags upon loading. @@ -510,6 +563,7 @@ class DumpReader(base.ReaderBase): format = 'LAMMPSDUMP' _conventions = ["auto", "unscaled", "scaled", "unwrapped", "scaled_unwrapped"] + _coordtype_column_names = { "unscaled": ["x", "y", "z"], "scaled": ["xs", "ys", "zs"], @@ -517,11 +571,15 @@ class DumpReader(base.ReaderBase): "scaled_unwrapped": ["xsu", "ysu", "zsu"] } + _parsable_columns = ["id", "vx", "vy", "vz", "fx", "fy", "fz"] + for key in _coordtype_column_names.keys(): + _parsable_columns += _coordtype_column_names[key] + @store_init_arguments - def __init__(self, filename, + def __init__(self, filename, lammps_coordinate_convention="auto", unwrap_images=False, - **kwargs): + additional_columns=None, **kwargs): super(DumpReader, self).__init__(filename, **kwargs) root, ext = os.path.splitext(self.filename) @@ -536,6 +594,16 @@ def __init__(self, filename, self._unwrap = unwrap_images + if (util.iterable(additional_columns) + or additional_columns is None + or additional_columns is True): + self._additional_columns = additional_columns + else: + raise ValueError(f"additional_columns={additional_columns} " + "is not a valid option. Please provide an " + "iterable containing the additional" + "column headers.") + self._cache = {} self._reopen() @@ -681,6 +749,25 @@ def _read_next_timestep(self): coord_cols.extend(image_cols) ids = "id" in attr_to_col_ix + + # Create the data arrays for additional attributes which will be saved + # under ts.data + if self._additional_columns is True: + # Parse every column that is not already parsed + # elsewhere (total \ parsable) + additional_keys = set(attrs).difference(self._parsable_columns) + elif self._additional_columns: + if not all([key in attrs for key in self._additional_columns]): + warnings.warn("Some of the additional columns are not present " + "in the file, they will be ignored") + additional_keys = \ + [key for key in self._additional_columns if key in attrs] + else: + additional_keys = [] + for key in additional_keys: + ts.data[key] = np.empty(self.n_atoms) + + # Parse all the atoms for i in range(self.n_atoms): fields = f.readline().split() if ids: @@ -701,12 +788,22 @@ def _read_next_timestep(self): if self._has_forces: ts.forces[i] = [fields[dim] for dim in force_cols] + # Collect additional cols + for attribute_key in additional_keys: + ts.data[attribute_key][i] = \ + fields[attr_to_col_ix[attribute_key]] + order = np.argsort(indices) ts.positions = ts.positions[order] if self._has_vels: ts.velocities = ts.velocities[order] if self._has_forces: ts.forces = ts.forces[order] + + # Also need to sort the additional keys + for attribute_key in additional_keys: + ts.data[attribute_key] = ts.data[attribute_key][order] + if (self.lammps_coordinate_convention.startswith("scaled")): # if coordinates are given in scaled format, undo that ts.positions = distances.transform_StoR(ts.positions, diff --git a/package/MDAnalysis/coordinates/PDB.py b/package/MDAnalysis/coordinates/PDB.py index 702ff2b707f..bce51c43cdc 100644 --- a/package/MDAnalysis/coordinates/PDB.py +++ b/package/MDAnalysis/coordinates/PDB.py @@ -149,6 +149,7 @@ import logging import collections import numpy as np +import functools from ..lib import util from ..lib.util import store_init_arguments @@ -1028,6 +1029,7 @@ def _write_next_frame(self, ts=None, **kwargs): self._check_pdb_coordinates() self._write_timestep(ts, **kwargs) + @functools.cache def _deduce_PDB_atom_name(self, atomname, resname): """Deduce how the atom name should be aligned. @@ -1217,7 +1219,7 @@ def validate_chainids(chainids, default): else: atom_ids = np.arange(len(atoms)) + 1 - for i, atom in enumerate(atoms): + for i in range(len(atoms)): vals = {} vals['serial'] = util.ltruncate_int(atom_ids[i], 5) # check for overflow here? vals['name'] = self._deduce_PDB_atom_name(atomnames[i], resnames[i]) diff --git a/package/MDAnalysis/coordinates/TNG.py b/package/MDAnalysis/coordinates/TNG.py index 3a037a5537f..7a44be3518b 100644 --- a/package/MDAnalysis/coordinates/TNG.py +++ b/package/MDAnalysis/coordinates/TNG.py @@ -499,9 +499,15 @@ def __setstate__(self, state): self.__dict__ = state # reconstruct file iterator self._file_iterator = pytng.TNGFileIterator(self.filename, "r") - # make sure we re-read the current frame to update C level objects in - # the file iterator - self._read_frame(self._frame) + + # unlike self._read_frame(self._frame), + # the following lines update the state of the C-level file iterator + # without updating the ts object. + # This is necessary to preserve the modification, + # e.g. changing coordinates, in the ts object. + # see PR #3722 for more details. + step = self._frame_to_step(self._frame) + _ = self._file_iterator.read_step(step) def Writer(self): """Writer for TNG files diff --git a/package/MDAnalysis/coordinates/base.py b/package/MDAnalysis/coordinates/base.py index 45befe1c552..dda4a61a7ce 100644 --- a/package/MDAnalysis/coordinates/base.py +++ b/package/MDAnalysis/coordinates/base.py @@ -659,6 +659,9 @@ class ProtoReader(IOBase, metaclass=_Readermeta): .. versionchanged:: 2.0.0 Now supports (un)pickle. Upon unpickling, the current timestep is retained by reconstrunction. + .. versionchanged:: 2.8.0 + the modification of coordinates was preserved + after serialization. """ #: The appropriate Timestep class, e.g. @@ -1442,10 +1445,6 @@ def _apply_transformations(self, ts): return ts - def __setstate__(self, state): - self.__dict__ = state - self[self.ts.frame] - class ReaderBase(ProtoReader): """Base class for trajectory readers that extends :class:`ProtoReader` with a diff --git a/package/MDAnalysis/coordinates/chain.py b/package/MDAnalysis/coordinates/chain.py index bdfdeff3523..0c09a596d95 100644 --- a/package/MDAnalysis/coordinates/chain.py +++ b/package/MDAnalysis/coordinates/chain.py @@ -269,8 +269,17 @@ def __init__(self, filenames, skip=1, dt=None, continuous=False, kwargs['dt'] = dt self.readers = [core.reader(filename, convert_units=convert_units, **kwargs) for filename in filenames] - self.filenames = np.array([fn[0] if isinstance(fn, tuple) else fn - for fn in filenames]) + # Iterate through all filenames, appending NoneType None for ndarrays + self.filenames = [] + for fn in filenames: + if isinstance(fn, np.ndarray): + self.filenames.append(None) + elif isinstance(fn, tuple): + self.filenames.append(fn[0]) + else: + self.filenames.append(fn) + self.filenames = np.array(self.filenames) + # pointer to "active" trajectory index into self.readers self.__active_reader_index = 0 @@ -598,11 +607,14 @@ def close(self): def __repr__(self): if len(self.filenames) > 3: - fnames = "{fname} and {nfanmes} more".format( - fname=os.path.basename(self.filenames[0]), - nfanmes=len(self.filenames) - 1) + fname = (os.path.basename(self.filenames[0]) + if self.filenames[0] else "numpy.ndarray") + fnames = "{fname} and {nfnames} more".format( + fname=fname, + nfnames=len(self.filenames) - 1) else: - fnames = ", ".join([os.path.basename(fn) for fn in self.filenames]) + fnames = ", ".join([os.path.basename(fn) if fn else "numpy.ndarray" + for fn in self.filenames]) return ("<{clsname} containing {fname} with {nframes} frames of {natoms} atoms>" "".format( clsname=self.__class__.__name__, diff --git a/package/MDAnalysis/core/groups.py b/package/MDAnalysis/core/groups.py index a73aef445dd..1cb57f1f342 100644 --- a/package/MDAnalysis/core/groups.py +++ b/package/MDAnalysis/core/groups.py @@ -75,17 +75,19 @@ ------ Each of the above classes has a *level* attribute. This can be used to verify -that two objects are of the same level, or to access a particular class:: +that two objects are of the same level, or to access a particular class - u = mda.Universe() +.. code-block:: python - ag = u.atoms[:10] - at = u.atoms[11] + u = mda.Universe() - ag.level == at.level # Returns True + ag = u.atoms[:10] + at = u.atoms[11] - ag.level.singular # Returns Atom class - at.level.plural # Returns AtomGroup class + ag.level == at.level # Returns True + + ag.level.singular # Returns Atom class + at.level.plural # Returns AtomGroup class """ from collections import namedtuple @@ -771,16 +773,24 @@ def isunique(self): Examples -------- - >>> ag = u.atoms[[2, 1, 2, 2, 1, 0]] - >>> ag - - >>> ag.isunique - False - >>> ag2 = ag.unique - >>> ag2 - - >>> ag2.isunique - True + .. testsetup:: GroupBase.isunique + + from MDAnalysis.tests.datafiles import PDB, XTC + import MDAnalysis as mda + u = mda.Universe(PDB, XTC) + + .. doctest:: GroupBase.isunique + + >>> ag = u.atoms[[2, 1, 2, 2, 1, 0]] + >>> ag + + >>> ag.isunique + False + >>> ag2 = ag.unique + >>> ag2 + + >>> ag2.isunique + True See Also -------- @@ -1028,15 +1038,33 @@ def center(self, weights, wrap=False, unwrap=False, compound='group'): Examples -------- - To find the center of charge of a given :class:`AtomGroup`:: + To find the center of charge of a given :class:`AtomGroup`: + + .. testsetup:: GroupBase.center + + from MDAnalysis.tests.datafiles import PDB, XTC + import MDAnalysis as mda + u = mda.Universe(PSF, DCD) + + .. doctest:: GroupBase.center >>> sel = u.select_atoms('prop mass > 4.0') >>> sel.center(sel.charges) + array([-0.22925091, -0.04771193, -0.16728489]) - To find the centers of mass per residue of all CA :class:`Atoms`:: + To find the centers of mass per residue of all CA :class:`Atoms`: + + .. doctest:: GroupBase.center + :options: +NORMALIZE_WHITESPACE >>> sel = u.select_atoms('name CA') >>> sel.center(sel.masses, compound='residues') + array([[ 11.66462231, 8.39347267, -8.98323059], + [ 11.41483879, 5.43442154, -6.51348448], + [ 8.95975494, 5.61292315, -3.61323047], + [ 8.29006767, 3.07599092, -0.79665166], + [ 5.01112604, 3.76389837, 1.130355 ], + ... .. versionchanged:: 0.19.0 Added `compound` parameter @@ -1227,20 +1255,42 @@ def accumulate(self, attribute, function=np.sum, compound='group'): Examples -------- - To find the total charge of a given :class:`AtomGroup`:: + To find the total charge of a given :class:`AtomGroup`: + + .. testsetup:: GroupBase.center + + from MDAnalysis.tests.datafiles import PSF, DCD + import MDAnalysis as mda + u = mda.Universe(PSF, DCD) + + .. doctest:: GroupBase.center >>> sel = u.select_atoms('prop mass > 4.0') >>> sel.accumulate('charges') + -251.68500316143036 + + To find the total mass per residue of all CA :class:`Atoms`: - To find the total mass per residue of all CA :class:`Atoms`:: + .. doctest:: GroupBase.center + :options: +NORMALIZE_WHITESPACE >>> sel = u.select_atoms('name CA') >>> sel.accumulate('masses', compound='residues') + array([12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, + 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, + 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, + 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, + 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, 12.011, + ... To find the maximum atomic charge per fragment of a given - :class:`AtomGroup`:: + :class:`AtomGroup`: + .. doctest:: GroupBase.center + + >>> import numpy as np >>> sel.accumulate('charges', compound="fragments", function=np.max) + array([0.20999999]) .. versionadded:: 0.20.0 @@ -1957,23 +2007,41 @@ def groupby(self, topattrs): ------- To group atoms with the same mass together: - >>> ag.groupby('masses') - {12.010999999999999: , - 14.007: , - 15.999000000000001: } + .. testsetup:: GroupBase.groupby + + from MDAnalysis.tests.datafiles import PSF, DCD + import MDAnalysis as mda + u = mda.Universe(PSF, DCD) + ag = u.atoms + + .. doctest:: GroupBase.groupby + :options: +NORMALIZE_WHITESPACE + + >>> ag.groupby('masses') + {32.06: , + 1.008: , + 12.011: , + 14.007: , + 15.999: } To group atoms with the same residue name and mass together: - >>> ag.groupby(['resnames', 'masses']) - {('ALA', 1.008): , - ('ALA', 12.011): , - ('ALA', 14.007): , - ('ALA', 15.999): }, - ('ARG', 1.008): , - ...} + .. doctest:: GroupBase.groupby + :options: +NORMALIZE_WHITESPACE + + >>> group_dict = ag.groupby(['resnames', 'masses']) + >>> dict(sorted(group_dict.items())) + {('ALA', 1.008): , + ('ALA', 12.011): , + ('ALA', 14.007): , + ('ALA', 15.999): , + ('ARG', 1.008): , + ... + + .. doctest:: GroupBase.groupby - >>> ag.groupby(['resnames', 'masses'])('ALA', 15.999) - + >>> ag.groupby(['resnames', 'masses'])['ALA', 15.999] + .. versionadded:: 0.16.0 @@ -2023,13 +2091,21 @@ def concatenate(self, other): The order of the original contents (including duplicates) are preserved when performing a concatenation. - >>> ag1 = u.select_atoms('name O') - >>> ag2 = u.select_atoms('name N') - >>> ag3 = ag1 + ag2 # or ag1.concatenate(ag2) - >>> ag3[:3].names - array(['O', 'O', 'O'], dtype=object) - >>> ag3[-3:].names - array(['N', 'N', 'N'], dtype=object) + .. testsetup:: GroupBase.concatenate + + from MDAnalysis.tests.datafiles import PDB, XTC + import MDAnalysis as mda + u = mda.Universe(PDB, XTC) + + .. doctest:: GroupBase.concatenate + + >>> ag1 = u.select_atoms('name O') + >>> ag2 = u.select_atoms('name N') + >>> ag3 = ag1 + ag2 # or ag1.concatenate(ag2) + >>> ag3[:3].names + array(['O', 'O', 'O'], dtype=object) + >>> ag3[-3:].names + array(['N', 'N', 'N'], dtype=object) .. versionadded:: 0.16.0 @@ -2061,11 +2137,19 @@ def union(self, other): In contrast to :meth:`concatenate`, any duplicates are dropped and the result is sorted. - >>> ag1 = u.select_atoms('name O') - >>> ag2 = u.select_atoms('name N') - >>> ag3 = ag1 | ag2 # or ag1.union(ag2) - >>> ag3[:3].names - array(['N', 'O', 'N'], dtype=object) + .. testsetup:: GroupBase.union + + from MDAnalysis.tests.datafiles import PDB, XTC + import MDAnalysis as mda + u = mda.Universe(PDB, XTC) + + .. doctest:: GroupBase.union + + >>> ag1 = u.select_atoms('name O') + >>> ag2 = u.select_atoms('name N') + >>> ag3 = ag1 | ag2 # or ag1.union(ag2) + >>> ag3[:3].names + array(['N', 'O', 'N'], dtype=object) See Also -------- @@ -2101,9 +2185,11 @@ def intersection(self, other): become too complicated. For example to find the water atoms which are within 4.0A of two segments: - >>> shell1 = u.select_atoms('resname SOL and around 4.0 segid 1') - >>> shell2 = u.select_atoms('resname SOL and around 4.0 segid 2') - >>> common = shell1 & shell2 # or shell1.intersection(shell2) + .. code-block:: python + + >>> shell1 = u.select_atoms('resname SOL and around 4.0 segid 1') + >>> shell2 = u.select_atoms('resname SOL and around 4.0 segid 2') + >>> common = shell1 & shell2 # or shell1.intersection(shell2) See Also -------- @@ -2140,11 +2226,19 @@ def subtract(self, other): Unlike :meth:`difference` this method will not sort or remove duplicates. - >>> ag1 = u.atoms[[3, 3, 2, 2, 1, 1]] - >>> ag2 = u.atoms[2] - >>> ag3 = ag1 - ag2 # or ag1.subtract(ag2) - >>> ag1.indices - array([3, 3, 1, 1]) + .. testsetup:: GroupBase.subtract + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF, DCD + u = mda.Universe(PSF,DCD) + + .. doctest:: GroupBase.subtract + + >>> ag1 = u.atoms[[3, 3, 2, 2, 1, 1]] + >>> ag2 = u.atoms[2] + >>> ag3 = ag1.subtract(ag2) + >>> ag3.indices + array([3, 3, 1, 1]) See Also -------- @@ -2207,11 +2301,19 @@ def symmetric_difference(self, other): Example ------- - >>> ag1 = u.atoms[[0, 1, 5, 3, 3, 2]] - >>> ag2 = u.atoms[[4, 4, 6, 2, 3, 5]] - >>> ag3 = ag1 ^ ag2 # or ag1.symmetric_difference(ag2) - >>> ag3.indices # 0 and 1 are only in ag1, 4 and 6 are only in ag2 - [0, 1, 4, 6] + .. testsetup:: GroupBase.symmetric_difference + + from MDAnalysis.tests.datafiles import PSF, DCD + import MDAnalysis as mda + u = mda.Universe(PSF, DCD) + + .. doctest:: GroupBase.symmetric_difference + + >>> ag1 = u.atoms[[0, 1, 5, 3, 3, 2]] + >>> ag2 = u.atoms[[4, 4, 6, 2, 3, 5]] + >>> ag3 = ag1 ^ ag2 # or ag1.symmetric_difference(ag2) + >>> ag3.indices # 0 and 1 are only in ag1, 4 and 6 are only in ag2 + array([0, 1, 4, 6]) See Also -------- @@ -2464,25 +2566,34 @@ class AtomGroup(GroupBase): be attached by the new :class:`AtomGroup`. If the Universe is serialized with its :class:`AtomGroup`, they will still be bound together afterwards: - .. code-block:: python + .. testsetup:: AtomGroup + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF, DCD + + .. doctest:: AtomGroup + + >>> import pickle >>> u = mda.Universe(PSF, DCD) >>> g = u.atoms >>> g_pickled = pickle.loads(pickle.dumps(g)) >>> print("g_pickled.universe is u: ", u is g_pickled.universe) - g_pickled.universe is u: False + g_pickled.universe is u: False - >>> g_pickled, u_pickled = pickle.load(pickle.dumps(g, u)) + >>> g_pickled, u_pickled = pickle.loads(pickle.dumps((g, u))) >>> print("g_pickled.universe is u_pickled: ", - >>> u_pickle is g_pickled.universe) - g_pickled.universe is u_pickled: True + ... u_pickled is g_pickled.universe) + g_pickled.universe is u_pickled: True If multiple :class:`AtomGroup` are bound to the same :class:`MDAnalysis.core.universe.Universe`, they will bound to the same one after serialization: - .. code-block:: python + .. doctest:: AtomGroup + + >>> import pickle >>> u = mda.Universe(PSF, DCD) >>> g = u.atoms @@ -2490,14 +2601,14 @@ class AtomGroup(GroupBase): >>> g_pickled = pickle.loads(pickle.dumps(g)) >>> h_pickled = pickle.loads(pickle.dumps(h)) - >>> print("g_pickled.universe is h_pickled.universe : ", - >>> g_pickled.universe is h_pickled.universe) - g_pickled.universe is h_pickled.universe: False + >>> print("g_pickled.universe is h_pickled.universe: ", + ... g_pickled.universe is h_pickled.universe) + g_pickled.universe is h_pickled.universe: False - >>> g_pickled, h_pickled = pickle.load(pickle.dumps(g, h)) + >>> g_pickled, h_pickled = pickle.loads(pickle.dumps((g, h))) >>> print("g_pickled.universe is h_pickled.universe: ", - >>> g_pickle.universe is h_pickled.universe) - g_pickled.universe is h_pickled.universe: True + ... g_pickled.universe is h_pickled.universe) + g_pickled.universe is h_pickled.universe: True The aforementioned two cases are useful for implementation of parallel analysis base classes. First, you always get an independent @@ -2672,21 +2783,23 @@ def unique(self): Examples -------- - >>> import MDAnalysis as mda - >>> from MDAnalysis.tests.datafiles import PSF, DCD - >>> u = mda.Universe(PSF, DCD) - >>> ag = u.atoms[[2, 1, 2, 2, 1, 0]] - >>> ag - - >>> ag.ix - array([2, 1, 2, 2, 1, 0], dtype=int64) - >>> ag2 = ag.unique - >>> ag2 - - >>> ag2.ix - array([0, 1, 2], dtype=int64) - >>> ag2.unique is ag2 - False + .. doctest:: AtomGroup.unique + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> ag = u.atoms[[2, 1, 2, 2, 1, 0]] + >>> ag + + >>> ag.ix + array([2, 1, 2, 2, 1, 0]) + >>> ag2 = ag.unique + >>> ag2 + + >>> ag2.ix + array([0, 1, 2]) + >>> ag2.unique is ag2 + False See Also -------- @@ -2728,22 +2841,24 @@ def asunique(self, sorted=False): Examples -------- - >>> import MDAnalysis as mda - >>> from MDAnalysis.tests.datafiles import PSF, DCD - >>> u = mda.Universe(PSF, DCD) - >>> ag = u.atoms[[2, 1, 0]] - >>> ag2 = ag.asunique(sorted=False) - >>> ag2 is ag - True - >>> ag2.ix - array([2, 1, 0], dtype=int64) - >>> ag3 = ag.asunique(sorted=True) - >>> ag3 is ag - False - >>> ag3.ix - array([0, 1, 2], dtype=int64) - >>> u.atoms[[2, 1, 1, 0, 1]].asunique(sorted=False).ix - array([2, 1, 0], dtype=int64) + .. doctest:: AtomGroup.asunique + + >>> import MDAnalysis as mda + >>> from MDAnalysis.tests.datafiles import PSF, DCD + >>> u = mda.Universe(PSF, DCD) + >>> ag = u.atoms[[2, 1, 0]] + >>> ag2 = ag.asunique(sorted=False) + >>> ag2 is ag + True + >>> ag2.ix + array([2, 1, 0]) + >>> ag3 = ag.asunique(sorted=True) + >>> ag3 is ag + False + >>> ag3.ix + array([0, 1, 2]) + >>> u.atoms[[2, 1, 1, 0, 1]].asunique(sorted=False).ix + array([2, 1, 0]) .. versionadded:: 2.0.0 @@ -2751,7 +2866,6 @@ def asunique(self, sorted=False): return self._asunique(sorted=sorted, group=self.universe.atoms, set_mask=True) - @property def positions(self): r"""Coordinates of the :class:`Atoms` in the :class:`AtomGroup`. @@ -2925,34 +3039,69 @@ def select_atoms(self, sel, *othersel, periodic=True, rtol=1e-05, All simple selection listed below support multiple arguments which are implicitly combined with an or operator. For example - >>> sel = universe.select_atoms('resname MET GLY') + .. testsetup:: AtomGroup.select_atoms + + from MDAnalysis.tests.datafiles import PSF, DCD + import MDAnalysis as mda + universe = mda.Universe(PSF, DCD) + + .. doctest:: AtomGroup.select_atoms + + >>> sel = universe.select_atoms('resname MET GLY') + >>> sel + is equivalent to - >>> sel = universe.select_atoms('resname MET or resname GLY') + .. doctest:: AtomGroup.select_atoms + + >>> sel = universe.select_atoms('resname MET or resname GLY') + >>> sel + Will select all atoms with a residue name of either MET or GLY. Subselections can be grouped with parentheses. - >>> sel = universe.select_atoms("segid DMPC and not ( name H* O* )") - >>> sel - + .. doctest:: AtomGroup.select_atoms + >>> sel = universe.select_atoms("segid 4AKE and not ( name H* O* )") + >>> sel + Existing :class:`AtomGroup` objects can be passed as named arguments, which will then be available to the selection parser. - >>> universe.select_atoms("around 10 group notHO", notHO=sel) - + .. testsetup:: AtomGroup.select_atoms.namedarguments + + from MDAnalysis.tests.datafiles import PSF, DCD + import MDAnalysis as mda + universe = mda.Universe(PSF, DCD) + sel = universe.select_atoms("segid 4AKE and not ( name H* O* )") + + .. doctest:: AtomGroup.select_atoms, AtomGroup.select_atoms.namedarguments + + >>> universe.select_atoms("around 10 group notHO", notHO=sel) + Selections can be set to update automatically on frame change, by setting the `updating` keyword argument to `True`. This will return a :class:`UpdatingAtomGroup` which can represent the solvation shell around another object. - >>> universe.select_atoms("resname SOL and around 2.0 protein", updating=True) - + .. testsetup:: AtomGroup.select_atoms.updating + + from MDAnalysis.tests.datafiles import PDB, XTC + import MDAnalysis as mda + universe = mda.Universe(PDB, XTC) + + .. doctest:: AtomGroup.select_atoms.updating + :options: +NORMALIZE_WHITESPACE + + >>> universe.select_atoms("resname SOL and around 2.0 protein", + ... updating=True) + Notes ----- @@ -3043,8 +3192,19 @@ def select_atoms(self, sel, *othersel, periodic=True, rtol=1e-05, problem can be fixed by increasing the value of maxMatches. This behavior may be updated in the future. - >>> universe.select_atoms("C", smarts_kwargs={"maxMatches": 100}) - + .. testsetup:: AtomGroup.select_atoms.smarts + + from MDAnalysis.tests.datafiles import PSF, DCD + from MDAnalysis.topology.guessers import guess_types + import MDAnalysis as mda + universe = mda.Universe(PSF, DCD) + guessed_elements = guess_types(universe.atoms.names) + universe.add_TopologyAttr('elements', guessed_elements) + + .. doctest:: AtomGroup.select_atoms.smarts + + >>> universe.select_atoms("smarts C", smarts_kwargs={"maxMatches": 100}) + chiral *R | S* select a particular stereocenter. e.g. ``name C and chirality @@ -3461,13 +3621,15 @@ def write(self, filename=None, file_format=None, Examples -------- - >>> ag = u.atoms - >>> ag.write('selection.ndx') # Write a gromacs index file - >>> ag.write('coordinates.pdb') # Write the current frame as PDB - >>> # Write the trajectory in XTC format - >>> ag.write('trajectory.xtc', frames='all') - >>> # Write every other frame of the trajectory in PBD format - >>> ag.write('trajectory.pdb', frames=u.trajectory[::2]) + .. code-block:: python + + >>> ag = u.atoms + >>> ag.write('selection.ndx') # Write a gromacs index file + >>> ag.write('coordinates.pdb') # Write the current frame as PDB + >>> # Write the trajectory in XTC format + >>> ag.write('trajectory.xtc', frames='all') + >>> # Write every other frame of the trajectory in PBD format + >>> ag.write('trajectory.pdb', frames=u.trajectory[::2]) Parameters ---------- @@ -3612,17 +3774,17 @@ def sort(self, key='ix', keyfunc=None): Example ---------- - .. code-block:: python + .. doctest:: AtomGroup.sort >>> import MDAnalysis as mda >>> from MDAnalysisTests.datafiles import PDB_small >>> u = mda.Universe(PDB_small) >>> ag = u.atoms[[3, 2, 1, 0]] >>> ag.ix - array([3 2 1 0]) + array([3, 2, 1, 0]) >>> ag = ag.sort() >>> ag.ix - array([0 1 2 3]) + array([0, 1, 2, 3]) >>> ag.positions array([[-11.921, 26.307, 10.41 ], [-11.447, 26.741, 9.595], @@ -3795,18 +3957,26 @@ def unique(self): Examples -------- - >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] - >>> rg - - >>> rg.ix - array([2, 1, 2, 2, 1, 0]) - >>> rg2 = rg.unique - >>> rg2 - - >>> rg2.ix - array([0, 1, 2]) - >>> rg2.unique is rg2 - False + .. testsetup:: ResidueGroup.unique + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF, DCD + u = mda.Universe(PSF, DCD) + + .. doctest:: ResidueGroup.unique + + >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] + >>> rg + + >>> rg.ix + array([2, 1, 2, 2, 1, 0]) + >>> rg2 = rg.unique + >>> rg2 + + >>> rg2.ix + array([0, 1, 2]) + >>> rg2.unique is rg2 + False .. versionadded:: 0.16.0 @@ -3843,18 +4013,26 @@ def asunique(self, sorted=False): Examples -------- - >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] - >>> rg - - >>> rg.ix - array([2, 1, 2, 2, 1, 0]) - >>> rg2 = rg.asunique() - >>> rg2 - - >>> rg2.ix - array([0, 1, 2]) - >>> rg2.asunique() is rg2 - True + .. testsetup:: ResidueGroup.asunique + + import MDAnalysis as mda + from MDAnalysis.tests.datafiles import PSF, DCD + u = mda.Universe(PSF, DCD) + + .. doctest:: ResidueGroup.asunique + + >>> rg = u.residues[[2, 1, 2, 2, 1, 0]] + >>> rg + + >>> rg.ix + array([2, 1, 2, 2, 1, 0]) + >>> rg2 = rg.asunique(sorted=True) + >>> rg2 + + >>> rg2.ix + array([0, 1, 2]) + >>> rg2.asunique() is rg2 + True .. versionadded:: 2.0.0 @@ -3971,18 +4149,26 @@ def unique(self): Examples -------- - >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] - >>> sg - - >>> sg.ix - array([2, 1, 2, 2, 1, 0]) - >>> sg2 = sg.unique - >>> sg2 - - >>> sg2.ix - array([0, 1, 2]) - >>> sg2.unique is sg2 - False + .. testsetup:: SegmentGroup.unique + + from MDAnalysis.tests.datafiles import CONECT + import MDAnalysis as mda + u = mda.Universe(CONECT) + + .. doctest:: SegmentGroup.unique + + >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] + >>> sg + + >>> sg.ix + array([2, 1, 2, 2, 1, 0]) + >>> sg2 = sg.unique + >>> sg2 + + >>> sg2.ix + array([0, 1, 2]) + >>> sg2.unique is sg2 + False .. versionadded:: 0.16.0 @@ -4019,18 +4205,26 @@ def asunique(self, sorted=False): Examples -------- - >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] - >>> sg - - >>> sg.ix - array([2, 1, 2, 2, 1, 0]) - >>> sg2 = sg.asunique() - >>> sg2 - - >>> sg2.ix - array([0, 1, 2]) - >>> sg2.asunique() is sg2 - True + .. testsetup:: SegmentGroup.asunique + + from MDAnalysis.tests.datafiles import CONECT + import MDAnalysis as mda + u = mda.Universe(CONECT) + + .. doctest:: SegmentGroup.asunique + + >>> sg = u.segments[[2, 1, 2, 2, 1, 0]] + >>> sg + + >>> sg.ix + array([2, 1, 2, 2, 1, 0]) + >>> sg2 = sg.asunique(sorted=True) + >>> sg2 + + >>> sg2.ix + array([0, 1, 2]) + >>> sg2.asunique() is sg2 + True .. versionadded:: 2.0.0 @@ -4536,8 +4730,8 @@ def __repr__(self): else: basegrp = "another AtomGroup." # With a shorthand to conditionally append the 's' in 'selections'. - return "{}, with selection{} {} on {}>".format(basestr[:-1], - "s"[len(self._selection_strings) == 1:], sels, basegrp) + return "{}, with selection{} {} on {}>".format( + basestr[:-1], "s"[len(self._selection_strings) == 1:], sels, basegrp) @property def atoms(self): @@ -4563,21 +4757,24 @@ def atoms(self): ------- The static :attr:`atoms` allows comparison of groups of atoms between frames. For example, track water molecules that move in and out of a - solvation shell of a protein:: + solvation shell of a protein + + .. code-block:: python - u = mda.Universe(TPR, XTC) - water_shell = u.select_atoms("name OW and around 3.5 protein", updating=True) - water_shell_prev = water_shell.atoms + u = mda.Universe(TPR, XTC) + water_shell = u.select_atoms("name OW and around 3.5 protein", + updating=True) + water_shell_prev = water_shell.atoms - for ts in u.trajectory: - exchanged = water_shell - water_shell_prev + for ts in u.trajectory: + exchanged = water_shell - water_shell_prev - print(ts.time, "waters in shell =", water_shell.n_residues) - print(ts.time, "waters that exchanged = ", exchanged.n_residues) - print(ts.time, "waters that remained bound = ", - water_shell.n_residues - exchanged.n_residues) + print(ts.time, "waters in shell =", water_shell.n_residues) + print(ts.time, "waters that exchanged = ", exchanged.n_residues) + print(ts.time, "waters that remained bound = ", + water_shell.n_residues - exchanged.n_residues) - water_shell_prev = water_shell.atoms + water_shell_prev = water_shell.atoms By remembering the atoms of the current time step in `water_shell_prev`, it becomes possible to use the :meth:`subtraction diff --git a/package/MDAnalysis/core/topologyattrs.py b/package/MDAnalysis/core/topologyattrs.py index 6af35b389d7..92fa25a5e5d 100644 --- a/package/MDAnalysis/core/topologyattrs.py +++ b/package/MDAnalysis/core/topologyattrs.py @@ -866,6 +866,9 @@ def phi_selections(residues, c_name='C', n_name='N', ca_name='CA'): .. versionadded:: 1.0.0 """ + if not residues: + return [] + u = residues[0].universe prev = u.residues[residues.ix-1] # obv candidates first rsid = residues.segids @@ -1062,6 +1065,10 @@ def psi_selections(residues, c_name='C', n_name='N', ca_name='CA'): .. versionadded:: 1.0.0 """ + + if not residues: + return [] + results = np.array([None]*len(residues), dtype=object) nxtres = residues._get_next_residues_by_resid() rix = np.where(nxtres)[0] @@ -1170,6 +1177,10 @@ def omega_selections(residues, c_name='C', n_name='N', ca_name='CA'): .. versionadded:: 1.0.0 """ + + if not residues: + return [] + results = np.array([None]*len(residues), dtype=object) nxtres = residues._get_next_residues_by_resid() rix = np.where(nxtres)[0] @@ -1267,6 +1278,10 @@ def chi1_selections(residues, n_name='N', ca_name='CA', cb_name='CB', .. versionadded:: 1.0.0 """ + + if not residues: + return [] + results = np.array([None]*len(residues)) names = [n_name, ca_name, cb_name, cg_name] keep = [all(sum(np.isin(r.atoms.names, n.split())) == 1 diff --git a/package/MDAnalysis/lib/formats/cython_util.pyx b/package/MDAnalysis/lib/formats/cython_util.pyx index 3c9b90d02e9..26c694a40fd 100644 --- a/package/MDAnalysis/lib/formats/cython_util.pyx +++ b/package/MDAnalysis/lib/formats/cython_util.pyx @@ -26,6 +26,8 @@ cimport numpy as cnp from libc.stdlib cimport free from cpython cimport PyObject, Py_INCREF +from MDAnalysis.lib.util import no_copy_shim + cnp.import_array() @@ -71,7 +73,7 @@ cdef class ArrayWrapper: self.data_type = data_type self.ndim = ndim - def __array__(self): + def __array__(self, dtype=None, copy=None): """ Here we use the __array__ method, that is called when numpy tries to get an array from the object.""" ndarray = cnp.PyArray_SimpleNewFromData(self.ndim, @@ -110,7 +112,7 @@ cdef cnp.ndarray ptr_to_ndarray(void* data_ptr, cnp.int64_t[:] dim, int data_typ array_wrapper = ArrayWrapper() array_wrapper.set_data( data_ptr, &dim[0], dim.size, data_type) - cdef cnp.ndarray ndarray = np.array(array_wrapper, copy=False) + cdef cnp.ndarray ndarray = np.array(array_wrapper, copy=no_copy_shim) # Assign our object to the 'base' of the ndarray object ndarray[:] = array_wrapper.__array__() # Increment the reference count, as the above assignement was done in diff --git a/package/MDAnalysis/lib/formats/include/__init__.py b/package/MDAnalysis/lib/formats/include/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package/MDAnalysis/lib/formats/src/__init__.py b/package/MDAnalysis/lib/formats/src/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package/MDAnalysis/lib/include/__init__.py b/package/MDAnalysis/lib/include/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package/MDAnalysis/lib/libmdanalysis/__init__.py b/package/MDAnalysis/lib/libmdanalysis/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package/MDAnalysis/lib/log.py b/package/MDAnalysis/lib/log.py index d3a6782aa12..a5cfc2f5018 100644 --- a/package/MDAnalysis/lib/log.py +++ b/package/MDAnalysis/lib/log.py @@ -135,7 +135,8 @@ def create(logger_name="MDAnalysis", logfile="MDAnalysis.log"): # handler that writes to logfile logfile_handler = logging.FileHandler(logfile) - logfile_formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s') + logfile_formatter = logging.Formatter( + '%(asctime)s %(name)-12s %(levelname)-8s %(message)s') logfile_handler.setFormatter(logfile_formatter) logger.addHandler(logfile_handler) @@ -172,6 +173,7 @@ class NullHandler(logging.Handler): see the advice on logging and libraries in http://docs.python.org/library/logging.html?#configuring-logging-for-a-library """ + def emit(self, record): pass @@ -327,6 +329,7 @@ class ProgressBar(tqdm): .. _`tqdm documentation`: https://tqdm.github.io/ """ + def __init__(self, *args, **kwargs): """""" # ^^^^ keep the empty doc string to avoid Sphinx doc errors with the diff --git a/package/MDAnalysis/lib/picklable_file_io.py b/package/MDAnalysis/lib/picklable_file_io.py index dd0dad7ad26..91413619c5b 100644 --- a/package/MDAnalysis/lib/picklable_file_io.py +++ b/package/MDAnalysis/lib/picklable_file_io.py @@ -91,11 +91,13 @@ class FileIOPicklable(io.FileIO): ------- :: + >>> import pickle + >>> from MDAnalysis.tests.datafiles import PDB >>> file = FileIOPicklable(PDB) - >>> file.readline() + >>> _ = file.readline() >>> file_pickled = pickle.loads(pickle.dumps(file)) >>> print(file.tell(), file_pickled.tell()) - 55 55 + 55 55 See Also --------- @@ -112,12 +114,13 @@ def __init__(self, name, mode='r'): def __setstate__(self, state): name = state["name_val"] - super().__init__(name, mode='r') + self.__init__(name, mode='r') try: self.seek(state["tell_val"]) except KeyError: pass + def __reduce_ex__(self, prot): if self._mode != 'r': raise RuntimeError("Can only pickle files that were opened " @@ -163,7 +166,7 @@ def __setstate__(self, state): raw_class = state["raw_class"] name = state["name_val"] raw = raw_class(name) - super().__init__(raw) + self.__init__(raw) self.seek(state["tell_val"]) def __reduce_ex__(self, prot): @@ -175,18 +178,13 @@ def __reduce_ex__(self, prot): "name_val": self.name, "tell_val": self.tell()}) + class TextIOPicklable(io.TextIOWrapper): """Character and line based picklable file-like object. This class provides a file-like :class:`io.TextIOWrapper` object that can be pickled. Note that this only works in read mode. - Note - ---- - After pickling, the current position is reset. `universe.trajectory[i]` has - to be used to return to its original frame. - - Parameters ---------- raw : FileIO object @@ -205,21 +203,34 @@ class TextIOPicklable(io.TextIOWrapper): .. versionadded:: 2.0.0 + .. versionchanged:: 2.8.0 + The raw class instance instead of the class name + that is wrapped inside will be serialized. + After deserialization, the current position is no longer reset + so `universe.trajectory[i]` is not needed to seek to the + original position. """ def __init__(self, raw): super().__init__(raw) self.raw_class = raw.__class__ - def __setstate__(self, args): raw_class = args["raw_class"] name = args["name_val"] + tell = args["tell_val"] # raw_class is used for further expansion this functionality to # Gzip files, which also requires a text wrapper. raw = raw_class(name) - super().__init__(raw) + self.__init__(raw) + if tell is not None: + self.seek(tell) def __reduce_ex__(self, prot): + try: + curr_loc = self.tell() + # some readers (e.g. GMS) disable tell() due to using next() + except OSError: + curr_loc = None try: name = self.name except AttributeError: @@ -228,7 +239,8 @@ def __reduce_ex__(self, prot): return (self.__class__.__new__, (self.__class__,), {"raw_class": self.raw_class, - "name_val": name}) + "name_val": name, + "tell_val": curr_loc}) class BZ2Picklable(bz2.BZ2File): @@ -262,11 +274,13 @@ class BZ2Picklable(bz2.BZ2File): ------- :: + >>> import pickle + >>> from MDAnalysis.tests.datafiles import XYZ_bz2 >>> file = BZ2Picklable(XYZ_bz2) - >>> file.readline() + >>> _ = file.readline() >>> file_pickled = pickle.loads(pickle.dumps(file)) >>> print(file.tell(), file_pickled.tell()) - 5 5 + 5 5 See Also --------- @@ -289,9 +303,11 @@ def __getstate__(self): return {"name_val": self._fp.name, "tell_val": self.tell()} def __setstate__(self, args): - super().__init__(args["name_val"]) + name = args["name_val"] + tell = args["tell_val"] + self.__init__(name) try: - self.seek(args["tell_val"]) + self.seek(tell) except KeyError: pass @@ -327,11 +343,13 @@ class GzipPicklable(gzip.GzipFile): ------- :: + >>> import pickle + >>> from MDAnalysis.tests.datafiles import MMTF_gz >>> file = GzipPicklable(MMTF_gz) - >>> file.readline() + >>> _ = file.readline() >>> file_pickled = pickle.loads(pickle.dumps(file)) >>> print(file.tell(), file_pickled.tell()) - 1218 1218 + 1218 1218 See Also --------- @@ -355,9 +373,11 @@ def __getstate__(self): "tell_val": self.tell()} def __setstate__(self, args): - super().__init__(args["name_val"]) + name = args["name_val"] + tell = args["tell_val"] + self.__init__(name) try: - self.seek(args["tell_val"]) + self.seek(tell) except KeyError: pass diff --git a/package/MDAnalysis/lib/src/transformations/__init__.py b/package/MDAnalysis/lib/src/transformations/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package/MDAnalysis/lib/transformations.py b/package/MDAnalysis/lib/transformations.py index 3498f655120..5c386a01047 100644 --- a/package/MDAnalysis/lib/transformations.py +++ b/package/MDAnalysis/lib/transformations.py @@ -170,6 +170,7 @@ from numpy.linalg import norm from .mdamath import angle as vecangle +from MDAnalysis.lib.util import no_copy_shim def identity_matrix(): """Return 4x4 identity/unit matrix. @@ -326,7 +327,7 @@ def rotation_matrix(angle, direction, point=None): M[:3, :3] = R if point is not None: # rotation not around origin - point = np.array(point[:3], dtype=np.float64, copy=False) + point = np.array(point[:3], dtype=np.float64, copy=no_copy_shim) M[:3, 3] = point - np.dot(R, point) return M @@ -497,7 +498,7 @@ def projection_matrix(point, normal, direction=None, """ M = np.identity(4) - point = np.array(point[:3], dtype=np.float64, copy=False) + point = np.array(point[:3], dtype=np.float64, copy=no_copy_shim) normal = unit_vector(normal[:3]) if perspective is not None: # perspective projection @@ -515,7 +516,7 @@ def projection_matrix(point, normal, direction=None, M[3, 3] = np.dot(perspective, normal) elif direction is not None: # parallel projection - direction = np.array(direction[:3], dtype=np.float64, copy=False) + direction = np.array(direction[:3], dtype=np.float64, copy=no_copy_shim) scale = np.dot(direction, normal) M[:3, :3] -= np.outer(direction, normal) / scale M[:3, 3] = direction * (np.dot(point, normal) / scale) @@ -970,8 +971,8 @@ def superimposition_matrix(v0, v1, scaling=False, usesvd=True): True """ - v0 = np.array(v0, dtype=np.float64, copy=False)[:3] - v1 = np.array(v1, dtype=np.float64, copy=False)[:3] + v0 = np.array(v0, dtype=np.float64, copy=no_copy_shim)[:3] + v1 = np.array(v1, dtype=np.float64, copy=no_copy_shim)[:3] if v0.shape != v1.shape or v0.shape[1] < 3: raise ValueError("vector sets are of wrong shape or type") @@ -1314,7 +1315,7 @@ def quaternion_from_matrix(matrix, isprecise=False): True """ - M = np.array(matrix, dtype=np.float64, copy=False)[:4, :4] + M = np.array(matrix, dtype=np.float64, copy=no_copy_shim)[:4, :4] if isprecise: q = np.empty((4, ), dtype=np.float64) t = np.trace(M) diff --git a/package/MDAnalysis/lib/util.py b/package/MDAnalysis/lib/util.py index 072be67ee2b..8600c390e1b 100644 --- a/package/MDAnalysis/lib/util.py +++ b/package/MDAnalysis/lib/util.py @@ -205,6 +205,7 @@ from functools import wraps import textwrap import weakref +import itertools import mmtf import numpy as np @@ -2552,3 +2553,42 @@ def wrapper(self, *args, **kwargs): self._kwargs[key] = arg return func(self, *args, **kwargs) return wrapper + + +def no_copy_shim(): + if np.lib.NumpyVersion >= "2.0.0rc1": + copy = None + else: + copy = False + return copy + + +def atoi(s: str) -> int: + """Convert the leading number part of a string to an integer. + + Parameters + ---------- + s : str + The string to convert to an integer. + + Returns + ------- + number : int + The first numeric part of the string converted to an integer. + If the string does not start with a number, 0 is returned. + + Examples + -------- + >>> from MDAnalysis.lib.util import atoi + >>> atoi('34f4') + 34 + >>> atoi('foo') + 0 + + + .. versionadded:: 2.8.0 + """ + try: + return int(''.join(itertools.takewhile(str.isdigit, s.strip()))) + except ValueError: + return 0 diff --git a/package/MDAnalysis/topology/PSFParser.py b/package/MDAnalysis/topology/PSFParser.py index b2a7095d07f..1961d21c7b0 100644 --- a/package/MDAnalysis/topology/PSFParser.py +++ b/package/MDAnalysis/topology/PSFParser.py @@ -48,7 +48,7 @@ from math import ceil import numpy as np -from ..lib.util import openany +from ..lib.util import openany, atoi from . import guessers from .base import TopologyReaderBase, squash_by, change_squash from ..core.topologyattrs import ( @@ -89,6 +89,10 @@ class PSFParser(TopologyReaderBase): - impropers .. _PSF: http://www.charmm.org/documentation/c35b1/struct.html + + + .. versionchanged:: 2.8.0 + PSFParser now reads string resids and converts them to integers. """ format = 'PSF' @@ -248,7 +252,8 @@ def _parseatoms(self, lines, atoms_per, numlines): } atom_parser = atom_parsers[self._format] # once partitioned, assigned each component the correct type - set_type = lambda x: (int(x[0]) - 1, x[1] or "SYSTEM", int(x[2]), x[3], + set_type = lambda x: (int(x[0]) - 1, x[1] or "SYSTEM", + atoi(x[2]), x[3], x[4], x[5], float(x[6]), float(x[7])) # Oli: I don't think that this is the correct OUTPUT format: diff --git a/package/MDAnalysis/topology/TPRParser.py b/package/MDAnalysis/topology/TPRParser.py index 910d5b5623f..d6f3717bf1a 100644 --- a/package/MDAnalysis/topology/TPRParser.py +++ b/package/MDAnalysis/topology/TPRParser.py @@ -66,6 +66,7 @@ 122 28 2021 yes 127 28 2022 yes 129 28 2023 yes + 133 28 2024.1 yes ========== ============== ==================== ===== .. [*] Files generated by the beta versions of Gromacs 2020 are NOT supported. diff --git a/package/MDAnalysis/topology/tpr/setting.py b/package/MDAnalysis/topology/tpr/setting.py index c8a4fa93649..711154cf847 100644 --- a/package/MDAnalysis/topology/tpr/setting.py +++ b/package/MDAnalysis/topology/tpr/setting.py @@ -38,7 +38,7 @@ """ #: Gromacs TPR file format versions that can be read by the TPRParser. -SUPPORTED_VERSIONS = (58, 73, 83, 100, 103, 110, 112, 116, 119, 122, 127, 129) +SUPPORTED_VERSIONS = (58, 73, 83, 100, 103, 110, 112, 116, 119, 122, 127, 129, 133) # Some constants STRLEN = 4096 diff --git a/package/MDAnalysis/transformations/nojump.py b/package/MDAnalysis/transformations/nojump.py index 7e59e26aeec..d58487c220a 100644 --- a/package/MDAnalysis/transformations/nojump.py +++ b/package/MDAnalysis/transformations/nojump.py @@ -99,11 +99,10 @@ def __init__( self, check_continuity=True, max_threads=None, + ): # NoJump transforms are inherently unparallelizable, since # it depends on the previous frame's unwrapped coordinates - parallelizable=False, - ): - super().__init__(max_threads=max_threads, parallelizable=parallelizable) + super().__init__(max_threads=max_threads, parallelizable=False) self.prev = None self.old_frame = 0 self.older_frame = "A" diff --git a/package/MDAnalysis/visualization/streamlines_3D.py b/package/MDAnalysis/visualization/streamlines_3D.py index 1ad20063c23..1f85851c16a 100644 --- a/package/MDAnalysis/visualization/streamlines_3D.py +++ b/package/MDAnalysis/visualization/streamlines_3D.py @@ -245,8 +245,8 @@ def point_in_cube(array_point_coordinates, list_cube_vertices, cube_centroid): cube_half_side_length = scipy.spatial.distance.pdist(array_cube_vertices, 'euclidean').min() / 2.0 array_cube_vertex_distances_from_centroid = scipy.spatial.distance.cdist(array_cube_vertices, cube_centroid[np.newaxis, :]) - np.testing.assert_almost_equal(array_cube_vertex_distances_from_centroid.min(), - array_cube_vertex_distances_from_centroid.max(), decimal=4, + np.testing.assert_allclose(array_cube_vertex_distances_from_centroid.min(), + array_cube_vertex_distances_from_centroid.max(), rtol=0, atol=1.5e-4, err_msg="not all cube vertex to centroid distances are the same, " "so not a true cube") absolute_delta_coords = np.absolute(np.subtract(array_point_coordinates, cube_centroid)) diff --git a/package/doc/sphinx/source/conf.py b/package/doc/sphinx/source/conf.py index 7c644b122ff..dfc6c606a13 100644 --- a/package/doc/sphinx/source/conf.py +++ b/package/doc/sphinx/source/conf.py @@ -350,4 +350,5 @@ class KeyStyle(UnsrtStyle): 'rdkit': ('https://rdkit.org/docs/', None), 'waterdynamics': ('https://www.mdanalysis.org/waterdynamics/', None), 'pathsimanalysis': ('https://www.mdanalysis.org/PathSimAnalysis/', None), + 'mdahole2': ('https://www.mdanalysis.org/mdahole2/', None), } diff --git a/package/doc/sphinx/source/documentation_pages/analysis/dssp.rst b/package/doc/sphinx/source/documentation_pages/analysis/dssp.rst new file mode 100644 index 00000000000..f166fa61e49 --- /dev/null +++ b/package/doc/sphinx/source/documentation_pages/analysis/dssp.rst @@ -0,0 +1 @@ +.. automodule:: MDAnalysis.analysis.dssp.dssp \ No newline at end of file diff --git a/package/doc/sphinx/source/documentation_pages/analysis/hole2.rst b/package/doc/sphinx/source/documentation_pages/analysis/hole2.rst index a86066a5426..1d8b962a175 100644 --- a/package/doc/sphinx/source/documentation_pages/analysis/hole2.rst +++ b/package/doc/sphinx/source/documentation_pages/analysis/hole2.rst @@ -18,6 +18,20 @@ from http://www.holeprogram.org/ or as source from https://github.com/osmart/hole2. (HOLE is open source and available under the Apache v2.0 license.) + +.. deprecated:: 2.8.0 + This module is deprecated in favour of the mdakit + `mdahole2 `_ and + will be removed in MDAnalysis 3.0.0. + +.. _HOLE: http://www.holeprogram.org/ + + +See Also +-------- +:mod:`mdahole2.analysis.hole` + + Module ------ diff --git a/package/doc/sphinx/source/documentation_pages/analysis_modules.rst b/package/doc/sphinx/source/documentation_pages/analysis_modules.rst index 96ca0010dc3..ee7f6568758 100644 --- a/package/doc/sphinx/source/documentation_pages/analysis_modules.rst +++ b/package/doc/sphinx/source/documentation_pages/analysis_modules.rst @@ -136,6 +136,7 @@ Macromolecules analysis/gnm analysis/helix_analysis analysis/dihedrals + analysis/dssp Liquids ------- diff --git a/package/doc/sphinx/source/references.bib b/package/doc/sphinx/source/references.bib index a6eee5efba1..b53f2429897 100644 --- a/package/doc/sphinx/source/references.bib +++ b/package/doc/sphinx/source/references.bib @@ -771,6 +771,31 @@ @article{Kulke2022 doi = {10.1021/acs.jctc.2c00327} } +@article{Kabsch1983, +author = {Kabsch, Wolfgang and Sander, Christian}, +title = {Dictionary of protein secondary structure: Pattern recognition of hydrogen-bonded and geometrical features}, +journal = {Biopolymers}, +volume = {22}, +number = {12}, +pages = {2577-2637}, +doi = {https://doi.org/10.1002/bip.360221211}, +url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/bip.360221211}, +eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1002/bip.360221211}, +abstract = {Abstract For a successful analysis of the relation between amino acid sequence and protein structure, an unambiguous and physically meaningful definition of secondary structure is essential. We have developed a set of simple and physically motivated criteria for secondary structure, programmed as a pattern-recognition process of hydrogen-bonded and geometrical features extracted from x-ray coordinates. Cooperative secondary structure is recognized as repeats of the elementary hydrogen-bonding patterns “turn” and “bridge.” Repeating turns are “helices,” repeating bridges are “ladders,” connected ladders are “sheets.” Geometric structure is defined in terms of the concepts torsion and curvature of differential geometry. Local chain “chirality” is the torsional handedness of four consecutive Cα positions and is positive for right-handed helices and negative for ideal twisted β-sheets. Curved pieces are defined as “bends.” Solvent “exposure” is given as the number of water molecules in possible contact with a residue. The end result is a compilation of the primary structure, including SS bonds, secondary structure, and solvent exposure of 62 different globular proteins. The presentation is in linear form: strip graphs for an overall view and strip tables for the details of each of 10.925 residues. The dictionary is also available in computer-readable form for protein structure prediction work.}, +year = {1983} +} + +@article{Linke2018, + title = {Fully Anisotropic Rotational Diffusion Tensor from Molecular Dynamics Simulations}, + author = {Linke, Max and Köfinger, Jürgen and Hummer, Gerhard}, + year = {2018}, + journal = {The Journal of Physical Chemistry B}, + volume = {122}, + number = {21}, + pages = {5630--5639}, + doi = {10.1021/acs.jpcb.7b11988} +} + @article{Shrake1973, author = {A. Shrake and J.A. Rupley}, title = {Environment and exposure to solvent of protein atoms. Lysozyme and insulin}, diff --git a/package/pyproject.toml b/package/pyproject.toml index 5b81bc4e007..1880d88fd0d 100644 --- a/package/pyproject.toml +++ b/package/pyproject.toml @@ -3,18 +3,18 @@ requires = [ "Cython>=0.28", "packaging", - # lowest NumPy we can use for a given Python, - # In part adapted from: https://github.com/scipy/oldest-supported-numpy/blob/main/setup.cfg - # As per NEP29, we set the minimum version to 1.23.2 for Python <=3.11 - # and 1.26.0 (first to support) for Python 3.12 - "numpy==1.23.2; python_version<='3.11' and platform_python_implementation != 'PyPy'", - "numpy==1.26.0; python_version=='3.12' and platform_python_implementation != 'PyPy'", - # For unreleased versions of Python there is currently no known supported - # NumPy version. In that case we just let it be a bare NumPy install - "numpy<2.0; python_version>='3.13'", - "setuptools", + # numpy requirement for wheel builds for distribution on PyPI - building + # against 2.x yields wheels that are also compatible with numpy 1.x at + # runtime. + # Note that building against numpy 1.x works fine too - users and + # redistributors can do this by installing the numpy version they like and + # disabling build isolation. + "numpy>=2.0.0", + # Set to minimum version of setuptools that allows pyproject.toml + "setuptools >= 40.9.0", "wheel", ] +build-backend = "setuptools.build_meta" [project] name = "MDAnalysis" @@ -27,7 +27,7 @@ authors = [ maintainers = [ {name = 'MDAnalysis Core Developers', email = 'mdanalysis@numfocus.org'} ] -requires-python = ">=3.9" +requires-python = ">=3.10" dependencies = [ 'numpy>=1.23.2', 'GridDataFormats>=0.4.0', @@ -42,6 +42,7 @@ dependencies = [ 'mda-xdrlib', 'waterdynamics', 'pathsimanalysis', + 'mdahole2', ] keywords = [ "python", "science", "chemistry", "biophysics", "molecular-dynamics", @@ -57,7 +58,6 @@ classifiers = [ 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', @@ -95,13 +95,26 @@ doc = [ "pybtex-docutils", ] - [project.urls] -Documentation = 'https://docs.mdanalysis.org/' -"User Guide" = 'https://userguide.mdanalysis.org/' -"Issue Tracker" = 'https://github.com/mdanalysis/mdanalysis/issues' -"User Group" = 'https://groups.google.com/g/mdnalysis-discussion/' -Discord = 'https://discord.com/channels/807348386012987462/' -Blog = 'https://www.mdanalysis.org/blog/' -Twitter = 'https://twitter.com/mdanalysis' +Homepage = "https://www.mdanalysis.org" +Download = "https://github.com/MDAnalysis/mdanalysis/releases" +Documentation = "https://docs.mdanalysis.org/" +"User Guide" = "https://userguide.mdanalysis.org/" +"Issue Tracker" = "https://github.com/mdanalysis/mdanalysis/issues" +"Github Discussions" = "https://github.com/MDAnalysis/mdanalysis/discussions" +Discord = "https://discord.com/channels/807348386012987462/" +Blog = "https://www.mdanalysis.org/blog/" Source = 'https://github.com/mdanalysis/mdanalysis' + +[tool.setuptools] +# as a zipped egg the *.so files are not found (at +# least in Ubuntu/Linux) +zip-safe = false + +[tool.setuptools.packages] +find = {} + +[tool.setuptools.package-data] +MDAnalysis = [ + 'analysis/data/*.npy', +] diff --git a/package/setup.py b/package/setup.py index 2c9027be443..bd4aee30cc0 100755 --- a/package/setup.py +++ b/package/setup.py @@ -28,12 +28,12 @@ For a basic installation just type the command:: - python setup.py install + pip install . For more in-depth instructions, see the installation section at the -MDAnalysis Wiki: +MDAnalysis User Guide: - https://github.com/MDAnalysis/mdanalysis/wiki/INSTALL + https://userguide.mdanalysis.org/stable/installation.html Also free to ask on GitHub Discussions for help: @@ -54,13 +54,6 @@ import warnings import platform -# Make sure I have the right Python version. -if sys.version_info[:2] < (3, 9): - print('MDAnalysis requires Python 3.9+. Python {0:d}.{1:d} detected'.format(* - sys.version_info[:2])) - print('Please upgrade your version of Python.') - sys.exit(-1) - import configparser from subprocess import getoutput @@ -567,112 +560,20 @@ def long_description(readme): # (LONG_DESCRIPTION is not really needed) LONG_DESCRIPTION = "MDAnalysis -- https://www.mdanalysis.org/" - CLASSIFIERS = [ - 'Development Status :: 6 - Mature', - 'Environment :: Console', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', - 'Operating System :: POSIX', - 'Operating System :: MacOS :: MacOS X', - 'Operating System :: Microsoft :: Windows ', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: Python :: 3.12', - 'Programming Language :: C', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Bio-Informatics', - 'Topic :: Scientific/Engineering :: Chemistry', - 'Topic :: Software Development :: Libraries :: Python Modules', - ] config = Config() exts, cythonfiles = extensions(config) - install_requires = [ - 'numpy>=1.23.2', - 'GridDataFormats>=0.4.0', - 'mmtf-python>=1.0.0', - 'joblib>=0.12', - 'scipy>=1.5.0', - 'matplotlib>=1.5.1', - 'tqdm>=4.43.0', - 'threadpoolctl', - 'packaging', - 'fasteners', - 'mda-xdrlib', - 'waterdynamics', - 'pathsimanalysis', - ] - setup(name='MDAnalysis', version=RELEASE, - description='An object-oriented toolkit to analyze molecular dynamics trajectories.', long_description=LONG_DESCRIPTION, long_description_content_type='text/x-rst', - author='MDAnalysis Development Team', - author_email='mdanalysis@numfocus.org', - maintainer='MDAnalysis Core Developers', - maintainer_email='mdanalysis@numfocus.org', - url='https://www.mdanalysis.org', - download_url='https://github.com/MDAnalysis/mdanalysis/releases', - project_urls={'Documentation': 'https://docs.mdanalysis.org/', - 'User Guide': 'https://userguide.mdanalysis.org/', - 'Issue Tracker': 'https://github.com/mdanalysis/mdanalysis/issues', - 'User Group': 'https://groups.google.com/g/mdnalysis-discussion/', - 'Discord': 'https://discord.com/channels/807348386012987462/', - 'Blog': 'https://www.mdanalysis.org/blog/', - 'Twitter': 'https://twitter.com/mdanalysis', - 'Source': 'https://github.com/mdanalysis/mdanalysis', - }, - license='GPL-3.0-or-later', - classifiers=CLASSIFIERS, + # currently unused & may become obsolte see setuptools #1569 provides=['MDAnalysis'], - packages=find_packages(), - package_data={'MDAnalysis': - ['analysis/data/*.npy', - ], - }, ext_modules=exts, - python_requires='>=3.9', - # all standard requirements are available through PyPi and - # typically can be installed without difficulties through setuptools - setup_requires=[ - 'numpy>=1.23.2', - 'packaging', - ], - install_requires=install_requires, - # extras can be difficult to install through setuptools and/or - # you might prefer to use the version available through your - # packaging system - extras_require={ - 'extra_formats': [ # additional file formats - 'netCDF4>=1.0', # for fast AMBER writing, also needs HDF5 - 'h5py>=2.10', # H5MD - 'pytng>=0.2.3', # TNG - 'chemfiles>=0.10', # multiple formats supported by chemfiles - 'pyedr>=0.7.0', # EDR files for the EDR AuxReader - 'gsd>3.0.0', # GSD - 'rdkit>=2020.03.1', # RDKit converter - 'parmed', # ParmEd converter - ], - 'analysis': [ - 'biopython>=1.80', # sequence generation & alignment - 'seaborn', # for annotated heat map and nearest neighbor - # plotting in PSA - 'scikit-learn', # For clustering and dimensionality - # reduction functionality in encore - 'tidynamics>=1.0.0', # For MSD analysis method - 'networkx>=2.0', # For LeafletFinder - ], - }, test_suite="MDAnalysisTests", tests_require=[ 'MDAnalysisTests=={0!s}'.format(RELEASE), # same as this release! ], - zip_safe=False, # as a zipped egg the *.so files are not found (at - # least in Ubuntu/Linux) ) # Releases keep their cythonized stuff for shipping. diff --git a/testsuite/LICENSE b/testsuite/LICENSE index 8437675a953..b6b2162c890 100644 --- a/testsuite/LICENSE +++ b/testsuite/LICENSE @@ -1,7 +1,1213 @@ +========================================================================== +Licensing of the MDAnalysis library +========================================================================== + +As of MDAnalysis version 2.6.0, the MDAnalyis library is packaged under +the terms of the GNU General Public License version 3 or any later version +(GPLv3+). + +Developer contributions to the library have, unless otherwise stated, been +made under the following conditions: + - From the 31st of July 2023 onwards, all contributions are made under + the terms of the GNU Lesser General Public License v2.1 or any later + version (LGPLv2.1+) + - Before the 31st of July 2023, contributions were made under the GNU + General Public License version 2 or any later version (GPLv2+). + +The MDAnalysis library also includes external codes provided under licenses +compatible with the terms of the GNU General Public License version 3 or any +later version (GPLv3+). These are outlined under "Licenses of components of +MDAnalysis". + ========================================================================== Licenses of components of MDAnalysis ========================================================================== + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + +========================================================================== + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + + +========================================================================== GNU GENERAL PUBLIC LICENSE Version 2, June 1991 diff --git a/testsuite/MDAnalysisTests/analysis/test_align.py b/testsuite/MDAnalysisTests/analysis/test_align.py index e6ff3acb4cc..63dfd25db80 100644 --- a/testsuite/MDAnalysisTests/analysis/test_align.py +++ b/testsuite/MDAnalysisTests/analysis/test_align.py @@ -34,10 +34,8 @@ from MDAnalysisTests.datafiles import (PSF, DCD, CRD, FASTA, ALIGN_BOUND, ALIGN_UNBOUND, PDB_helix) from numpy.testing import ( - assert_almost_equal, assert_equal, assert_array_equal, - assert_array_almost_equal, assert_allclose, ) @@ -167,7 +165,7 @@ def test_subselection_alignto(self, universe, reference, subselection, expectati with expectation: rmsd = align.alignto(universe, reference, subselection=subselection) - assert_almost_equal(rmsd[1], 0.0, decimal=9) + assert_allclose(rmsd[1], 0.0, rtol=0, atol=1.5e-9) def test_no_atom_masses(self, universe): #if no masses are present @@ -199,17 +197,17 @@ def test_rmsd(self, universe, reference): first_frame = bb.positions universe.trajectory[-1] last_frame = bb.positions - assert_almost_equal(rms.rmsd(first_frame, first_frame), 0.0, 5, - err_msg="error: rmsd(X,X) should be 0") + assert_allclose(rms.rmsd(first_frame, first_frame), 0.0, rtol=0, atol=1.5e-5, + err_msg="error: rmsd(X,X) should be 0") # rmsd(A,B) = rmsd(B,A) should be exact but spurious failures in the # 9th decimal have been observed (see Issue 57 comment #1) so we relax # the test to 6 decimals. rmsd = rms.rmsd(first_frame, last_frame, superposition=True) - assert_almost_equal( - rms.rmsd(last_frame, first_frame, superposition=True), rmsd, 6, + assert_allclose( + rms.rmsd(last_frame, first_frame, superposition=True), rmsd, rtol=0, atol=1.5e-6, err_msg="error: rmsd() is not symmetric") - assert_almost_equal(rmsd, 6.820321761927005, 5, - err_msg="RMSD calculation between 1st and last AdK frame gave wrong answer") + assert_allclose(rmsd, 6.820321761927005, rtol=0, atol=1.5e-5, + err_msg="RMSD calculation between 1st and last AdK frame gave wrong answer") # test masses as weights last_atoms_weight = universe.atoms.masses A = universe.trajectory[0] @@ -217,7 +215,7 @@ def test_rmsd(self, universe, reference): rmsd = align.alignto(universe, reference, weights='mass') rmsd_sup_weight = rms.rmsd(A, B, weights=last_atoms_weight, center=True, superposition=True) - assert_almost_equal(rmsd[1], rmsd_sup_weight, 6) + assert_allclose(rmsd[1], rmsd_sup_weight, rtol=0, atol=1.5e-6) def test_rmsd_custom_mass_weights(self, universe, reference): last_atoms_weight = universe.atoms.masses @@ -227,7 +225,7 @@ def test_rmsd_custom_mass_weights(self, universe, reference): weights=reference.atoms.masses) rmsd_sup_weight = rms.rmsd(A, B, weights=last_atoms_weight, center=True, superposition=True) - assert_almost_equal(rmsd[1], rmsd_sup_weight, 6) + assert_allclose(rmsd[1], rmsd_sup_weight, rtol=0, atol=1.5e-6) def test_rmsd_custom_weights(self, universe, reference): weights = np.zeros(universe.atoms.n_atoms) @@ -235,7 +233,7 @@ def test_rmsd_custom_weights(self, universe, reference): weights[ca.indices] = 1 rmsd = align.alignto(universe, reference, select='name CA') rmsd_weights = align.alignto(universe, reference, weights=weights) - assert_almost_equal(rmsd[1], rmsd_weights[1], 6) + assert_allclose(rmsd[1], rmsd_weights[1], rtol=0, atol=1.5e-6) def test_AlignTraj_outfile_default(self, universe, reference, tmpdir): with tmpdir.as_cwd(): @@ -285,8 +283,8 @@ def test_AlignTraj(self, universe, reference, tmpdir): x = align.AlignTraj(universe, reference, filename=outfile).run() fitted = mda.Universe(PSF, outfile) - assert_almost_equal(x.results.rmsd[0], 6.9290, decimal=3) - assert_almost_equal(x.results.rmsd[-1], 5.2797e-07, decimal=3) + assert_allclose(x.results.rmsd[0], 6.9290, rtol=0, atol=1.5e-3) + assert_allclose(x.results.rmsd[-1], 5.2797e-07, rtol=0, atol=1.5e-3) # RMSD against the reference frame # calculated on Mac OS X x86 with MDA 0.7.2 r689 @@ -299,8 +297,8 @@ def test_AlignTraj_weighted(self, universe, reference, tmpdir): x = align.AlignTraj(universe, reference, filename=outfile, weights='mass').run() fitted = mda.Universe(PSF, outfile) - assert_almost_equal(x.results.rmsd[0], 0, decimal=3) - assert_almost_equal(x.results.rmsd[-1], 6.9033, decimal=3) + assert_allclose(x.results.rmsd[0], 0, rtol=0, atol=1.5e-3) + assert_allclose(x.results.rmsd[-1], 6.9033, rtol=0, atol=1.5e-3) self._assert_rmsd(reference, fitted, 0, 0.0, weights=universe.atoms.masses) @@ -319,7 +317,7 @@ def test_AlignTraj_custom_weights(self, universe, reference, tmpdir): x_weights = align.AlignTraj(universe, reference, filename=outfile, weights=weights).run() - assert_array_almost_equal(x.results.rmsd, x_weights.results.rmsd) + assert_allclose(x.results.rmsd, x_weights.results.rmsd, rtol=0, atol=1.5e-7) def test_AlignTraj_custom_mass_weights(self, universe, reference, tmpdir): outfile = str(tmpdir.join('align_test.dcd')) @@ -327,8 +325,8 @@ def test_AlignTraj_custom_mass_weights(self, universe, reference, tmpdir): filename=outfile, weights=reference.atoms.masses).run() fitted = mda.Universe(PSF, outfile) - assert_almost_equal(x.results.rmsd[0], 0, decimal=3) - assert_almost_equal(x.results.rmsd[-1], 6.9033, decimal=3) + assert_allclose(x.results.rmsd[0], 0, rtol=0, atol=1.5e-3) + assert_allclose(x.results.rmsd[-1], 6.9033, rtol=0, atol=1.5e-3) self._assert_rmsd(reference, fitted, 0, 0.0, weights=universe.atoms.masses) @@ -348,18 +346,29 @@ def test_AlignTraj_in_memory(self, universe, reference, tmpdir): x = align.AlignTraj(universe, reference, filename=outfile, in_memory=True).run() assert x.filename is None - assert_almost_equal(x.results.rmsd[0], 6.9290, decimal=3) - assert_almost_equal(x.results.rmsd[-1], 5.2797e-07, decimal=3) + assert_allclose(x.results.rmsd[0], 6.9290, rtol=0, atol=1.5e-3) + assert_allclose(x.results.rmsd[-1], 5.2797e-07, rtol=0, atol=1.5e-3) # check in memory trajectory self._assert_rmsd(reference, universe, 0, 6.929083044751061) self._assert_rmsd(reference, universe, -1, 0.0) + def test_AlignTraj_writer_kwargs(self, universe, reference, tmpdir): + # Issue 4564 + writer_kwargs = dict(precision=2) + with tmpdir.as_cwd(): + aligner = align.AlignTraj(universe, reference, + select='protein and name CA', + filename='aligned_traj.xtc', + writer_kwargs=writer_kwargs, + in_memory=False).run() + assert_equal(aligner._writer.precision, 2) + def _assert_rmsd(self, reference, fitted, frame, desired, weights=None): fitted.trajectory[frame] rmsd = rms.rmsd(reference.atoms.positions, fitted.atoms.positions, superposition=True) - assert_almost_equal(rmsd, desired, decimal=5, + assert_allclose(rmsd, desired, rtol = 0, atol=1.5e-5, err_msg="frame {0:d} of fit does not have " "expected RMSD".format(frame)) @@ -394,8 +403,8 @@ def test_alignto_partial_universe(self, universe, reference): segB_free.translate(segB_bound.centroid() - segB_free.centroid()) align.alignto(u_free, u_bound, select=selection) - assert_array_almost_equal(segB_bound.positions, segB_free.positions, - decimal=3) + assert_allclose(segB_bound.positions, segB_free.positions, + rtol=0, atol=1.5e-3) def _get_aligned_average_positions(ref_files, ref, select="all", **kwargs): @@ -438,31 +447,30 @@ def test_average_structure_deprecated_attrs(self, universe, reference): def test_average_structure(self, universe, reference): ref, rmsd = _get_aligned_average_positions(self.ref_files, reference) avg = align.AverageStructure(universe, reference).run() - assert_almost_equal(avg.results.universe.atoms.positions, ref, - decimal=4) - assert_almost_equal(avg.results.rmsd, rmsd) + assert_allclose(avg.results.universe.atoms.positions, ref, rtol=0, atol=1.5e-4) + assert_allclose(avg.results.rmsd, rmsd, rtol=0, atol=1.5e-7) def test_average_structure_mass_weighted(self, universe, reference): ref, rmsd = _get_aligned_average_positions(self.ref_files, reference, weights='mass') avg = align.AverageStructure(universe, reference, weights='mass').run() - assert_almost_equal(avg.results.universe.atoms.positions, ref, - decimal=4) - assert_almost_equal(avg.results.rmsd, rmsd) + assert_allclose(avg.results.universe.atoms.positions, ref, + rtol=0, atol=1.5e-4) + assert_allclose(avg.results.rmsd, rmsd, rtol=0, atol=1.5e-7) def test_average_structure_select(self, universe, reference): select = 'protein and name CA and resid 3-5' ref, rmsd = _get_aligned_average_positions(self.ref_files, reference, select=select) avg = align.AverageStructure(universe, reference, select=select).run() - assert_almost_equal(avg.results.universe.atoms.positions, ref, - decimal=4) - assert_almost_equal(avg.results.rmsd, rmsd) + assert_allclose(avg.results.universe.atoms.positions, ref, + rtol=0, atol=1.5e-4) + assert_allclose(avg.results.rmsd, rmsd, rtol=0, atol=1.5e-7) def test_average_structure_no_ref(self, universe): ref, rmsd = _get_aligned_average_positions(self.ref_files, universe) avg = align.AverageStructure(universe).run() - assert_almost_equal(avg.results.universe.atoms.positions, ref, - decimal=4) - assert_almost_equal(avg.results.rmsd, rmsd) + assert_allclose(avg.results.universe.atoms.positions, ref, + rtol=0, atol=1.5e-4) + assert_allclose(avg.results.rmsd, rmsd, rtol=0, atol=1.5e-7) def test_average_structure_no_msf(self, universe): avg = align.AverageStructure(universe).run() @@ -485,15 +493,15 @@ def test_average_structure_ref_frame(self, universe): universe.trajectory[0] ref, rmsd = _get_aligned_average_positions(self.ref_files, u) avg = align.AverageStructure(universe, ref_frame=ref_frame).run() - assert_almost_equal(avg.results.universe.atoms.positions, ref, - decimal=4) - assert_almost_equal(avg.results.rmsd, rmsd) + assert_allclose(avg.results.universe.atoms.positions, ref, + rtol=0, atol=1.5e-4) + assert_allclose(avg.results.rmsd, rmsd, rtol=0, atol=1.5e-7) def test_average_structure_in_memory(self, universe): avg = align.AverageStructure(universe, in_memory=True).run() reference_coordinates = universe.trajectory.timeseries().mean(axis=1) - assert_almost_equal(avg.results.universe.atoms.positions, - reference_coordinates, decimal=4) + assert_allclose(avg.results.universe.atoms.positions, + reference_coordinates, rtol=0, atol=1.5e-4) assert avg.filename is None @@ -597,6 +605,87 @@ def test_sequence_alignment_deprecation(self, atomgroups): align.sequence_alignment(mobile, reference) +class TestIterativeAverage(object): + @pytest.fixture() + def mobile(self): + u = mda.Universe(PSF, DCD) + return u + + @pytest.fixture() + def reference(self): + u = mda.Universe(PSF, DCD) + return u + + def test_iterative_average_default(self, mobile): + res = align.iterative_average(mobile, select="bynum 1:10") + assert_allclose( + res.results.positions, + [ + [11.93075595, 8.6729893, -10.49887605], + [12.60587898, 7.91673117, -10.73327464], + [12.45662411, 9.51900517, -10.35551193], + [11.27452274, 8.83003843, -11.2619057], + [11.25808119, 8.26794477, -9.23340715], + [12.02767222, 7.95332228, -8.57249317], + [10.54679871, 9.49505306, -8.61215292], + [9.99500556, 9.16624224, -7.75231192], + [9.83897407, 9.93134598, -9.29541129], + [11.45760169, 10.5857071, -8.13037669] + ], + atol=1e-5, + ) + + def test_iterative_average_eps_high(self, mobile): + res = align.iterative_average(mobile, select="bynum 1:10", + eps=1e-5) + assert_allclose( + res.results.positions, + [ + [11.93075595, 8.6729893, -10.49887605], + [12.60587898, 7.91673117, -10.73327464], + [12.45662411, 9.51900517, -10.35551193], + [11.27452274, 8.83003843, -11.2619057], + [11.25808119, 8.26794477, -9.23340715], + [12.02767222, 7.95332228, -8.57249317], + [10.54679871, 9.49505306, -8.61215292], + [9.99500556, 9.16624224, -7.75231192], + [9.83897407, 9.93134598, -9.29541129], + [11.45760169, 10.5857071, -8.13037669] + ], + atol=1e-5, + ) + + def test_iterative_average_weights_mass(self, mobile, reference): + res = align.iterative_average(mobile, reference, + select="bynum 1:10", + niter=10, weights="mass") + assert_allclose( + res.results.positions, + [ + [11.96438784, 8.85426235, -10.24735737], + [12.75920431, 8.27294545, -10.54295766], + [12.3285704, 9.72083717, -9.9419435], + [11.33941507, 9.03249423, -11.01306158], + [11.30988499, 8.14958885, -9.1205501], + [12.09108655, 7.85155906, -8.46681943], + [10.37499697, 9.13535837, -8.3732586], + [9.83883314, 8.57939098, -7.6195549], + [9.64405257, 9.55924307, -9.04315991], + [11.0678934, 10.27798773, -7.64881842] + ], + atol=1e-5, + ) + + def test_iterative_average_convergence_failure(self, mobile, reference): + with pytest.raises(RuntimeError): + _ = align.iterative_average(mobile, reference, + niter=1, eps=0) + + def test_iterative_average_convergence_verbose(self, mobile, reference): + _ = align.iterative_average(mobile, select="bynum 1:10", + verbose=True) + + def test_alignto_reorder_atomgroups(): # Issue 2977 u = mda.Universe(PDB_helix) diff --git a/testsuite/MDAnalysisTests/analysis/test_base.py b/testsuite/MDAnalysisTests/analysis/test_base.py index 1817cb66b35..84cd4c5b9c2 100644 --- a/testsuite/MDAnalysisTests/analysis/test_base.py +++ b/testsuite/MDAnalysisTests/analysis/test_base.py @@ -27,7 +27,7 @@ import numpy as np -from numpy.testing import assert_equal, assert_almost_equal +from numpy.testing import assert_equal, assert_allclose import MDAnalysis as mda from MDAnalysis.analysis import base @@ -179,6 +179,11 @@ def u(): return mda.Universe(PSF, DCD) +@pytest.fixture(scope='module') +def u_xtc(): + return mda.Universe(TPR, XTC) # dt = 100 + + FRAMES_ERR = 'AnalysisBase.frames is incorrect' TIMES_ERR = 'AnalysisBase.times is incorrect' @@ -194,7 +199,7 @@ def test_start_stop_step(u, run_kwargs, frames): assert an.n_frames == len(frames) assert_equal(an.found_frames, frames) assert_equal(an.frames, frames, err_msg=FRAMES_ERR) - assert_almost_equal(an.times, frames+1, decimal=4, err_msg=TIMES_ERR) + assert_allclose(an.times, frames+1, rtol=0, atol=1.5e-4, err_msg=TIMES_ERR) @pytest.mark.parametrize('run_kwargs, frames', [ @@ -205,9 +210,8 @@ def test_start_stop_step(u, run_kwargs, frames): ({'frames': [True, True, False, True, False, True, True, False, True, False]}, (0, 1, 3, 5, 6, 8)), ]) -def test_frame_slice(run_kwargs, frames): - u = mda.Universe(TPR, XTC) # dt = 100 - an = FrameAnalysis(u.trajectory).run(**run_kwargs) +def test_frame_slice(u_xtc, run_kwargs, frames): + an = FrameAnalysis(u_xtc.trajectory).run(**run_kwargs) assert an.n_frames == len(frames) assert_equal(an.found_frames, frames) assert_equal(an.frames, frames, err_msg=FRAMES_ERR) @@ -229,29 +233,26 @@ def test_frame_fail(u, run_kwargs): an.run(**run_kwargs) -def test_frame_bool_fail(): - u = mda.Universe(TPR, XTC) # dt = 100 - an = FrameAnalysis(u.trajectory) +def test_frame_bool_fail(u_xtc): + an = FrameAnalysis(u_xtc.trajectory) frames = [True, True, False] msg = 'boolean index did not match indexed array along (axis|dimension) 0' with pytest.raises(IndexError, match=msg): an.run(frames=frames) -def test_rewind(): - u = mda.Universe(TPR, XTC) # dt = 100 - an = FrameAnalysis(u.trajectory).run(frames=[0, 2, 3, 5, 9]) - assert_equal(u.trajectory.ts.frame, 0) +def test_rewind(u_xtc): + FrameAnalysis(u_xtc.trajectory).run(frames=[0, 2, 3, 5, 9]) + assert_equal(u_xtc.trajectory.ts.frame, 0) -def test_frames_times(): - u = mda.Universe(TPR, XTC) # dt = 100 - an = FrameAnalysis(u.trajectory).run(start=1, stop=8, step=2) +def test_frames_times(u_xtc): + an = FrameAnalysis(u_xtc.trajectory).run(start=1, stop=8, step=2) frames = np.array([1, 3, 5, 7]) assert an.n_frames == len(frames) assert_equal(an.found_frames, frames) assert_equal(an.frames, frames, err_msg=FRAMES_ERR) - assert_almost_equal(an.times, frames*100, decimal=4, err_msg=TIMES_ERR) + assert_allclose(an.times, frames*100, rtol=0, atol=1.5e-4, err_msg=TIMES_ERR) def test_verbose(u): @@ -260,23 +261,24 @@ def test_verbose(u): def test_verbose_progressbar(u, capsys): - an = FrameAnalysis(u.trajectory).run() - out, err = capsys.readouterr() + FrameAnalysis(u.trajectory).run() + _, err = capsys.readouterr() expected = '' actual = err.strip().split('\r')[-1] assert actual == expected def test_verbose_progressbar_run(u, capsys): - an = FrameAnalysis(u.trajectory).run(verbose=True) - out, err = capsys.readouterr() + FrameAnalysis(u.trajectory).run(verbose=True) + _, err = capsys.readouterr() expected = u'100%|██████████| 98/98 [00:00<00:00, 8799.49it/s]' actual = err.strip().split('\r')[-1] assert actual[:24] == expected[:24] def test_verbose_progressbar_run_with_kwargs(u, capsys): - an = FrameAnalysis(u.trajectory).run(verbose=True, progressbar_kwargs={'desc':'custom'}) - out, err = capsys.readouterr() + FrameAnalysis(u.trajectory).run( + verbose=True, progressbar_kwargs={'desc': 'custom'}) + _, err = capsys.readouterr() expected = u'custom: 100%|██████████| 98/98 [00:00<00:00, 8799.49it/s]' actual = err.strip().split('\r')[-1] assert actual[:30] == expected[:30] @@ -372,7 +374,7 @@ def test_AnalysisFromFunction_args_content(u): ans = base.AnalysisFromFunction(mass_xyz, protein, another, masses) assert len(ans.args) == 3 result = np.sum(ans.run().results.timeseries) - assert_almost_equal(result, -317054.67757345125, decimal=6) + assert_allclose(result, -317054.67757345125, rtol=0, atol=1.5e-6) assert (ans.args[0] is protein) and (ans.args[1] is another) assert ans._trajectory is protein.universe.trajectory diff --git a/testsuite/MDAnalysisTests/analysis/test_bat.py b/testsuite/MDAnalysisTests/analysis/test_bat.py index 32b0262597b..c80353baff6 100644 --- a/testsuite/MDAnalysisTests/analysis/test_bat.py +++ b/testsuite/MDAnalysisTests/analysis/test_bat.py @@ -23,7 +23,7 @@ from __future__ import absolute_import import numpy as np -from numpy.testing import assert_equal, assert_almost_equal +from numpy.testing import assert_equal, assert_allclose import pytest import copy @@ -66,35 +66,38 @@ def test_bat_number_of_frames(self, bat): def test_bat_coordinates(self, bat): test_bat = np.load(BATArray) - assert_almost_equal( + assert_allclose( bat, test_bat, - 5, + rtol=0, + atol=1.5e-5, err_msg="error: BAT coordinates should match test values") def test_bat_coordinates_single_frame(self, selected_residues): bat = BAT(selected_residues).run(start=1, stop=2).results.bat test_bat = [np.load(BATArray)[1]] - assert_almost_equal( + assert_allclose( bat, test_bat, - 5, + rtol=0, + atol=1.5e-5, err_msg="error: BAT coordinates should match test values") def test_bat_reconstruction(self, selected_residues, bat): R = BAT(selected_residues) XYZ = R.Cartesian(bat[0]) - assert_almost_equal(XYZ, selected_residues.positions, 5, + assert_allclose(XYZ, selected_residues.positions, rtol=0, atol=1.5e-5, err_msg="error: Reconstructed Cartesian coordinates " + \ "don't match original") def test_bat_IO(self, bat_npz, selected_residues, bat): R2 = BAT(selected_residues, filename=bat_npz) test_bat = R2.results.bat - assert_almost_equal( + assert_allclose( bat, test_bat, - 5, + rtol=0, + atol=1.5e-5, err_msg="error: Loaded BAT coordinates should match test values") def test_bat_nobonds(self): @@ -133,7 +136,7 @@ def test_Cartesian_does_not_modify_input(self, selected_residues, bat): R = BAT(selected_residues) pre_transformation = copy.deepcopy(bat[0]) R.Cartesian(bat[0]) - assert_almost_equal( - pre_transformation, bat[0], + assert_allclose( + pre_transformation, bat[0], rtol=0, atol=1.5e-7, err_msg="BAT.Cartesian modified input data" ) diff --git a/testsuite/MDAnalysisTests/analysis/test_contacts.py b/testsuite/MDAnalysisTests/analysis/test_contacts.py index b4fbbf45797..ad4f96caf44 100644 --- a/testsuite/MDAnalysisTests/analysis/test_contacts.py +++ b/testsuite/MDAnalysisTests/analysis/test_contacts.py @@ -27,10 +27,9 @@ from MDAnalysis.analysis.distances import distance_array from numpy.testing import ( - assert_almost_equal, assert_equal, assert_array_equal, - assert_array_almost_equal + assert_allclose, ) import numpy as np @@ -48,8 +47,8 @@ def test_soft_cut_q(): # just check some of the extremal points assert contacts.soft_cut_q([0], [0]) == .5 - assert_almost_equal(contacts.soft_cut_q([100], [0]), 0) - assert_almost_equal(contacts.soft_cut_q([-100], [0]), 1) + assert_allclose(contacts.soft_cut_q([100], [0]), 0, rtol=0, atol=1.5e-7) + assert_allclose(contacts.soft_cut_q([-100], [0]), 1, rtol=0, atol=1.5e-7) def test_soft_cut_q_folded(): @@ -67,7 +66,7 @@ def test_soft_cut_q_folded(): lambda_constant = 1.8 Q = 1 / (1 + np.exp(beta * (r - lambda_constant * r0))) - assert_almost_equal(Q.mean(), 1.0, decimal=3) + assert_allclose(Q.mean(), 1.0, rtol=0, atol=1.5e-3) def test_soft_cut_q_unfolded(): @@ -85,7 +84,7 @@ def test_soft_cut_q_unfolded(): lambda_constant = 1.8 Q = 1 / (1 + np.exp(beta * (r - lambda_constant * r0))) - assert_almost_equal(Q.mean(), 0.0, decimal=1) + assert_allclose(Q.mean(), 0.0, rtol=0, atol=1.5e-1) @pytest.mark.parametrize('r, cutoff, expected_value', [ @@ -263,7 +262,7 @@ def test_villin_folded(self): q.run() results = soft_cut(f, u, sel, sel) - assert_almost_equal(q.results.timeseries[:, 1], results[:, 1]) + assert_allclose(q.results.timeseries[:, 1], results[:, 1], rtol=0, atol=1.5e-7) def test_villin_unfolded(self): # both folded @@ -280,7 +279,7 @@ def test_villin_unfolded(self): q.run() results = soft_cut(f, u, sel, sel) - assert_almost_equal(q.results.timeseries[:, 1], results[:, 1]) + assert_allclose(q.results.timeseries[:, 1], results[:, 1], rtol=0, atol=1.5e-7) def test_hard_cut_method(self, universe): ca = self._run_Contacts(universe) @@ -305,7 +304,7 @@ def test_hard_cut_method(self, universe): 0.48543689, 0.45631068, 0.46601942, 0.47572816, 0.51456311, 0.45631068, 0.37864078, 0.42718447] assert len(ca.results.timeseries) == len(expected) - assert_array_almost_equal(ca.results.timeseries[:, 1], expected) + assert_allclose(ca.results.timeseries[:, 1], expected, rtol=0, atol=1.5e-7) def test_radius_cut_method(self, universe): acidic = universe.select_atoms(self.sel_acidic) @@ -365,7 +364,7 @@ def test_distance_box(self, pbc, expected): r = contacts.Contacts(u, select=(sel_acidic, sel_basic), refgroup=(acidic, basic), radius=6.0, pbc=pbc) r.run() - assert_array_almost_equal(r.results.timeseries[:, 1], expected) + assert_allclose(r.results.timeseries[:, 1], expected,rtol=0, atol=1.5e-7) def test_warn_deprecated_attr(self, universe): """Test for warning message emitted on using deprecated `timeseries` @@ -375,6 +374,16 @@ def test_warn_deprecated_attr(self, universe): with pytest.warns(DeprecationWarning, match=wmsg): assert_equal(CA1.timeseries, CA1.results.timeseries) + @pytest.mark.parametrize("datafiles, expected", [((PSF, DCD), 0), + ([TPR, XTC], 41814)]) + def test_n_initial_contacts(self, datafiles, expected): + """Test for n_initial_contacts attribute""" + u = mda.Universe(*datafiles) + select = ('protein', 'not protein') + refgroup = (u.select_atoms('protein'), u.select_atoms('not protein')) + + r = contacts.Contacts(u, select=select, refgroup=refgroup) + assert_equal(r.n_initial_contacts, expected) def test_q1q2(): u = mda.Universe(PSF, DCD) @@ -401,7 +410,7 @@ def test_q1q2(): 0.93097184, 0.93006358, 0.93188011, 0.93278837, 0.93006358, 0.92915531, 0.92824705, 0.92733878, 0.92643052, 0.93188011, 0.93006358, 0.9346049, 0.93188011] - assert_array_almost_equal(q1q2.results.timeseries[:, 1], q1_expected) + assert_allclose(q1q2.results.timeseries[:, 1], q1_expected, rtol=0, atol=1.5e-7) q2_expected = [0.94649446, 0.94926199, 0.95295203, 0.95110701, 0.94833948, 0.95479705, 0.94926199, 0.9501845, 0.94926199, 0.95387454, @@ -423,4 +432,4 @@ def test_q1q2(): 0.97140221, 0.97601476, 0.97693727, 0.98154982, 0.98431734, 0.97601476, 0.9797048, 0.98154982, 0.98062731, 0.98431734, 0.98616236, 0.9898524, 1.] - assert_array_almost_equal(q1q2.results.timeseries[:, 2], q2_expected) + assert_allclose(q1q2.results.timeseries[:, 2], q2_expected, rtol=0, atol=1.5e-7) diff --git a/testsuite/MDAnalysisTests/analysis/test_diffusionmap.py b/testsuite/MDAnalysisTests/analysis/test_diffusionmap.py index 5a8dc4ba94a..be58365b0fa 100644 --- a/testsuite/MDAnalysisTests/analysis/test_diffusionmap.py +++ b/testsuite/MDAnalysisTests/analysis/test_diffusionmap.py @@ -69,6 +69,23 @@ def test_dist_weights(u): [.707, -.707, 0, 0]]), 2) +def test_dist_weights_frames(u): + backbone = u.select_atoms('backbone') + weights_atoms = np.ones(len(backbone.atoms)) + dist = diffusionmap.DistanceMatrix(u, + select='backbone', + weights=weights_atoms) + frames = np.arange(len(u.trajectory)) + dist.run(frames=frames[::3]) + dmap = diffusionmap.DiffusionMap(dist) + dmap.run() + assert_array_almost_equal(dmap.eigenvalues, [1, 1, 1, 1], 4) + assert_array_almost_equal(dmap._eigenvectors, + ([[0, 0, 1, 0], + [0, 0, 0, 1], + [-.707, -.707, 0, 0], + [.707, -.707, 0, 0]]), 2) + def test_distvalues_ag_universe(u): dist_universe = diffusionmap.DistanceMatrix(u, select='backbone').run() ag = u.select_atoms('backbone') diff --git a/testsuite/MDAnalysisTests/analysis/test_dihedrals.py b/testsuite/MDAnalysisTests/analysis/test_dihedrals.py index 7aeb4e9d3b9..731d5cb0397 100644 --- a/testsuite/MDAnalysisTests/analysis/test_dihedrals.py +++ b/testsuite/MDAnalysisTests/analysis/test_dihedrals.py @@ -21,7 +21,7 @@ # J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 # import numpy as np -from numpy.testing import assert_almost_equal, assert_equal +from numpy.testing import assert_equal, assert_allclose import matplotlib import pytest @@ -46,7 +46,7 @@ def test_dihedral(self, atomgroup): dihedral = Dihedral([atomgroup]).run() test_dihedral = np.load(DihedralArray) - assert_almost_equal(dihedral.results.angles, test_dihedral, 5, + assert_allclose(dihedral.results.angles, test_dihedral, rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test values") @@ -54,7 +54,7 @@ def test_dihedral_single_frame(self, atomgroup): dihedral = Dihedral([atomgroup]).run(start=5, stop=6) test_dihedral = [np.load(DihedralArray)[5]] - assert_almost_equal(dihedral.results.angles, test_dihedral, 5, + assert_allclose(dihedral.results.angles, test_dihedral, rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test vales") @@ -62,7 +62,7 @@ def test_atomgroup_list(self, atomgroup): dihedral = Dihedral([atomgroup, atomgroup]).run() test_dihedral = np.load(DihedralsArray) - assert_almost_equal(dihedral.results.angles, test_dihedral, 5, + assert_allclose(dihedral.results.angles, test_dihedral, rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test values") @@ -91,7 +91,7 @@ def rama_ref_array(self): def test_ramachandran(self, universe, rama_ref_array): rama = Ramachandran(universe.select_atoms("protein")).run() - assert_almost_equal(rama.results.angles, rama_ref_array, 5, + assert_allclose(rama.results.angles, rama_ref_array, rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test values") @@ -99,7 +99,7 @@ def test_ramachandran_single_frame(self, universe, rama_ref_array): rama = Ramachandran(universe.select_atoms("protein")).run( start=5, stop=6) - assert_almost_equal(rama.results.angles[0], rama_ref_array[5], 5, + assert_allclose(rama.results.angles[0], rama_ref_array[5], rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test values") @@ -107,7 +107,7 @@ def test_ramachandran_residue_selections(self, universe): rama = Ramachandran(universe.select_atoms("resname GLY")).run() test_rama = np.load(GLYRamaArray) - assert_almost_equal(rama.results.angles, test_rama, 5, + assert_allclose(rama.results.angles, test_rama, rtol=0, atol=1.5e-5, err_msg="error: dihedral angles should " "match test values") @@ -169,14 +169,14 @@ def _test_janin(self, u, ref_array): janin = Janin(u.select_atoms("protein")).run() # Test precision lowered to account for platform differences with osx - assert_almost_equal(janin.results.angles, ref_array, 3, + assert_allclose(janin.results.angles, ref_array, rtol=0, atol=1.5e-3, err_msg="error: dihedral angles should " "match test values") def test_janin_single_frame(self, universe, janin_ref_array): janin = Janin(universe.select_atoms("protein")).run(start=5, stop=6) - assert_almost_equal(janin.results.angles[0], janin_ref_array[5], 3, + assert_allclose(janin.results.angles[0], janin_ref_array[5], rtol=0, atol=1.5e-3, err_msg="error: dihedral angles should " "match test values") @@ -184,7 +184,7 @@ def test_janin_residue_selections(self, universe): janin = Janin(universe.select_atoms("resname LYS")).run() test_janin = np.load(LYSJaninArray) - assert_almost_equal(janin.results.angles, test_janin, 3, + assert_allclose(janin.results.angles, test_janin, rtol=0, atol=1.5e-3, err_msg="error: dihedral angles should " "match test values") diff --git a/testsuite/MDAnalysisTests/analysis/test_dssp.py b/testsuite/MDAnalysisTests/analysis/test_dssp.py new file mode 100644 index 00000000000..a28dd458b52 --- /dev/null +++ b/testsuite/MDAnalysisTests/analysis/test_dssp.py @@ -0,0 +1,68 @@ +import pytest +import glob +import MDAnalysis as mda + +from MDAnalysis.analysis.dssp import DSSP, translate +from MDAnalysisTests.datafiles import DSSP as DSSP_FOLDER +from MDAnalysisTests.datafiles import TPR, XTC + + +# Files that match glob pattern '????.pdb.gz' and matching '????.pdb.dssp' files, +# containing the secondary structure assignment string, will be tested automatically. +@pytest.mark.parametrize("pdb_filename", glob.glob(f"{DSSP_FOLDER}/?????.pdb.gz")) +def test_file_guess_hydrogens(pdb_filename): + u = mda.Universe(pdb_filename) + with open(f"{pdb_filename.rstrip('.gz')}.dssp", "r") as fin: + correct_answ = fin.read().strip().split()[0] + + run = DSSP(u, guess_hydrogens=True).run() + answ = "".join(run.results.dssp[0]) + assert answ == correct_answ + + +def test_trajectory(): + u = mda.Universe(TPR, XTC).select_atoms("protein").universe + run = DSSP(u).run(stop=10) + first_frame = "".join(run.results.dssp[0]) + last_frame = "".join(run.results.dssp[-1]) + avg_frame = "".join(translate(run.results.dssp_ndarray.mean(axis=0))) + + assert first_frame[:10] != last_frame[:10] == avg_frame[:10] == "-EEEEEE---" + protein = mda.Universe(TPR, XTC).select_atoms("protein") + run = DSSP(protein).run(stop=10) + + +def test_atomgroup(): + protein = mda.Universe(TPR, XTC).select_atoms("protein") + run = DSSP(protein).run(stop=10) + first_frame = "".join(run.results.dssp[0]) + last_frame = "".join(run.results.dssp[-1]) + avg_frame = "".join(translate(run.results.dssp_ndarray.mean(axis=0))) + + assert first_frame[:10] != last_frame[:10] == avg_frame[:10] == "-EEEEEE---" + + +def test_trajectory_with_hydrogens(): + u = mda.Universe(TPR, XTC).select_atoms("protein").universe + run = DSSP(u, guess_hydrogens=False).run(stop=10) + first_frame = "".join(run.results.dssp[0]) + last_frame = "".join(run.results.dssp[-1]) + avg_frame = "".join(translate(run.results.dssp_ndarray.mean(axis=0))) + + assert first_frame[:10] == last_frame[:10] == avg_frame[:10] == "-EEEEEE---" + + +@pytest.mark.parametrize("pdb_filename", glob.glob(f"{DSSP_FOLDER}/2xdgA.pdb.gz")) +def test_trajectory_without_hydrogen_fails(pdb_filename): + u = mda.Universe(pdb_filename) + with pytest.raises(ValueError): + DSSP(u, guess_hydrogens=False).run() + + +@pytest.mark.parametrize( + "pdb_filename", glob.glob(f"{DSSP_FOLDER}/1mr1D_failing.pdb.gz") +) +def test_trajectory_with_uneven_number_of_atoms_fails(pdb_filename): + u = mda.Universe(pdb_filename) + with pytest.raises(ValueError): + DSSP(u, guess_hydrogens=True).run() diff --git a/testsuite/MDAnalysisTests/analysis/test_encore.py b/testsuite/MDAnalysisTests/analysis/test_encore.py index afcd490e648..bc07c21af73 100644 --- a/testsuite/MDAnalysisTests/analysis/test_encore.py +++ b/testsuite/MDAnalysisTests/analysis/test_encore.py @@ -32,7 +32,7 @@ import platform import pytest -from numpy.testing import assert_equal, assert_almost_equal +from numpy.testing import assert_equal, assert_allclose from MDAnalysisTests.datafiles import DCD, DCD2, PSF, TPR, XTC from MDAnalysisTests import block_import @@ -153,7 +153,7 @@ def test_rmsd_matrix_with_superimposition(self, ens1): "Calculated RMSD values differ from " "the reference implementation") for i, rmsd in enumerate(reference.results.rmsd): - assert_almost_equal(conf_dist_matrix[0, i], rmsd[2], 3, err_msg) + assert_allclose(conf_dist_matrix[0, i], rmsd[2], rtol=0, atol=1.5e-3, err_msg=err_msg) def test_rmsd_matrix_with_superimposition_custom_weights(self, ens1): conf_dist_matrix = encore.confdistmatrix.conformational_distance_matrix( @@ -173,7 +173,7 @@ def test_rmsd_matrix_with_superimposition_custom_weights(self, ens1): n_jobs=1) for i in range(conf_dist_matrix_custom.size): - assert_almost_equal(conf_dist_matrix_custom[0, i], conf_dist_matrix[0, i]) + assert_allclose(conf_dist_matrix_custom[0, i], conf_dist_matrix[0, i], rtol=0, atol=1.5e-7) def test_rmsd_matrix_without_superimposition(self, ens1): selection_string = "name CA" @@ -192,7 +192,7 @@ def test_rmsd_matrix_without_superimposition(self, ens1): n_jobs=1) print(repr(confdist_matrix.as_array()[0, :])) - assert_almost_equal(confdist_matrix.as_array()[0,:], reference_rmsd, decimal=3, + assert_allclose(confdist_matrix.as_array()[0,:], reference_rmsd, rtol=0, atol=1.5e-3, err_msg="calculated RMSD values differ from reference") def test_ensemble_superimposition(self): @@ -252,7 +252,7 @@ def test_covariance_matrix(self, ens1): covariance = encore.covariance.covariance_matrix(ens1, select="name CA and resnum 1:3", estimator=encore.covariance.shrinkage_covariance_estimator) - assert_almost_equal(covariance, reference_cov, decimal=4, + assert_allclose(covariance, reference_cov, rtol=0, atol=1.5e-4, err_msg="Covariance matrix from covariance estimation not as expected") def test_covariance_matrix_with_reference(self, ens1): @@ -274,13 +274,13 @@ def test_covariance_matrix_with_reference(self, ens1): err_msg = ( "Covariance matrix from covariance estimation not as expected" ) - assert_almost_equal(covariance, reference_cov, 4, err_msg) + assert_allclose(covariance, reference_cov, rtol=0, atol=1.5e-4, err_msg=err_msg) def test_hes_to_self(self, ens1): results, details = encore.hes([ens1, ens1]) result_value = results[0, 1] expected_value = 0. - assert_almost_equal(result_value, expected_value, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e-7, err_msg="Harmonic Ensemble Similarity to itself\ not zero:{0:f}".format(result_value)) @@ -298,7 +298,7 @@ def test_hes_custom_weights(self, ens1, ens2): ens2.select_atoms('name CA').masses)) result_value = results[0, 1] result_value_custom = results_custom[0, 1] - assert_almost_equal(result_value, result_value_custom) + assert_allclose(result_value, result_value_custom, rtol=0, atol=1.5e-7) def test_hes_align(self, ens1, ens2): # This test is massively sensitive! @@ -306,7 +306,7 @@ def test_hes_align(self, ens1, ens2): results, details = encore.hes([ens1, ens2], align=True) result_value = results[0,1] expected_value = 2047.05 - assert_almost_equal(result_value, expected_value, decimal=-3, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e3, err_msg="Unexpected value for Harmonic Ensemble Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value)) def test_ces_to_self(self, ens1): @@ -315,21 +315,21 @@ def test_ces_to_self(self, ens1): clustering_method=encore.AffinityPropagationNative(preference = -3.0)) result_value = results[0,1] expected_value = 0. - assert_almost_equal(result_value, expected_value, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e-7, err_msg="ClusteringEnsemble Similarity to itself not zero: {0:f}".format(result_value)) def test_ces(self, ens1, ens2): results, details = encore.ces([ens1, ens2]) result_value = results[0,1] expected_value = 0.51 - assert_almost_equal(result_value, expected_value, decimal=2, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e-2, err_msg="Unexpected value for Cluster Ensemble Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value)) def test_dres_to_self(self, ens1): results, details = encore.dres([ens1, ens1]) result_value = results[0,1] expected_value = 0. - assert_almost_equal(result_value, expected_value, decimal=2, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e-2, err_msg="Dim. Reduction Ensemble Similarity to itself not zero: {0:f}".format(result_value)) def test_dres(self, ens1, ens2): @@ -348,14 +348,14 @@ def test_dres_without_superimposition(self, ens1, ens2): distance_matrix = distance_matrix) result_value = results[0,1] expected_value = 0.68 - assert_almost_equal(result_value, expected_value, decimal=1, + assert_allclose(result_value, expected_value, rtol=0, atol=1.5e-1, err_msg="Unexpected value for Dim. reduction Ensemble Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value)) def test_ces_convergence(self, ens1): expected_values = [0.3443593, 0.1941854, 0.06857104, 0.] results = encore.ces_convergence(ens1, 5) for i,ev in enumerate(expected_values): - assert_almost_equal(ev, results[i], decimal=2, + assert_allclose(ev, results[i], rtol=0, atol=1.5e-2, err_msg="Unexpected value for Clustering Ensemble similarity in convergence estimation") def test_dres_convergence(self, ens1): @@ -365,7 +365,7 @@ def test_dres_convergence(self, ens1): expected_values = [0.3, 0.] results = encore.dres_convergence(ens1, 10) try: - assert_almost_equal(results[:,0], expected_values, decimal=1) + assert_allclose(results[:,0], expected_values, rtol=0, atol=1.5e-1) except AssertionError: # Random test failure is very rare, but repeating the failed test # just once would only assert that the test passes with 50% @@ -376,7 +376,7 @@ def test_dres_convergence(self, ens1): category=RuntimeWarning) for i in range(10): results = encore.dres_convergence(ens1, 10) - assert_almost_equal(results[:,0], expected_values, decimal=1, + assert_allclose(results[:,0], expected_values, rtol=0, atol=1.5e-1, err_msg="Unexpected value for Dim. " "reduction Ensemble similarity in " "convergence estimation") @@ -396,8 +396,8 @@ def test_hes_error_estimation(self, ens1): "Unexpected standard deviation for bootstrapped samples in" " Harmonic Ensemble similarity" ) - assert_almost_equal(average, expected_average, -2, err_msg) - assert_almost_equal(stdev, expected_stdev, -2, error_msg) + assert_allclose(average, expected_average, rtol=0, atol=1.5e2, err_msg=err_msg) + assert_allclose(stdev, expected_stdev, rtol=0, atol=1.5e2, err_msg=error_msg) def test_ces_error_estimation(self, ens1): expected_average = 0.03 @@ -410,10 +410,10 @@ def test_ces_error_estimation(self, ens1): average = averages[0,1] stdev = stdevs[0,1] - assert_almost_equal(average, expected_average, decimal=1, + assert_allclose(average, expected_average, rtol=0, atol=1.5e-1, err_msg="Unexpected average value for bootstrapped samples in Clustering Ensemble similarity") - assert_almost_equal(stdev, expected_stdev, decimal=0, - err_msg="Unexpected standard daviation for bootstrapped samples in Clustering Ensemble similarity") + assert_allclose(stdev, expected_stdev, rtol=0, atol=1.5, + err_msg="Unexpected standard deviation for bootstrapped samples in Clustering Ensemble similarity") def test_ces_error_estimation_ensemble_bootstrap(self, ens1): # Error estimation using a method that does not take a distance @@ -434,20 +434,22 @@ def test_ces_error_estimation_ensemble_bootstrap(self, ens1): err_msg = ( "Unexpected average value for bootstrapped samples in" " Clustering Ensemble similarity") - assert_almost_equal( + assert_allclose( average, expected_average, - 1, - err_msg) + rtol = 0, + atol = 1.5e-1, + err_msg=err_msg) error_msg = ( "Unexpected standard deviation for bootstrapped samples in" " Clustering Ensemble similarity" ) - assert_almost_equal( + assert_allclose( stdev, expected_stdev, - 1, - error_msg) + rtol=0, + atol=1.5e-1, + err_msg=error_msg) def test_dres_error_estimation(self, ens1): average_upper_bound = 0.3 @@ -820,7 +822,7 @@ def test_dimensionality_reduction_three_ensembles_two_identical(self, encore.reduce_dimensionality([ens1, ens2, ens1]) coordinates_ens1 = coordinates[:,np.where(details["ensemble_membership"]==1)] coordinates_ens3 = coordinates[:,np.where(details["ensemble_membership"]==3)] - assert_almost_equal(coordinates_ens1, coordinates_ens3, decimal=0, + assert_allclose(coordinates_ens1, coordinates_ens3, rtol=0, atol=1.5, err_msg="Unexpected result in dimensionality reduction: {0}".format(coordinates)) diff --git a/testsuite/MDAnalysisTests/analysis/test_hole2.py b/testsuite/MDAnalysisTests/analysis/test_hole2.py index 694b5560d3e..fbb34aac698 100644 --- a/testsuite/MDAnalysisTests/analysis/test_hole2.py +++ b/testsuite/MDAnalysisTests/analysis/test_hole2.py @@ -21,781 +21,14 @@ # J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787 # import pytest -import glob -import os -import sys -import textwrap -import re -import numpy as np -import matplotlib -import mpl_toolkits.mplot3d -import errno -from numpy.testing import ( - assert_almost_equal, - assert_equal, - assert_allclose, -) +from importlib import reload +import pytest -import MDAnalysis as mda from MDAnalysis.analysis import hole2 -from MDAnalysis.analysis.hole2.utils import check_and_fix_long_filename -from MDAnalysis.exceptions import ApplicationError -from MDAnalysisTests.datafiles import PDB_HOLE, MULTIPDB_HOLE, DCD -from MDAnalysisTests import executable_not_found -from MDAnalysis.analysis.hole2.templates import exe_err - -def rlimits_missing(): - # return True if resources module not accesible (ie setting of rlimits) - try: - # on Unix we can manipulate our limits: http://docs.python.org/2/library/resource.html - import resource - - soft_max_open_files, hard_max_open_files = resource.getrlimit( - resource.RLIMIT_NOFILE) - except ImportError: - return True - return False - - -class TestCheckAndFixLongFilename(object): - - max_length = 70 - filename = 'a'*(max_length-4) + '.pdb' - - def test_short(self): - fixed = check_and_fix_long_filename(self.filename) - assert self.filename == fixed - - def test_relative(self): - abspath = os.path.abspath(self.filename) - if len(abspath) > self.max_length: - fixed = check_and_fix_long_filename(abspath) - assert fixed == self.filename - - @pytest.mark.skipif(os.name == 'nt' and sys.maxsize <= 2**32, - reason="FileNotFoundError on Win 32-bit") - def test_symlink_dir(self, tmpdir): - dirname = 'really_'*20 +'long_name' - short_name = self.filename[-20:] - path = os.path.join(dirname, short_name) - with tmpdir.as_cwd(): - os.makedirs(dirname) - u = mda.Universe(PDB_HOLE) - u.atoms.write(path) - - fixed = check_and_fix_long_filename(path) - assert os.path.islink(fixed) - assert fixed.endswith(short_name) - - @pytest.mark.skipif(os.name == 'nt' and sys.maxsize <= 2**32, - reason="OSError: symbolic link privilege not held") - def test_symlink_file(self, tmpdir): - long_name = 'a'*10 + self.filename - - with tmpdir.as_cwd(): - fixed = check_and_fix_long_filename(long_name) - assert os.path.islink(fixed) - assert not fixed.endswith(long_name) - - -@pytest.mark.skipif(executable_not_found("hole"), - reason="Test skipped because HOLE not found") -class TestHole(object): - filename = PDB_HOLE - random_seed = 31415 - profile_length = 425 - rxn_coord_mean = -1.41225 - radius_min = 1.19707 - - def test_correct_input(self, tmpdir): - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match="to the MDAKit"): - hole2.hole(self.filename, random_seed=self.random_seed, - infile='hole.inp') - - infile = str(tmpdir.join('hole.inp')) - with open(infile, 'r') as f: - contents = f.read() - - hole_input = textwrap.dedent(""" - RADIUS simple2.rad - SPHPDB hole.sph - SAMPLE 0.200000 - ENDRAD 22.000000 - IGNORE SOL WAT TIP HOH K NA CL - SHORTO 0 - RASEED 31415 - """) - - # don't check filenames - assert contents.endswith(hole_input) - - def test_input_options(self, tmpdir): - u = mda.Universe(PDB_HOLE) - cog = u.select_atoms('protein').center_of_geometry() - - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match="to the MDAKit"): - hole2.hole(self.filename, random_seed=self.random_seed, - infile='hole.inp', cpoint=cog, - ignore_residues=[]) - - infile = str(tmpdir.join('hole.inp')) - with open(infile, 'r') as f: - contents = f.read() - - hole_input = textwrap.dedent(""" - RADIUS simple2.rad - SPHPDB hole.sph - SAMPLE 0.200000 - ENDRAD 22.000000 - IGNORE - SHORTO 0 - RASEED 31415 - CPOINT -0.0180961507 -0.0122730583 4.1497999943 - """) - - # don't check filenames - assert contents.endswith(hole_input) - - def test_correct_profile_values(self, tmpdir): - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match="to the MDAKit"): - profiles = hole2.hole(self.filename, - random_seed=self.random_seed) - - values = list(profiles.values()) - assert_equal(len(values), 1, - err_msg='Should only have 1 HOLE profile') - profile = values[0] - assert_equal(len(profile), self.profile_length, - err_msg='Wrong number of points in HOLE profile') - assert_almost_equal(profile.rxn_coord.mean(), - self.rxn_coord_mean, - err_msg='Wrong mean HOLE rxn_coord') - assert_almost_equal(profile.radius.min(), - self.radius_min, - err_msg='Wrong minimum HOLE radius') - - # HOLE cannot read NAMD CHARMM files as is written by MDAnalysis - # fails with Linux HOLE? - # def test_dcd(self, tmpdir): - # with tmpdir.as_cwd(): - # u = mda.Universe(PSF, DCD) - # n_frames = len(u.trajectory) - # keep_frames = 12 - # step = 3 - # skip = n_frames-keep_frames - # filename = 'temp.pdb' - # u.atoms.write(filename) - - # profiles = hole2.hole(filename, random_seed=self.random_seed, dcd=DCD, - # dcd_iniskip=skip, - # dcd_step=step, infile='hole.inp') - # with open('hole.inp', 'r') as f: - # contents = f.read() - # assert contents.endswith('CHARMS {} {}\n'.format(skip, step-1)) - - # assert_equal(len(profiles), int(keep_frames/step)) - - @pytest.mark.filterwarnings("ignore: `hole` is deprecated") - def test_application_error(self, tmpdir): - with tmpdir.as_cwd(): - with pytest.raises(ApplicationError): - hole2.hole(self.filename, dcd=DCD) - - @pytest.mark.filterwarnings("ignore: `hole` is deprecated") - def test_output_level(self, tmpdir): - with tmpdir.as_cwd(): - with pytest.warns(UserWarning, match="needs to be < 3"): - profiles = hole2.hole(self.filename, - random_seed=self.random_seed, - output_level=100) - assert len(profiles) == 0 - - def test_keep_files(self, tmpdir): - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match="to the MDAKit"): - hole2.hole(self.filename, random_seed=self.random_seed, - infile='hole.inp', - keep_files=False) - sphpdbs = tmpdir.join('*.sph') - assert len(glob.glob(str(sphpdbs))) == 0 - outfiles = tmpdir.join('*.out') - assert len(glob.glob(str(outfiles))) == 0 - vdwradii = tmpdir.join('simple2.rad') - assert len(glob.glob(str(vdwradii))) == 0 - pdbfiles = tmpdir.join('*.pdb') - assert len(glob.glob(str(pdbfiles))) == 0 - oldfiles = tmpdir.join('*.old') - assert len(glob.glob(str(oldfiles))) == 0 - - -@pytest.mark.skipif(executable_not_found("hole"), - reason="Test skipped because HOLE not found") -class BaseTestHole(object): - filename = MULTIPDB_HOLE - start = 5 - stop = 7 - random_seed = 31415 - - # HOLE is so slow so we only run it once and keep it in - # the class; note that you may not change universe.trajectory - # (eg iteration) because this is not safe in parallel - @pytest.fixture() - def universe(self): - return mda.Universe(self.filename) - - @pytest.fixture() - def hole(self, universe, tmpdir): - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match='This class has been'): - h = hole2.HoleAnalysis(universe) - h.run(start=self.start, stop=self.stop, - random_seed=self.random_seed) - return h - - @pytest.fixture() - def frames(self, universe): - return [ts.frame for ts in universe.trajectory[self.start:self.stop]] - - @pytest.fixture() - def profiles(self, hole, frames): - return [hole.results.profiles[f] for f in frames] - - @pytest.mark.parametrize("attrname", ["sphpdbs", "outfiles", "profiles"]) - def test_deprecated_warning(self, hole, attrname): - wmsg = (f"The `{attrname}` attribute was deprecated in " - "MDAnalysis 2.0.0 and will be removed in MDAnalysis 3.0.0. " - f"Please use `results.{attrname}` instead.") - with pytest.warns(DeprecationWarning, match=wmsg): - value = getattr(hole, attrname) - assert value is hole.results[attrname] - - -@pytest.mark.skipif(executable_not_found('hole'), - reason="Test skipped because HOLE not found") -class TestOSError: - - @pytest.fixture() - def universe(self): - return mda.Universe(MULTIPDB_HOLE) - - @pytest.mark.filterwarnings("ignore: `hole` is deprecated") - def test_hole_method_oserror(self): - errmsg = exe_err.format(name='dummy_path', kw='executable') - with pytest.raises(OSError, match=errmsg): - h = hole2.hole(PDB_HOLE, executable='dummy_path') - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_hole_oserror(self, universe): - errmsg = exe_err.format(name='dummy_path', kw='executable') - with pytest.raises(OSError, match=errmsg): - h = hole2.HoleAnalysis(universe, executable='dummy_path') - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_sos_triangle_oserror(self, universe): - errmsg = exe_err.format(name='dummy_path', kw='sos_triangle') - with pytest.raises(OSError, match=errmsg): - h = hole2.HoleAnalysis(universe, sos_triangle='dummy_path') - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_sph_process_oserror(self, universe): - errmsg = exe_err.format(name='dummy_path', kw='sph_process') - with pytest.raises(OSError, match=errmsg): - h = hole2.HoleAnalysis(universe, sph_process='dummy_path') - - -class TestHoleAnalysis(BaseTestHole): - - def test_correct_profile_values(self, hole, frames): - assert_equal(sorted(hole.results.profiles.keys()), frames, - err_msg="hole.results.profiles.keys() should contain the frame numbers") - assert_equal(list(hole.frames), frames, - err_msg="hole.frames should contain the frame numbers") - data = np.transpose([(len(p), p.rxn_coord.mean(), p.radius.min()) - for p in hole.results.profiles.values()]) - assert_equal(data[0], [401, 399], err_msg="incorrect profile lengths") - assert_almost_equal(data[1], [1.98767, 0.0878], - err_msg="wrong mean HOLE rxn_coord") - assert_almost_equal(data[2], [1.19819, 1.29628], - err_msg="wrong minimum radius") - - def test_min_radius(self, hole): - values = np.array([[5., 1.19819], - [6., 1.29628]]) - assert_almost_equal(hole.min_radius(), values, - err_msg="min_radius() array not correct") - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_context_manager(self, universe, tmpdir): - with tmpdir.as_cwd(): - with hole2.HoleAnalysis(universe) as h: - h.run() - h.run() # run again for *.old files - h.create_vmd_surface(filename='hole.vmd') - - sphpdbs = tmpdir.join('*.sph') - assert len(glob.glob(str(sphpdbs))) == 0 - outfiles = tmpdir.join('*.out') - assert len(glob.glob(str(outfiles))) == 0 - vdwradii = tmpdir.join('simple2.rad') - assert len(glob.glob(str(vdwradii))) == 0 - pdbfiles = tmpdir.join('*.pdb') - assert len(glob.glob(str(pdbfiles))) == 0 - oldfiles = tmpdir.join('*.old') - assert len(glob.glob(str(oldfiles))) == 0 - vmd_file = tmpdir.join('hole.vmd') - assert len(glob.glob(str(vmd_file))) == 1 - - @pytest.mark.filterwarnings("ignore: This class has been moved") - @pytest.mark.parametrize("start,stop,step", [ - (1, 9, 2), (1, None, 3), (5, -2, None)]) - def test_nonzero_start_surface(self, universe, tmpdir, - start, stop, step, - surface="hole.vmd"): - # Issue 3476 - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match='This class has been'): - h = hole2.HoleAnalysis(universe) - h.run(start=start, stop=stop, step=step) - h.create_vmd_surface(filename=surface) - - found_frame_indices = [] - with open(surface) as s: - for line in s: - m = re.match(r"set triangles\((?P\d+)\)", line) - if m: - found_frame_indices.append(m.group('frame')) - found_frame_indices = np.array(found_frame_indices, dtype=int) - assert_equal(found_frame_indices, - np.arange(len(universe.trajectory[start:stop:step])), - err_msg="wrong frame indices in VMD surface file") - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_output_level(self, tmpdir, universe): - with tmpdir.as_cwd(): - with pytest.warns(UserWarning, match='needs to be < 3'): - h = hole2.HoleAnalysis(universe, - output_level=100) - h.run(start=self.start, - stop=self.stop, random_seed=self.random_seed) - - # no profiles - assert len(h.results.profiles) == 0 - - def test_cpoint_geometry(self, tmpdir, universe): - protein = universe.select_atoms('protein') - cogs = [protein.center_of_geometry() for ts in universe.trajectory] - with tmpdir.as_cwd(): - with pytest.warns(DeprecationWarning, match='This class has been'): - h = hole2.HoleAnalysis(universe, - select='protein', - cpoint='center_of_geometry', - write_input_files=True) - h.run(start=self.start, - stop=self.stop, random_seed=self.random_seed) - - infiles = sorted(glob.glob(str(tmpdir.join('hole*.inp')))) - for file, cog in zip(infiles, cogs[self.start:self.stop]): - with open(file, 'r') as f: - line = f.read().split('CPOINT')[1].split('\n')[0] - arr = np.array(list(map(float, line.split()))) - assert_almost_equal(arr, cog) - - # plotting - def test_plot(self, hole, frames, profiles): - ax = hole.plot(label=True, frames=None, y_shift=1) - err_msg = "HoleAnalysis.plot() did not produce an Axes instance" - assert isinstance(ax, matplotlib.axes.Axes), err_msg - lines = ax.get_lines()[:] - assert len(lines) == hole.n_frames - for i, (line, frame, profile) in enumerate(zip(lines, frames, profiles)): - x, y = line.get_data() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(y, profile.radius + i) - assert line.get_label() == str(frame) - - def test_plot_mean_profile(self, hole, frames, profiles): - binned, bins = hole.bin_radii(bins=100) - mean = np.array(list(map(np.mean, binned))) - stds = np.array(list(map(np.std, binned))) - midpoints = 0.5 * (bins[1:] + bins[:-1]) - - binwidths = np.diff(bins) - binwidth = binwidths[0] - assert_allclose(binwidths, binwidth) # just making sure that we have equidistant bins - - difference_right = bins[1:] - midpoints - assert_allclose(difference_right, binwidth/2) - - ylow = list(mean-(2*stds)) - yhigh = list(mean+(2*stds)) - - ax = hole.plot_mean_profile(bins=100, n_std=2) - - # test fillbetween standard deviation - children = ax.get_children() - poly = [] - for x in children: - if isinstance(x, matplotlib.collections.PolyCollection): - poly.append(x) - assert len(poly) == 1 - xp, yp = poly[0].get_paths()[0].vertices.T - assert_almost_equal(np.unique(xp), np.unique(midpoints)) - assert_almost_equal(np.unique(yp), np.unique(ylow+yhigh)) - - # test mean line - lines = ax.get_lines() - assert len(lines) == 1 - xl, yl = lines[0].get_data() - assert_almost_equal(xl, midpoints) - assert_almost_equal(yl, mean) - - @pytest.mark.skipif(sys.version_info < (3, 1), - reason="get_data_3d requires 3.1 or higher") - def test_plot3D(self, hole, frames, profiles): - ax = hole.plot3D(frames=None, r_max=None) - err_msg = "HoleAnalysis.plot3D() did not produce an Axes3D instance" - assert isinstance(ax, mpl_toolkits.mplot3d.Axes3D), err_msg - lines = ax.get_lines()[:] - assert len(lines) == hole.n_frames - - for line, frame, profile in zip(lines, frames, profiles): - x, y, z = line.get_data_3d() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(np.unique(y), [frame]) - assert_almost_equal(z, profile.radius) - assert line.get_label() == str(frame) - - @pytest.mark.skipif(sys.version_info < (3, 1), - reason="get_data_3d requires 3.1 or higher") - def test_plot3D_rmax(self, hole, frames, profiles): - ax = hole.plot3D(r_max=2.5) - err_msg = "HoleAnalysis.plot3D(rmax=float) did not produce an Axes3D instance" - assert isinstance(ax, mpl_toolkits.mplot3d.Axes3D), err_msg - - lines = ax.get_lines()[:] - - for line, frame, profile in zip(lines, frames, profiles): - x, y, z = line.get_data_3d() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(np.unique(y), [frame]) - radius = np.where(profile.radius > 2.5, np.nan, profile.radius) - assert_almost_equal(z, radius) - assert line.get_label() == str(frame) - - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_none_filename(self, tmpdir): - universe_none_filename = mda.Universe(PDB_HOLE, in_memory=True) - universe_none_filename.trajectory.filename = None - with tmpdir.as_cwd(): - with hole2.HoleAnalysis(universe_none_filename) as h: - h.run() - - -class TestHoleAnalysisLong(BaseTestHole): - - start = 0 - stop = 11 - - rmsd = np.array([6.10501252e+00, 4.88398472e+00, 3.66303524e+00, 2.44202454e+00, - 1.22100521e+00, 1.67285541e-07, 1.22100162e+00, 2.44202456e+00, - 3.66303410e+00, 4.88398478e+00, 6.10502262e+00]) - - @pytest.fixture - def order_parameter_keys_values(self, hole): - op = hole.over_order_parameters(self.rmsd, frames=None) - return op.keys(), op.values() - - def test_gather(self, hole): - gd = hole.gather(flat=False) - for i, p in enumerate(hole.results.profiles.values()): - assert_almost_equal(p.rxn_coord, gd['rxn_coord'][i]) - assert_almost_equal(p.radius, gd['radius'][i]) - assert_almost_equal(p.cen_line_D, gd['cen_line_D'][i]) - - def test_gather_flat(self, hole): - gd = hole.gather(flat=True) - i = 0 - for p in hole.results.profiles.values(): - j = i+len(p.rxn_coord) - assert_almost_equal(p.rxn_coord, gd['rxn_coord'][i:j]) - assert_almost_equal(p.radius, gd['radius'][i:j]) - assert_almost_equal(p.cen_line_D, gd['cen_line_D'][i:j]) - i = j - assert_equal(i, len(gd['rxn_coord'])) - - def test_min_radius(self, hole): - rad = hole.min_radius() - for (f1, p), (f2, r) in zip(hole.results.profiles.items(), rad): - assert_equal(f1, f2) - assert_almost_equal(min(p.radius), r) - - def test_over_order_parameters(self, hole): - op = self.rmsd - profiles = hole.over_order_parameters(op, frames=None) - assert len(op) == len(profiles) - - for key, rmsd in zip(profiles.keys(), np.sort(op)): - assert key == rmsd - - idx = np.argsort(op) - arr = np.array(list(hole.results.profiles.values()), dtype=object) - - for op_prof, arr_prof in zip(profiles.values(), arr[idx]): - assert op_prof is arr_prof - - def test_over_order_parameters_file(self, hole, tmpdir): - op = self.rmsd - with tmpdir.as_cwd(): - np.savetxt('rmsd.dat', self.rmsd) - profiles = hole.over_order_parameters('rmsd.dat', frames=None) - - assert len(op) == len(profiles) - - for key, rmsd in zip(profiles.keys(), np.sort(op)): - assert key == rmsd - - idx = np.argsort(op) - arr = np.array(list(hole.results.profiles.values()), dtype=object) - - for op_prof, arr_prof in zip(profiles.values(), arr[idx]): - assert op_prof is arr_prof - - def test_over_order_parameters_missing_file(self, hole): - with pytest.raises(ValueError) as exc: - hole.over_order_parameters('missing.dat') - assert 'not found' in str(exc.value) - - def test_over_order_parameters_invalid_file(self, hole): - with pytest.raises(ValueError) as exc: - hole.over_order_parameters(PDB_HOLE) - assert 'Could not parse' in str(exc.value) - - def test_over_order_parameters_frames(self, hole): - op = self.rmsd - n_frames = 7 - profiles = hole.over_order_parameters(op, frames=np.arange(n_frames)) - assert len(profiles) == n_frames - for key, rmsd in zip(profiles.keys(), np.sort(op[:n_frames])): - assert key == rmsd - - idx = np.argsort(op[:n_frames]) - values = list(hole.results.profiles.values())[:n_frames] - - arr = np.array(values, dtype=object) - for op_prof, arr_prof in zip(profiles.values(), arr[idx]): - assert op_prof is arr_prof - - def test_bin_radii(self, hole): - radii, bins = hole.bin_radii(bins=100) - dct = hole.gather(flat=True) - coords = dct['rxn_coord'] - - assert len(bins) == 101 - assert_almost_equal(bins[0], coords.min()) - assert_almost_equal(bins[-1], coords.max()) - assert len(radii) == (len(bins)-1) - - # check first frame profile - first = hole.results.profiles[0] - for row in first: - coord = row.rxn_coord - rad = row.radius - for i, (lower, upper) in enumerate(zip(bins[:-1], bins[1:])): - if coord > lower and coord <= upper: - assert rad in radii[i] - break - else: - raise AssertionError('Radius not in binned radii') - - @pytest.mark.parametrize('midpoint', [1.5, 1.8, 2.0, 2.5]) - def test_bin_radii_range(self, hole, midpoint): - radii, bins = hole.bin_radii(bins=100, - range=(midpoint, midpoint)) - dct = hole.gather(flat=True) - coords = dct['rxn_coord'] - - assert len(bins) == 101 - low = midpoint - 0.5 - high = midpoint + 0.5 - assert_almost_equal(bins[0], low) - assert_almost_equal(bins[-1], high) - assert len(radii) == (len(bins)-1) - - # check first frame profile - first = hole.results.profiles[0] - for row in first: - coord = row.rxn_coord - rad = row.radius - if coord > low and coord <= high: - for i, (lower, upper) in enumerate(zip(bins[:-1], bins[1:])): - if coord > lower and coord <= upper: - assert rad in radii[i] - break - else: - raise AssertionError('Radius not in binned radii') - else: - assert not any([rad in x for x in radii]) - - def test_bin_radii_edges(self, hole): - brange = list(np.linspace(1.0, 2.0, num=101, endpoint=True)) - moved = brange[30:] + brange[10:30] + brange[:10] - e_radii, e_bins = hole.bin_radii(bins=moved, range=(0.0, 0.0)) - r_radii, r_bins = hole.bin_radii(bins=100, range=(1.5, 1.5)) - assert_almost_equal(e_bins, r_bins) - for e, r in zip(e_radii, r_radii): - assert_almost_equal(e, r) - - def test_histogram_radii(self, hole): - means, _ = hole.histogram_radii(aggregator=np.mean, - bins=100) - radii, _ = hole.bin_radii(bins=100) - assert means.shape == (100,) - for r, m in zip(radii, means): - assert_almost_equal(r.mean(), m) - - # plotting - - def test_plot_select_frames(self, hole, frames, profiles): - ax = hole.plot(label=True, frames=[2, 3], y_shift=1) - err_msg = "HoleAnalysis.plot() did not produce an Axes instance" - assert isinstance(ax, matplotlib.axes.Axes), err_msg - lines = ax.get_lines()[:] - assert len(lines) == 2 - for i, (line, frame, profile) in enumerate(zip(lines, frames[2:4], profiles[2:4])): - x, y = line.get_data() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(y, profile.radius + i) - assert line.get_label() == str(frame) - - @pytest.mark.parametrize('agg', [np.max, np.mean, np.std, np.min]) - def test_plot_order_parameters(self, hole, order_parameter_keys_values, - agg): - opx = np.array(list(order_parameter_keys_values[0])) - opy = np.array([agg(p.radius) for p in order_parameter_keys_values[1]]) - ax = hole.plot_order_parameters(self.rmsd, aggregator=agg, frames=None) - err_msg = ("HoleAnalysis.plot_order_parameters()" - "did not produce an Axes instance") - assert isinstance(ax, matplotlib.axes.Axes), err_msg - - lines = ax.get_lines() - assert len(lines) == 1 - x, y = lines[0].get_data() - assert_almost_equal(x, opx) - assert_almost_equal(y, opy) - - @pytest.mark.skipif(sys.version_info < (3, 1), - reason="get_data_3d requires 3.1 or higher") - def test_plot3D_order_parameters(self, hole, order_parameter_keys_values): - opx = np.array(list(order_parameter_keys_values[0])) - profiles = np.array(list(order_parameter_keys_values[1])) - ax = hole.plot3D_order_parameters(self.rmsd, frames=None) - err_msg = ("HoleAnalysis.plot3D_order_parameters() " - "did not produce an Axes3D instance") - assert isinstance(ax, mpl_toolkits.mplot3d.Axes3D), err_msg - - lines = ax.get_lines() - assert len(lines) == hole.n_frames - for line, opx_, profile in zip(lines, opx, profiles): - x, y, z = line.get_data_3d() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(np.unique(y), np.array([opx_])) - assert_almost_equal(z, profile.radius) - - @pytest.mark.skipif(sys.version_info > (3, 1), - reason="get_data_3d requires 3.1 or higher") - def test_plot3D_order_parameters(self, hole, order_parameter_keys_values): - opx = np.array(list(order_parameter_keys_values[0])) - profiles = np.array(list(order_parameter_keys_values[1])) - ax = hole.plot3D_order_parameters(self.rmsd, frames=None) - err_msg = ("HoleAnalysis.plot3D_order_parameters() " - "did not produce an Axes3D instance") - assert isinstance(ax, mpl_toolkits.mplot3d.Axes3D), err_msg - - lines = ax.get_lines() - assert len(lines) == hole.n_frames - for line, opx_, profile in zip(lines, opx, profiles): - x, y = line.get_data() - assert_almost_equal(x, profile.rxn_coord) - assert_almost_equal(np.unique(y), np.array([opx_])) - -@pytest.mark.skipif(executable_not_found("hole"), - reason="Test skipped because HOLE not found") -class TestHoleModule(object): - try: - # on Unix we can manipulate our limits: http://docs.python.org/2/library/resource.html - import resource - soft_max_open_files, hard_max_open_files = resource.getrlimit( - resource.RLIMIT_NOFILE) - except ImportError: - pass - - @staticmethod - @pytest.fixture() - def universe(): - return mda.Universe(MULTIPDB_HOLE) - - @pytest.mark.skipif(rlimits_missing, - reason="Test skipped because platform does not allow setting rlimits") - @pytest.mark.filterwarnings("ignore: This class has been moved") - def test_hole_module_fd_closure(self, universe, tmpdir): - """test open file descriptors are closed (MDAnalysisTests.analysis.test_hole.TestHoleModule): Issue 129""" - # If Issue 129 isn't resolved, this function will produce an OSError on - # the system, and cause many other tests to fail as well. - # - # Successful test takes ~10 s, failure ~2 s. - - # Hasten failure by setting "ulimit -n 64" (can't go too low because of open modules etc...) - import resource - - # ----- temporary hack ----- - # on Mac OS X (on Travis) we run out of open file descriptors - # before even starting this test (see - # https://github.com/MDAnalysis/mdanalysis/pull/901#issuecomment-231938093); - # if this issue is solved by #363 then revert the following - # hack: - # - import platform - if platform.platform() == "Darwin": - max_open_files = 512 - else: - max_open_files = 64 - # - # -------------------------- - - resource.setrlimit(resource.RLIMIT_NOFILE, - (max_open_files, self.hard_max_open_files)) - - with tmpdir.as_cwd(): - try: - H = hole2.HoleAnalysis(universe, cvect=[0, 1, 0], sample=20.0) - finally: - self._restore_rlimits() - # pretty unlikely that the code will get through 2 rounds if the MDA - # issue 129 isn't fixed, although this depends on the file descriptor - # open limit for the machine in question - try: - for i in range(2): - # will typically get an OSError for too many files being open after - # about 2 seconds if issue 129 isn't resolved - H.run() - except OSError as err: - if err.errno == errno.EMFILE: - raise pytest.fail( - "hole2.HoleAnalysis does not close file descriptors (Issue 129)") - raise - finally: - # make sure to restore open file limit !! - self._restore_rlimits() - def _restore_rlimits(self): - try: - import resource - resource.setrlimit(resource.RLIMIT_NOFILE, - (self.soft_max_open_files, self.hard_max_open_files)) - except ImportError: - pass +def test_moved_to_mdakit_warning(): + wmsg = "MDAnalysis.analysis.hole2 is deprecated" + with pytest.warns(DeprecationWarning, match=wmsg): + reload(hole2) diff --git a/testsuite/MDAnalysisTests/analysis/test_pca.py b/testsuite/MDAnalysisTests/analysis/test_pca.py index e157bee994e..c72971c30ed 100644 --- a/testsuite/MDAnalysisTests/analysis/test_pca.py +++ b/testsuite/MDAnalysisTests/analysis/test_pca.py @@ -133,6 +133,12 @@ def test_no_frames(u): PCA(u, select=SELECTION).run(stop=1) +def test_can_run_frames(u): + atoms = u.select_atoms(SELECTION) + u.transfer_to_memory() + PCA(u, select=SELECTION, mean=None).run(frames=[0, 1]) + + def test_transform(pca, u): ag = u.select_atoms(SELECTION) pca_space = pca.transform(ag, n_components=1) diff --git a/testsuite/MDAnalysisTests/converters/test_openmm.py b/testsuite/MDAnalysisTests/converters/test_openmm.py index 7f695b37992..0ee591990e7 100644 --- a/testsuite/MDAnalysisTests/converters/test_openmm.py +++ b/testsuite/MDAnalysisTests/converters/test_openmm.py @@ -87,6 +87,11 @@ def test_basic_topology(self, omm_sim_uni): assert omm_sim_uni.segments.segids[0] == '0' assert len(omm_sim_uni.bonds.indices) == 0 + def test_data(self, omm_sim_uni): + data = omm_sim_uni.trajectory.ts.data + assert isinstance(data["kinetic_energy"], float) + assert isinstance(data["potential_energy"], float) + class TestOpenMMPDBFileReader(_SingleFrameReader): __test__ = True diff --git a/testsuite/MDAnalysisTests/converters/test_parmed.py b/testsuite/MDAnalysisTests/converters/test_parmed.py index 38ef20caaab..46eb9cfad75 100644 --- a/testsuite/MDAnalysisTests/converters/test_parmed.py +++ b/testsuite/MDAnalysisTests/converters/test_parmed.py @@ -23,7 +23,9 @@ import pytest import MDAnalysis as mda +import numpy as np from numpy.testing import (assert_allclose, assert_equal) +from numpy.lib import NumpyVersion from MDAnalysisTests.coordinates.base import _SingleFrameReader from MDAnalysisTests.coordinates.reference import RefAdKSmall @@ -41,7 +43,13 @@ PRM_UreyBradley, ) -pmd = pytest.importorskip('parmed') +# TODO: remove this guard when parmed has a release +# that support NumPy 2 +if NumpyVersion(np.__version__) < "2.0.0": + pmd = pytest.importorskip('parmed') +else: + pmd = pytest.importorskip('parmed_skip_with_numpy2') + class TestParmEdReaderGRO: diff --git a/testsuite/MDAnalysisTests/converters/test_rdkit.py b/testsuite/MDAnalysisTests/converters/test_rdkit.py index 85860162f7b..a75ea606e0e 100644 --- a/testsuite/MDAnalysisTests/converters/test_rdkit.py +++ b/testsuite/MDAnalysisTests/converters/test_rdkit.py @@ -27,6 +27,7 @@ import MDAnalysis as mda import numpy as np +from numpy.lib import NumpyVersion import pytest from MDAnalysis.topology.guessers import guess_atom_element from MDAnalysisTests.datafiles import GRO, PDB_full, PDB_helix, mol2_molecule @@ -55,6 +56,8 @@ reason="only for min dependencies build") class TestRequiresRDKit(object): def test_converter_requires_rdkit(self): + if NumpyVersion(np.__version__) >= "2.0.0": + pytest.skip("RDKit not compatible with NumPy 2") u = mda.Universe(PDB_full) with pytest.raises(ImportError, match="RDKit is required for the RDKitConverter"): diff --git a/testsuite/MDAnalysisTests/converters/test_rdkit_parser.py b/testsuite/MDAnalysisTests/converters/test_rdkit_parser.py index 86d52fe2a0c..c9b3bdcd8f2 100644 --- a/testsuite/MDAnalysisTests/converters/test_rdkit_parser.py +++ b/testsuite/MDAnalysisTests/converters/test_rdkit_parser.py @@ -24,14 +24,21 @@ import warnings import pytest import numpy as np +from numpy.lib import NumpyVersion from numpy.testing import assert_equal import MDAnalysis as mda from MDAnalysisTests.topology.base import ParserBase from MDAnalysisTests.datafiles import mol2_molecule, PDB_helix, SDF_molecule -Chem = pytest.importorskip('rdkit.Chem') -AllChem = pytest.importorskip('rdkit.Chem.AllChem') +# TODO: remove these shims when RDKit +# has a release supporting NumPy 2 +if NumpyVersion(np.__version__) < "2.0.0": + Chem = pytest.importorskip('rdkit.Chem') + AllChem = pytest.importorskip('rdkit.Chem.AllChem') +else: + Chem = pytest.importorskip("RDKit_does_not_support_NumPy_2") + AllChem = pytest.importorskip("RDKit_does_not_support_NumPy_2") class RDKitParserBase(ParserBase): parser = mda.converters.RDKitParser.RDKitParser diff --git a/testsuite/MDAnalysisTests/coordinates/base.py b/testsuite/MDAnalysisTests/coordinates/base.py index a2a131bbbde..3de8cfb9ff6 100644 --- a/testsuite/MDAnalysisTests/coordinates/base.py +++ b/testsuite/MDAnalysisTests/coordinates/base.py @@ -122,9 +122,17 @@ def test_last_slice(self): def test_pickle_singleframe_reader(self): reader = self.universe.trajectory reader_p = pickle.loads(pickle.dumps(reader)) + reader_p_p = pickle.loads(pickle.dumps(reader_p)) assert_equal(len(reader), len(reader_p)) assert_equal(reader.ts, reader_p.ts, "Single-frame timestep is changed after pickling") + assert_equal(len(reader), len(reader_p_p)) + assert_equal(reader.ts, reader_p_p.ts, + "Single-frame timestep is changed after double pickling") + reader.ts.positions[0] = np.array([1, 2, 3]) + reader_p = pickle.loads(pickle.dumps(reader)) + assert_equal(reader.ts, reader_p.ts, + "Modification of ts not preserved after serialization") class BaseReference(object): @@ -443,6 +451,14 @@ def test_pickle_reader(self, reader): assert_equal(len(reader), len(reader_p)) assert_equal(reader.ts, reader_p.ts, "Timestep is changed after pickling") + reader_p_p = pickle.loads(pickle.dumps(reader_p)) + assert_equal(len(reader), len(reader_p_p)) + assert_equal(reader.ts, reader_p_p.ts, + "Timestep is changed after double pickling") + reader.ts.positions[0] = np.array([1, 2, 3]) + reader_p = pickle.loads(pickle.dumps(reader)) + assert_equal(reader.ts, reader_p.ts, + "Modification of ts not preserved after serialization") def test_frame_collect_all_same(self, reader): # check that the timestep resets so that the base reference is the same @@ -604,6 +620,9 @@ def test_pickle_next_ts_reader(self, reader): reader_p = pickle.loads(pickle.dumps(reader)) assert_equal(next(reader), next(reader_p), "Next timestep is changed after pickling") + reader_p_p = pickle.loads(pickle.dumps(reader_p)) + assert_equal(next(reader), next(reader_p_p), + "Next timestep is changed after double pickling") # To make sure pickle works for last frame. def test_pickle_last_ts_reader(self, reader): diff --git a/testsuite/MDAnalysisTests/coordinates/reference.py b/testsuite/MDAnalysisTests/coordinates/reference.py index 2d2ec036bb5..8c523c639e1 100644 --- a/testsuite/MDAnalysisTests/coordinates/reference.py +++ b/testsuite/MDAnalysisTests/coordinates/reference.py @@ -25,9 +25,10 @@ from MDAnalysisTests import datafiles from MDAnalysisTests.datafiles import (PDB_small, PDB, LAMMPSdata, LAMMPSdata2, LAMMPSdcd2, - LAMMPSdata_mini, PSF_TRICLINIC, - DCD_TRICLINIC, PSF_NAMD_TRICLINIC, - DCD_NAMD_TRICLINIC) + LAMMPSdata_mini, + LAMMPSdata_additional_columns, + PSF_TRICLINIC, DCD_TRICLINIC, + PSF_NAMD_TRICLINIC, DCD_NAMD_TRICLINIC) class RefAdKSmall(object): @@ -227,3 +228,9 @@ class RefLAMMPSDataMini(object): dtype=np.float32) dimensions = np.array([60., 50., 30., 90., 90., 90.], dtype=np.float32) + +class RefLAMMPSDataAdditionalColumns(object): + q = np.array([2.58855e-03, 6.91952e-05, 1.05548e-02, 4.20319e-03, + 9.19172e-03, 4.79777e-03, 6.36864e-04, 5.87125e-03, + -2.18125e-03, 6.88910e-03]) + p = np.array(5 * [1.1, 1.2]) diff --git a/testsuite/MDAnalysisTests/coordinates/test_chainreader.py b/testsuite/MDAnalysisTests/coordinates/test_chainreader.py index ba0687ffd76..2049b687279 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_chainreader.py +++ b/testsuite/MDAnalysisTests/coordinates/test_chainreader.py @@ -455,3 +455,22 @@ def wrapped(ts): # in the issue report values of ~25 were seen before the fix # with the fix all values should be <1e-6 assert np.abs(com).max() < 1e-6 + + +def test_issue_3349(): + # test for repr of a chainreader when the subreaders are memoryreaders + cdx = np.random.random(3341 * 3 * 10) + cdx = cdx.reshape(-1, 3341, 3).astype(np.float32) * 10 + u = mda.Universe(PSF, (cdx, DCD)) + u2 = mda.Universe(PSF, (cdx, cdx, cdx, DCD)) + u_expected_filenames = np.array([None, str(DCD)]) + u2_expected_filenames = np.array([None, None, None, str(DCD)]) + + assert_equal("", + u.trajectory.__repr__()) + assert_equal(u_expected_filenames, u.trajectory.filenames) + assert_equal("", + u2.trajectory.__repr__()) + assert_equal(u2_expected_filenames, u2.trajectory.filenames) diff --git a/testsuite/MDAnalysisTests/coordinates/test_lammps.py b/testsuite/MDAnalysisTests/coordinates/test_lammps.py index c8afb286fb7..88b4b8c35ee 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_lammps.py +++ b/testsuite/MDAnalysisTests/coordinates/test_lammps.py @@ -29,16 +29,18 @@ import MDAnalysis as mda from MDAnalysis import NoDataError -from numpy.testing import (assert_equal, assert_allclose, assert_allclose) +from numpy.testing import (assert_equal, assert_allclose) from MDAnalysisTests import make_Universe from MDAnalysisTests.coordinates.reference import ( RefLAMMPSData, RefLAMMPSDataMini, RefLAMMPSDataDCD, + RefLAMMPSDataAdditionalColumns ) from MDAnalysisTests.datafiles import ( LAMMPScnt, LAMMPShyd, LAMMPSdata, LAMMPSdata_mini, LAMMPSdata_triclinic, LAMMPSDUMP, LAMMPSDUMP_allcoords, LAMMPSDUMP_nocoords, LAMMPSDUMP_triclinic, - LAMMPSDUMP_image_vf, LAMMPS_image_vf + LAMMPSDUMP_image_vf, LAMMPS_image_vf, LAMMPSdata_additional_columns, + LAMMPSDUMP_additional_columns ) @@ -511,6 +513,46 @@ def u(self, tmpdir, request): yield mda.Universe(f, format='LAMMPSDUMP', lammps_coordinate_convention="auto") + @pytest.fixture() + def u_additional_columns_true(self): + f = LAMMPSDUMP_additional_columns + top = LAMMPSdata_additional_columns + return mda.Universe(top, f, format='LAMMPSDUMP', + lammps_coordinate_convention="auto", + additional_columns=True) + + @pytest.fixture() + def u_additional_columns_single(self): + f = LAMMPSDUMP_additional_columns + top = LAMMPSdata_additional_columns + return mda.Universe(top, f, format='LAMMPSDUMP', + lammps_coordinate_convention="auto", + additional_columns=['q']) + + @pytest.fixture() + def u_additional_columns_multiple(self): + f = LAMMPSDUMP_additional_columns + top = LAMMPSdata_additional_columns + return mda.Universe(top, f, format='LAMMPSDUMP', + lammps_coordinate_convention="auto", + additional_columns=['q', 'p']) + + @pytest.fixture() + def u_additional_columns_wrong_format(self): + f = LAMMPSDUMP_additional_columns + top = LAMMPSdata_additional_columns + return mda.Universe(top, f, format='LAMMPSDUMP', + lammps_coordinate_convention="auto", + additional_columns='q') + + @pytest.fixture() + def u_additional_columns_not_present(self): + f = LAMMPSDUMP_additional_columns + top = LAMMPSdata_additional_columns + return mda.Universe(top, f, format='LAMMPSDUMP', + lammps_coordinate_convention="auto", + additional_columns=['q', 'w']) + @pytest.fixture() def reference_positions(self): # manually copied from traj file @@ -592,6 +634,32 @@ def test_atom_reordering(self, u, reference_positions): assert_allclose(atom1.position, atom1_pos-bmin, atol=1e-5) assert_allclose(atom13.position, atom13_pos-bmin, atol=1e-5) + @pytest.mark.parametrize("system, fields", [ + ('u_additional_columns_true', ['q', 'p']), + ('u_additional_columns_single', ['q']), + ('u_additional_columns_multiple', ['q', 'p']), + ]) + def test_additional_columns(self, system, fields, request): + u = request.getfixturevalue(system) + for field in fields: + data = u.trajectory[0].data[field] + assert_allclose(data, + getattr(RefLAMMPSDataAdditionalColumns, field)) + + @pytest.mark.parametrize("system", [ + ('u_additional_columns_wrong_format'), + ]) + def test_wrong_format_additional_colums(self, system, request): + with pytest.raises(ValueError, + match="Please provide an iterable containing"): + request.getfixturevalue(system) + + @pytest.mark.parametrize("system", [ + ('u_additional_columns_not_present'), + ]) + def test_warning(self, system, request): + with pytest.warns(match="Some of the additional"): + request.getfixturevalue(system) @pytest.mark.parametrize("convention", ["unscaled", "unwrapped", "scaled_unwrapped"]) diff --git a/testsuite/MDAnalysisTests/core/test_atomgroup.py b/testsuite/MDAnalysisTests/core/test_atomgroup.py index 2e3036bad35..6173ea76f5c 100644 --- a/testsuite/MDAnalysisTests/core/test_atomgroup.py +++ b/testsuite/MDAnalysisTests/core/test_atomgroup.py @@ -748,6 +748,10 @@ def test_phi_selections_single(self, GRO): assert_equal(phisel.residues.resids, [9, 10]) assert_equal(phisel.residues.resnames, ['PRO', 'GLY']) + def test_phi_selections_empty(self, GRO): + rgsel = GRO.segments[0].residues[[]].phi_selections() + assert len(rgsel) == 0 + def test_phi_selections(self, resgroup): rgsel = resgroup.phi_selections() rssel = [r.phi_selection() for r in resgroup] @@ -788,6 +792,10 @@ def test_psi_selections_single(self, GRO): assert_equal(psisel.residues.resids, [10, 11]) assert_equal(psisel.residues.resnames, ['GLY', 'ALA']) + def test_psi_selections_empty(self, GRO): + rgsel = GRO.segments[0].residues[[]].psi_selections() + assert len(rgsel) == 0 + def test_psi_selections(self, resgroup): rgsel = resgroup.psi_selections() rssel = [r.psi_selection() for r in resgroup] @@ -820,6 +828,10 @@ def test_omega_selection_name(self, GRO, kwargs, names): assert_equal(osel.residues.resids, [8, 9]) assert_equal(osel.residues.resnames, ['ALA', 'PRO']) + def test_omega_selections_empty(self, GRO): + rgsel = GRO.segments[0].residues[[]].omega_selections() + assert len(rgsel) == 0 + def test_omega_selections_single(self, GRO): rgsel = GRO.segments[0].residues[[7]].omega_selections() assert len(rgsel) == 1 @@ -869,6 +881,10 @@ def test_chi1_selections_single(self, GRO): assert_equal(sel.residues.resids, [13]) assert_equal(sel.residues.resnames, ['LYS']) + def test_chi1_selections_empty(self, GRO): + rgsel = GRO.segments[0].residues[[]].chi1_selections() + assert len(rgsel) == 0 + def test_chi1_selections(self, resgroup): rgsel = resgroup.chi1_selections() rssel = [r.chi1_selection() for r in resgroup] diff --git a/testsuite/MDAnalysisTests/core/test_atomselections.py b/testsuite/MDAnalysisTests/core/test_atomselections.py index 6915e6a95d1..7db3611282f 100644 --- a/testsuite/MDAnalysisTests/core/test_atomselections.py +++ b/testsuite/MDAnalysisTests/core/test_atomselections.py @@ -25,6 +25,7 @@ from io import StringIO import itertools import numpy as np +from numpy.lib import NumpyVersion from numpy.testing import( assert_equal, ) @@ -539,7 +540,10 @@ def test_molnum(self, universe, selection_string, reference): class TestSelectionRDKit(object): def setup_class(self): - pytest.importorskip("rdkit.Chem") + if NumpyVersion(np.__version__) < "2.0.0": + pytest.importorskip("rdkit.Chem") + else: + pytest.skip("RDKit does not support NumPy 2") @pytest.fixture def u(self): @@ -1413,13 +1417,19 @@ def test_negative_resid(): ("aromaticity False", 15), ]) def test_bool_sel(selstr, n_atoms): - pytest.importorskip("rdkit.Chem") + if NumpyVersion(np.__version__) >= "2.0.0": + pytest.skip("RDKit does not support NumPy 2") + else: + pytest.importorskip("rdkit.Chem") u = MDAnalysis.Universe.from_smiles("Nc1cc(C[C@H]([O-])C=O)c[nH]1") assert len(u.select_atoms(selstr)) == n_atoms def test_bool_sel_error(): - pytest.importorskip("rdkit.Chem") + if NumpyVersion(np.__version__) >= "2.0.0": + pytest.skip("RDKit does not support NumPy 2") + else: + pytest.importorskip("rdkit.Chem") u = MDAnalysis.Universe.from_smiles("Nc1cc(C[C@H]([O-])C=O)c[nH]1") with pytest.raises(SelectionError, match="'fragrant' is an invalid value"): u.select_atoms("aromaticity fragrant") diff --git a/testsuite/MDAnalysisTests/core/test_universe.py b/testsuite/MDAnalysisTests/core/test_universe.py index ac04457ab31..10509b98139 100644 --- a/testsuite/MDAnalysisTests/core/test_universe.py +++ b/testsuite/MDAnalysisTests/core/test_universe.py @@ -30,6 +30,7 @@ import warnings import numpy as np +from numpy.lib import NumpyVersion from numpy.testing import ( assert_allclose, assert_almost_equal, @@ -224,7 +225,10 @@ def test_universe_empty_ROMol(self): class TestUniverseFromSmiles(object): def setup_class(self): - pytest.importorskip("rdkit.Chem") + if NumpyVersion(np.__version__) < "2.0.0": + pytest.importorskip("rdkit.Chem") + else: + pytest.importorskip("RDKit_does_not_support_NumPy_2") def test_default(self): smi = "CN1C=NC2=C1C(=O)N(C(=O)N2C)C" diff --git a/testsuite/MDAnalysisTests/data/1a2c_ins_code.psf b/testsuite/MDAnalysisTests/data/1a2c_ins_code.psf new file mode 100644 index 00000000000..b30e1e3bbab --- /dev/null +++ b/testsuite/MDAnalysisTests/data/1a2c_ins_code.psf @@ -0,0 +1,2086 @@ +PSF EXT CMAP XPLOR + + 3 !NTITLE +* GENERATED BY CHARMM-GUI (HTTP://WWW.CHARMM-GUI.ORG) V3.7 ON APR, 30. 2024. JOB +* READ PDB, MANIPULATE STRUCTURE IF NEEDED, AND GENERATE TOPOLOGY FILE +* DATE: 4/30/24 1:31:40 CREATED BY USER: apache + + 571 !NATOM + 1 PROA 1H THR CAY CT3 -0.270000 12.0110 0 + 2 PROA 1H THR HY1 HA3 0.900000E-01 1.00800 0 + 3 PROA 1H THR HY2 HA3 0.900000E-01 1.00800 0 + 4 PROA 1H THR HY3 HA3 0.900000E-01 1.00800 0 + 5 PROA 1H THR CY C 0.510000 12.0110 0 + 6 PROA 1H THR OY O -0.510000 15.9994 0 + 7 PROA 1H THR N NH1 -0.470000 14.0070 0 + 8 PROA 1H THR HN H 0.310000 1.00800 0 + 9 PROA 1H THR CA CT1 0.700000E-01 12.0110 0 + 10 PROA 1H THR HA HB1 0.900000E-01 1.00800 0 + 11 PROA 1H THR CB CT1 0.140000 12.0110 0 + 12 PROA 1H THR HB HA1 0.900000E-01 1.00800 0 + 13 PROA 1H THR OG1 OH1 -0.660000 15.9994 0 + 14 PROA 1H THR HG1 H 0.430000 1.00800 0 + 15 PROA 1H THR CG2 CT3 -0.270000 12.0110 0 + 16 PROA 1H THR HG21 HA3 0.900000E-01 1.00800 0 + 17 PROA 1H THR HG22 HA3 0.900000E-01 1.00800 0 + 18 PROA 1H THR HG23 HA3 0.900000E-01 1.00800 0 + 19 PROA 1H THR C C 0.510000 12.0110 0 + 20 PROA 1H THR O O -0.510000 15.9994 0 + 21 PROA 1G PHE N NH1 -0.470000 14.0070 0 + 22 PROA 1G PHE HN H 0.310000 1.00800 0 + 23 PROA 1G PHE CA CT1 0.700000E-01 12.0110 0 + 24 PROA 1G PHE HA HB1 0.900000E-01 1.00800 0 + 25 PROA 1G PHE CB CT2 -0.180000 12.0110 0 + 26 PROA 1G PHE HB1 HA2 0.900000E-01 1.00800 0 + 27 PROA 1G PHE HB2 HA2 0.900000E-01 1.00800 0 + 28 PROA 1G PHE CG CA 0.00000 12.0110 0 + 29 PROA 1G PHE CD1 CA -0.115000 12.0110 0 + 30 PROA 1G PHE HD1 HP 0.115000 1.00800 0 + 31 PROA 1G PHE CE1 CA -0.115000 12.0110 0 + 32 PROA 1G PHE HE1 HP 0.115000 1.00800 0 + 33 PROA 1G PHE CZ CA -0.115000 12.0110 0 + 34 PROA 1G PHE HZ HP 0.115000 1.00800 0 + 35 PROA 1G PHE CD2 CA -0.115000 12.0110 0 + 36 PROA 1G PHE HD2 HP 0.115000 1.00800 0 + 37 PROA 1G PHE CE2 CA -0.115000 12.0110 0 + 38 PROA 1G PHE HE2 HP 0.115000 1.00800 0 + 39 PROA 1G PHE C C 0.510000 12.0110 0 + 40 PROA 1G PHE O O -0.510000 15.9994 0 + 41 PROA 1F GLY N NH1 -0.470000 14.0070 0 + 42 PROA 1F GLY HN H 0.310000 1.00800 0 + 43 PROA 1F GLY CA CT2 -0.200000E-01 12.0110 0 + 44 PROA 1F GLY HA1 HB2 0.900000E-01 1.00800 0 + 45 PROA 1F GLY HA2 HB2 0.900000E-01 1.00800 0 + 46 PROA 1F GLY C C 0.510000 12.0110 0 + 47 PROA 1F GLY O O -0.510000 15.9994 0 + 48 PROA 1E SER N NH1 -0.470000 14.0070 0 + 49 PROA 1E SER HN H 0.310000 1.00800 0 + 50 PROA 1E SER CA CT1 0.700000E-01 12.0110 0 + 51 PROA 1E SER HA HB1 0.900000E-01 1.00800 0 + 52 PROA 1E SER CB CT2 0.500000E-01 12.0110 0 + 53 PROA 1E SER HB1 HA2 0.900000E-01 1.00800 0 + 54 PROA 1E SER HB2 HA2 0.900000E-01 1.00800 0 + 55 PROA 1E SER OG OH1 -0.660000 15.9994 0 + 56 PROA 1E SER HG1 H 0.430000 1.00800 0 + 57 PROA 1E SER C C 0.510000 12.0110 0 + 58 PROA 1E SER O O -0.510000 15.9994 0 + 59 PROA 1D GLY N NH1 -0.470000 14.0070 0 + 60 PROA 1D GLY HN H 0.310000 1.00800 0 + 61 PROA 1D GLY CA CT2 -0.200000E-01 12.0110 0 + 62 PROA 1D GLY HA1 HB2 0.900000E-01 1.00800 0 + 63 PROA 1D GLY HA2 HB2 0.900000E-01 1.00800 0 + 64 PROA 1D GLY C C 0.510000 12.0110 0 + 65 PROA 1D GLY O O -0.510000 15.9994 0 + 66 PROA 1C GLU N NH1 -0.470000 14.0070 0 + 67 PROA 1C GLU HN H 0.310000 1.00800 0 + 68 PROA 1C GLU CA CT1 0.700000E-01 12.0110 0 + 69 PROA 1C GLU HA HB1 0.900000E-01 1.00800 0 + 70 PROA 1C GLU CB CT2A -0.180000 12.0110 0 + 71 PROA 1C GLU HB1 HA2 0.900000E-01 1.00800 0 + 72 PROA 1C GLU HB2 HA2 0.900000E-01 1.00800 0 + 73 PROA 1C GLU CG CT2 -0.280000 12.0110 0 + 74 PROA 1C GLU HG1 HA2 0.900000E-01 1.00800 0 + 75 PROA 1C GLU HG2 HA2 0.900000E-01 1.00800 0 + 76 PROA 1C GLU CD CC 0.620000 12.0110 0 + 77 PROA 1C GLU OE1 OC -0.760000 15.9994 0 + 78 PROA 1C GLU OE2 OC -0.760000 15.9994 0 + 79 PROA 1C GLU C C 0.510000 12.0110 0 + 80 PROA 1C GLU O O -0.510000 15.9994 0 + 81 PROA 1B ALA N NH1 -0.470000 14.0070 0 + 82 PROA 1B ALA HN H 0.310000 1.00800 0 + 83 PROA 1B ALA CA CT1 0.700000E-01 12.0110 0 + 84 PROA 1B ALA HA HB1 0.900000E-01 1.00800 0 + 85 PROA 1B ALA CB CT3 -0.270000 12.0110 0 + 86 PROA 1B ALA HB1 HA3 0.900000E-01 1.00800 0 + 87 PROA 1B ALA HB2 HA3 0.900000E-01 1.00800 0 + 88 PROA 1B ALA HB3 HA3 0.900000E-01 1.00800 0 + 89 PROA 1B ALA C C 0.510000 12.0110 0 + 90 PROA 1B ALA O O -0.510000 15.9994 0 + 91 PROA 1A ASP N NH1 -0.470000 14.0070 0 + 92 PROA 1A ASP HN H 0.310000 1.00800 0 + 93 PROA 1A ASP CA CT1 0.700000E-01 12.0110 0 + 94 PROA 1A ASP HA HB1 0.900000E-01 1.00800 0 + 95 PROA 1A ASP CB CT2A -0.280000 12.0110 0 + 96 PROA 1A ASP HB1 HA2 0.900000E-01 1.00800 0 + 97 PROA 1A ASP HB2 HA2 0.900000E-01 1.00800 0 + 98 PROA 1A ASP CG CC 0.620000 12.0110 0 + 99 PROA 1A ASP OD1 OC -0.760000 15.9994 0 + 100 PROA 1A ASP OD2 OC -0.760000 15.9994 0 + 101 PROA 1A ASP C C 0.510000 12.0110 0 + 102 PROA 1A ASP O O -0.510000 15.9994 0 + 103 PROA 1 CYM N NH1 -0.470000 14.0070 0 + 104 PROA 1 CYM HN H 0.310000 1.00800 0 + 105 PROA 1 CYM CA CT1 0.700000E-01 12.0110 0 + 106 PROA 1 CYM HA HB1 0.900000E-01 1.00800 0 + 107 PROA 1 CYM CB CS -0.380000 12.0110 0 + 108 PROA 1 CYM HB1 HA2 0.900000E-01 1.00800 0 + 109 PROA 1 CYM HB2 HA2 0.900000E-01 1.00800 0 + 110 PROA 1 CYM SG SS -0.800000 32.0600 0 + 111 PROA 1 CYM C C 0.510000 12.0110 0 + 112 PROA 1 CYM O O -0.510000 15.9994 0 + 113 PROA 2 GLY N NH1 -0.470000 14.0070 0 + 114 PROA 2 GLY HN H 0.310000 1.00800 0 + 115 PROA 2 GLY CA CT2 -0.200000E-01 12.0110 0 + 116 PROA 2 GLY HA1 HB2 0.900000E-01 1.00800 0 + 117 PROA 2 GLY HA2 HB2 0.900000E-01 1.00800 0 + 118 PROA 2 GLY C C 0.510000 12.0110 0 + 119 PROA 2 GLY O O -0.510000 15.9994 0 + 120 PROA 3 LEU N NH1 -0.470000 14.0070 0 + 121 PROA 3 LEU HN H 0.310000 1.00800 0 + 122 PROA 3 LEU CA CT1 0.700000E-01 12.0110 0 + 123 PROA 3 LEU HA HB1 0.900000E-01 1.00800 0 + 124 PROA 3 LEU CB CT2 -0.180000 12.0110 0 + 125 PROA 3 LEU HB1 HA2 0.900000E-01 1.00800 0 + 126 PROA 3 LEU HB2 HA2 0.900000E-01 1.00800 0 + 127 PROA 3 LEU CG CT1 -0.900000E-01 12.0110 0 + 128 PROA 3 LEU HG HA1 0.900000E-01 1.00800 0 + 129 PROA 3 LEU CD1 CT3 -0.270000 12.0110 0 + 130 PROA 3 LEU HD11 HA3 0.900000E-01 1.00800 0 + 131 PROA 3 LEU HD12 HA3 0.900000E-01 1.00800 0 + 132 PROA 3 LEU HD13 HA3 0.900000E-01 1.00800 0 + 133 PROA 3 LEU CD2 CT3 -0.270000 12.0110 0 + 134 PROA 3 LEU HD21 HA3 0.900000E-01 1.00800 0 + 135 PROA 3 LEU HD22 HA3 0.900000E-01 1.00800 0 + 136 PROA 3 LEU HD23 HA3 0.900000E-01 1.00800 0 + 137 PROA 3 LEU C C 0.510000 12.0110 0 + 138 PROA 3 LEU O O -0.510000 15.9994 0 + 139 PROA 4 ARG N NH1 -0.470000 14.0070 0 + 140 PROA 4 ARG HN H 0.310000 1.00800 0 + 141 PROA 4 ARG CA CT1 0.700000E-01 12.0110 0 + 142 PROA 4 ARG HA HB1 0.900000E-01 1.00800 0 + 143 PROA 4 ARG CB CT2 -0.180000 12.0110 0 + 144 PROA 4 ARG HB1 HA2 0.900000E-01 1.00800 0 + 145 PROA 4 ARG HB2 HA2 0.900000E-01 1.00800 0 + 146 PROA 4 ARG CG CT2 -0.180000 12.0110 0 + 147 PROA 4 ARG HG1 HA2 0.900000E-01 1.00800 0 + 148 PROA 4 ARG HG2 HA2 0.900000E-01 1.00800 0 + 149 PROA 4 ARG CD CT2 0.200000 12.0110 0 + 150 PROA 4 ARG HD1 HA2 0.900000E-01 1.00800 0 + 151 PROA 4 ARG HD2 HA2 0.900000E-01 1.00800 0 + 152 PROA 4 ARG NE NC2 -0.700000 14.0070 0 + 153 PROA 4 ARG HE HC 0.440000 1.00800 0 + 154 PROA 4 ARG CZ C 0.640000 12.0110 0 + 155 PROA 4 ARG NH1 NC2 -0.800000 14.0070 0 + 156 PROA 4 ARG HH11 HC 0.460000 1.00800 0 + 157 PROA 4 ARG HH12 HC 0.460000 1.00800 0 + 158 PROA 4 ARG NH2 NC2 -0.800000 14.0070 0 + 159 PROA 4 ARG HH21 HC 0.460000 1.00800 0 + 160 PROA 4 ARG HH22 HC 0.460000 1.00800 0 + 161 PROA 4 ARG C C 0.510000 12.0110 0 + 162 PROA 4 ARG O O -0.510000 15.9994 0 + 163 PROA 5 PRO N N -0.290000 14.0070 0 + 164 PROA 5 PRO CD CP3 0.00000 12.0110 0 + 165 PROA 5 PRO HD1 HA2 0.900000E-01 1.00800 0 + 166 PROA 5 PRO HD2 HA2 0.900000E-01 1.00800 0 + 167 PROA 5 PRO CA CP1 0.200000E-01 12.0110 0 + 168 PROA 5 PRO HA HB1 0.900000E-01 1.00800 0 + 169 PROA 5 PRO CB CP2 -0.180000 12.0110 0 + 170 PROA 5 PRO HB1 HA2 0.900000E-01 1.00800 0 + 171 PROA 5 PRO HB2 HA2 0.900000E-01 1.00800 0 + 172 PROA 5 PRO CG CP2 -0.180000 12.0110 0 + 173 PROA 5 PRO HG1 HA2 0.900000E-01 1.00800 0 + 174 PROA 5 PRO HG2 HA2 0.900000E-01 1.00800 0 + 175 PROA 5 PRO C C 0.510000 12.0110 0 + 176 PROA 5 PRO O O -0.510000 15.9994 0 + 177 PROA 6 LEU N NH1 -0.470000 14.0070 0 + 178 PROA 6 LEU HN H 0.310000 1.00800 0 + 179 PROA 6 LEU CA CT1 0.700000E-01 12.0110 0 + 180 PROA 6 LEU HA HB1 0.900000E-01 1.00800 0 + 181 PROA 6 LEU CB CT2 -0.180000 12.0110 0 + 182 PROA 6 LEU HB1 HA2 0.900000E-01 1.00800 0 + 183 PROA 6 LEU HB2 HA2 0.900000E-01 1.00800 0 + 184 PROA 6 LEU CG CT1 -0.900000E-01 12.0110 0 + 185 PROA 6 LEU HG HA1 0.900000E-01 1.00800 0 + 186 PROA 6 LEU CD1 CT3 -0.270000 12.0110 0 + 187 PROA 6 LEU HD11 HA3 0.900000E-01 1.00800 0 + 188 PROA 6 LEU HD12 HA3 0.900000E-01 1.00800 0 + 189 PROA 6 LEU HD13 HA3 0.900000E-01 1.00800 0 + 190 PROA 6 LEU CD2 CT3 -0.270000 12.0110 0 + 191 PROA 6 LEU HD21 HA3 0.900000E-01 1.00800 0 + 192 PROA 6 LEU HD22 HA3 0.900000E-01 1.00800 0 + 193 PROA 6 LEU HD23 HA3 0.900000E-01 1.00800 0 + 194 PROA 6 LEU C C 0.510000 12.0110 0 + 195 PROA 6 LEU O O -0.510000 15.9994 0 + 196 PROA 7 PHE N NH1 -0.470000 14.0070 0 + 197 PROA 7 PHE HN H 0.310000 1.00800 0 + 198 PROA 7 PHE CA CT1 0.700000E-01 12.0110 0 + 199 PROA 7 PHE HA HB1 0.900000E-01 1.00800 0 + 200 PROA 7 PHE CB CT2 -0.180000 12.0110 0 + 201 PROA 7 PHE HB1 HA2 0.900000E-01 1.00800 0 + 202 PROA 7 PHE HB2 HA2 0.900000E-01 1.00800 0 + 203 PROA 7 PHE CG CA 0.00000 12.0110 0 + 204 PROA 7 PHE CD1 CA -0.115000 12.0110 0 + 205 PROA 7 PHE HD1 HP 0.115000 1.00800 0 + 206 PROA 7 PHE CE1 CA -0.115000 12.0110 0 + 207 PROA 7 PHE HE1 HP 0.115000 1.00800 0 + 208 PROA 7 PHE CZ CA -0.115000 12.0110 0 + 209 PROA 7 PHE HZ HP 0.115000 1.00800 0 + 210 PROA 7 PHE CD2 CA -0.115000 12.0110 0 + 211 PROA 7 PHE HD2 HP 0.115000 1.00800 0 + 212 PROA 7 PHE CE2 CA -0.115000 12.0110 0 + 213 PROA 7 PHE HE2 HP 0.115000 1.00800 0 + 214 PROA 7 PHE C C 0.510000 12.0110 0 + 215 PROA 7 PHE O O -0.510000 15.9994 0 + 216 PROA 8 GLU N NH1 -0.470000 14.0070 0 + 217 PROA 8 GLU HN H 0.310000 1.00800 0 + 218 PROA 8 GLU CA CT1 0.700000E-01 12.0110 0 + 219 PROA 8 GLU HA HB1 0.900000E-01 1.00800 0 + 220 PROA 8 GLU CB CT2A -0.180000 12.0110 0 + 221 PROA 8 GLU HB1 HA2 0.900000E-01 1.00800 0 + 222 PROA 8 GLU HB2 HA2 0.900000E-01 1.00800 0 + 223 PROA 8 GLU CG CT2 -0.280000 12.0110 0 + 224 PROA 8 GLU HG1 HA2 0.900000E-01 1.00800 0 + 225 PROA 8 GLU HG2 HA2 0.900000E-01 1.00800 0 + 226 PROA 8 GLU CD CC 0.620000 12.0110 0 + 227 PROA 8 GLU OE1 OC -0.760000 15.9994 0 + 228 PROA 8 GLU OE2 OC -0.760000 15.9994 0 + 229 PROA 8 GLU C C 0.510000 12.0110 0 + 230 PROA 8 GLU O O -0.510000 15.9994 0 + 231 PROA 9 LYS N NH1 -0.470000 14.0070 0 + 232 PROA 9 LYS HN H 0.310000 1.00800 0 + 233 PROA 9 LYS CA CT1 0.700000E-01 12.0110 0 + 234 PROA 9 LYS HA HB1 0.900000E-01 1.00800 0 + 235 PROA 9 LYS CB CT2 -0.180000 12.0110 0 + 236 PROA 9 LYS HB1 HA2 0.900000E-01 1.00800 0 + 237 PROA 9 LYS HB2 HA2 0.900000E-01 1.00800 0 + 238 PROA 9 LYS CG CT2 -0.180000 12.0110 0 + 239 PROA 9 LYS HG1 HA2 0.900000E-01 1.00800 0 + 240 PROA 9 LYS HG2 HA2 0.900000E-01 1.00800 0 + 241 PROA 9 LYS CD CT2 -0.180000 12.0110 0 + 242 PROA 9 LYS HD1 HA2 0.900000E-01 1.00800 0 + 243 PROA 9 LYS HD2 HA2 0.900000E-01 1.00800 0 + 244 PROA 9 LYS CE CT2 0.210000 12.0110 0 + 245 PROA 9 LYS HE1 HA2 0.500000E-01 1.00800 0 + 246 PROA 9 LYS HE2 HA2 0.500000E-01 1.00800 0 + 247 PROA 9 LYS NZ NH3 -0.300000 14.0070 0 + 248 PROA 9 LYS HZ1 HC 0.330000 1.00800 0 + 249 PROA 9 LYS HZ2 HC 0.330000 1.00800 0 + 250 PROA 9 LYS HZ3 HC 0.330000 1.00800 0 + 251 PROA 9 LYS C C 0.510000 12.0110 0 + 252 PROA 9 LYS O O -0.510000 15.9994 0 + 253 PROA 10 LYS N NH1 -0.470000 14.0070 0 + 254 PROA 10 LYS HN H 0.310000 1.00800 0 + 255 PROA 10 LYS CA CT1 0.700000E-01 12.0110 0 + 256 PROA 10 LYS HA HB1 0.900000E-01 1.00800 0 + 257 PROA 10 LYS CB CT2 -0.180000 12.0110 0 + 258 PROA 10 LYS HB1 HA2 0.900000E-01 1.00800 0 + 259 PROA 10 LYS HB2 HA2 0.900000E-01 1.00800 0 + 260 PROA 10 LYS CG CT2 -0.180000 12.0110 0 + 261 PROA 10 LYS HG1 HA2 0.900000E-01 1.00800 0 + 262 PROA 10 LYS HG2 HA2 0.900000E-01 1.00800 0 + 263 PROA 10 LYS CD CT2 -0.180000 12.0110 0 + 264 PROA 10 LYS HD1 HA2 0.900000E-01 1.00800 0 + 265 PROA 10 LYS HD2 HA2 0.900000E-01 1.00800 0 + 266 PROA 10 LYS CE CT2 0.210000 12.0110 0 + 267 PROA 10 LYS HE1 HA2 0.500000E-01 1.00800 0 + 268 PROA 10 LYS HE2 HA2 0.500000E-01 1.00800 0 + 269 PROA 10 LYS NZ NH3 -0.300000 14.0070 0 + 270 PROA 10 LYS HZ1 HC 0.330000 1.00800 0 + 271 PROA 10 LYS HZ2 HC 0.330000 1.00800 0 + 272 PROA 10 LYS HZ3 HC 0.330000 1.00800 0 + 273 PROA 10 LYS C C 0.510000 12.0110 0 + 274 PROA 10 LYS O O -0.510000 15.9994 0 + 275 PROA 11 SER N NH1 -0.470000 14.0070 0 + 276 PROA 11 SER HN H 0.310000 1.00800 0 + 277 PROA 11 SER CA CT1 0.700000E-01 12.0110 0 + 278 PROA 11 SER HA HB1 0.900000E-01 1.00800 0 + 279 PROA 11 SER CB CT2 0.500000E-01 12.0110 0 + 280 PROA 11 SER HB1 HA2 0.900000E-01 1.00800 0 + 281 PROA 11 SER HB2 HA2 0.900000E-01 1.00800 0 + 282 PROA 11 SER OG OH1 -0.660000 15.9994 0 + 283 PROA 11 SER HG1 H 0.430000 1.00800 0 + 284 PROA 11 SER C C 0.510000 12.0110 0 + 285 PROA 11 SER O O -0.510000 15.9994 0 + 286 PROA 12 LEU N NH1 -0.470000 14.0070 0 + 287 PROA 12 LEU HN H 0.310000 1.00800 0 + 288 PROA 12 LEU CA CT1 0.700000E-01 12.0110 0 + 289 PROA 12 LEU HA HB1 0.900000E-01 1.00800 0 + 290 PROA 12 LEU CB CT2 -0.180000 12.0110 0 + 291 PROA 12 LEU HB1 HA2 0.900000E-01 1.00800 0 + 292 PROA 12 LEU HB2 HA2 0.900000E-01 1.00800 0 + 293 PROA 12 LEU CG CT1 -0.900000E-01 12.0110 0 + 294 PROA 12 LEU HG HA1 0.900000E-01 1.00800 0 + 295 PROA 12 LEU CD1 CT3 -0.270000 12.0110 0 + 296 PROA 12 LEU HD11 HA3 0.900000E-01 1.00800 0 + 297 PROA 12 LEU HD12 HA3 0.900000E-01 1.00800 0 + 298 PROA 12 LEU HD13 HA3 0.900000E-01 1.00800 0 + 299 PROA 12 LEU CD2 CT3 -0.270000 12.0110 0 + 300 PROA 12 LEU HD21 HA3 0.900000E-01 1.00800 0 + 301 PROA 12 LEU HD22 HA3 0.900000E-01 1.00800 0 + 302 PROA 12 LEU HD23 HA3 0.900000E-01 1.00800 0 + 303 PROA 12 LEU C C 0.510000 12.0110 0 + 304 PROA 12 LEU O O -0.510000 15.9994 0 + 305 PROA 13 GLU N NH1 -0.470000 14.0070 0 + 306 PROA 13 GLU HN H 0.310000 1.00800 0 + 307 PROA 13 GLU CA CT1 0.700000E-01 12.0110 0 + 308 PROA 13 GLU HA HB1 0.900000E-01 1.00800 0 + 309 PROA 13 GLU CB CT2A -0.180000 12.0110 0 + 310 PROA 13 GLU HB1 HA2 0.900000E-01 1.00800 0 + 311 PROA 13 GLU HB2 HA2 0.900000E-01 1.00800 0 + 312 PROA 13 GLU CG CT2 -0.280000 12.0110 0 + 313 PROA 13 GLU HG1 HA2 0.900000E-01 1.00800 0 + 314 PROA 13 GLU HG2 HA2 0.900000E-01 1.00800 0 + 315 PROA 13 GLU CD CC 0.620000 12.0110 0 + 316 PROA 13 GLU OE1 OC -0.760000 15.9994 0 + 317 PROA 13 GLU OE2 OC -0.760000 15.9994 0 + 318 PROA 13 GLU C C 0.510000 12.0110 0 + 319 PROA 13 GLU O O -0.510000 15.9994 0 + 320 PROA 14 ASP N NH1 -0.470000 14.0070 0 + 321 PROA 14 ASP HN H 0.310000 1.00800 0 + 322 PROA 14 ASP CA CT1 0.700000E-01 12.0110 0 + 323 PROA 14 ASP HA HB1 0.900000E-01 1.00800 0 + 324 PROA 14 ASP CB CT2 -0.210000 12.0110 0 + 325 PROA 14 ASP HB1 HA2 0.900000E-01 1.00800 0 + 326 PROA 14 ASP HB2 HA2 0.900000E-01 1.00800 0 + 327 PROA 14 ASP CG CD 0.750000 12.0110 0 + 328 PROA 14 ASP OD1 OB -0.550000 15.9994 0 + 329 PROA 14 ASP OD2 OH1 -0.610000 15.9994 0 + 330 PROA 14 ASP HD2 H 0.440000 1.00800 0 + 331 PROA 14 ASP C C 0.510000 12.0110 0 + 332 PROA 14 ASP O O -0.510000 15.9994 0 + 333 PROA 14A LYS N NH1 -0.470000 14.0070 0 + 334 PROA 14A LYS HN H 0.310000 1.00800 0 + 335 PROA 14A LYS CA CT1 0.700000E-01 12.0110 0 + 336 PROA 14A LYS HA HB1 0.900000E-01 1.00800 0 + 337 PROA 14A LYS CB CT2 -0.180000 12.0110 0 + 338 PROA 14A LYS HB1 HA2 0.900000E-01 1.00800 0 + 339 PROA 14A LYS HB2 HA2 0.900000E-01 1.00800 0 + 340 PROA 14A LYS CG CT2 -0.180000 12.0110 0 + 341 PROA 14A LYS HG1 HA2 0.900000E-01 1.00800 0 + 342 PROA 14A LYS HG2 HA2 0.900000E-01 1.00800 0 + 343 PROA 14A LYS CD CT2 -0.180000 12.0110 0 + 344 PROA 14A LYS HD1 HA2 0.900000E-01 1.00800 0 + 345 PROA 14A LYS HD2 HA2 0.900000E-01 1.00800 0 + 346 PROA 14A LYS CE CT2 0.210000 12.0110 0 + 347 PROA 14A LYS HE1 HA2 0.500000E-01 1.00800 0 + 348 PROA 14A LYS HE2 HA2 0.500000E-01 1.00800 0 + 349 PROA 14A LYS NZ NH3 -0.300000 14.0070 0 + 350 PROA 14A LYS HZ1 HC 0.330000 1.00800 0 + 351 PROA 14A LYS HZ2 HC 0.330000 1.00800 0 + 352 PROA 14A LYS HZ3 HC 0.330000 1.00800 0 + 353 PROA 14A LYS C C 0.510000 12.0110 0 + 354 PROA 14A LYS O O -0.510000 15.9994 0 + 355 PROA 14B THR N NH1 -0.470000 14.0070 0 + 356 PROA 14B THR HN H 0.310000 1.00800 0 + 357 PROA 14B THR CA CT1 0.700000E-01 12.0110 0 + 358 PROA 14B THR HA HB1 0.900000E-01 1.00800 0 + 359 PROA 14B THR CB CT1 0.140000 12.0110 0 + 360 PROA 14B THR HB HA1 0.900000E-01 1.00800 0 + 361 PROA 14B THR OG1 OH1 -0.660000 15.9994 0 + 362 PROA 14B THR HG1 H 0.430000 1.00800 0 + 363 PROA 14B THR CG2 CT3 -0.270000 12.0110 0 + 364 PROA 14B THR HG21 HA3 0.900000E-01 1.00800 0 + 365 PROA 14B THR HG22 HA3 0.900000E-01 1.00800 0 + 366 PROA 14B THR HG23 HA3 0.900000E-01 1.00800 0 + 367 PROA 14B THR C C 0.510000 12.0110 0 + 368 PROA 14B THR O O -0.510000 15.9994 0 + 369 PROA 14C GLU N NH1 -0.470000 14.0070 0 + 370 PROA 14C GLU HN H 0.310000 1.00800 0 + 371 PROA 14C GLU CA CT1 0.700000E-01 12.0110 0 + 372 PROA 14C GLU HA HB1 0.900000E-01 1.00800 0 + 373 PROA 14C GLU CB CT2A -0.180000 12.0110 0 + 374 PROA 14C GLU HB1 HA2 0.900000E-01 1.00800 0 + 375 PROA 14C GLU HB2 HA2 0.900000E-01 1.00800 0 + 376 PROA 14C GLU CG CT2 -0.280000 12.0110 0 + 377 PROA 14C GLU HG1 HA2 0.900000E-01 1.00800 0 + 378 PROA 14C GLU HG2 HA2 0.900000E-01 1.00800 0 + 379 PROA 14C GLU CD CC 0.620000 12.0110 0 + 380 PROA 14C GLU OE1 OC -0.760000 15.9994 0 + 381 PROA 14C GLU OE2 OC -0.760000 15.9994 0 + 382 PROA 14C GLU C C 0.510000 12.0110 0 + 383 PROA 14C GLU O O -0.510000 15.9994 0 + 384 PROA 14D ARG N NH1 -0.470000 14.0070 0 + 385 PROA 14D ARG HN H 0.310000 1.00800 0 + 386 PROA 14D ARG CA CT1 0.700000E-01 12.0110 0 + 387 PROA 14D ARG HA HB1 0.900000E-01 1.00800 0 + 388 PROA 14D ARG CB CT2 -0.180000 12.0110 0 + 389 PROA 14D ARG HB1 HA2 0.900000E-01 1.00800 0 + 390 PROA 14D ARG HB2 HA2 0.900000E-01 1.00800 0 + 391 PROA 14D ARG CG CT2 -0.180000 12.0110 0 + 392 PROA 14D ARG HG1 HA2 0.900000E-01 1.00800 0 + 393 PROA 14D ARG HG2 HA2 0.900000E-01 1.00800 0 + 394 PROA 14D ARG CD CT2 0.200000 12.0110 0 + 395 PROA 14D ARG HD1 HA2 0.900000E-01 1.00800 0 + 396 PROA 14D ARG HD2 HA2 0.900000E-01 1.00800 0 + 397 PROA 14D ARG NE NC2 -0.700000 14.0070 0 + 398 PROA 14D ARG HE HC 0.440000 1.00800 0 + 399 PROA 14D ARG CZ C 0.640000 12.0110 0 + 400 PROA 14D ARG NH1 NC2 -0.800000 14.0070 0 + 401 PROA 14D ARG HH11 HC 0.460000 1.00800 0 + 402 PROA 14D ARG HH12 HC 0.460000 1.00800 0 + 403 PROA 14D ARG NH2 NC2 -0.800000 14.0070 0 + 404 PROA 14D ARG HH21 HC 0.460000 1.00800 0 + 405 PROA 14D ARG HH22 HC 0.460000 1.00800 0 + 406 PROA 14D ARG C C 0.510000 12.0110 0 + 407 PROA 14D ARG O O -0.510000 15.9994 0 + 408 PROA 14E GLU N NH1 -0.470000 14.0070 0 + 409 PROA 14E GLU HN H 0.310000 1.00800 0 + 410 PROA 14E GLU CA CT1 0.700000E-01 12.0110 0 + 411 PROA 14E GLU HA HB1 0.900000E-01 1.00800 0 + 412 PROA 14E GLU CB CT2A -0.180000 12.0110 0 + 413 PROA 14E GLU HB1 HA2 0.900000E-01 1.00800 0 + 414 PROA 14E GLU HB2 HA2 0.900000E-01 1.00800 0 + 415 PROA 14E GLU CG CT2 -0.280000 12.0110 0 + 416 PROA 14E GLU HG1 HA2 0.900000E-01 1.00800 0 + 417 PROA 14E GLU HG2 HA2 0.900000E-01 1.00800 0 + 418 PROA 14E GLU CD CC 0.620000 12.0110 0 + 419 PROA 14E GLU OE1 OC -0.760000 15.9994 0 + 420 PROA 14E GLU OE2 OC -0.760000 15.9994 0 + 421 PROA 14E GLU C C 0.510000 12.0110 0 + 422 PROA 14E GLU O O -0.510000 15.9994 0 + 423 PROA 14F LEU N NH1 -0.470000 14.0070 0 + 424 PROA 14F LEU HN H 0.310000 1.00800 0 + 425 PROA 14F LEU CA CT1 0.700000E-01 12.0110 0 + 426 PROA 14F LEU HA HB1 0.900000E-01 1.00800 0 + 427 PROA 14F LEU CB CT2 -0.180000 12.0110 0 + 428 PROA 14F LEU HB1 HA2 0.900000E-01 1.00800 0 + 429 PROA 14F LEU HB2 HA2 0.900000E-01 1.00800 0 + 430 PROA 14F LEU CG CT1 -0.900000E-01 12.0110 0 + 431 PROA 14F LEU HG HA1 0.900000E-01 1.00800 0 + 432 PROA 14F LEU CD1 CT3 -0.270000 12.0110 0 + 433 PROA 14F LEU HD11 HA3 0.900000E-01 1.00800 0 + 434 PROA 14F LEU HD12 HA3 0.900000E-01 1.00800 0 + 435 PROA 14F LEU HD13 HA3 0.900000E-01 1.00800 0 + 436 PROA 14F LEU CD2 CT3 -0.270000 12.0110 0 + 437 PROA 14F LEU HD21 HA3 0.900000E-01 1.00800 0 + 438 PROA 14F LEU HD22 HA3 0.900000E-01 1.00800 0 + 439 PROA 14F LEU HD23 HA3 0.900000E-01 1.00800 0 + 440 PROA 14F LEU C C 0.510000 12.0110 0 + 441 PROA 14F LEU O O -0.510000 15.9994 0 + 442 PROA 14G LEU N NH1 -0.470000 14.0070 0 + 443 PROA 14G LEU HN H 0.310000 1.00800 0 + 444 PROA 14G LEU CA CT1 0.700000E-01 12.0110 0 + 445 PROA 14G LEU HA HB1 0.900000E-01 1.00800 0 + 446 PROA 14G LEU CB CT2 -0.180000 12.0110 0 + 447 PROA 14G LEU HB1 HA2 0.900000E-01 1.00800 0 + 448 PROA 14G LEU HB2 HA2 0.900000E-01 1.00800 0 + 449 PROA 14G LEU CG CT1 -0.900000E-01 12.0110 0 + 450 PROA 14G LEU HG HA1 0.900000E-01 1.00800 0 + 451 PROA 14G LEU CD1 CT3 -0.270000 12.0110 0 + 452 PROA 14G LEU HD11 HA3 0.900000E-01 1.00800 0 + 453 PROA 14G LEU HD12 HA3 0.900000E-01 1.00800 0 + 454 PROA 14G LEU HD13 HA3 0.900000E-01 1.00800 0 + 455 PROA 14G LEU CD2 CT3 -0.270000 12.0110 0 + 456 PROA 14G LEU HD21 HA3 0.900000E-01 1.00800 0 + 457 PROA 14G LEU HD22 HA3 0.900000E-01 1.00800 0 + 458 PROA 14G LEU HD23 HA3 0.900000E-01 1.00800 0 + 459 PROA 14G LEU C C 0.510000 12.0110 0 + 460 PROA 14G LEU O O -0.510000 15.9994 0 + 461 PROA 14H GLU N NH1 -0.470000 14.0070 0 + 462 PROA 14H GLU HN H 0.310000 1.00800 0 + 463 PROA 14H GLU CA CT1 0.700000E-01 12.0110 0 + 464 PROA 14H GLU HA HB1 0.900000E-01 1.00800 0 + 465 PROA 14H GLU CB CT2A -0.180000 12.0110 0 + 466 PROA 14H GLU HB1 HA2 0.900000E-01 1.00800 0 + 467 PROA 14H GLU HB2 HA2 0.900000E-01 1.00800 0 + 468 PROA 14H GLU CG CT2 -0.280000 12.0110 0 + 469 PROA 14H GLU HG1 HA2 0.900000E-01 1.00800 0 + 470 PROA 14H GLU HG2 HA2 0.900000E-01 1.00800 0 + 471 PROA 14H GLU CD CC 0.620000 12.0110 0 + 472 PROA 14H GLU OE1 OC -0.760000 15.9994 0 + 473 PROA 14H GLU OE2 OC -0.760000 15.9994 0 + 474 PROA 14H GLU C C 0.510000 12.0110 0 + 475 PROA 14H GLU O O -0.510000 15.9994 0 + 476 PROA 14I SER N NH1 -0.470000 14.0070 0 + 477 PROA 14I SER HN H 0.310000 1.00800 0 + 478 PROA 14I SER CA CT1 0.700000E-01 12.0110 0 + 479 PROA 14I SER HA HB1 0.900000E-01 1.00800 0 + 480 PROA 14I SER CB CT2 0.500000E-01 12.0110 0 + 481 PROA 14I SER HB1 HA2 0.900000E-01 1.00800 0 + 482 PROA 14I SER HB2 HA2 0.900000E-01 1.00800 0 + 483 PROA 14I SER OG OH1 -0.660000 15.9994 0 + 484 PROA 14I SER HG1 H 0.430000 1.00800 0 + 485 PROA 14I SER C C 0.510000 12.0110 0 + 486 PROA 14I SER O O -0.510000 15.9994 0 + 487 PROA 14J TYR N NH1 -0.470000 14.0070 0 + 488 PROA 14J TYR HN H 0.310000 1.00800 0 + 489 PROA 14J TYR CA CT1 0.700000E-01 12.0110 0 + 490 PROA 14J TYR HA HB1 0.900000E-01 1.00800 0 + 491 PROA 14J TYR CB CT2 -0.180000 12.0110 0 + 492 PROA 14J TYR HB1 HA2 0.900000E-01 1.00800 0 + 493 PROA 14J TYR HB2 HA2 0.900000E-01 1.00800 0 + 494 PROA 14J TYR CG CA 0.00000 12.0110 0 + 495 PROA 14J TYR CD1 CA -0.115000 12.0110 0 + 496 PROA 14J TYR HD1 HP 0.115000 1.00800 0 + 497 PROA 14J TYR CE1 CA -0.115000 12.0110 0 + 498 PROA 14J TYR HE1 HP 0.115000 1.00800 0 + 499 PROA 14J TYR CZ CA 0.110000 12.0110 0 + 500 PROA 14J TYR OH OH1 -0.540000 15.9994 0 + 501 PROA 14J TYR HH H 0.430000 1.00800 0 + 502 PROA 14J TYR CD2 CA -0.115000 12.0110 0 + 503 PROA 14J TYR HD2 HP 0.115000 1.00800 0 + 504 PROA 14J TYR CE2 CA -0.115000 12.0110 0 + 505 PROA 14J TYR HE2 HP 0.115000 1.00800 0 + 506 PROA 14J TYR C C 0.510000 12.0110 0 + 507 PROA 14J TYR O O -0.510000 15.9994 0 + 508 PROA 14K ILE N NH1 -0.470000 14.0070 0 + 509 PROA 14K ILE HN H 0.310000 1.00800 0 + 510 PROA 14K ILE CA CT1 0.700000E-01 12.0110 0 + 511 PROA 14K ILE HA HB1 0.900000E-01 1.00800 0 + 512 PROA 14K ILE CB CT1 -0.900000E-01 12.0110 0 + 513 PROA 14K ILE HB HA1 0.900000E-01 1.00800 0 + 514 PROA 14K ILE CG2 CT3 -0.270000 12.0110 0 + 515 PROA 14K ILE HG21 HA3 0.900000E-01 1.00800 0 + 516 PROA 14K ILE HG22 HA3 0.900000E-01 1.00800 0 + 517 PROA 14K ILE HG23 HA3 0.900000E-01 1.00800 0 + 518 PROA 14K ILE CG1 CT2 -0.180000 12.0110 0 + 519 PROA 14K ILE HG11 HA2 0.900000E-01 1.00800 0 + 520 PROA 14K ILE HG12 HA2 0.900000E-01 1.00800 0 + 521 PROA 14K ILE CD CT3 -0.270000 12.0110 0 + 522 PROA 14K ILE HD1 HA3 0.900000E-01 1.00800 0 + 523 PROA 14K ILE HD2 HA3 0.900000E-01 1.00800 0 + 524 PROA 14K ILE HD3 HA3 0.900000E-01 1.00800 0 + 525 PROA 14K ILE C C 0.510000 12.0110 0 + 526 PROA 14K ILE O O -0.510000 15.9994 0 + 527 PROA 14L ASP N NH1 -0.470000 14.0070 0 + 528 PROA 14L ASP HN H 0.310000 1.00800 0 + 529 PROA 14L ASP CA CT1 0.700000E-01 12.0110 0 + 530 PROA 14L ASP HA HB1 0.900000E-01 1.00800 0 + 531 PROA 14L ASP CB CT2A -0.280000 12.0110 0 + 532 PROA 14L ASP HB1 HA2 0.900000E-01 1.00800 0 + 533 PROA 14L ASP HB2 HA2 0.900000E-01 1.00800 0 + 534 PROA 14L ASP CG CC 0.620000 12.0110 0 + 535 PROA 14L ASP OD1 OC -0.760000 15.9994 0 + 536 PROA 14L ASP OD2 OC -0.760000 15.9994 0 + 537 PROA 14L ASP C C 0.510000 12.0110 0 + 538 PROA 14L ASP O O -0.510000 15.9994 0 + 539 PROA 14M GLY N NH1 -0.470000 14.0070 0 + 540 PROA 14M GLY HN H 0.310000 1.00800 0 + 541 PROA 14M GLY CA CT2 -0.200000E-01 12.0110 0 + 542 PROA 14M GLY HA1 HB2 0.900000E-01 1.00800 0 + 543 PROA 14M GLY HA2 HB2 0.900000E-01 1.00800 0 + 544 PROA 14M GLY C C 0.510000 12.0110 0 + 545 PROA 14M GLY O O -0.510000 15.9994 0 + 546 PROA 15 ARG N NH1 -0.470000 14.0070 0 + 547 PROA 15 ARG HN H 0.310000 1.00800 0 + 548 PROA 15 ARG CA CT1 0.700000E-01 12.0110 0 + 549 PROA 15 ARG HA HB1 0.900000E-01 1.00800 0 + 550 PROA 15 ARG CB CT2 -0.180000 12.0110 0 + 551 PROA 15 ARG HB1 HA2 0.900000E-01 1.00800 0 + 552 PROA 15 ARG HB2 HA2 0.900000E-01 1.00800 0 + 553 PROA 15 ARG CG CT2 -0.180000 12.0110 0 + 554 PROA 15 ARG HG1 HA2 0.900000E-01 1.00800 0 + 555 PROA 15 ARG HG2 HA2 0.900000E-01 1.00800 0 + 556 PROA 15 ARG CD CT2 0.200000 12.0110 0 + 557 PROA 15 ARG HD1 HA2 0.900000E-01 1.00800 0 + 558 PROA 15 ARG HD2 HA2 0.900000E-01 1.00800 0 + 559 PROA 15 ARG NE NC2 -0.700000 14.0070 0 + 560 PROA 15 ARG HE HC 0.440000 1.00800 0 + 561 PROA 15 ARG CZ C 0.640000 12.0110 0 + 562 PROA 15 ARG NH1 NC2 -0.800000 14.0070 0 + 563 PROA 15 ARG HH11 HC 0.460000 1.00800 0 + 564 PROA 15 ARG HH12 HC 0.460000 1.00800 0 + 565 PROA 15 ARG NH2 NC2 -0.800000 14.0070 0 + 566 PROA 15 ARG HH21 HC 0.460000 1.00800 0 + 567 PROA 15 ARG HH22 HC 0.460000 1.00800 0 + 568 PROA 15 ARG C CD 0.720000 12.0110 0 + 569 PROA 15 ARG OT1 OB -0.550000 15.9994 0 + 570 PROA 15 ARG OT2 OH1 -0.610000 15.9994 0 + 571 PROA 15 ARG HT2B H 0.440000 1.00800 0 + + 574 !NBOND: bonds + 5 1 5 7 1 2 1 3 + 1 4 6 5 11 9 13 11 + 15 11 7 8 7 9 19 9 + 19 21 9 10 11 12 13 14 + 15 16 15 17 15 18 20 19 + 25 23 28 25 35 28 31 29 + 33 37 21 22 21 23 39 23 + 39 41 23 24 25 26 25 27 + 29 30 35 36 31 32 40 39 + 29 28 33 31 37 35 37 38 + 33 34 41 42 41 43 46 43 + 46 48 43 44 43 45 47 46 + 52 50 55 52 48 49 48 50 + 57 50 57 59 50 51 52 53 + 52 54 55 56 58 57 59 60 + 59 61 64 61 64 66 61 62 + 61 63 65 64 70 68 73 70 + 76 73 78 76 66 67 66 68 + 79 68 79 81 68 69 70 71 + 70 72 73 74 73 75 80 79 + 76 77 85 83 81 82 81 83 + 89 83 89 91 83 84 85 86 + 85 87 85 88 90 89 95 93 + 98 95 100 98 91 92 91 93 + 101 93 101 103 93 94 95 96 + 95 97 102 101 98 99 107 105 + 110 107 103 104 103 105 112 111 + 111 105 111 113 105 106 107 108 + 107 109 113 114 113 115 118 115 + 118 120 115 116 115 117 119 118 + 124 122 127 124 129 127 133 127 + 120 121 120 122 137 122 137 139 + 122 123 124 125 124 126 127 128 + 129 130 129 131 129 132 133 134 + 133 135 133 136 138 137 143 141 + 146 143 149 146 152 149 154 152 + 158 154 139 140 139 141 161 141 + 161 163 141 142 143 144 143 145 + 146 147 146 148 149 150 149 151 + 152 153 155 156 155 157 158 159 + 158 160 162 161 154 155 175 167 + 175 177 163 167 167 169 169 172 + 172 164 163 164 168 167 173 172 + 174 172 165 164 166 164 170 169 + 171 169 176 175 181 179 184 181 + 186 184 190 184 177 178 177 179 + 194 179 194 196 179 180 181 182 + 181 183 184 185 186 187 186 188 + 186 189 190 191 190 192 190 193 + 195 194 200 198 203 200 210 203 + 206 204 208 212 196 197 196 198 + 214 198 214 216 198 199 200 201 + 200 202 204 205 210 211 206 207 + 215 214 204 203 208 206 212 210 + 212 213 208 209 220 218 223 220 + 226 223 228 226 216 217 216 218 + 229 218 229 231 218 219 220 221 + 220 222 223 224 223 225 230 229 + 226 227 235 233 238 235 241 238 + 244 241 247 244 231 232 231 233 + 251 233 251 253 233 234 235 236 + 235 237 238 239 238 240 241 242 + 241 243 244 245 244 246 252 251 + 247 248 247 249 247 250 257 255 + 260 257 263 260 266 263 269 266 + 253 254 253 255 273 255 273 275 + 255 256 257 258 257 259 260 261 + 260 262 263 264 263 265 266 267 + 266 268 274 273 269 270 269 271 + 269 272 279 277 282 279 275 276 + 275 277 284 277 284 286 277 278 + 279 280 279 281 282 283 285 284 + 290 288 293 290 295 293 299 293 + 286 287 286 288 303 288 303 305 + 288 289 290 291 290 292 293 294 + 295 296 295 297 295 298 299 300 + 299 301 299 302 304 303 309 307 + 312 309 315 312 317 315 305 306 + 305 307 318 307 318 320 307 308 + 309 310 309 311 312 313 312 314 + 319 318 315 316 324 322 327 324 + 329 327 320 321 320 322 331 322 + 331 333 322 323 324 325 324 326 + 332 331 327 328 337 335 340 337 + 343 340 346 343 349 346 333 334 + 333 335 353 335 353 355 335 336 + 337 338 337 339 340 341 340 342 + 343 344 343 345 346 347 346 348 + 354 353 349 350 349 351 349 352 + 359 357 361 359 363 359 355 356 + 355 357 367 357 367 369 357 358 + 359 360 361 362 363 364 363 365 + 363 366 368 367 373 371 376 373 + 379 376 381 379 369 370 369 371 + 382 371 382 384 371 372 373 374 + 373 375 376 377 376 378 383 382 + 379 380 388 386 391 388 394 391 + 397 394 399 397 403 399 384 385 + 384 386 406 386 406 408 386 387 + 388 389 388 390 391 392 391 393 + 394 395 394 396 397 398 400 401 + 400 402 403 404 403 405 407 406 + 399 400 412 410 415 412 418 415 + 420 418 408 409 408 410 421 410 + 421 423 410 411 412 413 412 414 + 415 416 415 417 422 421 418 419 + 427 425 430 427 432 430 436 430 + 423 424 423 425 440 425 440 442 + 425 426 427 428 427 429 430 431 + 432 433 432 434 432 435 436 437 + 436 438 436 439 441 440 446 444 + 449 446 451 449 455 449 442 443 + 442 444 459 444 459 461 444 445 + 446 447 446 448 449 450 451 452 + 451 453 451 454 455 456 455 457 + 455 458 460 459 465 463 468 465 + 471 468 473 471 461 462 461 463 + 474 463 474 476 463 464 465 466 + 465 467 468 469 468 470 475 474 + 471 472 480 478 483 480 476 477 + 476 478 485 478 485 487 478 479 + 480 481 480 482 483 484 486 485 + 491 489 494 491 502 494 497 495 + 499 504 500 499 487 488 487 489 + 506 489 506 508 489 490 491 492 + 491 493 495 496 502 503 497 498 + 504 505 500 501 507 506 495 494 + 497 499 504 502 512 510 518 512 + 514 512 521 518 508 509 508 510 + 525 510 525 527 510 511 512 513 + 518 519 518 520 514 515 514 516 + 514 517 521 522 521 523 521 524 + 526 525 531 529 534 531 536 534 + 527 528 527 529 537 529 537 539 + 529 530 531 532 531 533 538 537 + 534 535 539 540 539 541 544 541 + 544 546 541 542 541 543 545 544 + 550 548 553 550 556 553 559 556 + 561 559 565 561 546 547 546 548 + 568 548 548 549 550 551 550 552 + 553 554 553 555 556 557 556 558 + 559 560 562 563 562 564 565 566 + 565 567 561 562 568 570 570 571 + 568 569 329 330 + + 1034 !NTHETA: angles + 2 1 3 2 1 4 2 1 5 + 3 1 4 3 1 5 4 1 5 + 1 5 6 1 5 7 6 5 7 + 5 7 8 5 7 9 8 7 9 + 7 9 10 7 9 11 7 9 19 + 10 9 11 10 9 19 11 9 19 + 9 11 12 9 11 13 9 11 15 + 12 11 13 12 11 15 13 11 15 + 11 13 14 11 15 16 11 15 17 + 11 15 18 16 15 17 16 15 18 + 17 15 18 9 19 20 9 19 21 + 20 19 21 19 21 22 19 21 23 + 22 21 23 21 23 24 21 23 25 + 21 23 39 24 23 25 24 23 39 + 25 23 39 23 25 26 23 25 27 + 23 25 28 26 25 27 26 25 28 + 27 25 28 25 28 29 25 28 35 + 29 28 35 28 29 30 28 29 31 + 30 29 31 29 31 32 29 31 33 + 32 31 33 31 33 34 31 33 37 + 34 33 37 28 35 36 28 35 37 + 36 35 37 33 37 35 33 37 38 + 35 37 38 23 39 40 23 39 41 + 40 39 41 39 41 42 39 41 43 + 42 41 43 41 43 44 41 43 45 + 41 43 46 44 43 45 44 43 46 + 45 43 46 43 46 47 43 46 48 + 47 46 48 46 48 49 46 48 50 + 49 48 50 48 50 51 48 50 52 + 48 50 57 51 50 52 51 50 57 + 52 50 57 50 52 53 50 52 54 + 50 52 55 53 52 54 53 52 55 + 54 52 55 52 55 56 50 57 58 + 50 57 59 58 57 59 57 59 60 + 57 59 61 60 59 61 59 61 62 + 59 61 63 59 61 64 62 61 63 + 62 61 64 63 61 64 61 64 65 + 61 64 66 65 64 66 64 66 67 + 64 66 68 67 66 68 66 68 69 + 66 68 70 66 68 79 69 68 70 + 69 68 79 70 68 79 68 70 71 + 68 70 72 68 70 73 71 70 72 + 71 70 73 72 70 73 70 73 74 + 70 73 75 70 73 76 74 73 75 + 74 73 76 75 73 76 73 76 77 + 73 76 78 77 76 78 68 79 80 + 68 79 81 80 79 81 79 81 82 + 79 81 83 82 81 83 81 83 84 + 81 83 85 81 83 89 84 83 85 + 84 83 89 85 83 89 83 85 86 + 83 85 87 83 85 88 86 85 87 + 86 85 88 87 85 88 83 89 90 + 83 89 91 90 89 91 89 91 92 + 89 91 93 92 91 93 91 93 94 + 91 93 95 91 93 101 94 93 95 + 94 93 101 95 93 101 93 95 96 + 93 95 97 93 95 98 96 95 97 + 96 95 98 97 95 98 95 98 99 + 95 98 100 99 98 100 93 101 102 + 93 101 103 102 101 103 101 103 104 + 101 103 105 104 103 105 103 105 106 + 103 105 107 103 105 111 106 105 107 + 106 105 111 107 105 111 105 107 108 + 105 107 109 105 107 110 108 107 109 + 108 107 110 109 107 110 105 111 112 + 105 111 113 112 111 113 111 113 114 + 111 113 115 114 113 115 113 115 116 + 113 115 117 113 115 118 116 115 117 + 116 115 118 117 115 118 115 118 119 + 115 118 120 119 118 120 118 120 121 + 118 120 122 121 120 122 120 122 123 + 120 122 124 120 122 137 123 122 124 + 123 122 137 124 122 137 122 124 125 + 122 124 126 122 124 127 125 124 126 + 125 124 127 126 124 127 124 127 128 + 124 127 129 124 127 133 128 127 129 + 128 127 133 129 127 133 127 129 130 + 127 129 131 127 129 132 130 129 131 + 130 129 132 131 129 132 127 133 134 + 127 133 135 127 133 136 134 133 135 + 134 133 136 135 133 136 122 137 138 + 122 137 139 138 137 139 137 139 140 + 137 139 141 140 139 141 139 141 142 + 139 141 143 139 141 161 142 141 143 + 142 141 161 143 141 161 141 143 144 + 141 143 145 141 143 146 144 143 145 + 144 143 146 145 143 146 143 146 147 + 143 146 148 143 146 149 147 146 148 + 147 146 149 148 146 149 146 149 150 + 146 149 151 146 149 152 150 149 151 + 150 149 152 151 149 152 149 152 153 + 149 152 154 153 152 154 152 154 155 + 152 154 158 155 154 158 154 155 156 + 154 155 157 156 155 157 154 158 159 + 154 158 160 159 158 160 141 161 162 + 141 161 163 162 161 163 161 163 164 + 161 163 167 164 163 167 163 164 165 + 163 164 166 163 164 172 165 164 166 + 165 164 172 166 164 172 163 167 168 + 163 167 169 163 167 175 168 167 169 + 168 167 175 169 167 175 167 169 170 + 167 169 171 167 169 172 170 169 171 + 170 169 172 171 169 172 164 172 169 + 164 172 173 164 172 174 169 172 173 + 169 172 174 173 172 174 167 175 176 + 167 175 177 176 175 177 175 177 178 + 175 177 179 178 177 179 177 179 180 + 177 179 181 177 179 194 180 179 181 + 180 179 194 181 179 194 179 181 182 + 179 181 183 179 181 184 182 181 183 + 182 181 184 183 181 184 181 184 185 + 181 184 186 181 184 190 185 184 186 + 185 184 190 186 184 190 184 186 187 + 184 186 188 184 186 189 187 186 188 + 187 186 189 188 186 189 184 190 191 + 184 190 192 184 190 193 191 190 192 + 191 190 193 192 190 193 179 194 195 + 179 194 196 195 194 196 194 196 197 + 194 196 198 197 196 198 196 198 199 + 196 198 200 196 198 214 199 198 200 + 199 198 214 200 198 214 198 200 201 + 198 200 202 198 200 203 201 200 202 + 201 200 203 202 200 203 200 203 204 + 200 203 210 204 203 210 203 204 205 + 203 204 206 205 204 206 204 206 207 + 204 206 208 207 206 208 206 208 209 + 206 208 212 209 208 212 203 210 211 + 203 210 212 211 210 212 208 212 210 + 208 212 213 210 212 213 198 214 215 + 198 214 216 215 214 216 214 216 217 + 214 216 218 217 216 218 216 218 219 + 216 218 220 216 218 229 219 218 220 + 219 218 229 220 218 229 218 220 221 + 218 220 222 218 220 223 221 220 222 + 221 220 223 222 220 223 220 223 224 + 220 223 225 220 223 226 224 223 225 + 224 223 226 225 223 226 223 226 227 + 223 226 228 227 226 228 218 229 230 + 218 229 231 230 229 231 229 231 232 + 229 231 233 232 231 233 231 233 234 + 231 233 235 231 233 251 234 233 235 + 234 233 251 235 233 251 233 235 236 + 233 235 237 233 235 238 236 235 237 + 236 235 238 237 235 238 235 238 239 + 235 238 240 235 238 241 239 238 240 + 239 238 241 240 238 241 238 241 242 + 238 241 243 238 241 244 242 241 243 + 242 241 244 243 241 244 241 244 245 + 241 244 246 241 244 247 245 244 246 + 245 244 247 246 244 247 244 247 248 + 244 247 249 244 247 250 248 247 249 + 248 247 250 249 247 250 233 251 252 + 233 251 253 252 251 253 251 253 254 + 251 253 255 254 253 255 253 255 256 + 253 255 257 253 255 273 256 255 257 + 256 255 273 257 255 273 255 257 258 + 255 257 259 255 257 260 258 257 259 + 258 257 260 259 257 260 257 260 261 + 257 260 262 257 260 263 261 260 262 + 261 260 263 262 260 263 260 263 264 + 260 263 265 260 263 266 264 263 265 + 264 263 266 265 263 266 263 266 267 + 263 266 268 263 266 269 267 266 268 + 267 266 269 268 266 269 266 269 270 + 266 269 271 266 269 272 270 269 271 + 270 269 272 271 269 272 255 273 274 + 255 273 275 274 273 275 273 275 276 + 273 275 277 276 275 277 275 277 278 + 275 277 279 275 277 284 278 277 279 + 278 277 284 279 277 284 277 279 280 + 277 279 281 277 279 282 280 279 281 + 280 279 282 281 279 282 279 282 283 + 277 284 285 277 284 286 285 284 286 + 284 286 287 284 286 288 287 286 288 + 286 288 289 286 288 290 286 288 303 + 289 288 290 289 288 303 290 288 303 + 288 290 291 288 290 292 288 290 293 + 291 290 292 291 290 293 292 290 293 + 290 293 294 290 293 295 290 293 299 + 294 293 295 294 293 299 295 293 299 + 293 295 296 293 295 297 293 295 298 + 296 295 297 296 295 298 297 295 298 + 293 299 300 293 299 301 293 299 302 + 300 299 301 300 299 302 301 299 302 + 288 303 304 288 303 305 304 303 305 + 303 305 306 303 305 307 306 305 307 + 305 307 308 305 307 309 305 307 318 + 308 307 309 308 307 318 309 307 318 + 307 309 310 307 309 311 307 309 312 + 310 309 311 310 309 312 311 309 312 + 309 312 313 309 312 314 309 312 315 + 313 312 314 313 312 315 314 312 315 + 312 315 316 312 315 317 316 315 317 + 307 318 319 307 318 320 319 318 320 + 318 320 321 318 320 322 321 320 322 + 320 322 323 320 322 324 320 322 331 + 323 322 324 323 322 331 324 322 331 + 322 324 325 322 324 326 322 324 327 + 325 324 326 325 324 327 326 324 327 + 324 327 328 324 327 329 328 327 329 + 327 329 330 322 331 332 322 331 333 + 332 331 333 331 333 334 331 333 335 + 334 333 335 333 335 336 333 335 337 + 333 335 353 336 335 337 336 335 353 + 337 335 353 335 337 338 335 337 339 + 335 337 340 338 337 339 338 337 340 + 339 337 340 337 340 341 337 340 342 + 337 340 343 341 340 342 341 340 343 + 342 340 343 340 343 344 340 343 345 + 340 343 346 344 343 345 344 343 346 + 345 343 346 343 346 347 343 346 348 + 343 346 349 347 346 348 347 346 349 + 348 346 349 346 349 350 346 349 351 + 346 349 352 350 349 351 350 349 352 + 351 349 352 335 353 354 335 353 355 + 354 353 355 353 355 356 353 355 357 + 356 355 357 355 357 358 355 357 359 + 355 357 367 358 357 359 358 357 367 + 359 357 367 357 359 360 357 359 361 + 357 359 363 360 359 361 360 359 363 + 361 359 363 359 361 362 359 363 364 + 359 363 365 359 363 366 364 363 365 + 364 363 366 365 363 366 357 367 368 + 357 367 369 368 367 369 367 369 370 + 367 369 371 370 369 371 369 371 372 + 369 371 373 369 371 382 372 371 373 + 372 371 382 373 371 382 371 373 374 + 371 373 375 371 373 376 374 373 375 + 374 373 376 375 373 376 373 376 377 + 373 376 378 373 376 379 377 376 378 + 377 376 379 378 376 379 376 379 380 + 376 379 381 380 379 381 371 382 383 + 371 382 384 383 382 384 382 384 385 + 382 384 386 385 384 386 384 386 387 + 384 386 388 384 386 406 387 386 388 + 387 386 406 388 386 406 386 388 389 + 386 388 390 386 388 391 389 388 390 + 389 388 391 390 388 391 388 391 392 + 388 391 393 388 391 394 392 391 393 + 392 391 394 393 391 394 391 394 395 + 391 394 396 391 394 397 395 394 396 + 395 394 397 396 394 397 394 397 398 + 394 397 399 398 397 399 397 399 400 + 397 399 403 400 399 403 399 400 401 + 399 400 402 401 400 402 399 403 404 + 399 403 405 404 403 405 386 406 407 + 386 406 408 407 406 408 406 408 409 + 406 408 410 409 408 410 408 410 411 + 408 410 412 408 410 421 411 410 412 + 411 410 421 412 410 421 410 412 413 + 410 412 414 410 412 415 413 412 414 + 413 412 415 414 412 415 412 415 416 + 412 415 417 412 415 418 416 415 417 + 416 415 418 417 415 418 415 418 419 + 415 418 420 419 418 420 410 421 422 + 410 421 423 422 421 423 421 423 424 + 421 423 425 424 423 425 423 425 426 + 423 425 427 423 425 440 426 425 427 + 426 425 440 427 425 440 425 427 428 + 425 427 429 425 427 430 428 427 429 + 428 427 430 429 427 430 427 430 431 + 427 430 432 427 430 436 431 430 432 + 431 430 436 432 430 436 430 432 433 + 430 432 434 430 432 435 433 432 434 + 433 432 435 434 432 435 430 436 437 + 430 436 438 430 436 439 437 436 438 + 437 436 439 438 436 439 425 440 441 + 425 440 442 441 440 442 440 442 443 + 440 442 444 443 442 444 442 444 445 + 442 444 446 442 444 459 445 444 446 + 445 444 459 446 444 459 444 446 447 + 444 446 448 444 446 449 447 446 448 + 447 446 449 448 446 449 446 449 450 + 446 449 451 446 449 455 450 449 451 + 450 449 455 451 449 455 449 451 452 + 449 451 453 449 451 454 452 451 453 + 452 451 454 453 451 454 449 455 456 + 449 455 457 449 455 458 456 455 457 + 456 455 458 457 455 458 444 459 460 + 444 459 461 460 459 461 459 461 462 + 459 461 463 462 461 463 461 463 464 + 461 463 465 461 463 474 464 463 465 + 464 463 474 465 463 474 463 465 466 + 463 465 467 463 465 468 466 465 467 + 466 465 468 467 465 468 465 468 469 + 465 468 470 465 468 471 469 468 470 + 469 468 471 470 468 471 468 471 472 + 468 471 473 472 471 473 463 474 475 + 463 474 476 475 474 476 474 476 477 + 474 476 478 477 476 478 476 478 479 + 476 478 480 476 478 485 479 478 480 + 479 478 485 480 478 485 478 480 481 + 478 480 482 478 480 483 481 480 482 + 481 480 483 482 480 483 480 483 484 + 478 485 486 478 485 487 486 485 487 + 485 487 488 485 487 489 488 487 489 + 487 489 490 487 489 491 487 489 506 + 490 489 491 490 489 506 491 489 506 + 489 491 492 489 491 493 489 491 494 + 492 491 493 492 491 494 493 491 494 + 491 494 495 491 494 502 495 494 502 + 494 495 496 494 495 497 496 495 497 + 495 497 498 495 497 499 498 497 499 + 497 499 500 497 499 504 500 499 504 + 499 500 501 494 502 503 494 502 504 + 503 502 504 499 504 502 499 504 505 + 502 504 505 489 506 507 489 506 508 + 507 506 508 506 508 509 506 508 510 + 509 508 510 508 510 511 508 510 512 + 508 510 525 511 510 512 511 510 525 + 512 510 525 510 512 513 510 512 514 + 510 512 518 513 512 514 513 512 518 + 514 512 518 512 514 515 512 514 516 + 512 514 517 515 514 516 515 514 517 + 516 514 517 512 518 519 512 518 520 + 512 518 521 519 518 520 519 518 521 + 520 518 521 518 521 522 518 521 523 + 518 521 524 522 521 523 522 521 524 + 523 521 524 510 525 526 510 525 527 + 526 525 527 525 527 528 525 527 529 + 528 527 529 527 529 530 527 529 531 + 527 529 537 530 529 531 530 529 537 + 531 529 537 529 531 532 529 531 533 + 529 531 534 532 531 533 532 531 534 + 533 531 534 531 534 535 531 534 536 + 535 534 536 529 537 538 529 537 539 + 538 537 539 537 539 540 537 539 541 + 540 539 541 539 541 542 539 541 543 + 539 541 544 542 541 543 542 541 544 + 543 541 544 541 544 545 541 544 546 + 545 544 546 544 546 547 544 546 548 + 547 546 548 546 548 549 546 548 550 + 546 548 568 549 548 550 549 548 568 + 550 548 568 548 550 551 548 550 552 + 548 550 553 551 550 552 551 550 553 + 552 550 553 550 553 554 550 553 555 + 550 553 556 554 553 555 554 553 556 + 555 553 556 553 556 557 553 556 558 + 553 556 559 557 556 558 557 556 559 + 558 556 559 556 559 560 556 559 561 + 560 559 561 559 561 562 559 561 565 + 562 561 565 561 562 563 561 562 564 + 563 562 564 561 565 566 561 565 567 + 566 565 567 548 568 569 548 568 570 + 569 568 570 568 570 571 + + 1509 !NPHI: dihedrals + 1 5 7 8 1 5 7 9 + 2 1 5 6 2 1 5 7 + 3 1 5 6 3 1 5 7 + 4 1 5 6 4 1 5 7 + 5 7 9 10 5 7 9 11 + 5 7 9 19 6 5 7 8 + 6 5 7 9 7 9 11 12 + 7 9 11 13 7 9 11 15 + 7 9 19 20 7 9 19 21 + 8 7 9 10 8 7 9 11 + 8 7 9 19 9 11 13 14 + 9 11 15 16 9 11 15 17 + 9 11 15 18 9 19 21 22 + 9 19 21 23 10 9 11 12 + 10 9 11 13 10 9 11 15 + 10 9 19 20 10 9 19 21 + 11 9 19 20 11 9 19 21 + 12 11 9 19 12 11 13 14 + 12 11 15 16 12 11 15 17 + 12 11 15 18 13 11 9 19 + 13 11 15 16 13 11 15 17 + 13 11 15 18 14 13 11 15 + 15 11 9 19 19 21 23 24 + 19 21 23 25 19 21 23 39 + 20 19 21 22 20 19 21 23 + 21 23 25 26 21 23 25 27 + 21 23 25 28 21 23 39 40 + 21 23 39 41 22 21 23 24 + 22 21 23 25 22 21 23 39 + 23 25 28 29 23 25 28 35 + 23 39 41 42 23 39 41 43 + 24 23 25 26 24 23 25 27 + 24 23 25 28 24 23 39 40 + 24 23 39 41 25 23 39 40 + 25 23 39 41 25 28 29 30 + 25 28 29 31 25 28 35 36 + 25 28 35 37 26 25 23 39 + 26 25 28 29 26 25 28 35 + 27 25 23 39 27 25 28 29 + 27 25 28 35 28 25 23 39 + 28 29 31 32 28 29 31 33 + 28 35 37 33 28 35 37 38 + 29 28 35 36 29 28 35 37 + 29 31 33 34 29 31 33 37 + 30 29 28 35 30 29 31 32 + 30 29 31 33 31 29 28 35 + 31 33 37 35 31 33 37 38 + 32 31 33 34 32 31 33 37 + 33 37 35 36 34 33 37 35 + 34 33 37 38 36 35 37 38 + 39 41 43 44 39 41 43 45 + 39 41 43 46 40 39 41 42 + 40 39 41 43 41 43 46 47 + 41 43 46 48 42 41 43 44 + 42 41 43 45 42 41 43 46 + 43 46 48 49 43 46 48 50 + 44 43 46 47 44 43 46 48 + 45 43 46 47 45 43 46 48 + 46 48 50 51 46 48 50 52 + 46 48 50 57 47 46 48 49 + 47 46 48 50 48 50 52 53 + 48 50 52 54 48 50 52 55 + 48 50 57 58 48 50 57 59 + 49 48 50 51 49 48 50 52 + 49 48 50 57 50 52 55 56 + 50 57 59 60 50 57 59 61 + 51 50 52 53 51 50 52 54 + 51 50 52 55 51 50 57 58 + 51 50 57 59 52 50 57 58 + 52 50 57 59 53 52 50 57 + 53 52 55 56 54 52 50 57 + 54 52 55 56 55 52 50 57 + 57 59 61 62 57 59 61 63 + 57 59 61 64 58 57 59 60 + 58 57 59 61 59 61 64 65 + 59 61 64 66 60 59 61 62 + 60 59 61 63 60 59 61 64 + 61 64 66 67 61 64 66 68 + 62 61 64 65 62 61 64 66 + 63 61 64 65 63 61 64 66 + 64 66 68 69 64 66 68 70 + 64 66 68 79 65 64 66 67 + 65 64 66 68 66 68 70 71 + 66 68 70 72 66 68 70 73 + 66 68 79 80 66 68 79 81 + 67 66 68 69 67 66 68 70 + 67 66 68 79 68 70 73 74 + 68 70 73 75 68 70 73 76 + 68 79 81 82 68 79 81 83 + 69 68 70 71 69 68 70 72 + 69 68 70 73 69 68 79 80 + 69 68 79 81 70 68 79 80 + 70 68 79 81 70 73 76 77 + 70 73 76 78 71 70 68 79 + 71 70 73 74 71 70 73 75 + 71 70 73 76 72 70 68 79 + 72 70 73 74 72 70 73 75 + 72 70 73 76 73 70 68 79 + 74 73 76 77 74 73 76 78 + 75 73 76 77 75 73 76 78 + 79 81 83 84 79 81 83 85 + 79 81 83 89 80 79 81 82 + 80 79 81 83 81 83 85 86 + 81 83 85 87 81 83 85 88 + 81 83 89 90 81 83 89 91 + 82 81 83 84 82 81 83 85 + 82 81 83 89 83 89 91 92 + 83 89 91 93 84 83 85 86 + 84 83 85 87 84 83 85 88 + 84 83 89 90 84 83 89 91 + 85 83 89 90 85 83 89 91 + 86 85 83 89 87 85 83 89 + 88 85 83 89 89 91 93 94 + 89 91 93 95 89 91 93 101 + 90 89 91 92 90 89 91 93 + 91 93 95 96 91 93 95 97 + 91 93 95 98 91 93 101 102 + 91 93 101 103 92 91 93 94 + 92 91 93 95 92 91 93 101 + 93 95 98 99 93 95 98 100 + 93 101 103 104 93 101 103 105 + 94 93 95 96 94 93 95 97 + 94 93 95 98 94 93 101 102 + 94 93 101 103 95 93 101 102 + 95 93 101 103 96 95 93 101 + 96 95 98 99 96 95 98 100 + 97 95 93 101 97 95 98 99 + 97 95 98 100 98 95 93 101 + 101 103 105 106 101 103 105 107 + 101 103 105 111 102 101 103 104 + 102 101 103 105 103 105 107 108 + 103 105 107 109 103 105 107 110 + 103 105 111 112 103 105 111 113 + 104 103 105 106 104 103 105 107 + 104 103 105 111 105 111 113 114 + 105 111 113 115 106 105 107 108 + 106 105 107 109 106 105 107 110 + 106 105 111 112 106 105 111 113 + 107 105 111 112 107 105 111 113 + 108 107 105 111 109 107 105 111 + 110 107 105 111 111 113 115 116 + 111 113 115 117 111 113 115 118 + 112 111 113 114 112 111 113 115 + 113 115 118 119 113 115 118 120 + 114 113 115 116 114 113 115 117 + 114 113 115 118 115 118 120 121 + 115 118 120 122 116 115 118 119 + 116 115 118 120 117 115 118 119 + 117 115 118 120 118 120 122 123 + 118 120 122 124 118 120 122 137 + 119 118 120 121 119 118 120 122 + 120 122 124 125 120 122 124 126 + 120 122 124 127 120 122 137 138 + 120 122 137 139 121 120 122 123 + 121 120 122 124 121 120 122 137 + 122 124 127 128 122 124 127 129 + 122 124 127 133 122 137 139 140 + 122 137 139 141 123 122 124 125 + 123 122 124 126 123 122 124 127 + 123 122 137 138 123 122 137 139 + 124 122 137 138 124 122 137 139 + 124 127 129 130 124 127 129 131 + 124 127 129 132 124 127 133 134 + 124 127 133 135 124 127 133 136 + 125 124 122 137 125 124 127 128 + 125 124 127 129 125 124 127 133 + 126 124 122 137 126 124 127 128 + 126 124 127 129 126 124 127 133 + 127 124 122 137 128 127 129 130 + 128 127 129 131 128 127 129 132 + 128 127 133 134 128 127 133 135 + 128 127 133 136 129 127 133 134 + 129 127 133 135 129 127 133 136 + 130 129 127 133 131 129 127 133 + 132 129 127 133 137 139 141 142 + 137 139 141 143 137 139 141 161 + 138 137 139 140 138 137 139 141 + 139 141 143 144 139 141 143 145 + 139 141 143 146 139 141 161 162 + 139 141 161 163 140 139 141 142 + 140 139 141 143 140 139 141 161 + 141 143 146 147 141 143 146 148 + 141 143 146 149 141 161 163 164 + 141 161 163 167 142 141 143 144 + 142 141 143 145 142 141 143 146 + 142 141 161 162 142 141 161 163 + 143 141 161 162 143 141 161 163 + 143 146 149 150 143 146 149 151 + 143 146 149 152 144 143 141 161 + 144 143 146 147 144 143 146 148 + 144 143 146 149 145 143 141 161 + 145 143 146 147 145 143 146 148 + 145 143 146 149 146 143 141 161 + 146 149 152 153 146 149 152 154 + 147 146 149 150 147 146 149 151 + 147 146 149 152 148 146 149 150 + 148 146 149 151 148 146 149 152 + 149 152 154 155 149 152 154 158 + 150 149 152 153 150 149 152 154 + 151 149 152 153 151 149 152 154 + 152 154 155 156 152 154 155 157 + 152 154 158 159 152 154 158 160 + 153 152 154 155 153 152 154 158 + 155 154 158 159 155 154 158 160 + 156 155 154 158 157 155 154 158 + 161 163 164 165 161 163 164 166 + 161 163 164 172 161 163 167 168 + 161 163 167 169 161 163 167 175 + 162 161 163 164 162 161 163 167 + 163 164 172 169 163 164 172 173 + 163 164 172 174 163 167 169 170 + 163 167 169 171 163 167 169 172 + 163 167 175 176 163 167 175 177 + 164 163 167 168 164 163 167 169 + 164 163 167 175 164 172 169 167 + 164 172 169 170 164 172 169 171 + 165 164 163 167 165 164 172 169 + 165 164 172 173 165 164 172 174 + 166 164 163 167 166 164 172 169 + 166 164 172 173 166 164 172 174 + 167 163 164 172 167 169 172 173 + 167 169 172 174 167 175 177 178 + 167 175 177 179 168 167 169 170 + 168 167 169 171 168 167 169 172 + 168 167 175 176 168 167 175 177 + 169 167 175 176 169 167 175 177 + 170 169 167 175 170 169 172 173 + 170 169 172 174 171 169 167 175 + 171 169 172 173 171 169 172 174 + 172 169 167 175 175 177 179 180 + 175 177 179 181 175 177 179 194 + 176 175 177 178 176 175 177 179 + 177 179 181 182 177 179 181 183 + 177 179 181 184 177 179 194 195 + 177 179 194 196 178 177 179 180 + 178 177 179 181 178 177 179 194 + 179 181 184 185 179 181 184 186 + 179 181 184 190 179 194 196 197 + 179 194 196 198 180 179 181 182 + 180 179 181 183 180 179 181 184 + 180 179 194 195 180 179 194 196 + 181 179 194 195 181 179 194 196 + 181 184 186 187 181 184 186 188 + 181 184 186 189 181 184 190 191 + 181 184 190 192 181 184 190 193 + 182 181 179 194 182 181 184 185 + 182 181 184 186 182 181 184 190 + 183 181 179 194 183 181 184 185 + 183 181 184 186 183 181 184 190 + 184 181 179 194 185 184 186 187 + 185 184 186 188 185 184 186 189 + 185 184 190 191 185 184 190 192 + 185 184 190 193 186 184 190 191 + 186 184 190 192 186 184 190 193 + 187 186 184 190 188 186 184 190 + 189 186 184 190 194 196 198 199 + 194 196 198 200 194 196 198 214 + 195 194 196 197 195 194 196 198 + 196 198 200 201 196 198 200 202 + 196 198 200 203 196 198 214 215 + 196 198 214 216 197 196 198 199 + 197 196 198 200 197 196 198 214 + 198 200 203 204 198 200 203 210 + 198 214 216 217 198 214 216 218 + 199 198 200 201 199 198 200 202 + 199 198 200 203 199 198 214 215 + 199 198 214 216 200 198 214 215 + 200 198 214 216 200 203 204 205 + 200 203 204 206 200 203 210 211 + 200 203 210 212 201 200 198 214 + 201 200 203 204 201 200 203 210 + 202 200 198 214 202 200 203 204 + 202 200 203 210 203 200 198 214 + 203 204 206 207 203 204 206 208 + 203 210 212 208 203 210 212 213 + 204 203 210 211 204 203 210 212 + 204 206 208 209 204 206 208 212 + 205 204 203 210 205 204 206 207 + 205 204 206 208 206 204 203 210 + 206 208 212 210 206 208 212 213 + 207 206 208 209 207 206 208 212 + 208 212 210 211 209 208 212 210 + 209 208 212 213 211 210 212 213 + 214 216 218 219 214 216 218 220 + 214 216 218 229 215 214 216 217 + 215 214 216 218 216 218 220 221 + 216 218 220 222 216 218 220 223 + 216 218 229 230 216 218 229 231 + 217 216 218 219 217 216 218 220 + 217 216 218 229 218 220 223 224 + 218 220 223 225 218 220 223 226 + 218 229 231 232 218 229 231 233 + 219 218 220 221 219 218 220 222 + 219 218 220 223 219 218 229 230 + 219 218 229 231 220 218 229 230 + 220 218 229 231 220 223 226 227 + 220 223 226 228 221 220 218 229 + 221 220 223 224 221 220 223 225 + 221 220 223 226 222 220 218 229 + 222 220 223 224 222 220 223 225 + 222 220 223 226 223 220 218 229 + 224 223 226 227 224 223 226 228 + 225 223 226 227 225 223 226 228 + 229 231 233 234 229 231 233 235 + 229 231 233 251 230 229 231 232 + 230 229 231 233 231 233 235 236 + 231 233 235 237 231 233 235 238 + 231 233 251 252 231 233 251 253 + 232 231 233 234 232 231 233 235 + 232 231 233 251 233 235 238 239 + 233 235 238 240 233 235 238 241 + 233 251 253 254 233 251 253 255 + 234 233 235 236 234 233 235 237 + 234 233 235 238 234 233 251 252 + 234 233 251 253 235 233 251 252 + 235 233 251 253 235 238 241 242 + 235 238 241 243 235 238 241 244 + 236 235 233 251 236 235 238 239 + 236 235 238 240 236 235 238 241 + 237 235 233 251 237 235 238 239 + 237 235 238 240 237 235 238 241 + 238 235 233 251 238 241 244 245 + 238 241 244 246 238 241 244 247 + 239 238 241 242 239 238 241 243 + 239 238 241 244 240 238 241 242 + 240 238 241 243 240 238 241 244 + 241 244 247 248 241 244 247 249 + 241 244 247 250 242 241 244 245 + 242 241 244 246 242 241 244 247 + 243 241 244 245 243 241 244 246 + 243 241 244 247 245 244 247 248 + 245 244 247 249 245 244 247 250 + 246 244 247 248 246 244 247 249 + 246 244 247 250 251 253 255 256 + 251 253 255 257 251 253 255 273 + 252 251 253 254 252 251 253 255 + 253 255 257 258 253 255 257 259 + 253 255 257 260 253 255 273 274 + 253 255 273 275 254 253 255 256 + 254 253 255 257 254 253 255 273 + 255 257 260 261 255 257 260 262 + 255 257 260 263 255 273 275 276 + 255 273 275 277 256 255 257 258 + 256 255 257 259 256 255 257 260 + 256 255 273 274 256 255 273 275 + 257 255 273 274 257 255 273 275 + 257 260 263 264 257 260 263 265 + 257 260 263 266 258 257 255 273 + 258 257 260 261 258 257 260 262 + 258 257 260 263 259 257 255 273 + 259 257 260 261 259 257 260 262 + 259 257 260 263 260 257 255 273 + 260 263 266 267 260 263 266 268 + 260 263 266 269 261 260 263 264 + 261 260 263 265 261 260 263 266 + 262 260 263 264 262 260 263 265 + 262 260 263 266 263 266 269 270 + 263 266 269 271 263 266 269 272 + 264 263 266 267 264 263 266 268 + 264 263 266 269 265 263 266 267 + 265 263 266 268 265 263 266 269 + 267 266 269 270 267 266 269 271 + 267 266 269 272 268 266 269 270 + 268 266 269 271 268 266 269 272 + 273 275 277 278 273 275 277 279 + 273 275 277 284 274 273 275 276 + 274 273 275 277 275 277 279 280 + 275 277 279 281 275 277 279 282 + 275 277 284 285 275 277 284 286 + 276 275 277 278 276 275 277 279 + 276 275 277 284 277 279 282 283 + 277 284 286 287 277 284 286 288 + 278 277 279 280 278 277 279 281 + 278 277 279 282 278 277 284 285 + 278 277 284 286 279 277 284 285 + 279 277 284 286 280 279 277 284 + 280 279 282 283 281 279 277 284 + 281 279 282 283 282 279 277 284 + 284 286 288 289 284 286 288 290 + 284 286 288 303 285 284 286 287 + 285 284 286 288 286 288 290 291 + 286 288 290 292 286 288 290 293 + 286 288 303 304 286 288 303 305 + 287 286 288 289 287 286 288 290 + 287 286 288 303 288 290 293 294 + 288 290 293 295 288 290 293 299 + 288 303 305 306 288 303 305 307 + 289 288 290 291 289 288 290 292 + 289 288 290 293 289 288 303 304 + 289 288 303 305 290 288 303 304 + 290 288 303 305 290 293 295 296 + 290 293 295 297 290 293 295 298 + 290 293 299 300 290 293 299 301 + 290 293 299 302 291 290 288 303 + 291 290 293 294 291 290 293 295 + 291 290 293 299 292 290 288 303 + 292 290 293 294 292 290 293 295 + 292 290 293 299 293 290 288 303 + 294 293 295 296 294 293 295 297 + 294 293 295 298 294 293 299 300 + 294 293 299 301 294 293 299 302 + 295 293 299 300 295 293 299 301 + 295 293 299 302 296 295 293 299 + 297 295 293 299 298 295 293 299 + 303 305 307 308 303 305 307 309 + 303 305 307 318 304 303 305 306 + 304 303 305 307 305 307 309 310 + 305 307 309 311 305 307 309 312 + 305 307 318 319 305 307 318 320 + 306 305 307 308 306 305 307 309 + 306 305 307 318 307 309 312 313 + 307 309 312 314 307 309 312 315 + 307 318 320 321 307 318 320 322 + 308 307 309 310 308 307 309 311 + 308 307 309 312 308 307 318 319 + 308 307 318 320 309 307 318 319 + 309 307 318 320 309 312 315 316 + 309 312 315 317 310 309 307 318 + 310 309 312 313 310 309 312 314 + 310 309 312 315 311 309 307 318 + 311 309 312 313 311 309 312 314 + 311 309 312 315 312 309 307 318 + 313 312 315 316 313 312 315 317 + 314 312 315 316 314 312 315 317 + 318 320 322 323 318 320 322 324 + 318 320 322 331 319 318 320 321 + 319 318 320 322 320 322 324 325 + 320 322 324 326 320 322 324 327 + 320 322 331 332 320 322 331 333 + 321 320 322 323 321 320 322 324 + 321 320 322 331 322 324 327 328 + 322 324 327 329 322 331 333 334 + 322 331 333 335 323 322 324 325 + 323 322 324 326 323 322 324 327 + 323 322 331 332 323 322 331 333 + 324 322 331 332 324 322 331 333 + 324 327 329 330 325 324 322 331 + 325 324 327 328 325 324 327 329 + 326 324 322 331 326 324 327 328 + 326 324 327 329 327 324 322 331 + 328 327 329 330 331 333 335 336 + 331 333 335 337 331 333 335 353 + 332 331 333 334 332 331 333 335 + 333 335 337 338 333 335 337 339 + 333 335 337 340 333 335 353 354 + 333 335 353 355 334 333 335 336 + 334 333 335 337 334 333 335 353 + 335 337 340 341 335 337 340 342 + 335 337 340 343 335 353 355 356 + 335 353 355 357 336 335 337 338 + 336 335 337 339 336 335 337 340 + 336 335 353 354 336 335 353 355 + 337 335 353 354 337 335 353 355 + 337 340 343 344 337 340 343 345 + 337 340 343 346 338 337 335 353 + 338 337 340 341 338 337 340 342 + 338 337 340 343 339 337 335 353 + 339 337 340 341 339 337 340 342 + 339 337 340 343 340 337 335 353 + 340 343 346 347 340 343 346 348 + 340 343 346 349 341 340 343 344 + 341 340 343 345 341 340 343 346 + 342 340 343 344 342 340 343 345 + 342 340 343 346 343 346 349 350 + 343 346 349 351 343 346 349 352 + 344 343 346 347 344 343 346 348 + 344 343 346 349 345 343 346 347 + 345 343 346 348 345 343 346 349 + 347 346 349 350 347 346 349 351 + 347 346 349 352 348 346 349 350 + 348 346 349 351 348 346 349 352 + 353 355 357 358 353 355 357 359 + 353 355 357 367 354 353 355 356 + 354 353 355 357 355 357 359 360 + 355 357 359 361 355 357 359 363 + 355 357 367 368 355 357 367 369 + 356 355 357 358 356 355 357 359 + 356 355 357 367 357 359 361 362 + 357 359 363 364 357 359 363 365 + 357 359 363 366 357 367 369 370 + 357 367 369 371 358 357 359 360 + 358 357 359 361 358 357 359 363 + 358 357 367 368 358 357 367 369 + 359 357 367 368 359 357 367 369 + 360 359 357 367 360 359 361 362 + 360 359 363 364 360 359 363 365 + 360 359 363 366 361 359 357 367 + 361 359 363 364 361 359 363 365 + 361 359 363 366 362 361 359 363 + 363 359 357 367 367 369 371 372 + 367 369 371 373 367 369 371 382 + 368 367 369 370 368 367 369 371 + 369 371 373 374 369 371 373 375 + 369 371 373 376 369 371 382 383 + 369 371 382 384 370 369 371 372 + 370 369 371 373 370 369 371 382 + 371 373 376 377 371 373 376 378 + 371 373 376 379 371 382 384 385 + 371 382 384 386 372 371 373 374 + 372 371 373 375 372 371 373 376 + 372 371 382 383 372 371 382 384 + 373 371 382 383 373 371 382 384 + 373 376 379 380 373 376 379 381 + 374 373 371 382 374 373 376 377 + 374 373 376 378 374 373 376 379 + 375 373 371 382 375 373 376 377 + 375 373 376 378 375 373 376 379 + 376 373 371 382 377 376 379 380 + 377 376 379 381 378 376 379 380 + 378 376 379 381 382 384 386 387 + 382 384 386 388 382 384 386 406 + 383 382 384 385 383 382 384 386 + 384 386 388 389 384 386 388 390 + 384 386 388 391 384 386 406 407 + 384 386 406 408 385 384 386 387 + 385 384 386 388 385 384 386 406 + 386 388 391 392 386 388 391 393 + 386 388 391 394 386 406 408 409 + 386 406 408 410 387 386 388 389 + 387 386 388 390 387 386 388 391 + 387 386 406 407 387 386 406 408 + 388 386 406 407 388 386 406 408 + 388 391 394 395 388 391 394 396 + 388 391 394 397 389 388 386 406 + 389 388 391 392 389 388 391 393 + 389 388 391 394 390 388 386 406 + 390 388 391 392 390 388 391 393 + 390 388 391 394 391 388 386 406 + 391 394 397 398 391 394 397 399 + 392 391 394 395 392 391 394 396 + 392 391 394 397 393 391 394 395 + 393 391 394 396 393 391 394 397 + 394 397 399 400 394 397 399 403 + 395 394 397 398 395 394 397 399 + 396 394 397 398 396 394 397 399 + 397 399 400 401 397 399 400 402 + 397 399 403 404 397 399 403 405 + 398 397 399 400 398 397 399 403 + 400 399 403 404 400 399 403 405 + 401 400 399 403 402 400 399 403 + 406 408 410 411 406 408 410 412 + 406 408 410 421 407 406 408 409 + 407 406 408 410 408 410 412 413 + 408 410 412 414 408 410 412 415 + 408 410 421 422 408 410 421 423 + 409 408 410 411 409 408 410 412 + 409 408 410 421 410 412 415 416 + 410 412 415 417 410 412 415 418 + 410 421 423 424 410 421 423 425 + 411 410 412 413 411 410 412 414 + 411 410 412 415 411 410 421 422 + 411 410 421 423 412 410 421 422 + 412 410 421 423 412 415 418 419 + 412 415 418 420 413 412 410 421 + 413 412 415 416 413 412 415 417 + 413 412 415 418 414 412 410 421 + 414 412 415 416 414 412 415 417 + 414 412 415 418 415 412 410 421 + 416 415 418 419 416 415 418 420 + 417 415 418 419 417 415 418 420 + 421 423 425 426 421 423 425 427 + 421 423 425 440 422 421 423 424 + 422 421 423 425 423 425 427 428 + 423 425 427 429 423 425 427 430 + 423 425 440 441 423 425 440 442 + 424 423 425 426 424 423 425 427 + 424 423 425 440 425 427 430 431 + 425 427 430 432 425 427 430 436 + 425 440 442 443 425 440 442 444 + 426 425 427 428 426 425 427 429 + 426 425 427 430 426 425 440 441 + 426 425 440 442 427 425 440 441 + 427 425 440 442 427 430 432 433 + 427 430 432 434 427 430 432 435 + 427 430 436 437 427 430 436 438 + 427 430 436 439 428 427 425 440 + 428 427 430 431 428 427 430 432 + 428 427 430 436 429 427 425 440 + 429 427 430 431 429 427 430 432 + 429 427 430 436 430 427 425 440 + 431 430 432 433 431 430 432 434 + 431 430 432 435 431 430 436 437 + 431 430 436 438 431 430 436 439 + 432 430 436 437 432 430 436 438 + 432 430 436 439 433 432 430 436 + 434 432 430 436 435 432 430 436 + 440 442 444 445 440 442 444 446 + 440 442 444 459 441 440 442 443 + 441 440 442 444 442 444 446 447 + 442 444 446 448 442 444 446 449 + 442 444 459 460 442 444 459 461 + 443 442 444 445 443 442 444 446 + 443 442 444 459 444 446 449 450 + 444 446 449 451 444 446 449 455 + 444 459 461 462 444 459 461 463 + 445 444 446 447 445 444 446 448 + 445 444 446 449 445 444 459 460 + 445 444 459 461 446 444 459 460 + 446 444 459 461 446 449 451 452 + 446 449 451 453 446 449 451 454 + 446 449 455 456 446 449 455 457 + 446 449 455 458 447 446 444 459 + 447 446 449 450 447 446 449 451 + 447 446 449 455 448 446 444 459 + 448 446 449 450 448 446 449 451 + 448 446 449 455 449 446 444 459 + 450 449 451 452 450 449 451 453 + 450 449 451 454 450 449 455 456 + 450 449 455 457 450 449 455 458 + 451 449 455 456 451 449 455 457 + 451 449 455 458 452 451 449 455 + 453 451 449 455 454 451 449 455 + 459 461 463 464 459 461 463 465 + 459 461 463 474 460 459 461 462 + 460 459 461 463 461 463 465 466 + 461 463 465 467 461 463 465 468 + 461 463 474 475 461 463 474 476 + 462 461 463 464 462 461 463 465 + 462 461 463 474 463 465 468 469 + 463 465 468 470 463 465 468 471 + 463 474 476 477 463 474 476 478 + 464 463 465 466 464 463 465 467 + 464 463 465 468 464 463 474 475 + 464 463 474 476 465 463 474 475 + 465 463 474 476 465 468 471 472 + 465 468 471 473 466 465 463 474 + 466 465 468 469 466 465 468 470 + 466 465 468 471 467 465 463 474 + 467 465 468 469 467 465 468 470 + 467 465 468 471 468 465 463 474 + 469 468 471 472 469 468 471 473 + 470 468 471 472 470 468 471 473 + 474 476 478 479 474 476 478 480 + 474 476 478 485 475 474 476 477 + 475 474 476 478 476 478 480 481 + 476 478 480 482 476 478 480 483 + 476 478 485 486 476 478 485 487 + 477 476 478 479 477 476 478 480 + 477 476 478 485 478 480 483 484 + 478 485 487 488 478 485 487 489 + 479 478 480 481 479 478 480 482 + 479 478 480 483 479 478 485 486 + 479 478 485 487 480 478 485 486 + 480 478 485 487 481 480 478 485 + 481 480 483 484 482 480 478 485 + 482 480 483 484 483 480 478 485 + 485 487 489 490 485 487 489 491 + 485 487 489 506 486 485 487 488 + 486 485 487 489 487 489 491 492 + 487 489 491 493 487 489 491 494 + 487 489 506 507 487 489 506 508 + 488 487 489 490 488 487 489 491 + 488 487 489 506 489 491 494 495 + 489 491 494 502 489 506 508 509 + 489 506 508 510 490 489 491 492 + 490 489 491 493 490 489 491 494 + 490 489 506 507 490 489 506 508 + 491 489 506 507 491 489 506 508 + 491 494 495 496 491 494 495 497 + 491 494 502 503 491 494 502 504 + 492 491 489 506 492 491 494 495 + 492 491 494 502 493 491 489 506 + 493 491 494 495 493 491 494 502 + 494 491 489 506 494 495 497 498 + 494 495 497 499 494 502 504 499 + 494 502 504 505 495 494 502 503 + 495 494 502 504 495 497 499 500 + 495 497 499 504 496 495 494 502 + 496 495 497 498 496 495 497 499 + 497 495 494 502 497 499 500 501 + 497 499 504 502 497 499 504 505 + 498 497 499 500 498 497 499 504 + 499 504 502 503 500 499 504 502 + 500 499 504 505 501 500 499 504 + 503 502 504 505 506 508 510 511 + 506 508 510 512 506 508 510 525 + 507 506 508 509 507 506 508 510 + 508 510 512 513 508 510 512 514 + 508 510 512 518 508 510 525 526 + 508 510 525 527 509 508 510 511 + 509 508 510 512 509 508 510 525 + 510 512 514 515 510 512 514 516 + 510 512 514 517 510 512 518 519 + 510 512 518 520 510 512 518 521 + 510 525 527 528 510 525 527 529 + 511 510 512 513 511 510 512 514 + 511 510 512 518 511 510 525 526 + 511 510 525 527 512 510 525 526 + 512 510 525 527 512 518 521 522 + 512 518 521 523 512 518 521 524 + 513 512 510 525 513 512 514 515 + 513 512 514 516 513 512 514 517 + 513 512 518 519 513 512 518 520 + 513 512 518 521 514 512 510 525 + 514 512 518 519 514 512 518 520 + 514 512 518 521 515 514 512 518 + 516 514 512 518 517 514 512 518 + 518 512 510 525 519 518 521 522 + 519 518 521 523 519 518 521 524 + 520 518 521 522 520 518 521 523 + 520 518 521 524 525 527 529 530 + 525 527 529 531 525 527 529 537 + 526 525 527 528 526 525 527 529 + 527 529 531 532 527 529 531 533 + 527 529 531 534 527 529 537 538 + 527 529 537 539 528 527 529 530 + 528 527 529 531 528 527 529 537 + 529 531 534 535 529 531 534 536 + 529 537 539 540 529 537 539 541 + 530 529 531 532 530 529 531 533 + 530 529 531 534 530 529 537 538 + 530 529 537 539 531 529 537 538 + 531 529 537 539 532 531 529 537 + 532 531 534 535 532 531 534 536 + 533 531 529 537 533 531 534 535 + 533 531 534 536 534 531 529 537 + 537 539 541 542 537 539 541 543 + 537 539 541 544 538 537 539 540 + 538 537 539 541 539 541 544 545 + 539 541 544 546 540 539 541 542 + 540 539 541 543 540 539 541 544 + 541 544 546 547 541 544 546 548 + 542 541 544 545 542 541 544 546 + 543 541 544 545 543 541 544 546 + 544 546 548 549 544 546 548 550 + 544 546 548 568 545 544 546 547 + 545 544 546 548 546 548 550 551 + 546 548 550 552 546 548 550 553 + 546 548 568 569 546 548 568 570 + 547 546 548 549 547 546 548 550 + 547 546 548 568 548 550 553 554 + 548 550 553 555 548 550 553 556 + 548 568 570 571 549 548 550 551 + 549 548 550 552 549 548 550 553 + 549 548 568 569 549 548 568 570 + 550 548 568 569 550 548 568 570 + 550 553 556 557 550 553 556 558 + 550 553 556 559 551 550 548 568 + 551 550 553 554 551 550 553 555 + 551 550 553 556 552 550 548 568 + 552 550 553 554 552 550 553 555 + 552 550 553 556 553 550 548 568 + 553 556 559 560 553 556 559 561 + 554 553 556 557 554 553 556 558 + 554 553 556 559 555 553 556 557 + 555 553 556 558 555 553 556 559 + 556 559 561 562 556 559 561 565 + 557 556 559 560 557 556 559 561 + 558 556 559 560 558 556 559 561 + 559 561 562 563 559 561 562 564 + 559 561 565 566 559 561 565 567 + 560 559 561 562 560 559 561 565 + 562 561 565 566 562 561 565 567 + 563 562 561 565 564 562 561 565 + 569 568 570 571 + + 91 !NIMPHI: impropers + 5 1 7 6 7 5 9 8 + 19 9 21 20 21 19 23 22 + 39 23 41 40 41 39 43 42 + 46 43 48 47 48 46 50 49 + 57 50 59 58 59 57 61 60 + 64 61 66 65 66 64 68 67 + 79 68 81 80 76 73 78 77 + 81 79 83 82 89 83 91 90 + 91 89 93 92 101 93 103 102 + 98 95 100 99 103 101 105 104 + 111 105 113 112 113 111 115 114 + 118 115 120 119 120 118 122 121 + 137 122 139 138 139 137 141 140 + 161 141 163 162 154 155 158 152 + 155 156 157 154 158 159 160 154 + 163 161 167 164 175 167 177 176 + 177 175 179 178 194 179 196 195 + 196 194 198 197 214 198 216 215 + 216 214 218 217 229 218 231 230 + 226 223 228 227 231 229 233 232 + 251 233 253 252 253 251 255 254 + 273 255 275 274 275 273 277 276 + 284 277 286 285 286 284 288 287 + 303 288 305 304 305 303 307 306 + 318 307 320 319 315 312 317 316 + 320 318 322 321 331 322 333 332 + 327 324 329 328 333 331 335 334 + 353 335 355 354 355 353 357 356 + 367 357 369 368 369 367 371 370 + 382 371 384 383 379 376 381 380 + 384 382 386 385 406 386 408 407 + 399 400 403 397 400 401 402 399 + 403 404 405 399 408 406 410 409 + 421 410 423 422 418 415 420 419 + 423 421 425 424 440 425 442 441 + 442 440 444 443 459 444 461 460 + 461 459 463 462 474 463 476 475 + 471 468 473 472 476 474 478 477 + 485 478 487 486 487 485 489 488 + 506 489 508 507 508 506 510 509 + 525 510 527 526 527 525 529 528 + 537 529 539 538 534 531 536 535 + 539 537 541 540 544 541 546 545 + 546 544 548 547 561 562 565 559 + 562 563 564 561 565 566 567 561 + 568 548 570 569 + + 66 !NDON: donors + 7 8 13 14 21 22 41 42 + 48 49 55 56 59 60 66 67 + 81 82 91 92 103 104 113 114 + 120 121 139 140 152 153 155 156 + 155 157 158 159 158 160 177 178 + 196 197 216 217 231 232 247 248 + 247 249 247 250 253 254 269 270 + 269 271 269 272 275 276 282 283 + 286 287 305 306 320 321 329 330 + 333 334 349 350 349 351 349 352 + 355 356 361 362 369 370 384 385 + 397 398 400 401 400 402 403 404 + 403 405 408 409 423 424 442 443 + 461 462 476 477 483 484 487 488 + 500 501 508 509 527 528 539 540 + 546 547 559 560 562 563 562 564 + 565 566 565 567 + + 62 !NACC: acceptors + 6 5 13 0 20 19 40 39 + 47 46 55 0 58 57 65 64 + 77 76 78 76 80 79 90 89 + 99 98 100 98 102 101 112 111 + 119 118 138 137 162 161 176 175 + 195 194 215 214 227 226 228 226 + 230 229 252 251 274 273 282 0 + 285 284 304 303 316 315 317 315 + 319 318 328 327 329 327 332 331 + 354 353 361 0 368 367 380 379 + 381 379 383 382 407 406 419 418 + 420 418 422 421 441 440 460 459 + 472 471 473 471 475 474 483 0 + 486 485 500 0 507 506 526 525 + 535 534 536 534 538 537 545 544 + 569 568 570 568 + + 0 !NNB + + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 + + 166 0 !NGRP NST2 + 0 1 0 4 1 0 6 1 0 + 10 1 0 14 1 0 18 1 0 + 20 1 0 24 1 0 27 0 0 + 28 1 0 30 1 0 32 1 0 + 34 1 0 36 1 0 38 1 0 + 40 1 0 45 1 0 47 1 0 + 51 1 0 56 1 0 58 1 0 + 63 1 0 65 1 0 69 1 0 + 72 2 0 78 1 0 80 1 0 + 84 1 0 88 1 0 90 1 0 + 94 2 0 100 1 0 102 1 0 + 106 2 0 110 1 0 112 1 0 + 117 1 0 119 1 0 123 1 0 + 126 1 0 128 1 0 132 1 0 + 136 1 0 138 1 0 142 1 0 + 145 1 0 148 2 0 160 1 0 + 162 1 0 168 1 0 171 1 0 + 174 1 0 176 1 0 180 1 0 + 183 1 0 185 1 0 189 1 0 + 193 1 0 195 1 0 199 1 0 + 202 0 0 203 1 0 205 1 0 + 207 1 0 209 1 0 211 1 0 + 213 1 0 215 1 0 219 1 0 + 222 2 0 228 1 0 230 1 0 + 234 1 0 237 1 0 240 1 0 + 243 2 0 250 1 0 252 1 0 + 256 1 0 259 1 0 262 1 0 + 265 2 0 272 1 0 274 1 0 + 278 1 0 283 1 0 285 1 0 + 289 1 0 292 1 0 294 1 0 + 298 1 0 302 1 0 304 1 0 + 308 1 0 311 2 0 317 1 0 + 319 1 0 323 1 0 330 1 0 + 332 1 0 336 1 0 339 1 0 + 342 1 0 345 2 0 352 1 0 + 354 1 0 358 1 0 362 1 0 + 366 1 0 368 1 0 372 1 0 + 375 2 0 381 1 0 383 1 0 + 387 1 0 390 1 0 393 2 0 + 405 1 0 407 1 0 411 1 0 + 414 2 0 420 1 0 422 1 0 + 426 1 0 429 1 0 431 1 0 + 435 1 0 439 1 0 441 1 0 + 445 1 0 448 1 0 450 1 0 + 454 1 0 458 1 0 460 1 0 + 464 1 0 467 2 0 473 1 0 + 475 1 0 479 1 0 484 1 0 + 486 1 0 490 1 0 493 0 0 + 494 1 0 496 1 0 498 1 0 + 501 1 0 503 1 0 505 1 0 + 507 1 0 511 1 0 513 1 0 + 517 1 0 520 1 0 524 1 0 + 526 1 0 530 2 0 536 1 0 + 538 1 0 543 1 0 545 1 0 + 549 1 0 552 1 0 555 2 0 + 567 1 0 + + 0 0 !NUMLP NUMLPH + + 35 !NCRTERM: cross-terms + 5 7 9 19 7 9 19 21 + 19 21 23 39 21 23 39 41 + 39 41 43 46 41 43 46 48 + 46 48 50 57 48 50 57 59 + 57 59 61 64 59 61 64 66 + 64 66 68 79 66 68 79 81 + 79 81 83 89 81 83 89 91 + 89 91 93 101 91 93 101 103 + 101 103 105 111 103 105 111 113 + 111 113 115 118 113 115 118 120 + 118 120 122 137 120 122 137 139 + 137 139 141 161 139 141 161 163 + 161 163 167 175 163 167 175 177 + 175 177 179 194 177 179 194 196 + 194 196 198 214 196 198 214 216 + 214 216 218 229 216 218 229 231 + 229 231 233 251 231 233 251 253 + 251 253 255 273 253 255 273 275 + 273 275 277 284 275 277 284 286 + 284 286 288 303 286 288 303 305 + 303 305 307 318 305 307 318 320 + 318 320 322 331 320 322 331 333 + 331 333 335 353 333 335 353 355 + 353 355 357 367 355 357 367 369 + 367 369 371 382 369 371 382 384 + 382 384 386 406 384 386 406 408 + 406 408 410 421 408 410 421 423 + 421 423 425 440 423 425 440 442 + 440 442 444 459 442 444 459 461 + 459 461 463 474 461 463 474 476 + 474 476 478 485 476 478 485 487 + 485 487 489 506 487 489 506 508 + 506 508 510 525 508 510 525 527 + 525 527 529 537 527 529 537 539 + 537 539 541 544 539 541 544 546 \ No newline at end of file diff --git a/testsuite/MDAnalysisTests/data/Amber/__init__.py b/testsuite/MDAnalysisTests/data/Amber/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/analysis/__init__.py b/testsuite/MDAnalysisTests/data/analysis/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/capping/__init__.py b/testsuite/MDAnalysisTests/data/capping/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/contacts/__init__.py b/testsuite/MDAnalysisTests/data/contacts/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/coordinates/__init__.py b/testsuite/MDAnalysisTests/data/coordinates/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/dlpoly/__init__.py b/testsuite/MDAnalysisTests/data/dlpoly/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.dssp new file mode 100644 index 00000000000..9c622abc6be --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.dssp @@ -0,0 +1 @@ +----E-E-------E-------EEEEE-E--EEEEEE---EEEE-HHHH---------EEEEEEE---EE-----EE------EEEE--EEE-----EEE-----EEEEE-----EEEEEEE-EE- 1ahsA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1ahsA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..0952c81a6135185d5b43d62ea9e17189cd6909cb GIT binary patch literal 16671 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 NHbsp|vtj)A{{X2vu7Cgl literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.dssp new file mode 100644 index 00000000000..f62196a1206 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.dssp @@ -0,0 +1 @@ +---EEEEEE----HHHHHHHHHHHHHH------EEEEHHH---------EEEEEEE-E--E-----HHHHHHHH-----------EEEEEEE----HHH--HHHHHHHHHHH-------E--EEEE----HHHHHHHHHHHHHHHHHHH--- 1bvyF.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1bvyF.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..a87c66cc0830d6fbccc8bd4ab3362a0ced12fb30 GIT binary patch literal 20294 zcmW(+Wk6I*6c%ym?v`$rh9wn|T)L43r9)!rP(r#vQo031x|S|!1?gC732Bf{^3;<8z2g3r#AhgDkS;T-eb2y33usw`S=PxaZ;8W%9;9Haqj7Y6 zoLdC$IsJfGe8Y8r-~~yZxGH>}^J@4u*aV>;ObeaFPcBK8r=0fZs^eAQ4MX)_R%-D; z340S(S9?6ST|o`slH(dg65zzNTjP2E5>UM-hp=Pmg^@Yi`w?qzP+1%aiP#9v)veOg zE4s0-#~RKl%NONcrUQyCy>T%rmpPgU?dYxVlfP~QaMN`+`nFiWS36!j72>M>iY=N= z4P(ha$XyiO!uN$m98<)LHoU#=JrGN8mzTZ$tfidD{$W%pW;&+h3p-PF(dGmfG2K(~ zFVKV2;wMhfjR*fC`NG1__B&%98xBq-`&wIiy2(+S)ltp*i=zgNOXL-x-TaG){M#cj z11RxE>oNP156`!zT#<=s)JI~s+aWgqW*@~*bW)15KC%ih~o6@6myc>A5I zqV4syU+<3SOuu~4l&?bMzZX1^65_h(ltNkbh3uHvK&He#cYL|Zp)n01&e|y)*-)*S z_txeu`*+;@j2eu+gphR)Gc`2-{_F6f{L+*JcMnG#TD{nMwvm=MLg$TtYiOSJ-PjlZ^l!m_!V4??(*toj&EnAv^d01V!L12kvF?+7 zMZ+F14+raHBdx1cr}xR5<~@DYSiV<>A~0kAGG2H9FUX+5bBVL#NU>C0)s(*sTm1Vs zyb9sp;nc~57)8vD7r`WmIk@gO85QibwuH2joqdofY9McPen4VK3W-N(>9r5?)DU~( zxS<+wfOy<$U1Zf|rnRl}GQuT&H{q8o_+8(~uNpHgj_d><9t#(@A}TzgMYY>tNmNbY zM&bm%lw!IXTm{ztFN{SizJ!w+KHL+0I`dm#GV42d1q6K&|O`a0XH9UXmMzfIv7vXJ{Ip>cPFL&-+577hxV(r(sfz*j0=-)@_@ z2|lEyZ9mk(`^!uJ?dh}CxOkT&wC%@L69@R?UIoqT$KFulA({~@meGzmJTt-{Yj+9W z@OZT@HD}ett63pqU!H(JH(hv!TjD~BO4_->^|T>9Nbsov3^n582R|q6BiMJpJ1=vB zZB`w$yFe0h%GGbo%L2HKLroS4!v-XD>j%UyvMT#IOi^N|;Q?qAoF z55e9Shjyb=&27E-;$a~v8#O8rfrw>A?c|ct17MFX%wIm4|F*s!=J4Bg*zGz1eJ)&( z_*$>#OeAh`&?Ozdy4+=&NE^mdSJM6dJso{c^y}lbSG`tQ^4|)L={~$lWAv3jINORC z-hj*1Zm2NL*cmUhJ{cxN)E1rx$GL1TlV;~Sngnms#EU6^o|nqLw!`L|?tC$GGj zaZXtydZ)QU6yo5Fo%9sG0b)TnR}-^c7+9#O`@t{g1{xec5859je-r62MP3oSi34Ws zP8Bkh>2p%6ip2qDSc+)e&j-J4kirGb{NJCmXHVvqTk6imCzv*zmfpam58K!&rfCtZ zHq8AK(5C}oJxFH@Il#B(G1mKb>(|M01+;rU7X{|JtdT5PT$1f06r0WMI*z{uxAtmN zVT_C2)sw|vw(&eq(BLiOS*j63Z>rty#&n_z0VxFjUF}*$2^~o-dT(CDPNcp;vQu{QZZI&(Hm z=2_l}ueq(L8w9qsvNjPQP7c3SuYG%gkH~q-flT{0izdFJkI65krzU37`=NtBsuCSc z*hVmC^V#PYRSq&Y`V4tOUru7OhZN;!VDV2tOCLFd4kVPRI?}@}k)Ha}AM0-??N+V!6oR}4RU6vlR* zW>~3_@R1b3`*RPqCI!S`2Q$k|vq6wqwCr&kIhZ-qNZR6236sych~$`47xgkcQ`(tq zJJHA!IcnN>ns1(BZ|CZQBhvXOr;oa=J_vI}uP z0iSRG3@+8f-l95&_EbNku5XXqH(CH>9DN&irGdf=%KV1l-yD&m_4uQ95J~c9eObe9 z&Ky&fu`tW=@hCn`YRW&3w34aiQxh7xJ6(l zd56>@ZW|`PQAcYFmq=O#my}Lf`{&i^t%6%G7INW#V_Ybskx}H`@5_`R zU9w10FrBk2-)}!1-}uvOs@aD>7L089v?(SA$(Pl@-Fw|dRYjkSk7oEB>o-sDrMVuI zxD@31fmWb0YKtJD_SI1vgs+SiwwP2F0%!M}Z|>pWww3juD>d zEOnZe@D00?!O-3hKa1C(dg_fxL5;iJhsxuI+e&#!BfTN%#35gZOAB4GxR5_8E>36EvLxiCUGO-1gX@JiMv zmIiD$`y#hX%ph%pBc&9s&&$~-l~rWJmkr1MV79*MxisLJwXY5RnEW8RsmZUSvg#q4 zv;YhlA9lknhgfuUc=t^=_mY0Q>EHfx^Tz!4Cr3h(yQLLQKM(zS3JrvcOF2CGStq%l zb=JcYWW*sRbdZm$#4SFd`tmXvC-$Lin z?~8hUGX5-3XlZz-lD?&XOicChAn@AyCp=Z~Z^H5KX@$K%ru7o_Zu9<05HHG#ns%)h zpzB}37gr_kvIx72c#GtlkdRuSU6m-S-7wgSzwzj&e)v>@T?rcN9I&j(H;KkCaDP;5j&J&3R_~Y> zg)(2|FnNAkHGU?uYqZdvin}2q!hw1oa_#X&6uZC_#tX4Acy=_)BAraZkGBPB0ye6+w!($}Rs+0z6 z$Cd`7*_-m$(=ba=Nxu?ZH4HjUv)*su@N_$Ea02n}tArKD(mW@qKu?U8=i?pziWh&T zyjL%=ErllG;3J1RwkE$BIwAbQ52n%ICpCq*o5tE!yw%-@&YPjc)5pD(dOd&N(V5QC z)sc=tCtyh~hD48ijTY9vRbQV4{`&z3+#SvDF*lvhIvxG)zBKQC9gLf;MQ%q08xk;R z3oR0L;cDDR^T5&;H^Oyna15LYGr~!`)(Il!b<=seL!g&6b#ybh=ypP z$4DI;nO5Gv2Oww16xIu?1HpKgg}e>U4_+7`o@zK5zoGuv#t_N)jCkjNVLD% zT&#^zYSd2iSGtMrT8$fOZu@3UPaL5YoV9Ey&}`$R-P@lO=yZ|G#@Qch@~o zF)Fvav!Yyf6F2}5uR&?$(SkiZ;|B5pj1+!$`%=aJ4-tF{zHZo_;iz;Vj8)p}H2(Fk z*SaALHPA;TsIqtWupq9JQ*pN3SN+y1&eq^cT`5N{*|smTAFN*D&A0W)X0 zJvAi?WF}*^%`O-b3T=RBuh8F(DIBzc$5K|=i)NT`gAF1_cQZQ$ zGT4bJbR|aDJt5161h}VbAsJmn3blp@H=e5{fj$q1s(+i9k|FBP0kyNAhbdItD)0+6 z<8R`Ab@tC&?sRM~eSveW5v)jjW6Zs{#NIT$Q`k<rFJz((fkWFY!s}*NC zEcH8g_;lrz$|~h*l8*AP9JqiF_u3nAax1>X>0_Itg3YYue7EVp=Q6lux1qR8Kt8#g zI7A3*_Wv!LKH-{Lg6Mx~sew^lS{#?fefjZvdGEC|DFt=(uVmNbATfd z7>%zvG3l%yy^(WOasR8=P>$N`Rnjh!FW3*-V&mHQD|}5}!uLJ}{pftyrm>_Mrd0w= z7d2)rs{g%=8C*~mF`7gER3WZPqB#CJvD@zn2Gl(;e-*4^5u=NE&qJG=OG7~tnwPy0 zYK6Debn~4+iIM8kG{>bMKVE_?MZI9|nQaYaZd&13^ZH{YkDHqxLVY0l3(R+lt1hTl z9y)3-2KqUao*%YJu14c7eOeN+$f(Kasr8{VHB~0Ug!SMKG}R6^3lmMD%V0%6DNr;d zi8Yd?-$=Z1`U2~_2z%n%P3%P0>{=A4lq@;~bv2G1d3j^}f`44ZbPrapO50Dg;}nzG zgT0Mnn6l6BOXK?Dgvehkw1Ibj)MiS8(JfQcmN;pKg_}&{iNLD0gx_RArWC9Z#}6tR zvrL>CQh>NlN0edk9>FfccM9lbsf;nG`I2b3mp`N=ci@< ztEn1p_L3dFcS0hgn6~%3)2h;-PT{7efbBcjB}S9lr-Rz+OwUfN#nT`p zsq&a^kGa5BGCdqk-IG*vEw)I5R4s=JFC7i zU@(1YcL9K^*$X^$!bC>ehcnm@Kh+uDWOcd643PT%L^3O!H7OjoO=me!>I~4tSY}jjw`~Z+rVk!dCsc6@fS?*qu8Cji7(}{-FEQ}{SbfP-2ftUxNJ!gt)@c<5p_5ma#<(YwmuEQi6EKTOT_530hxzuE~(7H)Qh=@Ie7P;5NB^M|% zGI%0k6vLBocynFz#HA%~0@F?@$1hE#_nKVb(vsYSI0)_b4>;5bt%sm^<5%a7r2nE~ zaV4#gUs&+P_W_;CLf%TN*ea^W9VcbT&Ta{&VyQ@1E0YttI~Uv9n(z%DLH!obcB|!| zs-b)l^+rbgAWXSPISr(DyOl3=;wRjg689}cV3=zJ9pb{N8S_=;?^WBd0rAgaGFp`l zRe>ITQ{JzJX`b3P#;=%P&D78Jt&;-lGMHAZ$<^w=gqu8$3YVJyfLPKT<28(&QnbfH zgz@EQ($|%%1cc!x3TN%v9Wc;VjRV7{rrw;pmVTC1L%(Et=?}Vj=mP8A!mSt65XA%w z)2v;+3gz3bL_*Z7Ra7J;^hh*AneFcx-ienKzP{!YmJnWqgV0}+3{-a4D8r(wH)ZO}tW&=f8LW*F8;WE1+8&Mzi$_pjb^MS39+0pJ)* zKb^mX-1MBhf}yjJK_^6ymz8UYHF z9XRq>&&HOTrpE__g`{Fc&E0e@{$;!;1s?J7;3VwL>bnX2-zJUR|G!jNGN+g++N6m2 zvC~^bJK3wJa5OPNeXQu;fh&sx4y!+wF8w{^#tz!!_?{$1E;R+79e#4vxAAO|pZL8o z(v%KvFi76gaBm<(qb_gYlb(i?gtR8aw;7y>DUL|fkeC2_zjYg{JM7tBp+>~8qCsig z!6&MG*!JK|qGUnKoUqdutQ@^?#Y*r>_k6$8p3zEOsfa}u9?9x0j6`rF zjwrm=(B_JJu>0e}x*L`U9E#3U>C4!q-tlh++e#T1#`s%f?oC8RV?^#2U)lTk-Hs6G z6*3vwYK$A=w_~%Dm4Qo2t!uo zC36Fvl+wrnrM?V44F437hXWxbhLyW7`A(76;>iBtd!27W7?ycSPm!{ZX{vU^EoiEu z-k5%>48o`B0DeDCj+-pC74zW^r?bp#IlR-!|6uWCH(V-6hSuu+T{eEd1|oEwcy_WE z`U~$BZj|V7Lb!!rU0D^KOK2aCc!+jS>~4L*Jhl=+X*;p#sMGzuL5-oW7}?Zn)k#^| zBekkvJ}Irft#k*@&t0ZT8neb~47PUAZk-idc|jRtn?WsOtLKqDv?O@;4oSE_7;$)J z#JL)(A}@cM)QVEhWaMOS8X|VN42ZLeWhv5}mMCSTgEvmm2$C#Scn2IaGdH~v;G8fh z+OdzOnxU=Oby$KBDwx#tF!+Vx(ehg#KOlYGCs1-t85VhwQc7!q7M1JMucQsXuX0=F ztqSsAwZu=SkR3sze92h*oG2|fxANUr)G0}C!r{DkHs!|mJ6=A2uaoOVEv9?)cp6KV zfCvloLVfDoL#=e8zi5WVm6nvpgK|qZ#8rGu??DmJoG0pJ+SjhD7h#NacWCJ)f^E>q zmch#Vpj)qc=R2Hq?PrQ+36SIAH{U-$SQb>LTwkl_`OH(K)|YTxTsfm21#Lz-C^4bV zx2fhVPoTJo=p+ZtY|`zBE^$6AU|6D7hLuz8Pn9D{o{f~n?!~E!cKY7q%FQlVyiBs) zq#67hP3dFpND&W#g4(c_MJmGiZrk4@1@D{FfwbM3C-l!O+=&URV&bGi(`;Pr%K5FX z$kG>^#Lc-OoKL|dIy`I5@j;U04|N8v-D72@u=vT&c5(t;T5G^i;COxhPgrAY%le^! zLLRRnIC091^-nDT-IfChBu_RayKi`vAUVE^3z70VCB%z>IHzKAHKA>TL36%B)suSSWT!2CqYNzPriz3X`L@ zC9~FsotBdGlHz515^`(+%_D{RCM+E8E@Xu~{5|)LZ#b~D4 z9Mt1VRTPnuo@h6{DtA~-Ef;?Gp<;*S`OKyn_ZgqKYE+Eo=QT)};`{L3CMHZ~ z*DDyAo*hv)=t{(;NYG1rw;Rcuc8*Y%W&cVsi z!~=v+O9`s|Jd#h)^oK<5O`s;cx#534 zQj(urzX#FQ7U1LbmTL?Q;#b*xTU@XopXL}RVy#X-an1Oe9!HYTB`^9IIbX`KZ1o*p5;}EnSXFWn;Y|&G~{;9*Ep}-WR42r`MzJ zx;XLA$0r_RS3m8AZm+q$1D{BWo-3w6#7Ksdf7s#x-w)1l9K(stj1YyWeZP@em>v)E zH1_l>+!~U<{_!^pXg_?up}YyVolC(sXhF9Kz(!FH?SPaT4|~;Zsfnf~WN9 zsJiCmlF*f!INL5D7VT|1NJ)?*{Y#r%DH*28!E)u9I*Mr1$97ts=0)n*ecX^Er*Hm+ zIDLo6f&Ek`em=Z+-NSdPn_0Z%CK$3f;xjtEH4YvsnVxVjF6i+oCgdo!IMkdFL0wJ+ zCIli;12+KykNG?hzd{xGf=bYr&7jb}uyl%W{ndE=w#d!Bld&VHswfPm{MtU+O^<6X zF`TroY#wv?pAOuf$)6sc@+PrYzDhmnXN2Fpx9`KDWh&MpJ}l6!)n}Z5TQm7{Ay_?S zU~kk*z9W_Un}aKGclU!>5{O+l*xh*2^dxZYc_!yVS=U!ZIkltkV;XQ3ph3V(tz+s1do+s=V@TTo=1{w*_wujv+DOMzi0V){0TS%(f*b{j zfmo*l{G4s07-)pG282R!Q$tPRYmlvO*1n+!urR31hNzP51zityrp3v--t)9TL0E2= zVx25n24~&APQ>~7MkjE3d0@n*3?qel(}Fa)PM@KFeS}+izjlY4_;xFV;DBvmovXdI zzRI9CPoUNxk-7z!rinN+Qgoz>h!4z)w%Yg>w=`2GVEDIqVo~(de&v+D{NT~XQ8kyA zZV)S4iv;l(-XbRbG5t(H($k2cp+LkI*$}sC4;eAMZ%-J5Rv>VUuUYvN7*Jn+nmEH1 zz?@awnmV9UEG3uz@oO6{={7F%InEh|th8W_{?)4q2}rg=>(#^q$RPna-8jD6c|6(v z#IQfAPFe=&A8st~_&pKK+2s>iIAofFo0snoCyTuf6_#2x#$?&pRg8K7N`-C>h;sN< zmYa|rz<0J2(Cp|dzB!@FB4aGq`Mg}O3<%&O;m>6**Nj(;#?mo0B)kXaxqE=V36 zp}EKTRbST102(}aS2g56bB3RG9A6#Xla{V zU-5B*20weHlB>TY6Z^Di-?mw-M+NHDv%h18GG1!viU&oW5r3$@8G=-v{Wz4UO5S82gEY|%)^y=r` z5m1Tt)@JqoiN~(`G~#+@+}zQtFY>3NmmW%;@e}AKhN6?xl{%M0Sr1EI$~5PS^4uUR z;Q0VECz=o3s7n1cV{oFMjShl}q-2z_{Zx~ZRBjRTc3cngI|z633bCO`4PS6ubzQ!s zCeVX7K5u0jZLSDs^c}Ot#$3K5`6o=gWv zlcn;k`$fwphd3ez^Y^o2(qZ=kS;C;`;QJ!!T%;^63#HLTtT&DXaWg04RriP);y^fE4mqdk!CwyUJ z$ACdE_k-CjDdI8YZMO2k_;1JY0H7)$`ARyPqmRE+InPbIH&H1K*v$8I)f?lMIDCKI z(}U(e7~n_^P=$UfVUE~^&R5{~Z5E%S>?8Hb%L7*r9zs<<1v2v}GeKk99lMVqK>)ao5r7|Lpmb~okqkrf8 z;6DY26K?~PIa07-9L(RgL)U=|8x=z;!&5qMglDDF^b)s}X&)Kz=~Xe7kn zp=R#;`TU1)1hCkC8JNAQRPB-YutD>)w$7>Id7)ubXTz%*v~8_P!>CULcVm;nnQh`+ zjocv2+OAuDKVtWZ$8(g8U$C!|&XxFnmQp42QMlK(vDK!QQhkR%!dWpsD##f!6?^G> z`^6@Ijhh-P6+t#+$SMz#KdQ*=L8CljjGu5NHuZ{RdDdI$fPo2nT;0KLN3HEP@I3g9 zAWrJMJL^wGqzHq9+(#dp%R_i&nMs*W{)ZuzdZ0RM#FV*-^7D_NCjoC zS`#~?r8-SfMvtO0ZN6y(aNNBQ_v9Q}I`MoZDEa%5e5v}M!`m0Pl4}FORV)ACeGh4^N$ez}<5`}@>(wdT zxpZF(vGk8VFIlS-@&1J=L@vFN@DSQ|CtT@D7sYHD7L)q^qG~z*kyZM%v(TIx>g9&I=DzY|I%~2 zId~5AsUx&3)F)M0%}+IvK0sNn$fbMHM$pCFt+<>2VwP{!$X}|flN=L9T+P9JDCcB^ z_wvX3T=R<_*BZOnc*{pGT?9iZqF=8@qsLDxSzFh4JE^?BMOM0m1-sLO84N!px-}MT z=3ie_Le@w|Cdve*ghzz0^E69)t6jo!zuFnN5x!<_p?Tb~RfY@~aEuyMlneAGvA}e7 z{x`N4CuFHbi3k?qehZLWFzj%A!f z47T*IC+q8}(4|%Qqnf-=b z!{KB|-BstcIp-rDS0P#FqK$wn4^ZTatcjbBedF%j?bkYCga9g2wD2gt?e#3MIvwkw& zypdv^N=Fz~Wz1V<+$_UaCj2XRD^WrFc2V4GlE=gld5xDe7le!Rr-^jW9$-}&Ag{k0 z!bhcpD}LhFV3DK)pE9_S7r0Gr@^m)rskIdh(~SW+?uU;qPW)Nd7~~OUcxs3dfd~ z#=U3*&=(%qiN z%hE_I{%X^`tu#@jG;4*)yQDk;3YX5aBq}whF{gijoQvRcBwNFa()8i-Vxq&gYnB+p z!h1tlibGXD7+>f;*hv)*8=tbcpY}e$2?6YgAcBg_SV#ZVI=p)jz;*kq3oshv@i&@S z4Lyedh(6-Ul7`N+sWPLNbVbNHtQ{AQfPV6-zyh6`5G!R7O8Fn}GFlFC=>(UGNlCXE zm7k2RGmI|*xH_M)R0A?HzY`zxi;K8BfEWx?+|4uYyjOnD**7vtes>IX@0cIwBuTFG zbiesNd!eUyBf7q-GWEoHSe?f)v76UZ25=_NV{;ZsUaEN=Gwcsnm97WHFkXcLR4u*HSoh;6=O zM|a#GYe4{(FjWFxbzVK!>w8eBdO=mIL7Tz(as0HP1Q0lRsB9*+M5gk4%O|$?huP#S zZY$IfEJb6@G?eQ0v>YY_p(ImzpX1~QujyArOlTo>*>K&o!^fs)WbedN=u#G3OeUX- z(!uAw0WRtIVSVN0@gOY(oczt6t|umeQn<6N-GCk`h8Uq7QsXG~aH)=Osc zC(WLPA~4vbGY*04M)c|NZMl4CI25{g7(`3JaTP^V-8E=+XRxH#x1}IjrjhhkX;+%w zzw>Gx(}}typ5%CXma+AtL@#98DkS+146RvWjPL#fPIXAk{W?fH z!N%pZ+oQ$RT=}4|F|B&hODGUoHDlb&C#o$<5661%GmM9~(Myz84xA~1!LY7|<8PhF zQMUaOB9}V?%B>yD3AM(9Hp%@ae)vXW?KSQ)YkgygoE&1T6~I+WqY;&5?+Vm@2pOLM z+jT)_x6iyiucjkPM`mFC5i?uKuQ^hY8zkF=kr8~h?zGB*EC~c{^Vy|@BR@s``@*Xe z2Uh(dr9?i=B#=T^Q&r6!qqiDQh!LU+)n8L&sLv2MekWemG9#`bOC!!u{7Lv*e}x}|BcE>=ZRUON znojlBmzG?bv%kbemN=CFgnhf%r%E}$nVI6kqlgYT zS+JA{L6(9M=Q{H`CSH6m2MPAka+7sA-;bsXr^nMePs*zieXe|DNbj=mtI+VB2^If- z^05z@a@gVAOz-9OvMl*ly&DV{hl6ZvefFcXjRmU2ZB>_qVwAD zAAP=i%$){&a~yL{dH7xg2&~2%^Y20zUhk!#7!4Zgr`U!GE`#Qe>!Q#bmKK}%a~J=Q zL35!39MMo-{3}QQ*@qqyt?e|+Tu6h-3zi@yL=Aw988RLj7I9v1C~H1*N&z(Tc)e#g zucI8v(4jF~*B6Qs>4nhX59W4UO&^UL>i|Y1twN<^_-kUDr???zkIvf2OA9reGNMV+ zGYMLpZQmejCu7$2=-`uXnQP3fbgc!KpLi4=u7o6wWU%rHZFTsE?&FpMNykubmF6sL z=;^&Nz{W6vkUP|AA4#2)6+5qm>wdiNEr+ZLxkYE^RSGoXuYXQ;M{+z&auK&NU|vJ= z&T_m>%FD*NIQ%4~7;6@#V4Q;A(pS8$#|d#hQtK%Ub{KUKq-^;g!6eQ}-&vrzb6!AezP;6Dr?qlm~16Ge{49o`}%Nb85lCd!OQ0j;s<6xbZAk=Zb z2)`=_no*pgTaP%@Yrhn@eKy-`BBz@}xL;CTnF{n&dLl8iv1){i3|EZhElYv<25@}{ zdHvhfPUhDM&XvHBH&*$|^ui591-^nVU!rX@a>}74JccC4ct0q^;uQ%kUplt|ZLbTR z=E}8eq0+jcc-$}4UzYd2BGZCQq^6$2{CXxF6B$ouakP*=4?WW7)3Kb0&%jQNxqCj) zn1Y}9uoz9SGCQB}JhV*5hM7We>V?U1=N_QqBAiO-X`1gH98fx{YO z-CaYSb!9bV4M)$!t|)TaciD|nbm`S=*KU231GI!udlJtx7M51>xC0Xw0@qE&I4o9m z7&4r$JI!BI3w$CSn!-(J6zza@J_|?)AcTUZ(P(hBZYGvnL>&*ILvM%VHAgo0m9!)@ zOD65zbpYM@e+Pj>Nk!Di@pfU6ZaE!&NBh9WKv8bu- zF!t-W!rJE9X)_U0oVgo8m~qY~uM5&&)cLrqNgFi9bb5)~jl%z=tb-Zg>O1eTmsQGd z`?|w_i9uIg*0_reS^~u2XjJLBGT<<)6EJ*5&M-@jf#R;>^;d%X2SWEhKTJw)-ZJH) z;!_cH+`Jh=a&PUP+K!$*zTExcrOTWdII5&2#=*LN2L^V7}dvpeRL!tZ`RyXy`$sl5%IRy;7v>p>sT{DIf?>Zj6XvYFLB@= zfe-JagqS9y#pvq56w~DK+>ME@wkM6S+R22w2f9B@(cKk%m?f$mPNhc)T(e1EQxY(d z;|Ad`DL8+CMjXgW{>}Qr`9dq1O1_BH3w=1aHBbtSR{)PqX=Rm9DV3sfi{| z@E$UxCKF%PCDNxJ7r#upek$UF?0G)1MnMye^6CbeqYPCxr@R6Jc&?rG@We$Ix+N4< zLbUA6?*tqWHCVe1Du2d)rkJmj+#7fOxG3}A-hkrnazfZM=E8-T_9QIfPck+6`HG8_ z1~D?S_5FtNelbT7bO8untl43i96R4VfKDAsy*7KLydA`&d`5s^{=t!qa@*F+A(@m| zD`OU&?0iy`U8O1ihc_!t6;OJ+GlQfnl%9U_GjV9UY34yhJMPuJ10j7w50GFrndn6& zHAY1E<2W#aKfr$6rg0C>k0qg}yw%fY9M&@PTO45Gl~4plWOA+tdaZD-T6>)6RkYs~z%kkqilVJQQSJ2uc*AU2Ym0>y%k1T^m&`Az=&K!8*sy^Pv8`&tQ6_f7lu zzVQ(lw0lbS)lszUW79*QT7{*J+f(K%pCuw6$fpSg`TbaYuW>*mAr^jF0KJKBZe8>X ztUIF;xl_344OC7M8zL_5YpWBT!dh@+%jf+4v9wCX13V|oQVCVm!JE843e(p^p$tV( z4|Cl%;ZdDp1h_x6D4aA(X>d6e@hk%bu7tYA$6Gf!L@X#D3N#%&2go?4(byb#EKS;l zkyX@HK|uPon;;vKx)~#9_T{WR-vQcJ{^{Xe2DKUNL2CX_@I|76G!G2+c=J2$=p~ixe5m=pnnLJ@Vgb0?SBK|)G&CIC4GbL zs*(Was}0Icn5ZRS45OI;#0Q*caKCmzYwySJ3WJ@bCp@-gZ|oid#+diF$I+1dch>Uw zhUrE@!5i=Lz*npbDNdFgKot-LqJt|qJfp>7ar-d2w6Swbf(u#O1Qk6Ni1tWGJq&Ns z{r*q8_7P|>slu`dE{Yd7mPowjm>Lb@gdAmzuxp}Hm#_K(j5`X1MK_#T`w4gk$;;)= zqQ>wTXroCw7InG4>wQ&G3{4b~)3CS$Z646Ih6E7pXAG_CGR=(SW^VFim!0aDf8%Fx zum{?T83tDgcOUH7rx25biIFwrPicNx0RtZ)E;9i7TD^OIN4e9>ue0%Z%QEb@6 zKjVxO&r-knnaC0Qsb4A&1n4NuIAdmqq^lqEc91J5-eGO0Piv~PyBFH zZzFZhiDs+^I-BxYUtA`z`k`&Uv^I;jBT};aVA5;l6U0*{=&PP+?cy z8@}|*^W&Q3%?;iVqx$i5<|+GKRkg7+Xiy=NFP~hXu~C#0>}vQjwSV6hB9M498ELat z%)WP{xa<65eK)n_tB$Vpl~aHLKz+V3iGO{TU-+@*lfXhNKHq)G8f%Pq7;Yr{x;M;NTzObS|RIvqWBBKAI(S`KJ)iocJ z(aix61VKEhXzH!N$dsjo6~J>+{<}Bq)v_e(M#}ee$H>ycVo0Kt{v0zfUBE>a?Ev)5zJkI)*-`vFWPNWwnIlbzkU`f zz+0&e3mbobbleR8a3lfFmA7tC2rV0Lbwcgxm}<6hJ1yOwU;9@_Mao7cM6voI z>Db0)Neox7`vHb-+h9h2TU-^6AuYMc290R(JE^xx|62Rl^v2){0jVYnaL`XR4PBEy z@|Li+6s05Ke3~kI-Mi4yvM}bcuW-L?xy+ajRe#Xt1`@cxR$Rp^ufJix%GPX##z7aM zuzPVuWh&5cus2+7*d5B^AH)utRi1njGJwgW6wnosYyx@tY00&MGXK&vdY>HLtKiF0 zs1;hc#RgT`Z*dPd62nP${_hF|!0Oi2Z;oCVod8boyh@NygX& z;xA9p_Yxrw!;cBQ{-TN2FlY1L5EZCAtA84tCK6y4g|xUQnp@ zPB3@x{d_AI(4|ek3oWv_G+SBthDOwU7+GW>R(j!PnCzrA@qD|FK!0g)Vhb3>qICF?rwY}@)j{a*#~{_*4FVzDwD^#@q4$H{!_6d}=4WdtZcldGkxQl~u@ZAtb%7)Xol~ z-PsZ-W%d~7ciKJN-{E1{t3GiX{R{i0qzC}ol;m4z{fz}VTu^|O_PpWn7vkpP{&~I$6E^dQ+|Nq zLKVUBCreGqQDMIM-ECsyIOYoRwEgC&AHFacY3FqW68+vh3~hp?j-J&#iy!ZYu43>3 z9{bydJmJs>6iO)b-73$A5cHeBk9ekO7$))SP32Ns+u{VvuV@@-TEg;Q0I~X;m~6=F zA!HFiGi3sWb9ygD(47BDQzA~4V66Hyap4OscI=ymJJum#-LdSG%5_`ii3<|TQ~yk^D~%bfb7@U&34CcR>fAV2o3L!@j9 zMX#^pI)K&X)uW-p|7Td~q8+(eSANtU_SgMI3~ z`DAQ5dNeRovwt69yh5t}55RzDV`LA_RFD6Ph}Z>*xiPmYk;1CSGFtDPKG>M7pB^-V zRA_|=`GX%|ze#F;lid5~`@8|gRH9qY9T#T==XY~uZnX%Op5?hAs{6Z}XDhk689*%0 zJCvtO25^mEs+sxeJ5cn@>H)HPBiNXh z$&c;%t6PEOI^5xC?$Ni4$@%sh(y^L-#|R#NT6sIldLcJPKtv>riS$!%+8+QIK_2+DS!to#*2O0@kFY z<~IO|eXmOOeijxf@SnsHI?Ri>AYV*0{xBQZp8tptRw+8QNwsg!xZSCowl8`4U`~JI z>#rJ``_G%vJ#DpL89iNL9u9g${Eh>c{3e|39~OPgeB2=QNc%{!mUv@Q{R;n2)azUkLLab9KN*j{{m>JmR|`6-5QA)A-@ebF!pSbG=)h z|4BsQC0QfEf@{NVQhLW?`2yo&rht}6=$bm%tN7CM?i{^E#pPu-J!$hm`58#bO4%-L z-mwo|q4ql6akXykIgolQa_<2GZl$im&0~EZQ-N`nclqb0#n_@!5q*Q)bc%8Q}>26|wvc(8|ub z(<#FdD~c)!kOVw%0T(f1<4-fC;fXV;U{qMIDMT_2wCj4Q=F&_s!(#JErR&BXW?6K{ z4=w5wXi`!bFDm^fiQVmVyv{f#Q?}=TFnwnHX0IuEk|drg)TkRYQ>&{fV1eWMU3&TVct5HKmWpOr68gybC8Y8F-KXBVw zpd~G-8!`fm-dPWSNCRHgp@6f%?GQ8<{iZ`0kiCCAnT!jZe)%FDPS^!HK=)*@lqdA_ zfnVLi_xWLvHP^OL_@CZ1o4i671P;_tEs6h}S)8h~+Zw#J=lSd%BYS*RCG#=| zu-QU~YbH+DSeWxivP6<)rKTCElN=zzPZl?`eCC2eR%iocnMh&lR&BZ}FL38%_4!sL zn?hHpBiz9FSwdA6E z)1wp`lVhbSq$+ZR^VXtMxFP_9-*MeE(x7KE`)RxrKMI>e^!KMJZi8d zig4o59`K1^nbv}dNu4Y)r?Ie{GMU)oGO9*Vuk z^s5r)wbK|!zLriHnpsKl@UTU;hcdgiJ zw8ZHAzkKBATf9D7$@otVek$mLXU66Oq z8NGT!!JR)KnkC#h`mrg8KXNHLyo+q4%{0mBz#&*loNabr;rBQ*CQArq2&XF>cD2+l~akSrzEwiH%(eEOLa{>GJ7(jQzKrek;hpOJYWxBM}KTEOOTSvz>#F+ zT8<6z6P1Zyd%$bl)*oy%DO{n{(_vc%%ZW`7*2i4A^GgJN#4Zq>?x_zHg4Z3 z=S0UgKngg>P2-o}a&eB)--`Mz%Fyy%<)#Lt0BiZkzL=A5t;j zdv|U!ez>S4D6*E8-{=xHSbjEU95w|!hmSb^6o8(9)ShE%HPgyNfC~s*w%v&SCsUL7 zg#%UuWW1Ip?6sfy)?-#v%{@}r5I*Qt5+t`aeyX~{IDznuYz2WJEMHewHsa81f9^q0i%A6NdI7$5XVE%pZ;`yW~Gu#Er! literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.dssp new file mode 100644 index 00000000000..fece7e50538 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.dssp @@ -0,0 +1 @@ +-----HHHH-----EEEE-----EEEE----EEEE--E---EEE-----EEE-EEE-----EEE----EEEE---EEEE--HHHH------EEEE----EEEEE------EEEE---- 1dx5I.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1dx5I.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..67848cfb74efec07ad52f94cc7b88757a08409a5 GIT binary patch literal 15723 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

Lb_V*L{E!>8S-v**ZM2 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 j3%`fJCb>|k13JHcKqV< z&7MAVs@KV8!WXAmYa|Z!YsK*}q*qi@4u(hHdi#F%cBSI16pl6J`_0DO*i|hdpD;^F zDNkfBj$iF%h)Q&VTKiJhZJGH(4+^HpXVQblY1Gv&zLM@>qimv+LkwpAb9WQ{tlluk z74Q{XV(@;>4kN^QOdi4ERu%ixGx!*3X`+!SJ|Mz!0IB90@F;zcBasK6X<^V}-cIEi zTmNDB!~X}Qtv-L0NX)Q|CKYjwA44Uh1jTy&@0Nc>Ig5TK%h=lX)$+`FOx0Wi&e8AJ zD_Iqm4IW?bp*t76({}-F1Rc3YsN>>f^Q>g60A{CNz-IttB1^OO+M3nQ=nK%+F~!2+ zcL!do{vLMxgq;Qr5uz(aO3>wR4w2^e%wg{jKxWY4_UGEHrHgzz?IiW4RagROWOXFj z`3M>o>z~6biv;T{*6^W1&m2j4WKr~zT3O@u=VJkW#G~o*ng)o-x!zH|+QJBZ7cl~I zT98stzfAo&n2VNA zJXk z%j)dg!CDvs+Flq#3gY|<%?w4yY=Ji59M?WPb|N&>{f_&{{r9iV;zr@m|FlsA>AU!@ z<*XDZ3OVq6_j#uq=-kZM9Ok+9Q7#o3s{{U<5JLJBPpZ#dBqSncJ)6E)0kj2fOT3NR z&h$!D)wMJE`ZEuU0kX*ZzR5XAvG-3gOa=3XX`N_>CFo!L_%-=T+^h@Gz`jbH-vpfB ztlbn26Q685ynuggyJ+b?P?g+_Rr(TH7*8E*@%8DmA7eGlJpJP}w|l%yX}@WCOuIXs z()8a``@w0MTX>9p$|X<-z^pE>0ngyfM+b_%uEeRn67pS3MHVWTpj*eCU|*+qXv8UQ%& z;J#n@bf$gL^=f;bi^T|Wtxf3JFcQ^~d+&Z^j+K_?dfN3$LJ*Jv zlncD+{td60TDS3EB@@HkW)i3~er+mmh1BaRp}@w!(f7G38?s<-5-ZWoU* z8F>|7V(S(2N5~g06IPa>waz-N`TSA6_v9*J;l|Yk%WEo=S=k_q?Aq1){k| zb(eZt6R$$4Y+MaWTlzqSC?>FB9YWm1=CSO_gM=AuyYO7^g(>pz@{|?JC`R!wEnrJE%{aoXrk<7NL$$u!N+!KGUxo#68 zuGgPK*Pwk|#_03c;MN!HSz@*{HY4U*5aZ$P(w~jS`JG{0vSnCjR3OxEudO;)JdqsA zl-5(YbC1n{54Dj78?FvJ#HCM(@Ae9A*mF`0!lk3EH`amV7w{% z7Gxtc3XU9Iqf2wRIjIg6=||wzVS*YAUyFhcr$GDb{kl4Yl(&%VmiJAkk@2$SJzkG| zwX0_yNvIg|mJH1*nXVBxO><4xAm#So^W@gPbIZbZC|AhjWn2^KRQiU=5BGWgThVFj zjvZc&)YR(Q3f3CCt^3yY=RV*b3OuLYPpVHm$yr z$!X4R%wz6pTRHR@U%K>qux5MAXwtlo+vHjGC%-+)CwHztk{T;Z4w!w$oFdyc7lqP{leRh$6@~2pi zkn?9)Cw;XvdYD)cfVZrfe8L?X&{1$_TeLUR&0@)+l|e-P-WhS_+iL^5%0k$KZ7UMH z_fL+l7~N~7HE!WW`Ew>3{-N*EPmf*9wvHVrt5=e#tW>?{OUfDAgUaf;8!br#&GKaE zn&DL8J9`lO5jyVacnPED0xD@-vM8f@%*Xmw3=xDVYLdex9wk5Ri zfU!?jy(lfd2;Abz5AM-h+Z?RErO{2jksg4tyGKP-^kB_j4G(iIhxEdi<7+`OOc61T zBI1k@E8g+?%eX_(yd4n5TZD#Vb!9!JnH>3-jIgCOOD>q}hKee&d25cK-P;af4oE-Q zuZfIB{gtWwFQlXD?p$gGUrs4PJG?l-+VS*(nJhM#KF(^Ng1+k*SK^mks~r_+?2zmx z?&*Crauxv^8Ywn@DR1-dUh%^BxINNwkWQ)pHV(LEN_c5CieAos^=RRm`TxI=h20xx z21+{!Xq*1`jU{e0S@^;3*ml5Us_1x1dE(^t=+ zs*872ebq(ENxBe}UU5TI!cRV`eHot^;b?;1H9?Y*Zl~gnGmHp;Cxz9e0F!y8OFp3- zRb*2VTe~n-Qmza(UFsyQTh|KYFKpdF!sHy%J#ar=+nZsZ(uk7TrN3}gtT|zFG9}^6x(TEzR0xXdLZ=~0+UVBEt%31=xqCQT{zGB`0A~~YVKMIbUBw^ z@akt)*)h#p-aJif-A$-H9qF?{GOO>|17^J4XQk!J73imWns_gwQrHKSY_=b(XNgpw7tl2qw#n-~Xz0n_FCCI#^la(PMj5<&TIbUtfYbIGIu zLGz^+-;ES8N_COGVwBvqPt>&bq@gx=0_8k-P&^Xsh7e`8-AjyZx+Hm0=ToaH9Fg;h zq%E?_@;u>~-&Z?wm+%Z8``h>+JMs=ayH8mB0QF)L{K7khU9Wz11z-$3EU6Qu=)alg zlNJR%p8F2%v%EF@XNb+limF}eQT64Hmv2X0u9KSzM*3A==_}0#ycoc0RL=u>R#-pU zKHA?rqo>h9t#R|ob&U;=IT~aWkgl0VqTFBJ+d__^xjX+6XdX4MIn>JWjpI$71zi3B zukE~lWTnJ=_j>P1FN-TkZ}EU3>9wo;)kt z`cRmlZ_)+_C&Kt!@xA=rzn~YY;w3jQaSA#HV{VtN7`6Sw3?cdDq_tAo->)Y(IE%J~uhJ+a09rXFWHvi(V?z%zt56@3zX3{pB>2tt<7_GF%QwtjUN?d4O`sP2zP z&wCmoa_1||^qqoc*evXmd6|^)6Tf*JQIlPyTq?T*?!eoC$-kExJ;gkAm6FS-1ri${ z4$7~T+V%z&sS95`RA3K1x`EdlJ559<^5=PA-)4SXJ;U6brJ0E($LACy`<**BZ- z3VpbT&9I6umPByO!tACXL#rr;U^@vy2mSpJY^g2?G*_@_|BoJA;23 zFk~qvO<-9b?O4NnO}hIZ4pc|1k5x;W#)xUyD5RGa4U}W6iS-K!lk}FvU~T_m{2X7d zYTF2?M=ZRf%Jt4QdIp)SJ~W7Q76JYoD4O(glTs3`hksPR*dELIw;3CEI25ZJo|@=+ z=d&&^@b(dpqPjTtA&YDJKHkYwLCP^@*}X?bkSS|w=?%1)rHz~UP0LzD&(>Y2NfWvY zzL5zm$t-InQb$BoHutP$Cx`7CgrlnrA-{OZwy!P@O8m|Rc|;#EjqV{)|JvPR<}5@= zIV59Ey5`#0U9XtEQL;x5_qVwA4P&w{ZI7^`x{BD|_AWv@X(HmrsQcH1n%=~lw) z(aBg2HwE>*rC+EK`A`m96fe$ymNsb(Kz8>ki1{eLs+Gid1fRo8xwEDWQ9j1lfnm?|GwjOwws1ZI}5%Xb<>D%wy z3mg79c)spSfi8)ulR$Typ`GPpfGT_FxG+CX(~d&>q&4eh#qtWT2e;#Pk7eQtbA7ka zD<##Eb$kqS1TU*)UjJ3U!)^UIQ9MWht(WazEunkQcSbj;#lmPVfS2JUv16*0!&MuP z$)XC(LMF;e!%pMv&kXpw7rv^1Cx0CuYPt0+BwDx4c=3mX%jl?!7}mT0iO6-{{sG6D zSNzY4*6~J=q2&3^R1yDsA5K_8Tr9u4+fXZS#7Q=B6%5inW|kd`v_t)ebcsjMaSk1U zbCGD?oa6AkKXLyWRjN?|Zjtv!DfoHqb?q<@_-#Ezb#k4JB5Hu%j(|o(Jr;CZ805Sk zuL`BPhHMdBka&#Y1&TIyFBaz}r#a`F(UmCmm-1dVVTo+N-Utv>^(YhN@tmB`sjTjB zPQ*qS{fnu~GraDP;G~eUM;Ey`aUK($GvA6i!z1K-l%Wdct`S}`$=PH6bR?Rd68BG;c|+yZ~u$V9s3Vs_gs z+z^9`GgblKZmw3SSQ;c=RVj5T$6?vftmbUX(8g^mLX2I<%$?B(ig+=&}Z!2 zzFZykSTp(SeL{W3bU9e_Umj~%Xb*gYTnf_r*WNn7n>vbrRNVEJG2!K%THPxZ1}B&k=-yd;NuECwM(cg3oM5AU)>o9Z|G+4o zcC_Fr$6(KB@i9v{hf*^bnp%I525mC~O~tdQmm4YDp{~!iC6lpr5za-!fd%9z?9Ua( zE%7a7rs^DPQeBP5?9YRPr@q|10Zbr1$g-T)UHD&7z%)waQd}0;u0{fjn`3rKACeFM zXo%Q?SCWA|rVng`H2rbY#ll4Tn-g2(oaq}Ws5}wVmCTcM8nfHTW4i{?~Tcg#_=gyrct*Y>{d`0A7AUCW| zFBdr-xlkbuuWhm_qWWV>L{!J%r+rwxTI_UF$l_TD6LQeygt_Sr27jvICUe8Zgn1d8o*z5>*~SQhv?R^?qIB`||lB-}Q&T z8KS$tpa_C;#6bUs3>Q&;f_q-{@rna2%s^G!DD(7bM#K1(>)xvv(R_*2W5A-(%4EkCSd*$xNh` zNeg$yMC+rc1fb}8qH(=p&KHh)k$|AWWcSGqTXC>-$lbl+8nF%2;{lR_{R#eNzn2^gGzm|2imNH)lxH|%yDB_g zTqZFmF8p5i=#3D2X@o&{Qc2gt^i`-YXYy~$A3v+(jfRZJ!22L-l6Xx<<~GHq*G9|% zTm3m%<(q}|`A`Hf5~{3%`Zj3-M}Qxus0Wfb9#QSv$Q@Uz!Fj={Jt~;X z6`JbyNrzSHbznPq$D@H&`I3Xf&09_*MiuJG07v+RlGnV3N^ru7+TCho(;af{5GjIq z&~Fd1kj7YKQ2RwR1eLC9rN{c##l}Ur7N3W^+-ck~Sx!E8t_~u}l!Nzmx|o(;V(%mL zqoZYEPbflr7A+T2vykWDExv4odtlRiZQW7c4~QEXDiNFe-d~<_j=9f4RS&@oQ^-&3 ze7)sK#X#mF>iHRA#)r;3mrcl-3S!-jWL@T+&|Oi%d9pz|$7s=wmK{vBw$t>+KYnE8 zsN*#i)KO|FFbdGj8`oDz=yz0e+hwbl#&%UnpgnrJKl?s=hh0w~sG=a~2mfFQ)@Mn( z&owwDT>uYeZnVd8J0fEI*GqyDx9gw^eQmW+W;Z?!7%_mW9!|ZhW#^ps@pllVbTvyS zS6YdjHK*ACUVP5*%YIju^00|EkrIin5)Zh$#yx zEdP_IM_T;bi3yWp)t)s5K;26VP9(r9)*~6E^8OBcUng+JBkv#R^7M|s6=Kg;wH}fk zJ9`5?ZZ9RRgW==t71csZ1m?M!=Xc#Fd||u4;Zn9=l5(BgP1~ z6-LiHfQc0-GccYlUN?`e7DWQhI8KO7@D-PbH8A*^t*?lgeU~9e{p>nyb#2}O_ABPA zJpSJ=r;EEr66j!IWNMF9vuV}1shq+c7mo-_V)add%P_4Wk`RfgZx~N~*dum1^7FZ@ zG9jRrmH7)u?@B*!Xrayrht;hcuC?*aAn0&JP&H7%=h=c~`vOsKlDF?apb zfyyHCpH9F4RRgA1K*TqoQkUSxdAbY)qR2UckWM|5>K3iXT_kmSns#nl8PExZfF#)xdqPP7R%SQEU%5s9Kv|Dj~z&7Skp zis*5iy886q&#F5dV_c0Yx13HxEzLRTb>8Zfhpe4If$eG_PZweq&l}}*G>Y%}_1|R> ziIUj&x;=`$f(9V%BC-s5TXo>f`GJi!vNCF4BcH4(kUS=jf60CNh2T)Lk);D zNSDBS`Fy{>-+I@2|G0OpIdkv1=bm%!-urp>v!6!d;o+n6%LTCsR71xikE7cPpd>)~ElV5#3}Z=Q1pt^Z)bjq}?0Y??Fmu%Ea0o6e-i z_blMoOc1|Izkftfx4j*ejSn-8HQvh6 zJ4-QDeBM#}$mdk;-KrGJV-|;?^lED zs^)h0D5YyHZ)pBIWnM6%TaI}1cQ-nNeED#(JGnfvAjuY9mQ=rz;`a{=%7YZ!D=PPd zR5=$n8}f4^y74GPeSXU)b6Kq_f61E7)L0)L&~pfrKR<3=Tp&O_-oeUf2A_2&_ti6w zuQ{I3h_f`q?`{inKJdRBg0g9_B!<)n8oVV?LBPyOxMdYR2N}F6l>p zIzMS-$v@lT8}@LGN^;Jp`HqjO>-<$Y@ddYqL<2jx_)r z9GJ=m18la<4a3PVPzDX`{BPMReXr*lX1=*qIqVyg8dl$)4T|2QP}-D}fwBdV)s@OE zjzm{AnnI3PXqIiiry|!lY4vHf$^&YV{cw!DYZ$0IoZ|y(haw99@`WKW@+2M{RNkju zc73d-rl-%3IFDZ_fJIr7u@!ObPE1UV>4>;7!N04>z#hXHQ5?Gi@=|EY^}W`aSe*v1 z%Vv#6O7bY3{WCd=Q#rwA@Ma<;VcErEfdm=#^O!}gcZL`t8RP_hj&c1lgp@XLx48bR zDFEdeXzpuxF{!CD+T-iaNe%a*Aqs`{r4}KrE_q8#XhZ8);`g!zbM3?V{>3*G8|LJL zy7U};U?9=lk3L$N9QD~EU4J#t~Qx zJNmZsP1+uuH|M>6_fmLJ#tzE-+|^l4c|*sUjizFY5hN9#g?}5yQ5XEIKVkoT3BH`~ z2lj{)v%3a%2R~edoS>Qw(d|=}<(jB2hEJeHz8C@hksZ-Ksr6;?y{dZk%mziq8PGxv zH#P|rh-|+oR>`4&-Tl51a9(>9UF&e|rKPzXN;!c|(f_7+X;^u=TuyIbXMPhQ_#?Zb zoAHl&0Vm(;W;kb$Ev>O~inEZ%Eao9fm3;5+=k)ONi07K9cY62MM4G_Vko}|z+a!oA z!Pdy_B}GTtYU1#CNY0>CTy^8i3vG9cgdf>bC{IvdYB@4s&pN4YCgdxtEP=Iu=@N(9 z#}N9yp>@bQHaM0U$0bZYi-LyGu$l={4kbY)Dc@1e^q^zdXI-e9x&SM#--P7)gX!fcn(t+w0BsAnZK)u# z8e1bF)=&jgtx#2V0 z0M4mVk*WV>IEqLqc4s%%QnPO}zV8ro)NN1Kzq)rC47jo zjYt|tJP8sXfPdyLMlSRk48FvLg2bzh#Kw3(J5?T&6suitE;RiId} z2JW%eJ!(*_hKbv3>PtVtcw;=O=j8zq^2Ea4lq_g6sls$khTg-m@cq*Fwv@PYWF z(2%fSsS}70(SoD!m-tWM4=F6j6Bi@q0b5X-g8w;x?;EE48;Fn1M6L}?LEAZ+kM-K( z;GaNx?()trL^rlYpQCvDr&TxK5|s%}?eV+2_P&u|Co#+HEv~Zl%$Zx?8n%B=G{Y1r zhB)Q#ZyBpF9@l}VUaB<(b)nz38MvhqyinEV)HCvV@m(6F?ao;iuKJzV%ToYuS$K-K z{=rU@l^&TtZ;|pI5i%b^GW=~$09^RDo>N{g?mUwYQ$k`xIs6dPnkLPW*eYRvRS$!= zsLS9#uP}H!;D{-IYu_Xi#RQ*p%GY6!WUXgZY|9MHn?Kd^q1;E}j@iZ;Z5!_f*4shr zTXxaU>Ra~Fzpko}&=)OBd&hNtSc=u|CzN`gze+EUxizvDUtqacXk$kq>G4ZGzh(<5 zt7n2Vn*tYlp@Ig_KIDyRl4+h+BEQzZ>7-i>Z?IH8qx$*?rvNJ!eRD!&p_8Y~#o);J zMLxtJ|416v^Cn|;jKMKRwuWm;jOurtUsKn`i*!fj*lJ%`jWLayeR|9Rp2cIq3Ya_$ z-j;d9IVMCz{RtUBs+TC7%Uu-tiStkHnOB?s%+>D7A|mC~w`quD`Dt5?l$B6VBlOYW zvPB3;txdf6-r=eYFyx<7#Z#;ywHxT!GrY9BUD8;xM7yLD=9WC5PacI|t=>kzT*6;Z zyB2<2deihfO7(u9-R3NYn|H5_32j&ZS}A{zZLQj$7{)oM+aIF} zH-{x!1|v!yyv%S%6OTQ!=dvPhG_}VVy|edPH6CB={?ii4ea$k+N^5JxQ7LyAuMh+H zyMqlLouEiK%zRVuf-)V9hJL<@*B>hgvNLfPUGyf^9Yxl)nNrYVy;b*?7zwY$nRBk% zikF-=tOo66+dWfDUtv8#&(<#6NiThA+D1F%m>cVb2n?u;6=#0R5p^rEzCV}3NS^#D z0+l^)vIC61qP^AWFn(=w*cw&qR^_p8JUG=|H-9R6)0I|~%)xWWOAl93>~*(ZDwdye zM7yD|Y-+x#J4bz8c)B(Jeg2dVB4hb1f#Yw*Vl)`qZztL=X<(bp{TB#NuubaL>Tprk z4X^?8vHHkn?d?U=5zz1LEG-uSlzw91UjYJHw) zUP*1)zba2ouIk?8g0hq$MfA%={A~Zmk}+XSiMY7_+oX8gI?w*0hzD|~Lov9UC2qUW zKhe22_$dQ`4c^$DX37wqseHSd6SFkKCWp;Xf4x0!ysCrxeXu((ex2FxLzg%gfpw*L z=~*Jh&KVamKP^@aI6v7WsfY4<7{J3^^3oIlqsnvkY3-ELf9pdT#9YTkP0Zf$4H+f> zr4ou^`?f74qv)#{lHTNQZ2>eXBRl?%C-hC62JAL#p+pQFIww=)v0B36i=I&lX%{tH zlqn*HIm;OqXEQAJbH{2llJY5y3=QAcH5qoL986wEo#-hRjO#f}4MihWKFc!BHn~)} z=FoR1)|l6YmHJAW(qIoKRC08*p?iu%ZaqVt<_$5MP%nI|7D2nYE@v@ELap=ic8}7f zVWsU)-<|6~$0Y~~ylY=ZZz*awP)^?N^f74U8AMX`2wDLwJV39O>lH^aw(kRu7cXhWcL3XcQJ@)H4_1g5e(Kq``w}hx<<)8Bk zifL?(wpprc`?DtKOJFNJn#9Mgp`MT@F9f%2Y1X#xl0YWApKriGf(3sUd_qXuR*1qT zppqPxRRNdOOL}s4+h}?We!B4Sal2Ii7xSFAGt>v1I8f6AW-kKVT5prQjm&b36T`Lz zOo@8hF3kB%bMwza3$@}uz&^^UxFiwvqUaN?V*En~y(skRAml#iD{^2UEaV^b?9(F< z(6}Z0Zn&^ZzwXj09tBi9;Jx~fdiim#EMd2Dgjetp{Igif&|x_*sHL~=#BK>g)P;E~ zujs{lxYr7=o~ri=lV2%>dejY8WvkdeP19H+>Tu8%*yUv}I;T(jUKcaOvFS*Hp7|@5 zc4lXT65%h+=aj-~Nk&L!J^5^js&=W`Krhy7|E@dZo|?Uh{~keXIFg=}5`_q<*~jke zYu}KcS}t+puHy@o1Vi4JKA3E9YQ3`s=j>6h#cF3l;KXdYt@O)WTJc&5Uq?yFeqZ=D znLzjfLu4?5Y;`^vkw|DQ&l-PM@^pF*M9aVBU{fjy=-T=i|Xg2eY(2U92QcJ z7gXBB~|6?JiEDS>%ro1`a`RbGw_tyf0KB>OMx1wq^ z9p57^z>425_s7xVp@@nIA}v0Nzpx7U)(B=l)@;Xiiw$^N78`w3<8%Wfr10X*?x2I) z;(;IETc7v3d{8A~2S7K=xTkC5deJ_^py2P$4SxL))O*Z1F}`Z`t2)ppX!iU#&+PY^ zsGfNBFZ4_UKF>zw8|<#*AJJ-1{wh6=bC+hXa^aefu)R##(dCLie5(G>?A!?MQCG8Y zxm%6C+WohPpg8q~VS+B#3`g1aP|JW5PP{q~0!=Qd-*ZH_&0~ljIn%|&6L zc-vbboIu4DMV~g)inTgvsIl%!H_m1T-}q${5B9VZZb^4fkb>RBarWezPgS%N`j1gn zSQ0^zZFkk%qt)mvnDQ=Hf}o)B3}aF<0_j`nY*gu71wu6>@0H^+%O$cp@ED|0*NB4Q zTUhq2@RNR8uc$aKR_k7UHU=^5ZNR%V|K*xm7j|;nuWBy}R~)L8hB`B~Pq@yP^8dsu zGMRTok6G^O`qnud;{18+oXFv)b^mUdC~dztZ&if;VhiZ@rrd=Acv_Pz-Ts7`Ru?oPKlyqs`D-tYQ@fDKe;v+MhfL8MR&T)+o`ch|A@U<@NGazX|`ho~?_ z-u{CtD>*^WypMJT;FqIt5GyU8m2fhVQcS7R$W_N-CNhjE_1f+uvCMC z@S}@y+1tI|Hf~T%usWjs77Lh4U(`5;NjWUl+E_x{PAJjefCB{_wZPGQMwwFHOWCmN z(>s$^-a9i391YR2Gx~54kr?BFg_y$mp1&|FUl9q!$w=5C9%kMeK0egs$(eD7P`BE2 z_dLQvSu{U|ESgO0_`GR1t9Vu#%_j4qNX>ID@+-X*aOYLM#7_7;xN)lXJVb>tJ5G(Z zg%$pWA>78i3aoDXhVC}cO_QU4ANd~lDfHJ{YV&}Gxo7p)=mh5u(2eVZZC1=G&O%hekdv z%Koj5su6>V>>=N$z};qKG4r+5y86`&v`-(O`;>2^8 zNrW{r1!S6cY!iix9I9}8XV`x&YY$wMF%h!5D7$Soli^W3dz?JTYds( zUDGft`Sdcw0(~wfJOR19eCQzQkrrQJ1zd9DIUgZWl0!HhzZPO`ITH+Xd$qeT+w5jB zI0ejr*V1q<0ysTK%Zq z!1QqWsGgT~z-+V9-9KUdl1+6MmRXVG`byrfn+_sZ3W|y1oJSnsvtEOlXkB#V&ce(< zA_|e0lYGNth7Mszqs#$36m;vw>A3|qh;G7Yw8H}m>v#tv@QX;u$ z3<=jPyZ$VPzR)FnL{d~aSiaP~Zh1l6g@Nt2OU2iYNxCF^!M)UH5!cvP6&aHOdCupW z#|*;2C5g0RT@51BPH{~B5wUYG`K1Tu1;h)Z9S-z$l0+4u`A;{+$SS==FdBYMqe&W> z$mG&}E3C{_ZFTJrmsp>s0ngNY@mL~Yt=74 zz?iHmmD&`rwRew34Mj>A#?N8UE-~*iE&GQ-zWFxN5HkL^6SM@TU9YP zS5gtBk&%3WI?^Gawy?MhVXK+k!ysDlJ#h{R$TK_36dH+>}wEfjIETeSf zRTx<+Q_`gcg}VPPXaBXvV&`~}>KoqpN136jlbSQF@$ioC!5rHBe7s&}oR@Nkq!7mi zI;$sDBI8(bM1Nj+ziI!)y)4HR?ePaO@aIJHIO#Y3FokRpy|=}JxakzSHU3}l(MkDo zqd&7+$F+Jxsl54>oFg_aek6XFVy>sf&rUMVk&NGWPH(kaD)?|$(B!KC+)&oHQ>BAe z^y7OA^OVqCPm6kA*g6msw4I?t07&7Qh%{h1B$W^QtTW~|Zc?W1pRmQ zA^bnWvVJZH4~h?no!kqUEcS?@xe7@5hv1po*SDQ%nwbInTtxo7*8`3qWJwe?>(EHy z%CFei4t7#K``thi`1y0;aFd8z1LvhGvX75C_reH;iro$<_k!sGiAM?K0$|*3sRFbilf$@5Ci3IPIr~gSsfG>g4lm z$?YX~gha^T!=2`jg?#Jz1LwZxo%KVY57`NSZD9BNw>n|2CY-!8kSetInP$nThwHx0 z2%H1#nwuA`c#`^VQ^+q_5klYY@7mErPk3T1*RZLjzY*HBtq8MWPpOL}1p4Nn2?dDf zDpAW(T(2V5L@WYFkq-Oy@<1HFc(pq)g^;fNV!U2Uv^887) z_TlRU-f5R$UEy#5g`dobw|U&iE+9C2p`hMgy6DV82Ga6335uy?*K%Lu2S~ zp*n7z_mFmVKQ~eio9ymkilIuXtwTOYhZFI6l#Hosu+4mcW~hneqqVjUS<_RZ-r()f zUEwX8q5Xc#sCG&1KRD|wquVsw|KtctWPtxE*0RZp1$3>1+RvnVrwAeP{IPF(eq5t@ zkO5BUQ>!YdMcnLI`^>HH9`AXUHO13>&L=kYT>9EFMS;{0==9DqUjkuuI-wcfzpHu> zV2Vy^!OMT_n(rSgL*Ui-6c0t8Vi>QC*+%n;LRnDXj>Jo8!=S;hH68A;iBAy%6Mm!&U6gd{^;(#}Zt zK1jFM@~d7cTvRX4&YLZQX)TmWR@oEBjpp2oFmfp#(_<`gkQY~H-pr+eHN8{ajP)&u zs?_=xhpGzB7kCsokE(l4vi%P;qYrA8)%2^A0Tu$_lyFu5wDRM>oaXCAZiL`db;yrleYeJ77YI2)T={9){8qwjNfMY z<5s9#U`$U%M8KjTP~so$L&Z3{AolT;cp@KwIaKL@hdR46Wqk8%>r9KTISj6O{}oq} z3Dn!J(0?|8Uxplzv;VPB54N;Z-vh*}khB9(r-jVXucQ!#pOP5Fe zkK)|rW%AzF^imJIUCiQy#UrMAGzH``LUWSv|K<#iaG(;;St3K0BEGfjJmQou-~wkL z#2h#GPC!ifzZy$blUd>9^mb~7e!cbs;ya|fryOR*%keWk0fC9Bu{9sm0jfwL@-9;Q zA7Y~8^tn>0G#@S1Rkkr+D69}Ctche;*o zu>a)ESxB503To-k%YV=iE?}p5;=wi4{a`cvl?OHLug>v$QV~13OrCe&4~*3DM1x6* z7G3qZjQ1%SnwD2W=0pC1;W$Z_%U0qOy)DW~5hO<(!G4|n`CT#R;Q{dzvNi2=lx$Q7 zC-=0HVAy=$W`dex3wKf0oVlCg=d2m)eLJ{>xAJ4Zc+ooCnY*2%tnlyiFTTKPnM&qh^#3pNZ9xd3m*`arf}%99g2oVvmxJbRn#KN3i>|~Lri-s+rR92kQYw|} zS2F4W2t(B6{cbo{9a^I-OF!&^7KFOb=BqrhA#37Az%q{N5RsBhKf;a+AG5lTBtawXEy%%dTfYCcf4EP zie_t#N}s|}ZL?(8MKq&qhewWl58ek>jbDhAGJuGqh^*>=`g_acm~kB(1T@4T$F{II z8JxOqvA{+QH8NE=nMl(FXejC2Ty;E2d-HDOOBva)xN%dlfXtZGQi{chWb|UK_7Fh7 z%^24~>VBe=b$1yW>}vDkoHt1&pGB9{l8YDHEdptmw50u@PJdhMp|HqOr|Cbyqmr*Y zMLs@>woAOQd{0QxNPiz2_iH$Ws#s-fH5$aDlV0y*X#0wGL((x;#)U#kIj{1q28I(# zz;c;A<$+7X!c7Lj9=1c%z<;L|la(Fsyt_zBg}r%rmERTI?=#ljb=-@}fJG89e(rcH zOz`jiJ`Pn8|1qCEG8FWpKULx1a3K%_{}#Aw!96=s-;A|q3bHji7P>rb-9sM#{6NF% zdIEq_UGAfTWpTeKp3TSl`P%nB-dfRbcuC#+3A@aOFA+ssgvhHLFNkXiHR_&-H7tKv z_jP|h&5|1)GQ(kq6%{BOlf zWs#?e5VO4-8RrvroR{T-Q%j1BHB7XVR8Av&p}}ztP`jMz$fUj$+@>yC#zI=gx*?5}dRu*Bt<=DXsVp@vhMa(#Fe8I^UfgIqAvM(~OAh`Ko^MjLI7ce_aXHgbl{c{77i~7-y;rFJB(5_i+HM zWXRVBN?Cl>`~8XKa$T~1-PdS`V!@Zo?<(f_K^zQne%<=Qdw)KO8_I9Sh9D>k+E!Y@ znmw7%tllQb6#~MPi*i_G>+UBQ&DoyqTvLt5{%~?R3?M8_paor&W&LIYzw4BsU25&&@WWWfkLmJHpm2fMZcoq*wF)=pUq^3I|lzO!fbz{Cl$ zCBqKb?O(5@O(Op%BL{5owx*e6v_1W5k_WB@m&z9GYNfgKE+xm5aq+HH$HYM_^D1z9 z{4Pbum8mOK(@#nss?>AG*BQw%UvfaFUwrAvhUnZecDBo>2=i~lPm+BTAg5LLG}JI@ zdsqi1o}8LlSs9nw?cZx`mpq<3;3$m*7XQrneU;CtS74LzJ3cD<6Kw}y(DRpZGDeqG z?dFeZSTE>^c2(8?h0LEGY!=emTU!84coq#0>mmF!JS-?qWCiChWhCAM;{hB){x)7e za>?$JcdNm9#W-+_A^fcmnn7BdidnNHKrhFagAczsbFr}<+Zk$rSTkqI@%f@m)MDoZZjrF^5sy7=hry$$SDa?j_P z-a$?a&AT|$mYDvEycxVWn37uZ7A5gfozkXm0j{K5YKn!~h86W)FL6{dMG8z+vy_F! zjx9BxelFvLamcbZ^duPU6IN7F5g-GuJS{C~sD?V(mIa1@ZJJ8(PRh2{SeAP}!f5gI z(Ru?WGXFtXdP4se53;M-4m-?0JqhK|0(O#v5=z&v0DS5m=}<0sc%ZKW)ovae>Vd|O z?)?@U&OPTY%q-RQOYdMk!8t70Q3oW7nUc}Wt{VLG&(wm;H=G`{0s4x$--`U;Z zZ%_FkdNBw8?-l4~JN7`C!(KMpkE~zSas8L@Yu>heo@?H{A3c-YjjqbldA5$tyj5;_ z1kmM7wW?{dm1XM9EuAOer}#vYh7VaEkgdn*obWbI_%-#Ie+cnlb^^U{_gq9Xs=&Xt z=?CR)Squ{0`}~UAuyMLO`39|zoR{NZcOsb4Id>(az47#CY6Oe4786G6XFruGM_d`U zb+yVzG-4i~5{v}Y^C~2jBBn3vo-Wg>J@$OmoEBo-HF1}rl;UEI<^QF~11#U2q1E`b z;w~M;8~giMQ6u5METJf21{+U_KTc%13~t-XBO-mjgj8aiFxT8M9Y$cxz4}5#vCZVzb&`4Y5Y~osxu_cDo*&lnpR^p;wxlQrT zGFP1_NPxDoA7ai?JmlT20$_^Z=kLNBvOnE@XIh38?WT>XXNuA75lZC2tE)u41lK3& z&&b!>*w@FAK+3?O(z&=4B%`GzRLir+C5k>u3*4ft2ePbtkL`9m5(%#}#tb$xx%Ktm zHpT~bAF@aw7<=3S_vfTCMLAftpd4C!!nY>0=6zCtxy+WCVWyL_;3l9_m*0>wc{CfQSO zOd_iW={ccfX$dON9?T6!*hS5s8lIJBpCSxw<)8hGgujF@Hr1GI4;wF@wq`1rZx26j zahePnkB!s%d!VdEC4(YANFn%_o{`Evw~Ow2CM)^J1uq~a2cex zX^2tnwVhd3Cwcfn>*>;uPf3^W00xY8v)XJh+-YudO^?rGY&ORe9l^+_MD^L9Bn<&e zkBQz<;wGdS^dzn3t7jLFaF78H-Lyt;A#TWi)hJQ_aHb2z}x7EURWpyhF;*H_nb_)~{iieA!SoHVQK zt#p6GavT>i#RX(da%tJ~>i#B`fAq;;+48U`CK_%g-QSUuDa{vAb?EqBC8{D0;)Lts zVE~rTBmARm3*X)jfg(b3lL@SqcVcvrZUmuPh*;If{;*d-#9f47T`i3AZb}k%OBCJ@ zw&Ak6{r3PV9L$5yaX@rs)!nOv&1#F|2DKL$>Lgd6S@XJf{lsGD52CgCs*~(^Gt@ac z?k$j9OGDcmzD?vcai`nw?4A8j|^clRqz=T%qziH0D zM?`-<$Vj1D+Xye%84z!h!ePDma*8AUqOOcKwiDOFs9o`u{q`_*n~Mc|eT$RD>SCsX zm)ooTh1oH}`$OEM;59pj2J>?Aa2voo9zpd&SCjaCEXr3})=U~9NK*A+B@1~nz^RIB6Llf@@ zTxKO}NY)&F;mN`4(dbTo5FyE|Tz4;?mMJ80-I*pZd0&P8z0^#@%$@7oHeUFZDOMk{Wm?;A$O%~`IDoy|b+cVhQ9x!CaU4Y}Hza$vdwNu1qZp*bP zp@O78jv6b(BF^?!IvTYKmRK{u1F=6$hKoX7sX?P-A;kLd^18sU{;X6iPf&Z;E*7g{ zkP6K)mhipyL7cWL*si3jRi(2>rE`I355+WAjEK_8$W%~Gtb$mf&eK&KY3`%unr!Z` zA7`=b>`n_sd$6Rv=a4aZ4;P8d_xwU?t^v3*NuFH(_lZ6iNVa1~-!BSnOvsvNRTa+7 z-ZuIp(PzXwyDnEp`8}y&t5uE`Y}@PA18j>}bodj?yazSe``+`M`g5H6d%~2}Fk*bs zmy;EwU$~Tn=8yRxPaA_U!GrL5IUb#r!(@KCoqSh7iS%@N*RC+W4s%rn1vb9jc2y`pDO7FW{Y)ZZ6_~tKI>#0Q z$)JB^i%rS1j(AoJP+X-&hO)g~!v9zUEhma~7az1xHSB)+kEuU{)H&Ch&l*N5I4Zv< z$uq{3e>~Kj$ME`wKq;CNXjeP+NY=_xT~zKL75V>SXhhryEnvDYu-Cbo*gv)~ncWy% z5)#=<+Dt7EJ@d7_HdmFR)(VsY+!j%nFUUa_J%40hNT;`@$-IRBQhJkjll(oi>CzhFKq<_qgzxxO$gQ(+dBXG-{i|Cc}9iauF|Bl|9iJ@k)Eszj}r&MkmO z7+6<4X$e*##zEQ^X&=Oryny2%U`UT`X$;B|=#%(a^wsWe+Fyc120C`qLDvOT$AGxz zsT-;{dH4=8A-z42ldLPydWn4REmP6c@{ z`}`$*TbXW|h)O4+p%C{4&XR;~_L5f6Y?59+1C?>3e0s=Ew~Mj^DNI>2subh1ft;qjxuqImpf(SVgvT2a`W;S#Vd5LVGGl zEqN-xp8<|}FXgetp!hTT#4%WQ`BXpzH#Ri$?D;E*%l{-2 zy?GM0`eg#GpRI1oLTg$ccuvMP%xq!(aQp(e`91EtkOb^(y!qDGrLV&yVfaijG4Nyo{sD5xe3 zhzT*72O`$UH$;k5;GylRC1nMhO=B&TbElBe`QcEdKBiMZwAAgDONcz6!8idqkpA%( zF5dA88q~+c#}DK2$k9Y-kh_~l^5{{}M3+aJDIVHI(*3bZ(c~sg`&KN6+Y|(utxeL= zufBs6S}i-~q@bD{ozxEHJGd~6LnLbAct7qVPm~cmfC)$;e7Hg_Bw21#T)Z^N0P+cx z(0eTFhPNY5r~|x}xR;7)g>tNj z&Nw>q)43U_=8r6kI+R-D2NqI>qq?Ko4SAm?OIU(*M-EL6 zy$Pi`#9KnIlmdM;l!bhvzzirNBIjK$@Yi7p>%mOok8(<$MOMpEd?htFsRv~O46unB zE0W9qPXhO2mgJdfG4{>TPj6d#DMdCf*3$zc0PSZy1kWq-*^AKDg<8m4VB?G>m5;qt zblj}wqHqZ!J=J3_(AUkiXZw`k9cswlhEJ!|a1> z6y)oWAuK;#K_Dq?D!URot&W_6^h2^#_SB2L*3LCRNvua9-&W&LVT{5X!wI?R@V0t9i`|w-Om-=+I&G_LT#7 ztmG!$k!_oPHE;>xuxxYcIfr&*lGQQ`u`i%s7fFkgBOVyifY$J?xBLdW&F}ikYLZNV zt)wPLk?2MLFG9Xi>ICGo{!_4dj=I8D-&P1S z*Zw>3NA&KADpdTw%)Yz-4!XhS4*XgF!1&|h$Z2k_M0m~LF|4vB`vsV!e7$h7?;dEk z&BqGNgPA+g_!bl;wQ_O7MOT_11ZXAM;$`aF7gZxB#6BTI(GIeWL%r^cM-`X>sZD~J zjXGJa+fU8l+v}^g`)*ZK?nA^fLo~{W?&cXF)s#?g94znc-H~B%zA0qjHbo0il#m4y z)bW(LZ~tMfghm%oQIiraQIz$FrP(O&^vVQ&*O?piFR7RqSo=OmG4Z|y6sTk1zrA@>V>ziCSJFi20`YGVhMjdKpA zjf~&dE2~;yE*z_7|MWhk&xQ2qs?{q=eSRiHHyu&A&%0Hbl5F}_6KX-t_2E9CzUN4C z!+JA6LCT|2?xhTm&znvREcS(&wpd7UeK{m8uHM+6DMsbvd#tj1)Q-28@l^l5P9hnx zaU=K{3A);6s`-CXEJIPlSVM~y`O<0V19 zQHvpF@)aKDpL;As-l=glIGH#@(l=xqrmh6#`%xB^eM)xaU4G7+O*vUL68RNN;3BFVQE3>>KU|)ubg1{S> zU$Z_aE(|;t<#q*Tw0A~NAC+IQ%0|o=>)wvthO}rI?-rycnl^}h-glTwp6+}J#*@pR?z?fxk%Ghl~`V^zt8c65LA^eH5f+XXU6LVcCfy{-ra zYa790&ATu-o>bskT#(d$fWZTU!Ae}{h}u=()d7Lv7mW(_w~rB581#2O%HvWpT^Z0N z(NWz9l^!)wpqf?exv9A@tK5Fs-4@+Wb@gYZkN;VXjQUmIqS9EcA&ftuf5R0TdOzBl zql}Uw%VckSPSPbR@7K)^c1kcOuU~H4uv*ng=QwHksl|6^%3F!d^F*TDFo#Q98|c?- z9m22)5|vQ*y6iu--?u2GE3aok(F14hRcxi@kv}LbFqN6 ztprOr$31$YQX{h&bN0LtfBFK*m)A{@x(z80U1vTSrsV^m^lalyk8G<|RdM7{?q``{ zy7St8{b!MhTxV7aA&sU$s{v9VNUW9*P_@w!Y|R%y_`Nz*T*wjFpC4_`W^uR?PD`5e zpe}7ek4WSsd{%TA5GhLVDOKv_&aGK9pvvkeqf&W%K}l&47NRh8-5w#v?8#=W#IW#Q5~~U ze!fkVg6eym`3p|Lt0ZNEDhfA(L7@uKk4WD<1M+krBPfOS8NQ}h6k`+p# zs9`i!eHSKbH}@}Rc_nP6t!bGp(eq>G`s}6m7sn6E4VNc)z21Atz2TZDUIjmIcGSO| z^L+>uKL>wP_Ya$rx5fGkpp--!)&5&zg6lnkH6-UN0kgHmW^o%EMgacqY0S6$3)GmQ z(dd0|l}>$R+%}qB+{V4?qNOc2ceW+c1>kQ0#maHY&Wi4`_1lr8r_NCn;^)f^6F^Jx zGGe_njjh)mD0yvoQQT%q2pO!Dhd~!+-5}gS;dnr?sVpRIJ+J^@@T*W6J8TInIL5+(#SEOT`K01lqGiW|k#EpV> z2`hJEBo@+ogslz*^qs!@#$ABY3+V1==X{);o%K$_MX_BO1VBT8{JA>H$RXnqOPg^A z$=m6h|0u(6wt0W~DpXrvXlVg2Ta7~@#4eKo3K>l40)*uM-6kU2d-;jlaYjLBgQN&q zDC$N5e|Rz2VUkE;L(!pMII{2^d|$Ku8O%ltrAipOu<7LH1N%Zrg!=<_ai=@}p8)~V zvqo>K=kj{C#u3ch=kv2xnN5wRciB)1vvXZjRSP+~mT?xE@jpOrfmZj=gCp96H4(E^ zH6(Be9nnwtv8{C7{CMKNnm#|z;^{RyV0AT0eRQ}LSA>^wgX3}Qa`iWj@4{|Z3SlL4 zI{VH6f3dZKg;EOxoW4i-STMcpx%w{`CizC0ppgHjq*rjDL4L=-=ZyRkpB1Q(UQgrk z&(AX~=qw2NP0&2}G-m9;va@dzeQ&LvRFi$=XNOi*AW@4DzwgcmI{&dW}-aGxoPpK^I8127t9KuHGnD10y?@30j2krRrH z|B?`LQr~3>isFbGvOO1B%kF$;=#UVdWs|lQ=%6;tcRj%QKjo@}{M&2}{?oGvT_S;u zE9Hcc@6J=-)}r6vi+kTnYNQ1PxGa;IrW%L+;ldVJI*{R-ZLHB+dR3;x)UX@#sz%VM zKt)5@svF*X2}EAQD|GWr%9u{C2dR8oOQ#CLqgS-HrRqL{N=Y`*=?hbQh}Zp_U7Vkt>TjzV7iIy7h9OYldzgyIV1BgZ`pVUQ;L&=)+X^HNq^iD| zG>j@gJu%&}Gfk-Cw}z_y$8TBA*jQHs|nj0RGwp2;d75y*_AkD_ys=pf3!N44m(J zYw1|!7Y07(lVtDsq>{>DK2oQ8pT#*Ti8VvL?pLkqV|lW)lT$}dxg8EpFs-LbQDyHp zQ7^9A#?<)6fdL$8ax!g!VACgi2jbd=zbmR$WqTFX;)tv`6!eg}0P11OjAK(W8dkTy z=Vc-L;uP9wEP+jtPfcAGd($L@MP0Go-L$;(HI9cnhnPxOJZ>B3eiFk5+Yrt=vOW^b2bCncv}jS2c8l zQnTSaVdU|Z{C%LtlQKjf-%V4%Bp9;Kh1H^{ySbGAfc0Xws(``bpz?e4vovQg{K3ab5%)4V21U(hvwkJ=R>tfry?RIAyv4oLf_SDZKR=_kYqb^ySw>`qyPfQsBYZV)_VOmM9&Rv_g{Q#GR zB8fr_KEfs&w=Gth!`v-u4|1b9$)vIB{qpEJ-(5P_5D0vTH}$ z7}BLrGcD@ZTQOKr4bE^IB#qZIoUaJ)Os)pO;2#gt3A2|aViW(rSnOayU5oW}jGgE? zCuJ_LTQOKr4esE~C$Y?fs-{h5dXdf#7SsiY`V-=rCH+r4v+vV2D%@Z}UEdB_B`ZWu z6mx&)aI0{3uXJv&biNC?+2fQh2}iF@e97htN*!Y#x`3O4L&}mUrUQH1^J$TKXJZ#| zJK+qo8PGhuT*L}^50Ybo^Vb6$@$op2OfqXwUHtUisblPO7jSEEim0Ho)!b^sE+gH!KS}f9+G^B$x3mue&{H%@gR@`?s2yJba3OB#d zER4BaJEaSIrHh(cALYj)9VUC%bB7m=T)g+G%oQ$uC~Ex+F7Pu=RMQ8)WGl7W7-00{ zLAt<`Nb1uA8qsepcMVrGwf+ScKeNpIzCbs1}R*ld7OVs!O#z({P}Mi+kbH)=QT2UbwRLl9gjGoY{KGz)8Ll z&TYM9;3VG&7q(uqp>O+d!=h&h>$hD;b^S z_!emZTOnP89j%>r#iBtmV6vbRbGU^CjRL|f?Yv(#6>PCP=BFUPVu8~L6U4Rie!&GY zyX$#Fq?*{Orle~cF7?j4sz*VjLWVqJE8bNAc#w8}yR!A$p>KQNw?p6dzHiq!$(s{( zaV>zmliu0Hm&{Ka50wgNoa7@M4H9FG5)bxgS4x9i<0K#9@+YhzjOyah!aNhD;X>~* zHn_r#HxzzOR+{G)RDg+H`op%aa_X|=N)PnU`d04p_U%%a{y5=igb0@{BQi#O?$a2Q zUTp5t9}12qY$ndUQ9J74~Zr-FCvS~k=hI4zR^LwR}EZ#r<^Dn@q z3l1~g>dp$CURWPKN=jOlu3C5v~L4ui2Nv5;A#lxd-+hLbGb z07peP2+I_XA5$Cnlx{^IW69#(7i$jQ0@PFxzj0iU4t?8y+~E=*3=9%uYOc7@k?)+; z%#LtThKgq{0Vj68_wn5Z#U@0$c89}6c}G7J6H83#r8FFQ+kZX5VHgq35_C*O7#8vs zuJvv2`gUROw~KqfUE2HYa#vGfTU|h@$M;~R4obN1E}2pRjgx$ULuH%e=lWm{H}^hi z)40Y-euv{>Sk$SNu(NqZqcl$P`(lGMr{}`_C~g|US1O=!l0Pgqat4aiZtk13o0iUX zHDvZ;n@^OH!vH%b!VXivLT!cjT@6_W$EJ=;%(ygn@w9ZIt07Zx=)NL7hoAWy`T-3W zyBe|+?%;$1aq~jSQ}6M67#f*ARYP{dReP?mO$-m3I4c*rKb+59S(Soo4nWFGw^F8C zp)Q&4d1g;Ia!dGDVAy&ff{6tM#kp;JgY(z9BTpt!ufPhN*}7P8l5bqB+q+obnLJMZ z*hwB9__-$aIqln4mn?+N#(g)J3f}fyLObm3iA0u5{1#2}kwq2Y)m8v-z898MU+V z=$`EpF37m4EQu|uj$Uw&xo`Up7eCSRLsA81t11hXMi^nBp6wHk4#sJ@oM9Wr2zmrst7{> literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.dssp new file mode 100644 index 00000000000..9b0b0dc747a --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.dssp @@ -0,0 +1 @@ +----HHHHHHHHHHHHHHHHH-----------EEEE-------------HHHHHHHHHHHHHHHHHHHHHHH-------HHHHHHHHHHHHHHHHHHHHHHH---------EEEE--HHHHHHHHHHHHH--------------- 1v7mV.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1v7mV.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..51096e8c91e261b11e094ea311d8c08469d439e4 GIT binary patch literal 19477 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�KoIqPZobDDG{dyM?nl{$BW!Rhs)g#<|%qMn=Kq@|R;C3)N*$d$| zo4#P>sfEdkfWaqwV5jyG@Lr0E5Dw z56ZhHp2%ZWXcjbyNDwT|SFo{4H@5lpPCmnS^RMMliAyiT`8bKOcQxFyv&|2U8Mdrf z3#5OexoSEqB5yvE{5x`yP4iQeP}o73hqozlImp`DTzaVosbD9-tfFd)Au1mtpec#= zWiw-O+)#8v4f)otLnSdkA0FS}@d^1YL|h`-=Y${fp+4#fp5Q0}} zr2C<7FR%F9hN17^mvJ7ShyJOs{3{HKM=ld4qqaA?J$p9Z2|SwY27FC23G)?oVy>(C zXeQ)sXTPayD7V5Q;gZ^_&{#uMy<;;lro{;Qx1~rcWk%(!pN4Jz&R;5O?lbNTo`ltS z*VVqAPTn8O`EJ={MdO*(1v#cq`U1F2LTXg69}nW;lLWB@nl4}=bDnR1-X?NO%ch?@ z)hn+eKFt^8>9$R=b48845e>g%bY#xTv;RurZ`!;W&kWP(Oe_$PDqePYv=ben`uX

r!7tyyYpGe<_qD!yUdbqfWFH65(Oi@-ijq;Mj>f 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.dssp new file mode 100644 index 00000000000..f2b16de6353 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.dssp @@ -0,0 +1 @@ +-EEEEE-----HHHHHHHHHH-------EEEEE--------HHHHHHHH-----------EHHH--HHH--EEEEEE-------------EEEEE----------HHHHHHHHHHHHHHHH--- 1y1lA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1y1lA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..c93f478ddd5dfa5d1b7a34a32c9f271bb4de4095 GIT binary patch literal 16962 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.dssp new file mode 100644 index 00000000000..345dadf2a89 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.dssp @@ -0,0 +1 @@ +-------------HHHHHHHHHHHHHHHHH-----EEEEE-----E-EEEE-----HHHHHHHHHHHHHHHH----HHH-HHH---------HHH-HHH-------EEE-E----E--EEEEE---HHHHHHHHHHHHHHHHH-- 2a2lA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2a2lA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..9bc3692152b341047084e3ecb944a8dc1368ba43 GIT binary patch literal 20799 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.dssp new file mode 100644 index 00000000000..42d4862eccb --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.dssp @@ -0,0 +1 @@ +-HHH--EE--E-----E-------E-EEE--EEEEE--EE------EEEEEE--EEEEEE---HHHH-EEEEHHHE-EEEEE--------EEEEEE---------EEEEE-----HHHHHHHHHHHHHHHH- 2cayA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2cayA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..c121620fee4ae1d7e34d316938166c690118fb62 GIT binary patch literal 20782 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.dssp new file mode 100644 index 00000000000..3f7211afd3c --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.dssp @@ -0,0 +1 @@ +-EEEEEEEEE----HHHHHHHHH----E-EEEE------EEEEEEE--HHHHHHHHH--HHH---E-EEEEEE---------- 2cviA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2cviA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..0475dda8fa8f1f19d1d0df5dc3e91ac8ea3c2658 GIT binary patch literal 11914 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 KeE#LejsF3CsVF4? literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.dssp new file mode 100644 index 00000000000..adb3d765baf --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.dssp @@ -0,0 +1 @@ +----E-----EEEEEEEEE------EEEEEE-------EEE-EEE------HHHHHHHHHHHHH-EEEEE--E-EEEEE----EEEEEEEEEE-EE----HHHHHH---EEEEEHHHHHHHH----HHHHH---- 2fvvA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2fvvA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..092e7efe47e6aecb62b1e981f2ce12be378a2b2f GIT binary patch literal 19453 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�|E1C?lB{%{CDphc*DR_m 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 oT8Tu9;*y7^%J={O;|76Au#0i`0LSn0ci>G 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 z z8odrH91jGHwrzh=ep<#h6p&@0a@lIymXQJIk(a6ioa=T9fwZ}1YUoiQl}XpYJ~Mq! zB}~5+)O1&G6VmjCeCy`$MuxPA-!c04gctdYcF_J||4-N3<=aU*42an*0ou!}sJ=)x zn{J~N{t)sW$AI$bu}{h%m8|?fNSU>UGpSV`sLVnohe2Vmdj!tMg)3R(ZKhYkl#Zib zwbl`U03c;ejT{o;WC7*hc(TKb-S~)Z!af1hT#PJN$px_Zcc5XK3#P$68?g< zhjStJBa1NmyOs+`{#0f;^+E&2d#j+;1{l%T%&wV;gS;o~(rjB##FC8kAZ-%TzO{Pg z5=y%r_CT#iD1k6zK^X0F$n1myo^zdl6ZpR-Fk{e;TeTbo6ugsO@r0;7rBKhc-ehjh z00T|o-H%V)#Z#W@W8VV`&m{b?s%`33xSxS&{j5>L>EDBGqA zeYkPfIqjL9?|m^v-w=}n2i8%V1SSJ{LmdxGe+@<*-)LvY@E^BDcx!O^9qL0&{2`}A(sT7rxZHa zTR8<6?qxC1Kji*v`5g>|*uSI_)p9*#H9`i@#5j%_wwvO5Q<3WjOKY8h>V$aDH5J#} z_t|S3J2``izIk6;w$ZyrjMnvWbIAk<7x9IIK1=2yB1Usy$se#@oEZ#OV>eDz7HSr0s3I zf|C+OA*>t{eS#dwP)>UrBNoNv7lDTaMh7zXl)#p~y?A#o?SUjIg-$isvzEgaoRmBO z&GSOj2kb+Oo;wl8hK_H!+X;gsbSUV}@@)2&8<0wbEX3 zWpQK^UUTPXJJYHHOH8p25WK9k)`v!m>8^-NpGg-Glxxts zzvpav{si_A0_e5ciXFSa_i6V-LX@3zM?;4zkWbNz!d*08*=M zVDzyd%E|Tm{m72^@FoEYq3-EE=Het7Tl-_^@zm%6zPBTavpJxflOvzINbza0uwGBq z&fWMZVJ3-3dStdA7uYe0=oy%-byRd@2rQ42ZgCcKPDt~tF148bqfztN8PHy2akTxE zjx+-dTcwf2HdOi0ln@DA(mpqauE_SL{f&hD;-7e6oqN{_AnA(xL!$pTat+!ub{omS zxbS{wUP<{j$NR{v>rMbICqPks2d7pS%54J?(qCD4VZ^R5zc^V0!j&H(2l5mgw8^3s z?A{}c{gs~dZR33sVU6kFOu@zo^Xd(c_x_x7`lG5KfOE`JQac#G!{Cth5|bd$i-Swu zDO~`N0_hfv_^S<-azc}K98$dklU=dy1?Ac0!iqQ=I~C>h-oC5YckGz<=P2U$w+u|D z0M}Nb3e!*K!AZQ+@wYp7zeB0^C=ggo29u_2s!ZYxkvwU`E5~eBu&BZ82WY6t}75-XWQa4~9{c0uMDZj8J z9EBlvPX<(+BwcSbg#{e_+faySjTnAF1LI76{>CcOhMnPbaiRHZCt}J``GE_RpL%Km z*vPiJSj=KiJb9aj&3k~+^s(wI+<1M?ML#v$kVvz?AQsY=(5oUX`M6I5ok|Noc8%Xi z#^rdAGbr&~`Hd5tHe6BRGiuJAvZOBtl_38Fj$(L+E?g*|P zf8lbX56+MSv&z$5BLLYRG0J|FV!xjqDC4V@`)k*@)NMdkNE99Ob^p!Bfx$DH;dYso ze#i9l5XS*V@G76H+IdvK_Ij+%CI%W!5n}`#%Z1)m+htA3^4}}W-|$}TH*3eeGB^Fz zh7%k3>U;ifK88QR)b+Q)d3Feq0$*2;mUV#j@f%droVQ~=<89$ICvZWXz`;E@T@BbK zSw|}-tgTelkM_Vdeu-^ssrN%edcNuZtS(A$M^Bd(f&*0r8DV5)Y{GWF4Lw038d9%Y zM*+m{JWDc?{g3Ip)XQIO z4KQKh>NXV#QQKY0GtKpjqEJ&{dqG3lpNWICV@?TzWV@$1yYf~{TO^jVGrGhnukBhHWVI`@jAlzpaWTk}LrLawCsD literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.dssp new file mode 100644 index 00000000000..4d6572a2c09 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.dssp @@ -0,0 +1 @@ +---HHHHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHHHH-HHHHHHHHHHHHHHHHHHHHHHHH-------HHHHHH-HHHHHHH---EEEEE-HHHHHHHHHHHH--HHHHHHHHHHHHHHHEEEEE- 2j49A.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2j49A.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..b3a2e5366c893455237f0e0afeeb3fb1bb0887be GIT binary patch literal 19735 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.dssp new file mode 100644 index 00000000000..840ea32a4e3 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.dssp @@ -0,0 +1 @@ +----------EEEEEEEE--EEEEEEHHH--EEEE----E--------E-EEEEE--EEEEEEEHHHHH-----------EEEEEEE--EEEEEEE-EE-EEEEE-HHH-E---------HHHE-EEEEE--EEEEEE------EE--EE---- 2qdlA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2qdlA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..fd459995fa04437de7cdb03738a16f2ca9abda2a GIT binary patch literal 21195 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 PIsL6@&(aHC)KvciTqFjf literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.dssp new file mode 100644 index 00000000000..778ec065739 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.dssp @@ -0,0 +1 @@ +-HHHHHHHHHHHHH----HHHHHHHHH---HHHH--EEEEE----E---------HHHHHHH------EEEEE----EEEEEEEE-----EEEEEEE-- 2va0A.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2va0A.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..631a0d6c884be6a4e369fb4414df297ce01b06e7 GIT binary patch literal 14274 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.dssp new file mode 100644 index 00000000000..300b5635be8 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.dssp @@ -0,0 +1 @@ +---HHHHHHHHHHH----HHHHHHHH---HHHHHHHHH------HHHHHHHHH-HHHH--HHHHHH---EHHH-E---HHH--- 2xcjA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2xcjA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..e37e1a56302b8991073737755d161a6924c1c154 GIT binary patch literal 11882 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 bfk;mvpDD)VdDr#NzoZn@eyw&NNl5+&CT7L} literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.dssp new file mode 100644 index 00000000000..eb645f8d00e --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.dssp @@ -0,0 +1 @@ +------EEE--EEEEE----E-HHHHHHHHHH---EE-----HHHHHHHHHHHHH----EE--EE---E--E-EE----E--HHHHHHE------------EEEEE--EEEEE-----EEEEEEEE---- 2xr6A.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/2xr6A.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..f3fbfc6ddd281e41695eef9a5963e209ec2d1995 GIT binary patch literal 18880 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 JpXnJx0RX(6ZGZp( literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.dssp new file mode 100644 index 00000000000..67a4b75293d --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.dssp @@ -0,0 +1 @@ +-----EEEE-----------EE-----EE-----HHHHHHHHHHH---EEEEE-----HHHHHHHHH----EEE-----HHHHHHHHHHHH---HHHEEEE---HHHHHHH----EEE------HHHH--------------HHHHHHHHH----HHHHHHH-- 3e8mA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3e8mA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..f349037d04c8469ee4330c1a92f41d140828b7c2 GIT binary patch literal 45326 zcmW(-cRbYpA5Zp3DVrn79%XMr$jsStm*Q;B*?W`hy|*K)PDY%Oy+?M&opE+%WP~q% zpMHP7-;eirea`#+8qeqRjWvdZgbahUx`QubCF!Inh=5t#`EtFO%+ZJvC0RPxUnhr| z{w`=u)eyGI**5~oY-wTqeQ$}gf@LfS(N8i%gi-_>JS%v=4?HFf4ema|+}>OU$^U-+ z_wQf7+u7ScTepG#^_d^s`v3fG$#=BIzRCKnH(^XSXdQdDd{g7}9&>hkEqQx!b$hu_ z*myfKwv0kx5+0DP^ci`gkJ+6p@y@3@O0P2{keI;r`dg#V3Kq!|`$&pKybJ~Tz{RdO zPNai^(&o0s5INeM2!5MY&~Cn>aSL`>h3Vr%mW>de?jE-r=3WSwy>^fST zSI-ewuGeF%UI@~ZI0dEG!Q}77q{$nDmJ5R3;uaE|UUu{feWjK&B*wN~n&Ui|dp`~~ zV4pWPNO3Zq-QLg~uBghNL04cHd!z~adaHeMQPnPUuT3#D7QX!acvlU5J?6idAI;5V z$qKcNz@U9s&XNMIS)7d;9GRg^ka>E!l+n8x@Rf!>=UERXXFCsT0ql*4dC+1Ue4xXM z$t$o$PZnXgf&xBGk2RPH>BdvMh1oA#-5o;df{u?+3t-@9P`nJ1V-Dw3U(Cyu)tUkNJ!$o&c z&#GB0v6i1)+I2knm^gFZ#dX8w<&b=$2eT71aT4?N!t?t%6Z2_bZUwPz5QSTGnC7>; zsC}>A{;fIVX33Syc5(^tQ;5Wnk;Giflb|)5u#KnJIfzxoYd48`N>(d{OP^cz zf>9f=XV9j3L`uu*8obttpkrpq#kyr{hpKUVw~v5eq4CQ&{NJIEL-)9r@LJ{NZ`#*Z0O<59&uuz z`&PD{T{KIu*$FGDA9md`MyeU&{o0($f18*4j#soOf;(p5l#d=0>%(hzw|k;`RiiN7 z6<-l~67wGJ0c&k39Enb{vTuWB>(@E`A~A=?qyl?as9(zO{&Wm(Cg<#t&2Buw;#_zB zdN#=j_Eid%-(D#M-4*1+28KoDJ&H;8=G~cuiV{`YQ|y3Hzq6Nc7KI_vgH)oGjA6c! z7}nj@mjgqTfh|8lY+r!Me2|PP>qv*R`{NVLLgoMOU}1`rDVDw3hNSeiJi+?Q|}%Sg);qyCD-@0T7ewXuQ+pWY#m10@Bx)j(Lc2al(XQtroV zOj>8$!wk(MtCi%A(wvF3xcebVq!}6ab;&b&<)Ox&jc!r$8uqev4`qEn@ZI%lJoL71 zT-?AlVk(JIWLS^dB(=cEn9Glq!>=MD99qgi2b8Aty|Tq!5?~hcS;7P9`TEzj7FNAu zkI?leSOM$<^e${T!2o^eT0%_Ix5FudxE3HXe9Oe)=AKq@f(MW*$vt#OaKzkrS{T^g8$MM7P!+18xk8Ewzz?K3c!Ch_75M`|3pk~b^`h4q^%3Smk%sFLI z?(EZ#J=JH0X*1h_4CqRUc`JACPkU#A+p1B+A`WV^C!Bs^DNeF?8c&BrcE57JpYrOJ z$z5-dYW^uHof)nsIcWS*rK!UsYUe4=;Q2K;T`(a;8GhxtEGC=4UOeC007Cx1xgq}b z(D$IeZyulSbf>99?1J*4=)&Lq$zvZ!T=HAFjDY^HT3r|l&JHRGqB`8JHM0IXp98`j z#Z)Sr^BVWH!!0PX>PqYjALiF_>dl^g>zK&Ii$ZR!A8S z=f9RA=Q@n`mY8R=bI#%~UT9%}a?vKh|Lr~6A$55KoaVHpyD`P4 ztsCE*a7z}t`-G7bduOQF^7|qGPO@Cv|4;H&DnUUjJ$abwd!JK!Ke}ZLU1A7Fq(!9W z<(*NMKMeoc*n^Mix{$l9+RHG_u|@jxzqDb}To@77L#-AoP9s*ebD+I)7VwjPQiDYK zFfgC}70W7c+L;%PGA&b6sfuOe3&9_OJL2YEfv7bbeZ2gc%i*6vTW#cwloTY%QwMTg zrH%B{q>*uKnng@j`vxXxpn0)BIqsAz&QB=+haLO>+w+ZkjXg=(XvfV~aiotrOd7W^ zzHPBJbk?@O{qM?IiIaWQboC@|iW$WJXVaLYZ4zE%$KVH!FGF45dkcR|Sh?(Q_%Sme zl=)AnfC;6DD>){nd0}=JrZvS&l7Dl~7ssEwGd&G(8U}uNz(y{}tO(O-;x~@E$&L-D zGwhWE&%@Qes~gQ&rY*p=)1Nb2k6j02?j`p`y+2I-_Vq+Q?)$LI8TLMU@v&jwp#{az z8}Cns5xKx9X6T*wsC|UHPahDSgbt*}@~=qgn6x`MsoosjP5(I;j~W4bjAj1RnZ6yD z!8XXk`ij@3{SLU8;nzMs_SjX|00% zw1A0F{reiYRaYRp6ZSjkD>l%fy{G}f%|74@K=S0y-FPxRF$JCx(}k@R$!2JAzXM_{ z6*RVmxcA%!={s`9eol zb~iC9$>is8la~6mMZ~BHM)Px!{zi*cMXVx?S}0z^Om$A_t8#Um-gDY!Sv%N^F

{&+*^cPVi4C$ZEw6`{rCLQf#Wj07rC(=7=`SS9W}JU&lUp*QdOJdil~I|=Nf^a8KE>39+CQyBb^(HEPB}9 z-HMK7>TedCDTa^75N|x(K_LHB?w%yo!>LD4Gp>4i4wbwG2uV8idZsTpV}`5xb4}M9 zf?B!^n+*A@i7-vEPCS}qw2NM5kc7S17~vKA?p@2n{`yD;fA+|mE~X1IwlLFxumW~< zj%067h=;Hofte5I!DWB*u06x3go*ef(Ca|_IFF743`_dK#Sw`03NT%Cz+F(D2SGofgOoS6O4KK z&5E}TcDY*JiX*H%2Pn}a{*JK9hX~3wmLyCY2xLO$!hQ&sz}xi|CZDyA+zZCsXE-3k zwM>P*nW_W=p}Y)?7&6(S#L4u$`74G0+(g_wo6JgTC?|^n2gH7imas&6H!%-^a5+={ zARD3e6a4X!712*%$XO0KVfB?M==!~t03;Vw>xQK0;25~yftG;_&-GMe0{Tr}j9*5B zxa5iX*moPMQ?y%LmhX5?3#qCdL0&F4xD5O#r7u5NJS5RRC+gRx?XKF{zP+R4K+r?} z!skPxv*@cfm_Vio(_2F|5iC4&T{1HM?n^98b9v5j?RTYgHc)nkFqX$VN9OR$$-rKb z-ZqC|pbp+S+ELjdihs&P_&hM?jmz-vFgNp1AQ6&gxtlCEcMfg6@TB6KfBW`@7wiSq z_9=c22?QF( z#Ci(b^Fo>vi)Y_ZK%Fz45r!@~AGA-ySX0Qoo}bd5rzcRILS=T`^voV7|k7>bs9F zG&Qo13KKDuUYa2fC+X{Hp9SaxCz4F=e0TfJDs-Zr)7~sS^$l8M>{_~+4I@rO{cKQG zJ>DzA#L*ilM{CZ!^$%9t4$~#FB6d%()qG~e=g`*_IOqKfDAiO_^mxMiBPY|gBC#EJMUw_tVsFW4Ht%hVkr!h~Ljkf&b! z(gYI0DlJuWwOL|ia=ivTZFaRvS&fF1Lxn@tS(&uQ554g=nB=1)!dRv~+^=Ad%wtpG z+$~qzAz^)L&8G8sLYbA(nzdkN9m1W4+a@OHkEe?3aRkYG57a)EV{W#jn^naNJJ|L= zwU(<%MkxkB)x5se_nfjpAkDJ0I+nV#6JX}|?XIFFhRjj^BtHI&Z>SM;y^LxaT@f6E zGhG#Z{T^2ObE4zJ`nV{?-eN{pV@XKoQMnvy#9X#Zo%Zl-WV0BNM`?PDmMzD$vDCKy zf`SuM**Hf3>>J$Q>0_*-G)>5=uiOyn?I?m@`SR8h^h!8d(gqJsN<#80PibZ+(uxLc z{agCz*4cBtbsNiyE9oipH}=(BrpH24fLvRVw2M1??HkA-@CE0!_t;O_qq}brwN8(g zVdY$pCKUQxiqoU$-l;Z*T#vlL8@SIu>;gn&Z#*J+;oYD}&6C60Ehre%L+;%P>KqKw zl~-+S<=fl7>>+=S;18xJVPtFEFW-&w&}t2)%NR%jTr7 zG!*@rD!RtR>H#=?atb?AQk^!a=?7pwV5jx+1Ob8Uop)G?vF!!s z5Af==h_J_w)2OQ-;5$V5U+yUvAQ-aBigTk&T+$+yIh_*yonP5ECen38 zKxj6TwC97t3?HPsY#XcySagqbVPA!7M*Q>!QPv}4+~_ZZQ=Y!#f^4?!#=i^%JQJxh zD*}(Vg!MsqX`#C7_$CsvFHRBA#kR<2Bsnf|rW=;{wc-8tAB-XMMZj`}$~<$iL(Qxd zML-7)bzjVr%zSsW))rQs7IXobDY)EL;rfLFB1}X3p{Cb>Kdnw z$9TsUy=RErl3zNeSv%c-vpJMrNq7UeQ+R5le?*u1Q8Gk%eCnt0Zw{eF)Sg+}YVhux ze)feBisbvVZGOYXxro9*;-oeMfiIUm?x|BI~WgIU@Y zhG~$DiQWPton@LsgbM2}D3Tm$=4uU`0_rJqglR>>z8XKH1~h$bA+Go^dKcD|yk@AC zoYD2r(|w52KXO+=+`y3RS0c}_$7MHaFOz!e9vIaVeWNy|Efkf*2$k z5OthQA;{Ck0v<(Ea@1h@{VH|1F>TbBIIPffzJk2ylTYgKl}sN!WsavLblA`8aB(tM zOrb4_BD#4!c`65(th^c+$@I=h!+RWG!XcRzq34vEr5i!=lhQatmK)#8Hu-jzu3QmZ zp=bfVThOofDWr-EbwFk*e_#99OEO86E0^9eoR%4q?{1si-W~OZ{GNgCvv<%xa9lm@ zArTz0%#j9v1*D22TSe-DdHgIduV8Mn`8;Dy|0bAcJgIQ04m*rq888mE;ro@~g|2O{ zmB+Raj27Zih-m?=<2s*yIk3S;4weGlLg5IhbS6Bo)e8&ClG{fWAsXty->3~KZHSSGHA;J? zTtTaI7@Z@MV~0)AcxOa>%Cs)s#0MadRborcA84CxY9kmzc8AWAXV7l$EKyHQimG#* zfSB0X?-!f%0UtzX39Ju7Rm5h&l1L>W2w!7}gvKmAbxfwe(i~~_dLzc$mSSh-b2rtM zmf9kKIJ5Q~7VAxh{|wEwm>pLtr2jbub(wZ*?;a#iI>_hRW-q>Y-r6_$P`5l13!j9u~*(9Q8o%7Ef zf3~bP$1$Wc6h7;2cS|KLE%xg5a2FFX4>`Xs!_ve%n8}Y+SM%le?4zkadrnn0s!48) zEalF}ojZPsRIRpgAIkcU;^*buSk{O*DH-Yns|sKG@-mKc#Y{)?8Rkd3T36e6x*y1- zRtMkPzwk6nnaD^Z1i#_*>p5h;=6mRdX-v^>r7v|QGTg`)xf*gZ7uUeNieQf7eC&&2 z*=#t}A$|xSrOJDLTrk0X^MfePz(xdZJ)0&0qJE%9i zXWW1@$(7@d?0G?TgxikEC|3`ZXr>x~e$K|cH7;LBbJ9ok$5K-BR8Wzqjkc_fJZTKr z^c~rLVVG2hF(6+~s(uy8c_EW4YH4|@7DXI4Ez}I`X}wIC9sHT_rrR>kEYnrabJ=utKkgpvJcsWk zRVrRjFWb5w%S%tYX>3Ac)VqYkopGy4+CIyDsp;u4Ns8?E<3v493sD%!xG;1Nv*pQO zZm3*&P5_Am@vps&lVrzA%h?+(tjcmmoNhHkBfzxe}}hVWhP1WyHM9jImnc zJ{F&H%4H5Ho|JrxaYlf1ENVmu9EzD~t(dF#hqoV8Bo+cxs9krP`!`Bt5TB ztRf%f3cQBN_a7~^Y0=i|>G6LC?>E30=O@ylp4+HOtgFFlLo9*@-FQ{=NZg)DMrk43 za~k^GzYi9w2maX?uHxnBOgu%I1j>-la&_fic#@P3se(J3J(#S>B{;isLzGRksozx5 z$EtM;ur~(OQP(b)>w{wiBf8ZF%`!>cta;wR2$l6HO+86CHU)ITrSK!o6g14#F8ex* z9`ma_N`G$C21*uMWs(pcoNZzu&*0Kg`CRQR!OJCcw>p1Rv276WATki}k`2*)viUWu z!t=6_sz+t3gj|)&2364-ZR+upZT|nVm&?Mv-t=Dvu^i7syQnByvUJr4*U=i?h#;-rpN+&>{UPu{yaX(XQSrZ>#scB&Rh7hByr& zu8Gbi6*X-Q%k9uz>G|?6Dd`pLGR?CNSJ#-Cku;}l?IVNd!7?4QXIC($%0*sZwYtmh z_wpMPmlAI=hsdxXF7<5fDg|bk@=4ZBvng2x?-rDbC?FL#(7N^4*U7vMy3)wB0Gb72 zX)>X|6Ho@zmTt3ajFhj9^Z}dHf*+1)g~ zy;UQoQyZG%ty)Z0W_dfA)9}mA!1J;2-CW0|?ZlZ4nCr6g|WxU zA`Xy#Qq{}B@o%r7D)Nsp0S(%}Z_nq2P`XbG5Bu!07 z)g7hgLMHG16qgI=q_Mv9bl+?nNuWm0xR|XqrC%3U{bHywt4sQ=mZo)!hF2|f>)oo2(-OMzWKO4*zNF+i}6qo|cnIBb2s zGwd!DD=H_(#8GuTdUWR$!F$ZtIBMT0se@i{=lRQN=746vKOJ&v?<9rh=lhL*j$KOc zTg;s|hF{%-w_lT6;wi>V&vKm59(X&Mub2!mKd$Oe#*cLV4{+YVITlH#vVFSz`Lu9v zJ05$+1c7Zrm+Hzb4KDv%8)9kNCx zN1rXqUy>nSiCLCbivbcxw118BgiCe~WBdh*=B( zWQ70M%Q(KpeV_kq_KQjgf9r4jdXTCo!Ju1(J_DKoYMdsj@!^%oi!m6+fC#Q?{79;f z<_eX(c}y}}CX5h~{`xfSE05+B^EaNXru`P>KK{2a74YE9{cQm3zG*;k#;Hb>sJXqKlGGNwS}eW*eGps`?6-aMD$=Z)?Uv7s~sq$^h1kEW&A zv>>2UEG|){TySl$@iUjmxufBJhnM68>(qAfC%+bUp3EwH;dDI*!%g!ir9>(Yt8%|V=}r$MNUt-WCO1}a;XConalm-T3(NQ2P)FhA)>{; z2t_1rWw}V<<1YmV)kY`9I2lVk!CTbneN52Lz?P&_3s{Gf0Nfte7rC$Cz)60tdj_>i z<&xRqdvGCsZF7&=Uf#+*Er384;siPUbo)8Wv5LY@W#8KbbjfWiXMZ`CJ)ttwm7qNJ zJwE+2L(_iU?dNaYVC6S)Lg&r?FHO<^y}ugEjuU1y7PtMQK3%8KmG*CAMz4Fg$R9mM zW}bSD2oC_Ya&RBVqt0k?NDv@ql0Fw-hH)_$c<02U>b?!6xEuzw4N?v+zerM-B_U~q zf3?K*`KN#oO7v3pM^Bt<0lXax18Vqdcr8b=weI`7mlDZr*6!0!+vDNN6?j$r?EkeK zjE4;Y9bsX?ZzLDK?jiCcgJtpewLQB)jttnk->M*tNo@A_!I2?xqjmCI{Uuw=Uy7z^ z;boXLPbvuQA-^;`I>!&ma~5{vCHgf?VYlD6#72bg!R!avacvlH7Al`0M{9L*!6~CA z!7D*#`ewAL*0K#)k2dW~T8mO!QMZKPh|_Xh{Ojf)$D$V>;?o2Gi`OpqKWIoWmkO>i z$$62}ZRPCc^2>UWdcTl&{|!DR$=J-XnR7@3O^L5pR&5amsMTq9^Fwi{g|2dSw=|AzaEgZLz}H(vCbvrceJaGKEA!Gv9O)t-tT5J+A;C; z%z_F$F}|Gm&6kRYrfL$10q!hDU6J|nEbb3hjJuz@BioPMl0xJ z4Zae0AE--7!Zrq+%-ccv4#yU;^rHPP**->%pzH59T-Nn9mM!Zz3fJL~a`x))8nL?!~O3%W~H)eoIpjVr=@4Ls9 zOpVq7-eM*=J0K&W&6{!iOFT3C8+v+sUFqpf5u~(j_Sc#R6BBBMJwo8Hw}=S4x3b0J zv`++0-}L!^aw;bJzVcGgl)Y|sM5DyfXMi7)S*}P#NpU|apsQm1CibvnPyRN*xq(Mv+%ff+** z>=U76UvjBL$d>2U><uTxvzh@DIIruzlD6R!zN>nVCo< zx4~Qjahb1jWc`ve5SnAb517}!9N1#%u7rx$;0s`e=6D}$Vid1fNUwn)vAMl(q}v#9 zjJ?O~@B%;AB!rw&`#8D3$4w&Tp6_XJL_%zNcX6uIY7=JA-n~ZS(TiV4n_2u`IH;f>Sb74hS`W1e69qhaK!J=;mqegxhQ=$x>a3kiwhP;-q;mv|`kQ zd9OI4NsJ^Gx#_<0YD#2QY(|@celqE zlu#_WrW4y9nXjWNuP=8!-LvlM$Q>tgs8zG~{JqhZ99@M5tOZ3FLTUnL_wmz4U|Mo@h{Q9pALO_<-zfnCw^7R;8EbBpo%k= zo5`Z!3OUr-&iCy#;Y~%Gsu#9yptb*yaW7NE%=|E#^k8Q9Rml&AjU$6~WZ1#j?)Lf! zUMQ85#1a3KIH_wJfJIq@w^cmHvwJ3U}j^ z6n<|fzxCv#4k5xD>)IU8p7&g*iXka#XknVa?W(h4wojoh3~EOw)IG|>)PHjZKV*tB zd>NyTd}C+_tZ8NCFu`nT?LP5n2L5jg*u2KmkpF&HC=S~I7Od9Rrn#gddH~`-<-Wz? z{8=cFWXM#kL2F_IvPCf6{$sq@zyWar-`=bhZKDiD_PRK~+{1Z%L0fe@D^23B#h_Ww z*MH>vI_!w3b6MWXVJ4TdL@>>Eov) zf+c1SBNe@;XZdm~(sf+5htpT?d8YIC%o{a@#8tnklt02cC0sCHF5K)ZwBza6{gJZ2 zItV3@hvb)HqowMU%`u0FH_iOWp_91TuJ_hV_XB{E(<-_3Nec-Z(T1(&ooBnV_j2pO z@%7x-Bm%O34u{5P&pc|8Dao8$4?g>kWy$R{EaSSW!UM~R4dq?duGbuq&i!3NVbqK z^y^iJ;6Mno;nqewe*KgiEG}nsY-i zn)G+>Ji12afQGV5aMFh|zoq*9XA?*F{(wk*0R{%>s795q(Zqwahv9n8XL)E@p5)M~ ziG3S%kM54gvf`lO%ECDFnj6fB@`+M~vE+DV$s-fvh7sWsD_r!`r9;jb9oyol>J2-e z!O!)8-toYQHX>5#!z*MKIzu>5F`QH@M)-Sva*)!D>?Is&EE!9 z)ZA+}0UJ~$9>;$@Z0w;!su?piE&{>*$29q!499m?asr@4;fv<^KJ6$?r5u|;&p(c9 zvcL*#Od+%?(GDF$=l^fNMdazc+%vdL?%ph1A*1O#E*yb%Qd0lnk>x&00*z>VJf!~~ z%sl37{40QH^rebg+g)v*SbzmVDNh@$G$^6J%5l-#&vSkcro#fNi@Eb0VR`1s%Yo;& z&0T46MN?0C1p$en9%&brhC{~}Z)*E*z7>iKH*+o9Ec%Pk1g&@j<)bk2UC=3VNuMBp zuBmu8>cNJ$Q*{eK*9re3%$)Fuvri~$y_2A#2)`O@nGm~2OjP0d2!BJ@Ri%Ik2~a$d z#7Xp=fBU-jUFf~m8^(rg>%h`GHkgEoRJyO&K3cezFCLK~XFMh7%h8UfzYG9OHO1?^ zjb-ejyTBvx2hpl%p@5AMk~9yudtn>-9^v&nMbozp)M>JJvS3eL29?`FwtvjVsW2F1 zWaRL(&Rh0F!S_pVhTGW5+l%tJwStl1Z9kPOZiSnR5RXaN*;nSgPIY(MO)N#blcoF0 zV-x;qAHS(T>&U(Xk;@|Ma`gnIiA=uh+#$@2t95dxQyC^%oMw)F%RL#im`}#d7)^TT z7XDoPHvzHsagILQW$g)=43)pg^gEUk0DQ{;*+H`BF8!i3a5pynRdlxW2<{0GB;V^7 zCbBx17vJKeVE(AFswhSze<@t)gv$Sa&)m31flc8o6~e)-ZIw`>9G$w35Nbx#LV@Zn z=MT*@w5qybmLn&5yMRD6Xfe0?IbuNWF>S|$SVGI(rhh~hzdP;547+yznpbi=E&PXZ z=ES{wM)?tulxs^{{t?%n5k&?M!Y7!A-xpryR(p5u_d(4uHOXzQQqvSKb`$lFPJ@tl z__t=av-=9Yg;X;``}HSI4X_<-@Z4|SI;rjXB8TH6S3V-mi~0%SVWJs-z2dD~zU@|c zM^5$S>G371Ll}qqTcl{9uL0Qk=g}UL&)c}fxrb_RoALXY7rIN@>3wSB(BDO26FXzt z=xp3wuExM#n8c_P-Pp_&@pmB5C*C~pD_wN+7@O~0$P<6sh*n$442LG+)BoR^?gb2x7Q0xirkNP&kSBYQ}ma4iad{*?36$$ z%a!l8g-IJG-+8rGfe4TRph`sIR7%&!Y*E7lK%`p}oTFd!OZ=y!##uP+2VdPoMDg$5 ziHWd<{roT^LTz1rkJS6MxWa|nX;l^Nv}aHj%fmj1hkFN&({{LCl~(a5c9SUhdxdJ` zqYSmTa+8Gt<5!R?Zdy1>+P70Bz4_w>vvl(Y`%XqkPF4H}3`xN9NTz%ZZ|5Cxabs$Q zv~Y?FAM0SsdmbPFSTZ#_p@5zU(R_k9>E*ioA%@i7*_G@f(xm+WZ#P4SMDCP>n)c5F z8e3xWmQfw(Eoa^aek{ZT)=<-P2WG{V6mHV-hs^;4^sFTMWb7ROV8nZ!B)v-fX=lKZ zI#W~qoOh~Rnn2nt6R<_k-3KwG_n1O%Wm=xY=4H-LBhb84ZWFb(^55MyZy?6*2sE{+ z66u)Iwjx?b_9sv)TOqt>^rZo3O)p4ZXr0{n60OhEZz8#BV7^d-+LV`Pqca~ z-W5tnYiv(k?Ce@IX?_=ft-^BxmbEXr=Yc8njhXLzApHPeELC7_g-K%CsbELIn&-h> znt@M|J{WY_2Mhuf`jkN_Bsq?vcn$zdUzOq;BL~ab98}U9TdbpY(sTCdq|swzJ6FC% zN%p*Z!6m#Su!+GvNiChrd{-X7PLYkI|MxM(Wj%Kp8*9o&S?=ble(%*1C$L`1>cy}U zY5psqf$w!2cu*Vp(s)B|x3EO)0;Z5bVXyY!EgUiN8?oKX?55iGQ*~ zs4-6vk#x^P&yvf-Rz;?vCft?ZtEOGGf38e)?)|GOeh;4!)ez1LXD@_*aB}4F4&iZq z?LP`h&}$>H<}DM*9Q2+61_54eM7%VXvEn7E=1Bhk1VGZp;lfk1eh2wStKkQ>7hkZJ z59M88rC+1a-xkJs(M~dJ!@DkJ>a85LsLn>Z1;lE=-^)qZ(@Y8 zzrA$s>dh+m(E)s*7kXh3N|7IPv<<-OhuMAd;F=lTHX)B%R-apdyYkuC|zv*NhAWF*ykf&^?h`SL|1$;V#Ost6uZ5mTcOkoD)asm z$XnTvw*#m(;lhJXVdWP@Tti=EVTKXi(aP^piU39Ao@TY|diu&jbHPVuAx})|V>^6> zF-N)#ISan9Ue3zVN+*9gI=oFJeD_KMGbh@~u0$~N{(;ytO{%2cM-K^@xX(&kZ28Fm zF$uaWjxLvbV9kI(fEwTH1k+|3-SJ#B)%oSG;Wb6jbwf1*+&bz`(oI&@b#zDW5-3ks zA`Wjr#tqHXVoaigx6Sczb23woBxnWo&G`wH?fBE%U1@1t5kV|!P@8ihEx%s|7=@14 zp=Tx4?6h`N;Rr5R;a#pXmYjA|vew8WQwtz$e)Uo1A}Hu8p(9NjS6+7S*}HPFw;yO@ zRTSIzfpk^b z{kK^bU{p#(dMviiUVgSR(bGNY$DT*6(7k)alS^V_Yk+6GHh>t@=4CwXe9kSLB@50+ zL7}J=CpFj^N5^XjfsOD1G;7c+A39- zmjVi5vf^h2(+ZA5TT%R>^bbE!o)rGn3#S#Fgtm4mR?)Y)ct3d8h_EALOiS6y7t5La zR);t#QBchfRegpgF($r0KBAMuGV@s1B5)~I=Wa{(oc&(OQikSx+zz#`ZcC8lw;ER8MkGn;ij_ZPCL$|;<{%OL8letc~O0uIiz_TE+?F?nrj2bU(BF5 zJCb}3_ZkBlvIMohhTtyGDNw3KPSye!51c8YQLO{E0<30;$l)0;v=V`#Mwv2 z@wGqzR*x_~YJ-OsEcvTN*5Rt7blq%YSq*@)dp`BeDJn zgP}JR#_H-V@YG^(esPMxuwyjv_Up-8u9h0uTS&gf9|q=XC);pF=)UU?lSCT)9oOll zHUnDd;8(eBKp0=*mMTwO&ruHne}!V-QqYW}Bj1~Aj+oT)@16;}b4a;0(WN#KJ~1PX zB(MCIxX$s1=a3@u;^pGmzN%uiP*X$Lf(-G+Cjg+ZMjF(6qz)?4|5v9px6XhHFo8PN z9nPJj!E@_%f5?2pfk$lCJi?f3l3%K!wyp!rgSPK2-vDE3xe*cPrb5lQft1r)?dAn* z_s48S89UyYz*f(WznG1gWMRqy92o9%L3l8i(wWLB`f;qWH6ZVEh@pSqNfnj=Ob` zGH?D`3fn}j9%@^#Jj0R`r`KqS96>N~@jQ7R#*(_bQvsk9hX{ttzAMwTtJ6O%t`Ks% zgt%jQQy#IxVdXJ7{+O*1)rw0LK#y5n^HV#^mxeF7@K(0*0T0w&$c)Y5MFRqVlZ^@g-R^SXVvQ;e3JFqd(XA}r6t>hT2%a}vhQ{g zJEKG52QuY{K}H!%T*u1Ev2F2`{+9LTxUAEU4?H#-o*^~Wroyj>)ZKYyX)eBRR9qtK zXJKKNePFJf^g#y8!Z%r!3P71{q3hRC90+R-xoT_ ze-JpPe;O%8W5|*0JN`EhS${u2tm5W5qC&X-PWG_P#iyxH5mo;mVSD%ERr*g!pFPn3 zLpVzDV}l8_J%B&s?w8yNKlE4Z{80&NDuApN{gSjvHo#Hh57-`zX@fs$Ks{~cSg_L zQ=-h^NLk|Ca)W!?&qbfwgd#8T@1qJDk>pV}o>e2QWmY!t$t5mzqd-C_oroG0n2XMXN(XBu$I0VL4T(}qvf-7xWS zp-;$|Hl)L6P-x+YzaA~%P>q{n+7tck7=?o95Fp>s1b@@CD|=x>BFLcj zTd)nDVKETF%|{;nfnd16xwht;)Q}rI^`73;L%qf4^B(*w!yTtUm(JOEdzkDwW#bQH z6SR<;&yR^BICw?6JH!FVytvqyue@2ew#5yviOe_y^%brfL&*QEEq16_zfj|v;+7hi zS>e8I1%X7ldWzlk5L2#zTs@ohkQidw&Qkw^E0SN3DVibX;qiao3M;}n(wh7lJd6$t ztsrO?>me5e#b1;$a8GsX!A7vmjdRyGDOyAajlFVA!o$D&vTR=fQQ55-!je)T7s34{ zEpg{@K$A3V^uvEyL5~DSlA<38@)2e@t??l-35cWR2u-(@ZhjTXCaMQ{FRa20KEnVs2Z-m4=$~z?FI=7#aW!UALtlb%)KTqY9F393n zD*I@^J5zT8NDGc%Zuxaa9pgv5=fH)QA`H@yD?Q^EBaN73&W1PotI2C4pPGUq7(m6c zwtGDyE$NYs2&dvdSpmd$g6gWsoma=!@%l-ZFSkSxD+ndmZ!N>&s@Ye@nP~#q(nERw z$z(X^Zr#vqV%XphO;bYkaoe5GkFo7t9fVF^M$&+4D@%m z*XT7LP?x9uNArQn=O8}vMLuAK6SKSfdwtp)J(i`e(~6H3yr*V+*a6;);k0|hCy_!2 zfYOX9Hym$b!uJI+8G`cH2bX^e%zXuk@{?~g55tFr<1KJq20bUCF}y^|tIP*v#A}w! z+3Uco-v+x|GNb498*Ft*O?|2q29T0pmzv^+)_-6S$fc0MDmrs-TeN85;WEr2JsrrM zs8Z&+&1O#eS421j#sJ;>zd6v@4eILqZHYg*op>#TuP7-)_gc#DkME#;|J7ldNspVN zjh@5_m3u5xyAAxmi>e5p@RZhWke3N~BT93VAYdVk9A3bSEe(ijO;tlbrxD63-PULu z1YXHdir0(cYE-m{DDQdv)>?9RkAJ124eV-adZG+402P`Z+D3KW?bqk#!75Sj;(5~a%V(^{=pTL7&2`6od2XLsmWlz>W1CP=gnPLgC^xWIXJ-DUe z^4x?cS&>5&A=Z@Ix>)>PsW0y_`1NC{zFk;_Gj`6I$>yia0L)n<{)nvKz=x2A&a1b! zF()F0etI;^kTOEcbIRhq+JbiM+^jKL2ByoS4ER1j&9?gqt?N;jih zN$GBBMhYT~8X(;zAvJm+AzhNjcX_`*ce(fOZhLs1bIvc$V$R)x5LPK8hiz#d;*_x6 zQ;95-WFETpzR$MqF3=;p1C->Z-+3rpPDid(f8aOwMNX4%pWsTZVnA;n)sz+!i_rx$ zjY0+h%;L&b60W(jSSzOuMku-19j9{bUgdBqNL zV-U=NA4#RtqntB7CHx5_sxM*G;t)m7YgY?7?_J3F;1^l}aJQ~V0W!kh<-xlrn9MT( zzdK#P+1I3^y}@_L6}m4lI4WV^w$xzjL(B5M7G8`sxeLHEA%b6rkBejgq{YgMb41sE zaPPi1Mr2oY;n}anY<34jaN5&_PIF8a1lG3+VC z!^Iwk{#@{Nf-p5!eas0U_uQg;`c0|$eAXPp0Wkr%wroO6wOftRqM}z1Tsf~@5x_cQ zX^QL0o~<4MvImDx@U^%x$kl2(Ct z;xL=slw;HptLE{0`kNn+XTZmj;iEC)r!7MoLB*QETU#Mqt$MW_p*aNMSK_VM z@O8!(d*QQKFC@S#OLB=AOt?-E+dC)RoAe#s)fbhCLQ0_ZAC(NP8BZnf_AqK~2K+r?hfVHB&L5VqvJkZ~rDQPv^K%~GVfZ*$EoKNqW2 z%qZ^=T6>t%mfd2IVohr+)vyeH(uDdqwCp;b8>A3WKU@rGNr)Sq6!HuZn{r&qMpbfu zCOF_;%{{FZGXi+8n|r=Llc_?zPd}D`((_;LV;@yIV-umFR6lY9;_UF0N7XO(fUZjL zKrNH?%_w6n%<}dEIg%`9iuAlQtg0+bs9%~J{HxMaOvXSB+Tcv{a5GnZ2;ld_FCImO zboa@oHM$}Ztq^- zKPT|wMk#m>UH87%gF|aQH<;6I#yKN(Q!jtzd{l=bEl9N*p<~@3DP+EY{!u0DM__>L zdSj{lN#UAXp61b4dtZW&&O&;^+>h_`RPu~%4~6e@*sNYgsJwX+NPA|KOEqrt?MQN0 z+l+-%x-vU5M_kphI@z%v( z{<~Oo0x9Dj7z*S;QtSSEtsuQi0!8(~R-2WUy6QoFRiV+Al{2VqvHhpGHTt^8Sb(lL zKP+~+R=SKfcQ6i2P{b3g(*oSVB)lpoa<7SwjlKY(;6ClN$H`Q@YVuhxxvZHJzsw-* zy%v90UNdyKKb6nIg<$qP)$`YP2TR@?k^vUKe zlO1my-ZqHcpL8+;{Di@1JnAzU>aTTcERWHp7kZOmnmXHCgR}VqZ}D{Z#$EiPe_1de zPVbzC8XbX2ttTB=`X#~o_S*c)BrerUsE^BLfDLtI$GQ*_CF0dK*jKBkK9{ke0o1Po ztE^twx!$?AvcdK$xT@Y&U&|{xlti*oci-ZEx9+%iV|QA#ku&@MRlpWvY)+USa$hQSYpfs5P*Jk|<78 zE;AWr32;@sYGEkAu_zRH-9+(5$VBQe*=mFEVDCNyXRY_HQG654O@;uMDJ&;7_y}{( zw)RPKFs{ZL9MoKKGgF`9q+Uf?hJ8B5Q~;AkEs|ZS6|Jy(Dd?T~L7loeBs#Ot_);_C zM0^%MbRQ(6hA^L`4goqG`A`{BGS7U0`uDsd_)3|-vtYG_C7BK!;*=sT9Q2XD14V=1 zlWU|pS0%?@Md*?6`pJ~braC*ldSx#aMoD~lnrTIX2?$80Y%N*C2_AHc2r9txtu8+q z{Wa1jK1ItG5GbiB_^2_UB{uvO1Ldf`@U=d6c}W9ijul7#&ZA9o<8AVy_jzV{h3fV= zqQpjG1izWcKiOV+H^MB*w(ICvh>D-=W*QTGe2o;n>;BO>ol&MI$x0w5VCKUzdY*aQ zR*=AsY(vkYZ}EGrsA+-$5!da|)TLID2J*Zzl~xO4zEZoMU3nf^*g{ig@duWSZm2y( z0V({)FN`)&rDv~wFbwQ%|RgU z6==5}n_$#IeyJWXe#C*Sd{Ye{KE*ow?dkpJt~9bb)-}NCguV-CA)Gs>uP}VO>fxVl zR9qYGXi3U z1Fg3ELxd3!6R9_VRlP0uJ)-XF^S1hVrSbzzH}C*^PBQsc66;xhTfpqr#hwVb`Tr)H zdn6_)6p2Fjfj!aVUu3eQM{rRa&~R>Sz`MTjREi@ovR2$(!}rGqa+Wp*QMmz6$o#~7 zXF2{}Bf~)hUs(dfp59k$hPxj+-T~!okPWr>0R{}^#;KFLQrqVrOwiP=&}O~h22Z~8 zR#3MN)j;m_v}PKUoM-`oJLQc5=$rclLV7vz1`oH*>WPq<(WHQSH$kk&TU{0IkXb)f z7q+WAQIfeQEU3af7GU^JY#rw|x)eiJ^)id_E$u23tnI&z5*)RtVAV6XIE?qO&4Z%o zOA6In5YWh<^IDZW&oBWtD4+ENSu$w^)m7|fdQCkpeX-lDZ32OQ;ADP%Ip*ri_!N|M zDI$6v4-LGFsnSgx)~mBkd(3Kye)w`@OnyhqC?`sgm|on287I@nv;vgE1SuUqI_nFh zaLTt z3PxF@d5k*{;#xY27oq>1tJNqSy3MiEr?Kl>x!> z@$s^0j^K?OgE_up`~JT_FSIi3kLzO%AK4dJQ8`wLSZt0wxCL;ecWKIHsk8$xk+Jdb zfB*)`WuyJ0`2%}Df@rbpC1vKis+a?^g2p7x)Djl%3mvAQi zK7+T`q|X7A#xtBQ#;(0P5#>3uQzXgOmJAm~zC?R56{jG1*ZK zhm5q!jh-JA7kq?7BLbD-45?1Ax}145neFN91fzF@re{Zagtv%f_n`5y2Oa=>f7Vae zecrBpFa;?UFWY4_ALdQ0e4D(r>hp`72g^P?HzhoY2_Q=cC|xgQ3}{5p!cah7Dg!q^z# z#u;^zFWSr}`+UI7@gax_%RB7FYO!dt_C>24!7tFrr?TyKhmcl&XKbDygF0CGq5)3t z^*+twLtVqSz8nvznPpY(JN94gozDf|CKo121*EK&MFy*UAIq9}Nk9_q`h5Pa5^3@} z>#n291+8$K@9Rb$SZ}9F@9;p8pD9ddzc1QF*N>Y1r^$Gv+Pia{bd;;X9Dl05=C4pJ zpuS?&8{H00OF55)q1JhUZp=!`6n2+#0^ATx7J9YSf`z^e1_Elj`^v8ZxZlALeRU?_ zcNyFIf3018u64CbdJr*UA~ZDf+$QC$3YIbEB4_nPRl5M%r?9$mi{m@sEg22`s4KmZ^;;)nc(_oVkh+wp zEXbVgm(1TBdW2jOQiFj%)N*dJK;*ZW+=m`uWJm0oOD??cy-kvauQd!T@E90w0tG){6qn|Q#ACkn z@X`O;If#|d-ygA+LB$h;&^PX%41mShsfh9%zl8-4}HF6ijH>XZ@>=1;4Ds3LHfzf2={gq{l7k*=`McIsJw$ z&{PvX&W|}B)Va1s`lgf`YlKk|GR1AR4(f;veP3>LapWA&yqu4VBWWWs^V;=6c@;ht zI!jdB{TeqS5ae<+rmv5c|b zJ3IW{I4Nfs8o}~;k?~h-(ZQhX3kLwjv-||=-@gy0&C!!nEwgHA>NTENVY;LwcYFl$ zMBdLWx8g!9xy;JOm5t|7qPGD1*mCRU!bT6SSXpH1x2^}#UGElt;vOVyk~LX$h^%>e zuNq1YX;(2$FuY>mE23HX0-|Bmg_ycr)YOMhNt1oRz z6GnFb+Jlffyn#gvS-%&CVrLogPr=d%C2i7voXfFdE4wh!n;Gxg@%*#sJo<;|714_O zya1P~`ib|m<_Gb3HvO5ul%}O7hEBA<#U|}&_vm4yBk-!gd*~h+*h>2F;V!qt!#ppU|n%gCrrprK~Wu6ro4o1EhR8HU= zZtmXwQ3XleADk~nE+fX7*Z#wnQeSDrU+z3X~)0t>*rCy3OKO>;Sbqi>QnOLpeO;qaRb{T`zd zsb>d^qOqofWrG) z%BsD#!x_LZ+O2IBL)(2Pc!>dNcGRxWx+!b21Q|0%;HJIz>X2_1)|uBw9?m$f1M`9_udQu6 zouF?DdB(xI3ShID|>8$>6$iaelfJV{--Sxd%KWs zCajZIW?J*Rg}lmRC&9y*Aijk3!DWd~wR1B?*3QTQJVkqdEX5I;W%g|^Bh?w0eqe`U zJzsz3&-C1};rPE1vlaHGJEj}Y^6Sn3qS@xt$s$;jerF)x`73V^pS9=6kdP;Wjtl;F zk)^Jhf)N4FN_B<^^I=?iP6>38kCDUZ+<0<>?8DDKS-ku~x=}_d#okXb*19S>pDk^H z7#D)XePkDK6Pk9yh0NCJ;YU$Fl4eq5V3Lbgug^mDaoGKF$alGjft(EjEq^73;CAA% z&tm!-J_v57ovh#%#whNpbL&gi0z34i-oDjpGZkU<3L{-Fd?E{|!SClB9TMO~Dif34 zRU5MyzMarfkl+~e+rff-N)ajgvIXTB<7pjsez1_A7-p|qzhH3~e2%avG84vk8@QKg zC*;S;i4L{xxm-F`|M0ZE+|#e~`ANQH-FUncJ|@Ud76fG1(PEcg@(dobHu3X?}6Kp}?SDP;Z)y#Hr0WA`0$@KL$L zwm&Yf?X0A5jhKdk6NOl_7`ozq_ z4KSfuWxG_o?LK_e$FP5vtMdT8p<}84R4}C$jbP@5BEf-)=*ccgD$P^ao?PUF(UIqj zsZo7#tno^H(zlK8UsR{=E-8lUx@6EZl+3XA|3C;PR64x$xn$P<8-GTu{k_ZfU(~-V z@~J~7o70FD`Gz}bY|H$sRxx7Nj{iLI^y`yFkroeSIz4D^*;Ne2^x`!6zs~t?y<)a~?vw#b$Y?A}Nmb~!i z-j;V_)mILa!K9o!v@g+ zb&SU~3EUp#*CCb272CPxG}*4K%anw7h)lL}Y$+4Am(E(~u32O)TUh>F$$XYo-?j#9 z*($B646L)G4wo&g=&V0~@eU_9kk$@{t=ju>G@7C3i^7~&-#8@L6J1C6LhuS7CQWp` z?{w57QV30}3G@KElmkGu@E22{zM%Z}bx?dnWpDJ$Lh+k>(@Vf0i6?v%jYE+g1$zc1 zAX80V3UzKgcbs}Bgnx{_`)-q^lI@BurETa^gOf?Tu=Zy0>Vv*WY1W^bqQVyqwY zKZt&u_;UI$%1ynLMqQTrA4@s$O}lza*%(@o>EKkwI?S8`5R7M?}cA% zr5_%lx1!N|wI5XyrzOHMXoKe{Io+uHR!{}qo8iG>bT0@@A5l=I{owT5^8sq!{cPct z#D$3ojH9NlkU~e`Lx^k|AUpxi@I})Etu?Xilk_f!6hLP1a96Jw>MW!1+ls`Y2e}%& zg3cb>_lJ7JtBI$jYkt)N9I1$t?RMSg3^CzYoDN5^XjaiB@D zT4kSAN^;?2csycJ5XV8m7#ZtdhJD0jlr1WkG4X5W%&cfwmp*Lfagddm+}BkCid%VbSO6oNfweWQJ5!Ax1DtGU$(WW;r*lutlp2A4aJWpswD4dGW8#z*BzsB^%YHBmSuNSH83>wq}#7=CS#D0=RVbplXy*&-E@!gOWiam=%QUn}Rt z6b&(7KePwNxk`2llYjFbt{lhmELK{LFEk;7!igps*H$FFbne+KJAHr1Mvw5??&SEP>vehtGN=y3 zr0GzwzXC677kIi-kO?r(0+Ih{qUg{{Q5xUAg(|Qe9cDT0IZ>sR!dgT>9`g zTk_9$je=8i%;{DqQ${3BZp8$ieae{xjD|@@rLQiCUdDTQ-T&Xh*TpLN0m9N^=61yl zwnOECyo^V9^sq%;*!RVAP4!eRZQbSC5cwVT&n^ZtV}Bi21%SL~mJvT1&t}35ZMlD} ziB)I(ru`8vrNxg*vBu(ILL;L&AHJwTzFAlyja;(0c!E$ zb@|D@=u&UbQ+HEPQc37#;=jRV`#KhT5971B(JYYPQpXSM;Xr2eCm(&eTyjfc>u2Kk z3zDsc;Lj!^DbiUx=n>u^VPAnH-qluJsG}N7{32ChIhnqq7(V|L&45StJOu8nqOc^m zJxrdxC#GDm4;w#EFc8Q4jvsfplK-S#lj@*g(T42T^`ig(ja_;b{KCi6fW2=k_vwG$ zE|*`lW~Q#8;WILlJK(-U7seGWNPJ>;=B;(>8sL{T!Rs(*)Lm^b+*7LQh*;;7D@JmBK|_*=E6c7s5ovYHDt=0DOec{6NjIma3RzkDPwWu`OGLehOhIX##I@qrj5HTs)f2`z|FVI>lElQ%F zdCmL%J-L$_DL+;?!r3Q6u!LJ8lE?evAFELYrqkv~a1tYq2+W6nnCT&UjRN)zmj6VR z3TnJxuhtl*s@pM2&wuuY#KkyO$soNHiWJ9LB%;qD(Ee9463=#?dF!>aw5_$D#?;&0 zt9blh5p`FzS*^sV;_f&*pqXWWQ@Z2fuaxXj|XZUqaBu`_zpJ0$HvY=gz2S$SwXTm ziD%>kdSSqe=0~R`rjykQqdneFQNZp?rYY)M82v_N0S7qqB^LDwYQKsQ&xbRm`z!#Twm%pn9ggIQ0w#zE|*+ ziv5U6CmNcDTqEj&>o7pbinSy!;0Xv=_z%!KMYaMd1W-(Ssa}5t0+uR6ExL8yi|7eJ zGOo!YL<=_04~qlhtSj3;zyX>c<2D6RlD;RPz&G)M+;>SgoMRpyLC9kQiR!9c#DQfjvq{p2_6HgmfLe zeNqjk+S$QZ`y`11^mFMe-<&97M@-O#o*o!K^~s1Jy~T?!*Vl1*pZ*EDa|qfemfiC{XeMk^*#bQwJzr-EZqmG&UEU~I#xSZy?$~!#S zq2@rWDOj@p=P8p>p~ZlQyK>82M)7NoKgZ%L8qX!G7HEifCP>4n%}wp_XxAn6*4LX6 z%=q_2$&V!SUJ4XFCZ~NkJNO`W?@f14IV|OFq#Uk*B=Gl=BUUoKu6kYaf;-#Je=+lp zYrP?SSl4*PX?&weBW=G$p8Au0ddLp?8LhM5vm>Z1XVi`Zui`nNZ&C7JrKTU%Q!In>9_XlnE#iFD9`*lLa zEwM**q)y1pXY|D*z`js#z6}P5e2yq z4&&Q_(G(8BF=Yw^X{o`R31O0WvEL@7XV`3+4zE(M*(3^&vG&H$_w-YqKecne@C^xu$Y8|bBBr80ME7ohrvd|A0t)W<5axgq~UIe zRf&QNA{_MwP+99L7O}Bt%X!66^VpQ2BUi%fs#bS=JDYoF=TVI&;GiLa+9Do1gx@!M zqEe4>4@g+kK#(k!tu?{^qGMdqoICs;b^3{Sck_OR@!PlXsH3s zg|%wm#S9WWj%Bb+tQHlt^m!-7O!!03p^kk?dPmVRNgevJm|Y;xn`=OQGlI8}|9c7d zSaG2930dWW1Un$s%SVAV2QBF*>XYGtfY7?MqXti&Fi{P9M>*L>$N0JLqBl7RB+Ecl z)ij|Pg!!#hfXkJJ-6m-zhPRd@CI<4m1w9D~eeq`(m$&9m)TLME=d}}r&NvNw(;YQ9 z`7>0B9j@imxHWC2Ue!Th*4Fu)rD=%CZMf zRnCwfT^}C&IB^F?4qsQmaj1<-gUEzGzd4%XO9O28W{N#O`tlzHfGDYV3&#we_ zdvTm}dx#fsm2jn9&skt2O!M%_IwtpqPyqfPe^!|*kmWnqYXBtx8h~Gm_k`aLmr1dy zbvBkW)gA)9-ISXUeE0K?y_lJM@5CdzUxf-|OAZvm`fGO9R>vO!a?pkXMF(liM-<;} z^FP9!TB@CHAR2Y3f}~frk`fe)lYrm(r8prvK_-$Ug0j?1xq?5u@|L|hG$RFlX0z|_ znf6Hhmd;5;@4F}+kO{NrqrsX5EK)1D-2Rb@pMEC2|1BSuMwr&iRXzpN{dLZry&P9*~+Sg zC7!87*97i*_j&-Z)$$V7hOjP{&2I(V{~&k{*!HIFORNW~l_a65;;7dju=cmFnO~Z> zG5mNbSIh5$SeiiA-u~_r(mgL;@o+E{jlJju;NRkBZUy~L;iTo(ELoTGn5W9q854}v zbaWrJ5KYK#|2W~>flj_9G=Z>1BG(`M($Zk#?U28Gb7BrDLmD${yu61{H_i{aQC>)e zKVm>?%lbx`6Fxky>jF%2ty2;(mwKNEpt^pRBfC0{`g*j|ybn~P%`|#%C&(^PP6&M) zakLKq=5YVhvm1zh#z0ar{?Mc=yL3u{C~#oT{8o{Tk~xKfJl30{JsqXtV(*cUiqCM>}G zTv$ZTBQfUkmq(cH@)88k(e=tRF6PbyLIB!$Kb3FlM*m_8AHgZjMtKSU$}nSjsFI-& zw{5ocA13r^VKLMD9^=)js zJ{_1mnc|yC;6ag$RNga4Nxa;Dbo5x<3y+I(pGXr?5Qeq#j8!tXhY;p|r=q|Bfxeqw z4rgF_QlTHe&KlDA58O@4gOctz`{U#N<%caL5${`QziWxFN|S0k=05_NC^u?cgQ{Ny z_x0PLVaU9=`^(!+&4U@G=Z*X+G^u@G=OsJXpyzJPWfi1Wn?ra)zK$yk)~!I~LtXW4 z;AZL1;|7z6OC7nb-AxG)SQn`tDdYM8ML=_Art+;#@TzJ@cT4q}4Sw)kd5MgE94j{_ z!TY_{6t~I%QINAo6<7SGcBzeQL;)d=*$FP1~lPYf*Dw_v1WD0nW9Kh;l=f|n4=993*pn6%jE+hE*^elLkKuEaCe^We=$p8&e zfJ8se+T|7zMi<%ex^gs=ePp$A`F6+K$zzt&|L;miyYl{2fB&{LRVqp&|Jm3(f+iGdt zVBivj?eMz;fR%-emBZB^7un1C^n~?-UXiU(L3ex$k#_MO9 zsOwiQkdN8bdUZXI`n;d)cs;M7y6%LIqnX-RC{SZ};%1RIj<=?J$X7PpCR-|tVh^#D z87-KKKMZIWlIsd9!lx?d2*Wr5EoF3dV5NhK#lYfmfzYiyzGKhG*%KVQ z+etC`lR&ZQM$-&N^o5z>@y~7;v03{wi&=e;9nV#E55p_%zrYU?lrVk%{IFX{waoFf z3|kG~ZW1%o;xVXd$Z`1YjMqwl^2%BtX;9Yw?nF^%npjNo-fM-u>b2BxT7{#cqD#B< zaYg)*I@MSgjN;Ph9>rd)1u2F3IJ?QvbLSFfs^N!>iPLYSXBfFvBA@JPSx zh-K6>J$yv`c)qC2rz`S-O0S@Tli|GA6A?-(C!MJ}xVeu4JTUoe&Ol*+$S9BEIh$X2 zrSaR92iiMc7V-AC16b2Po6=>=S0=Vv&%xok3W`EC&3$FZhmOew11zsA|_MLhg12FM<${U2I@VS`iWYj z{+6n-9f+0>|E*fE5L5nrvpvT%IZIo6?xcF7fh>u?D56+g<=n3bn46Ro6Lr6{fYu6R zGR~A3qqurzZM$+;U*sdZI*R>uy7+&#w+syYoi}X@J+z0aHLp7BVH0WRsDSWxWwQf> z^bb95?+clwc_+^@Sn*K* zv0w$4F*R}I$chRw;L1d6aJFt9hd(&_zZN`T)a~|f-EyJgSehRe?xtUfr#%%=A`uIg z)g~9O1;+MV^e^>tZ^CDONOZ{$!^F_E&n>Yv(xm(;6u)CrJ~VrPNOb337mdk$q7qG$`3ER(QzLeOxrLn4O5{2N37n79$VDVpNn&U2jx%Z;E}R z!=ky#o4cNG;5;( zK*}?JoYw*|s$D>E{Sh|c#7bCbWuCkgk9pqpEPIji{c?bq(oe!}V(r}D#4B@MgXNcO ziw@@4W1-(>y{)p~bzcCfc+3NlTFj&Eu8rR)B2#X&`S;iDh@^6*Kh=9Z;@^^;VH}|k z8>o!}-|IhWB`7t6-m!85jM?`sA@-^M=BzkgrJg@WXxD*hUe<)Ii6CdIN+=6GC6T&k z=NCGp#)e(N>RKdq`{3BeTWT@D&B9Wg-^zw;J!nrPs)1MN;;;C(&?qzYYV^x?pqqwG z9c3;z7jW+8_G;YM9+VTAbh=z-4RvOXE^L~shu41*a{_RkDSBLqn=17xkv+a!>el-p zIgCA=LQYEF{H71|FMLaY&YHlfXJ@ZTO(_ofHmi~?b4kSu(Iu%_v4|sh=`M2#TAX-` zs2XdUHG6qix(wbPLX5phMFMyUPR9Nfv6)iIl)1!>gFvn4&GYuIkDY*KzpF7hw$d}C z5RnZHf0I*`<$%9((DH5Km+WXq;v1V{O~&8U*`DT9NNL+D1ap%Ck}vFt*ysT?^M|;_ z?z=X}IYZFZw>&LOcY)6KHzF^wZ{vQ4Km~RDEcQWzp7h|W~f7oXgkNnKCV(@gg6g*(Vp;k0m zV^{3Ht4J;dOZn{5D5uUJDORW;W4C!5>O{Rd+{ zbHsLpohl=>+rOo`5?l4ZwZ(Y zFz{9<>Q2RFVKzEM0lOxeDMF11m9K-a4W%z98{}g&7n1$JZmU3*F|(|Ykq1b`e~I8) zrkS~?HCK=M<(mwB&)jz-8Uhjwa-lZ*uw!&tHU{0d994kbB@?qjsK3as*JWe{(87QiizpW-%Qrj2Af={L2 zpzs_c$vuH841^EnT7Ao5T}fD>7%#{uVGqDJlTzP@Pe$x1NwJnB+gj`lKJ_vs9ctVr zid_|r|4OC{AVw-n#7^2gTGUSY12ol% z9?@jRMDEl=iYcYew=F)&#i)}5aZ(4tkj0q$|wSZBk) zM{lW*_YA){2^&qSC{>a6WkD9VRcxZXOuV*JyC|+pqsZ?GTnt;ZB^R~F?$Jq-aL~#t zzr`rKPAx(SY1JI)AC&N8V6dZwzj~_FJX`R77RbHEy^IaKug#tYr!@6I(||EJ0$S&!gU zU=DXcJ-Z(6kPm8k*OITD+X-8R=%-QjcI|)J|KbgN{ZkpfI`?k44E&7D-GO-7V_Jkq z!(KB6G&L*eSBgF~Fx^&=4sn2@zDXS#*mo}0));t55{7dM6)n+}2O@UAPcyM?15DEb z4x`ggHAK;yeS1m`LiVC`7APTpe}3w~vwu|}YdO>x4wzRCE_f!>u$hoKq5OMQ59o0R zqiaYYWZ(Iriope{PB(g6Vv1}}~w73^8_zz;PIy$nP9GXtdA^wpkDevwMm1MJu#!0XveD7O1==(iz1 zX5`2a;3afDulQ!Ih^HXIj~PQ34jkOOJZ=XXEkEIQ7W&UPr+|Q=ddHut3ft9Z{3X_e zJf6{VrD&cpl)YbZA4RCn)ZYjQW(F@GK#qOU2`=!WfmnnSrS&aS4dh~ZY(YPlt77+N zSYG|dRpT;J3J=oZ;Zgkb74VF`kbew0!inx$ZR3dRKRq+L_1ZHso0UA)u4_ULPk&&& zDyM#<*jS!z;%h)aILq34=XC$mP&f6oih7(cg7=9VoR$JYdR+NL!4er+-2&h2R{2aaUHd`pt>f*@ zl7(M6?e_jurIAki{`O=M?O8Ba%);QdXC4jk`q!a8yUX`U8kkXU$9nTcEe>twC$5Rn zO+R`jDo{pU|4D@}hm*d5kE5ah7)yMR|n^9hw;^yU|lW{Zl(PrrD zB3cWDaNS4AFR!%XUF+o@eYQ)u@(g(TLJU_(#ib7Oz#~g9WKT!$dEQ%_MkQd#*9{ho zRnF+g#5Rk=Uu^k?F512f8Oi+o5ukJQcC?^=f1^A935ajx{}jsA13mYxvplcnC+R0h zmCrbfwNsNr5DYdE=~v)naoV|;`I zgx@U-pA+%Yq^_Fo4{$Yguh9ybtiJl}C&>ip8A~x8-JSsT4?wb`4X(d_4F{hk{3*+-MkT zeKE(N;vJP{(#_K0u#ss{Gav0>GRnP$FEZ+r=kK&x&tCWSDc-jPmRmtE=yD zcwktC+xT{9wDh#$;|pW=ZN0Mza5aD4MGqlRPFJj^Z$V!x0a3Kp+!I%>`HWU?GcEHG z0A8#}KQIv-Qb2lKuZPOs|1{U~@A}Xble%%XQT0<2D?_ji=Bv$9XRO~Y;!7?-nEID8naE;)q91cay@Gr^osxyzw)`)oI6zl2MPECclvb@4$hJ*^K zLljfs|MuPhSEmk~jROi;LqXf#z*jhE)zG`!2)|0nQu`IlfK9fCI~WL>SfIwGI^Qe( z6}@(ZtJhmdeSwE)1V*S?4b3Qodp^PzXU6gk!|EpHe{m)$;ft}Fql|mjtUXlVFc;Ux zF(!l(78sm%i!UYMHQvSM{BbcV8Y3?vFbMc+7nL@+tep5_Db9VM<^f^*V@1BoOpFOcC|3H*w7$YyPl3TguI8S7l~;V$z+mL;PEOimGY;3)Ho7<= zloW8);gDk{0!`OMNl0CS2dvt&vJY-(L1W+AZ|f)b|9&G?%y)96W=oUiaX3kyuda%1StUGx&BP` zFU3-XZ|)Y@?G`oEv2P~)XT|1U$p+f3wAre@IlqlZ3DRrE9;<$2No+5AXNZ(EmB2I7 zTk6d>D1T{=buWDH7AOlJwECzHtkgex^Q>IFQ&UZm&B>h}Ld52NGK>n*d_ z6BAW3CAnX#Kh{K1DL?pvY@}80AgP^s=aA>iAnFwXmH&DgU_&IEbS*L#`N^c{il9lI;mz_JEFD}l} zZ#?7<4*KF4_ejR;r|$hitFEz_@{g!)^zbrI9&@~wAxbS~=t zN%!?i9*?wPeUaD|{02&;=xgu+*|IoC*@mWy@Ipd@qkXAfr#va*UT19mIM9{OdS<@gz2>HjUBOY() z#{bjgVzPWWU}`>tmNo3f-B&XGv~eyh3do%r4bt_+_96#Psp*dLqeHJOfh{xPaC5h# z??BR)UNul##X{C(b7p^SovSC)5VCpo0!^$(Tf+ZiwM~bgsiU`NSc<7YM?3xKVA`Dcsx!;-(f|ztnU{a;Yhpbt@py)sTRwzw z*~LCdmXG-ZuPsQ%XA#Ao!vhu81sdsv_>dp8tnzl9u!#VuHk6bNII1c~sTUJ%wVengwrw#%hs=%bi6s^Ro#=MkI zHHKdK&)m+Vo#|};8@;jTSQ6$M!3DN6`FOZ{3v4# z6x1XrQ~07sLS+nAY7oGF#l!t9?3WA$sSDn78*mpCS`a=a#c@0VHQDOP+s+~kv#%*q zQgBn}{v{-QS~t7(8!OL`sM1q9O~9Gmo)6!T13gd%3lHgV6dz7IJwX0_+p^xa`s342 zfBb=^NPgJZkV@McAT+kww)>8=?Jxy=_uRpuZe(iwJTm0{bP*vr^9<|3q^I4L_}_(& zu*j{y!Q^D2CEPDfKJh{cffhI0`v6caVzUX>y~!@U4{9jE(tt2J0zA7iY{|6Q^Cwv8 zYyfTLwSE1e$A3*D|Mi;bM7h!{TI)9Z=#SU9$_ykF_yFwgjH@AOpI$q;l! zutLy@m#Cn|mzHCVyVT~1SSlnm`(c& zsbRbX4SW(8f4Pb1ip_dX7DtEpEunSSO#VzSjx1N#dfeW3GDs?Kurroku&+{B3cb#4 z$#mFO`w_y$#rV1SX=T_j=#@~(O{=W3+4^+#Ra(6_Aee}IVfBy8=%xY-|E+~-&?zD9 zF-sTP-T#3EZr%ct2G##_Cy#t4}q0epHCY&od>O+wEqOexFB7$SA z=M4XUEuD2-RL|eVm2Q=g7U}Lz>5!0=kX58(cUiiGuXKZSBe2qlut&y>-#>z93>RXA~f))z)zV;Fs=`3Tn5G zCw7&v`Uwx6pwyV@K2p|MaimV={#0XEnPZz^U!++oSrcq1T^Lg|$0L*OS7oN)whQ7= z>IHsu5C|To6Vh;$9(YmJ+SJ1smq^SYqw7^&CqJ7JUOu1v`lz}JL8+IUi! z3Z=7{r^ugSx;N4FAxHEXEneyu&bC|au1r9&RrHdKcGjX7$5HywSKvu(&Mb_ciWD0V zg}a7_D~@Zb35BM1` z>k+HObn9)!m%pA9Ma$=|rcGV;rC9h>@$cTvM^@rva7J2cL99wmwhA~6+y1D3aF5&6 znI8zu>1EaUm3*5Vz~cJ`?g=$#g;a@6URM>@_nZNC%qK>%CAI;x)2!pFN=D{~Ho*3s zK%}h{PA+LEp1)#?2f#0!+M#UqZ^NFMf{Ya*fKV~Sv7=*8W8oXAa0lr)0p|=5BPLv* z2+eN4{XE|)aKcK_?jx;zZY$4qP=b;KqsKLwyu+Zyjvy|1q#O9E{0E1XDr5Flc)_Er z_EwFK1jH8*&yKDY{5Dl~Ls&hA;gXn{F=~EMRS}*rJpI>AS&LYct(`eY72i_k4|AJ> zW(bRA4+#J1Mt{ct9c;enQXE>d(!!13@_#l1;5jBsR98Be`XeCwisR_&WBWN{z-TH{F)yKY)?4w5eK11f zakj`Mi5sjp4W%>ldtgkyrcEW{25RV+RhK?^hnN&Y;>WB9Y^`gMqcYdF9w*EgU)!q~ zPR{IhNDKL0vvwxfRPFq#bs)igsetWoq!IJefvEXUE7_05JvWb`4@wMrOGMVr>``hq zZ#BstKk0I~au36m#2n%3RONrrEa%b?7hcKqwCx*|lC98gS^Ti|ROdy)jtjhZZ)|6J zvS_U2<&H!124nSqW=H-f2VZj9{wh)s0?*a?LVqOH2jB`!NSON>A1adgU}e%(b_qsV zZR;>qvN0rA`{Wc&Ht))bTg@kj^TX`wwE$-6q6hBn33YxH#CA6fQp8~3s0!}Qhnq%1 z|EX}v_JPaN3EOkm6-5_9K;LlP_EkL-iJs4ak#Ky#;guCFaLbZGA-pR7Xgbs-q|#n* zNC+(d#EQebEse5Lr}&f<2vwf^O?;Nr-+&G)U`VdFf>nS2N_0rvdI2y)4B(0u-Y^m; zexuF)Ca}Z;YP0UM6qSwft6!X|I)Bf8cC+W^Y`Ag~+Cc ziBd|vaXirJ3P;mIOfvA<1>g3lgfFccvmgBTiNMD>`9jqtj-j#lN4{MP>y_B+rc=De z0G;?b8VjbPZ^xrzF@wpNO_-sXu)kFBl}TxcjA|Jn%|xIgAfsxvUV8hgl6Kgz=d69{Uj_5y zuUvfC)O|sE-ViU_RX|6j&9hjy0MUQ)DOWZC=Fpm^=GE>vLIStZ;4C2+0M%^nY>B~f zeNo3{&nI<=&`XeqqrXCz)^k!W;&A7p%JZ&D&^b}$WWLzmPS~?g4*Zr@LFbGD!YsV> z#U991ht-;>#;8@~JELWqo5Q{=(%E!#?TFv7mFZp$VMLV(xsrAIxf)R4A0vV9nbY~i z(>{FZ@#XEv;N;C~FKlWqD)KKUn!7Xubp!@D%|ky8_HEsSy)EV6Fqu_XF+y^Fae?<7 z?K6^vyCj+?sO&ZP(*PLieh^UCr!Fw3(lGD71T8$Z|5cF2DXf z&RAnW1CU|;>V15|P8lwvb!B9ZImpt(X!aOhxV zn}cKm{41gxfO8T>;tzj$TP}D3=kXo|Q{Ssrx-yk?Jl^B^gI4~f%wJsR#$qy5g!Kc9 zF{t2FkYX z-;p!{oOPHSf}1!vANTwBZm5a+fqRes?%l6`x~qiiII`h7EFR~UfgYb#%^E6#we`lY z>n{*b?Ccs-*r^ZrsCK&0UypYYE2@>0NBegX((9j4IWJw;iJ7WyO@LFTl$@R%nhw5a z;8-Pu>xdiJdq#N^;x_(#^Zp_)IAw2mR&`;>yI4?#romS=iY41QCmY1XD>acWAL{?{ z4~aF>O_jFQ_f2(`@P*B9_v_u`{JyvK#)+^FF~|eS|FdK%hX;ZRKS8?59}Z-GN3zZD z41<2HxZ8wRsM^}uU3-M)MRkzAh=o;M3zXp3^AP(OmpvbcF8K1i+ohxj_S6l9&#H`w zORg}QvY}9-Y8RAEMRayUZ9b8slgS-nc@_|h`?X)BWqhp}C&S^tWr1hWW=%rd{=>v% zh6ddhT$T%M01VPv)GIyj@f51WYBEc*qO|Fnsowu8U2NN5htY<09SIHF8_}-_AMvQ( zex33ZLa!GNeUY{A3pZv^VnQ|NQzWSE;(oNF{n{XQ=ewLeJ=j!f^w`T46^T#CP z)RzDF)MoeVXRnLwr^S{iEZ=&_Z>ux^C|4@NyFP3_FjjR+8avBHRQ1^`KVU#@FQ!Im zZp@E$&{s4WKb*hu6B=e(?atj3Ue?nlb5uwfmQm>H1HJ7|Qc+rzdqp`x@uaNug(SV5 zWeo0^GlJnd;cGJfUlx3=u}+F}~md-4&J_vH{Y z)k}p0r&Q({&V*Hdn8N)mM$|O4n+P*^w~7mxsXzkXGOPqEL=DR{U-rQv!ous6%yc#+ zN=Htk5&jpL%9+J)$f!-)?e-WTLGT|m%(Z;|H&+J|cE#yz$ZNfZxrFM;CJ+%<{8SPW zGfw`gR20oa=m8XYbI=PciOdPS+93xi11&Tp-$&}ei*5EtS<2ZjE);#x4K3K~Oy@B? zNidoc+x~@9>eDx7yI08HlLq-jLuv_&6>rE;&Z=oh$bMjtGD#y{eM9JBxL(od8|AW=q96fBEG-NANLm_ zV&%w%TzaFE&7DY$O~Im5>U}jO=lw$CRYqABD##f~reymKOj)#IZyyBAU(afN?X1`A zI2w#ImO3q9LE)FAv;@;vjLb~lE4^l+0ttxM-W!AV2wq!cmCd2O-KN$Jp!VEBXMWX5 zwj5$>kH{UjIOSr8|C+@zl4Oe7=jsl@;fNZw*UIxyqol}bxX0c*WR*_37F<8qK_QKxWbu>`SY1_`;Rz2ayx^npHCE9JFOJ$2H?)rmAh? z#v8xP4S?l&1o%J7Vg!Y7DXKlP5BJH2C0Fs_Go6tiYcAu+iG3yX?|GsBF7d1F*(MKE zIm{{PXml@n7B*@p`3)BB%R2qs0G4M?Bcu701QF)%zlwS2;{QO*I2`^+AlxeU{JJn@ z1-zm9uj@U1QQr!||DDEKj>l_#(TJnwztG;$zw`2zFW)H}XFO8U4Jc{s)h}tu#}**X z)Qxc$`dOP`{AKEMIS9F~hLb#P=pXWzvc>fHP~G(7qV8~*P>X|8brfx8OFp$FC$3?b z=iT(7WlG{_O~Rkgz&Zi?-sZ2;8QLvHX}o{->`U5LAaCZyW*ST4Nwlujg(PP2?bwO5 z6e%4$qxg7BdB$Idt#g@=+-Hf{&W8{|qno44VJ6*#@N9TJOKJ_V*R(8LC7 zZF2Y9_#Ai$kLd5{x*t4A?{~2?zi(XdsK3~E{Hz!3DKJ*MY_%6Lv95qnKTG+4E6sq~ zj}lc?j$=}A6lPn38cXHZGnSD#)FZlEv z<;Md$m8<$d+LCFL=wwdDx6<&v8Fjy|a<&Yer>wSn9IruU3tyGi+*|{`o6CP4)VfdjY7IQ#Si2-i%gHL zEi09?;|-@%t%OqSOf#x({3A31rTddhaYD^w3h9`hIoNuC$$=9*<%~yoN?&I$Gn)Rt!$jo8}BSTWz@^NV(x*h z!t698mea7f)Z%?vFfWi`ry1=S@!hmNEgr-PdG=_k=1VQ5xE>*% z=z@yHC!hREevrBM7F)R5(Gb4^x5T67b^RB46O5#jG@%07JWtHa!~^F};Y zUT4gE%yvppZ3p+tcY@4cd*98u!DS`H`@WvRvaR-s6CkfZ=kpi3{ZR$BJ@o`hU^!9; zX{B78YQa}Xj73`Wo{Na1#SyR0JWp#>xx9vU>JeVx3KP(k%2LhnH%BRIiVk*_BWKw=;#$1Z^wl_@y)_O@f4@r91d?4&Po{W8(Shxa1$>jsakyAwyRu z$X~&$7P@3eIY*_6?lsY9WIE%FHmal<=l-Fd^GFx?=_d)a@KPelxO z#v#e2v?5|)t@~Q+8kg*5#A>yo|Cye>w*UyOmCyb~#s1$DWz%R@|Hn#I8qp-9 zUE})9&XkRDPg~y7pf6Rv^g&N+)FNJ108f)iRcI%vUW3e9KOv~G!ALggrKxU&-cBeT zhy4o(XFWHY%{qWi{vpT!e}hfIN~XHORDt+;R2SPnCKiz^OYDrDXMPBQJ_W`&USjwk z<>R~Y*IPi?@J;M;;njI=S7}DB1YKR?SIR26GC-Didt8S{Hr8c5yL7G&ye21v#Tj68 zx-xZZk?B@3mtdzs0Ezq?AZm=?$e~FJ9-wetP&~>ACN>J1)4Bi5P)aTn`YWQ$2|Ux^ z`^0+w;|P?zNYbP9D&sm7v+kw2XbaDWy}_TO4x`H-3mOo9!xM{BL;Z@jI_jn!-wmBt zhg09yBej2fliU4{OB>DxSexOAj+Im0hMvL%gB1pzCe5A9-&J{4nImQQP&fN?+Z@98 zl3Y{XiX$lm84z0QToa6LEFXtE;A9K%H$pP2LdV8cL!a>k;GlnT)lnxr4h_jiwbIHK z+!5T5T=--55l0GrCzb7L*w=Sd~FcX-^%|N!kMk!8{tlkkCs<} z$p3Q#tM>ZZ+stORhT^AzLcEU@t;yWbadac#uVAV;fj8ccVmSB3>bP@MQdvP=UNYsY z@uVtKLB8@{>SC_0bOx3@n%#@?>|TAGfJKvngVFfVw4Yrl=h2V3_D7&jRmZ(;8({Lh z^QhNjvSJz|w9@=R@Y8G zx__V-gH)>CP}xr`?M6!63HQ&@t<}CKz9Jz;auCexA+Z^@P77;t6*eDOXCxhjP427& zJ{IMpySPvL`MFQ8Fdk1MQ06^Hjzn*XQX5XAkiA4_yqNWOAg?cMgza+IZ~OsLaO?vw zLm2tx;ugh+pc88`JR%@E1QWBzJDb&9Rg^l~0S@Y>-Czs(6C?QrIWupSJXr#k(A^$j z0{rcrbJgFjR%{}VKSbe<-l`AOYoPLf%P4oT5u?P8*{h+4(7sBs<5N4$Bl@>>qsLBw zRHYrdK6Rv1((l3propMubK8-2?m(N@FES6j&ks9bT@m1bUmrD-&H^DcP`w&e4%}O$BvL=@O8S6? zSxVw9VWlfC*7`ne7$^MvhmMhNFo@@|l~fHsG0P~#0G+FU@L?)Agm+aj{>}T%rm|c6w#mQ(ZWkkVM02IUlu359QBQd~g(Ao{d!9NQmi) zH57)qhT6Ex3!-MdK@GnW!P2>H;1|>=Eh^N(zJ@ztf!CFyVq5(-woskWeg^;^WwGvFl8 z?tyd%PGY*WFgv<+pDv}@UeQT~Z@L~u-B!h7^%(>UEvC(YDgpcJ7QWXiUNX{yDA-w% z9_0j}^7R`A2)7QA@?X8`hZ6z!n_(xujW_-~^x7i&D=h>6#IDGmF?QZcdUjtHDj*@e zNF&Yupvk3}3bSO`$N@l;4mhRejHZ-O(y0j}KNRyT1=73^52nJE8Ii=*qlp(M=)ww1 zo!5u0`#aUal+l50IYILAyy)T$#fCbSFapSY{G9TFCn_oY^OyeYK6E}UT)$Pqf>^NW zbXc`drL=oWpM+lwQ?*Pwy<0A+jhpO{!Rd;ASN}7Fg0ZZSLvf@tgZFx*6QptoELS_k zH=A-8$M(=|AMEV92ebYt_ps~B^77Sxc#mEj8yi2Ew7Dxa`Dyyr42Cj+mq0k{Z^+D8 z&u#vj21)%hgczDz=2b_NXG6dJ9^{zf2{0-l_4)@8I0_ea)uSs^R4hC7F=anfXDRN6;l88Lj;iG=`z` zA=4T1DF-RfU$^^re&ycL0ofMs0#2q}pUGdii|yUrytldR^#E0~ftxF7uJBLhT&2Pw z{NDRnr3vkN5XL_=V%4w;DfHLxT6NwAN*N4r^=m<(aZcZ@%G?Ht11_ z|2weTFXXA;cUtcm8jiWECt~oY9P>n=F0gbAw1#A-Z9;ocFcKA0-LwyBr19c<1FdUV z`24gu@ibL&+7n-C%EWwPUv*JAHV*AXOkb`gZ^KuPkE(q`D`&eiro=lO8aK;@fVbyI zjHFbd2^G$gE!Nwe!{brN=%p`)C8?eS(>ce|yqhqbm79i<#fp!9H1?2OWw(5ZR-N6feL%Qo@A_X`#fXeQZ5}sUm zH_XT&xpEtQcBk?obOkT2^{xg@IyV_J<45=<(4Mcn?Tu(~pv>~@OlyAjZh_0OfCeAu zW!4|x^!HhuGQp1TeJeu~{UMVNtg)C#i8 zF)_ccpBSUWk{TcR>5~Nj>!UfCzo75#q`8y!FSQ~cvVd*qxrywd>CL1Hcl)A<(2Feg zMi^a88ge9fu&Xi=E5B8JG+!bHXHHi|7&{|UK#f&6kP*bd#kL$=Pm!YR?v_Vcg!}|A zXoNK$neoGyBd^mckbz5F2R#y$0bOd3BL>;-MU2xC_|ZZB){yp*SRU$_+Yd&TxH_76 z+YLm*xa?PLBiBFI0T*7nlq3Q(z%qU{uf_cyk!krE4hSR>*7n@Va2q!-g?foyTD=o0 zN#18p2Jcj&`NB)12zhc}H1ZNl%bSO&(+(US8Cc}g#h5n*&8`W*sO@NocXPFK<~k1{ zPIZpj&tO4T=B)23!DXMDN~}yJNX495y@^Lbmtm`mv-+bt=QTdG;#g-u&v3u`3Fs-q z1av`i`0pcxjWd_MM#ksRnBU$*Q=&3;%jaKh4U~C)EP!y5Vpr&DH#i$=V;IUqe8+B? zpI+8nY7F-G{Lz2dAcLn^$c>4DU>B@4vkqSYoA4@6j;uyMj>1bKAb-S20MO)4Cb#`i z)!FS&5ZUMsJqez8%CBMGP4zNwg%82j6Qkb7iufb?hDa6;S(z~q`>xePm`v(nr91mm zifWQ=`TY?UnU`Er7a%`4=KF-pJ@}Jum?7EJ#VVMNb6zcCeu5(j_Ffiz@`9g> zf^1<_GdOx;V`g&*3FM9x)r_xfw9+_}Zrps|VibTB0;(Ly)*a{4!Ha`XwP4#|QaVP2 zuFDdBcuk6a=u`B+P^rls2FL(6&5j-ql6Qndmbm})NCpO42Iv{o5fH2 zTqV;_?T9k~>wz%C#MW@SL#nPzv_%eJE8-37eFTf--0d^CwTVqRcx;_MOerbcNg{%; zdr2QI<5lY!4^rp;e3DwpZ@1FguALB3>!^En;_b;tu{cq!%F_#$)E?lS1+A8X?0H2E z$iqV2UL?E5x!tiTQtnv6JNvP5`=N5Q)Ad$8OdX5?FMJRxOj!E6)D$Z_i>7bTf7Y=~ z!}rysw5AD`vcp|h*HpvB5IYIH&9G(~cICZEwv7D3bdcsSIr~6wzjH@U>6rWkG`S{w zBEyXhjD=lYo7}ZJ#+ujz&XN@ZBkIu!Qjep(z^yr2%b(v0RTDd$=x~dM6@kK1$WKbc zbVlvfp^^e{QDr(QW5=Nx0T0j52JZTxBYPq;M+$BePiHrVvKSM-lsamB4>X5}nRQU{k;r+j+51V)}8mxIzlccJ7Q#GSt~GHrVd6Mib8z% zoft>pw->L4gk9=PbPcmSaqe&cn5Sw1YlC-JD$mggcY{Fw!wa8fPz_`}*CYB}X+uAv zwH9z5Xs3i1J)Ky4tJ?QG@70?Zz7riiu;{MGZM-#q88{v?(lJp>o!+GGSZ_0HC!jRn z=m7A~SMB#i8@sDT$}H`@7yH-4{TZ06;Q5d;0J}r>E$gnv6((=5&`jmQ?<(V zib5nEN5{JM*Qs+i zY@}tTxI-%2J?+8fpL61vZI8OOjJyxGJfagY=_W>Y-esz?C$Avi^|AqQGNwf%G2Ji4 ze7?=VRI*4CPz1M3SAI-Z)V<35PyyxO=~N*f6t9Qk9#vH`Fk0hEuue8SHV%NMTaV<( zP__A^LdQ)XXE`U5TFx0}6p@*q_}(tos~^}JRc25+&qE9vBI;v$WDkMu4q0Qd)EAHF zV}AcaA4CerQ^-J-=X3@mj;%fQKPh=*_{@}eIp{4bJs?JpOQWxuu5dHbLyL2Ds0eJ zQsbNkGZ#*%HlCXx`fIc@=Zpu$OGA#>jpdXtdtz&YSVf!;V=PK-Pl@%u)n4f&#VPXq zPESO-U@lS^%kc4|jO6f^`GNvFlGM_~WH4b;*`$4)vq_j8`2tb&w|6SqV0(uF-2?;e z`T8a++=2CjdgU&JmmhPJ0psRDG6d2%Qqe&PAoA>ncE6iCp0}2E0w1 zm*8nQFE(qH<8bU<@@@&8A^QAI(j1aL30?wr3I_Mdau*Pi=F)ZKjl8E=DCGC@ zk3uUazex3(VhNEc9q895Yz}YG>DxzMDBsuKZ7%n^Ut~Wamb~~-7IBp~c%7QdYngAy z*O?n5eDT4z%SoRhWwY@lm5})*#_L4K8KGEoTEzRJd$;&p1HOYC)5EsYNBC} zd^pz7b2c7NE*H5EIBaMxHdCK+o7DI<-;&o3=K#oiPXqW~WinV~r`x?S+4GGy>Q+|C zz7sN6!ovbJCK@xtWM-*mG#cjfuPvIIcL(|UN=mIybwv#xU_QNSeIPc8zPzQYZHn$5 z1FdZxhHDbH{!HC1Djk}5^ zf|Ix4(4d2H$j1pF+}E6YUKt*4AB}?I`HQfTlh~t7r~{Xh^&#_az#O*eA4rqTBgKid z;s?golFWVtQYhcF8xSSlqyVBtiU*wy-g!}Tw9bNTV4I+c{Obhqf_SX`A=9K6>k^+p z(vnlIX7zbVO5nMI3&}~qc`jd@?$0G!Vl&A&aXg-WkQ>rn-+A{BhiAvE<-vbpbs|8h z6*!-5$Xpp=mp<&W`=h;^%x*XHK@ zuzbk{8U_fW#_nzl^E3O1SSTpAOFWmqp5}{{hwh)|e7Qdh z{(SlyP>0gAi*hCLG1#S*UxtHn!bMR)n`qfZ(P4|#y$u^8CV(6$%@K%Z-&0| z2u^{P2*p_~UG!{$oh=cKMzmQq9ii{LQKMR8QjskWpAny?R#+T|+4q|M8~XA6`M+m> Ov9-jA)?*Ou;(?vyU+rB)gdX#|l)q(i`^J0zu+1`(td6hyif7U}LKq+yr%f`Bwg zDevX?{yAsQ%;)ahnRA}=Jm<0}5E2qE!R;U5NZPwNsE9)CY#vnpSb~Yj!bGk^+im_S z^LlqEwoa4y;>?a~ntdko{(Bee>X8y($n`~n&~;8tWM0VYC8r^k208h^i|WI>Kup-b z^Xs>_$H{kpxA&Tl9lJVi2{HBkx7SBol6~ONZ(-N!VWINdpPBFO-Thg@qJLdo zy|&tQMS~CdN2)~e@q+PqTLB@4M?dhSo%J(`eP^luoS-JXrDSL6+}@1{I#~g7>z%JPr3m0~(F3fvw|0nr=6qWlaQls- zpzq2NbU2@QcN5l*Wrj!I5t~U?-f6J>^B{vUXu=^l+N)p%Wkh!Cb$Jbm)G4%nI)`G(hQ)7s4j{alq*88T6{&d|aUpKhH1hA2x&@ z^h8wky%%eY5mW{I(WA_B)e^m2gCqtOaFLeMB&7~5aH{Q-U!@z_Y_*UIaqA7*Rn zQhoal|KZbLx-&opj`EX48PPRD-OQlmQilJQl*r4BgyB6^h-6V1Phm?!kDFaKpM|eR z337cd#CyZw9Xb3|4>r**X-lT%*Vl2Vqw<&>K9XeCCTL48GxBgHcWh!h zAa4EQl)i#tkt4J{;9@<%8JCTG_uO4>VTJwf4JfShn3ws&?CNsV;?Q`3Rj%F6&kRv} zZfOsiKo-9mN17}gR6%Vgrox>44Mc0z=+ZE8*-T3-tfHhOcSjqtzY4ntn1X5KU4{-0 zytaRJNNHwMcQ9D2c9o-06Dcc}m`!sX7%#Qe1CCh~&}Q?@G$GRU%QYX`MFaRv(?exZ3WP+yyen|HL@@~mU*0#7(Mz~h8 z9~dlGGW%p&rlIh{wS46CG92C7ZvzW1ko6XGJD#&ueR;8GO@S>f+^Z=Idw0CTtsNT6~*2#$$t$@g=LQ1K5NR zuSnLKKU*zzQCWWX2w)>&(cAcm6^mfSQ;o3qcD{G`PcC$ONb1+Qn_S^He}lX0bU%%> z7`0iZH#A ztv#8Y&`s^sA{re~4d4+AM~DY+aM9aJ?VATeL+&tZNuu=?tUG1{12PGWvitEz4g!LV zWU3_Vqp#Nay$e!`g5y@~-;?y{ZYo)9V!aa4SCr=+G^m2IiD@9fab_~Fuzz@82mfGP zscANSK+pAL_4ERWA~|GRWRQt)9f5d)Mx?-Kl%k2$G#~6}X^cqT9L#s2yo9&SJ%s|=pfxnv-=9SohF$HI(`@G#>f44O-ot&m;qg+Ex7~5O5 zUy6Pme@{EG=3tp3gKTpitH(xBHOQgy7PS=Ee+OhNqyCD=n^66jFS?3(=AGC2 zJTE|hiGM<;3uP&u?{9{Pzy+hR9dXw$!l$6o=zAA4&sLN#h+xb~B@Ic_f6O8#dkzLol@; zNwHn-2N^3@I(8QJhV{>-jM7);VZcJ{IvxtI zh`}<`j(+%R$JvAXa;^JFs1So_>9$|=pFJekC_70(RUG38&Wu~V!0^HCbrlF5vtoVF z?KozhhMHi+S`OW{^yoz8j@o)x*3nav4mlmp`9()~omCZP+vHLhB&<{(5=;9fy;gev z`pGTt+nAIriaq3dc*0}Kl2O)_34C37q0$cv!0*b*@%QOrpZ8jzI`kF#&L>|Xr3Q(++*a7kPeMCGdc@Bm1F_>?8-md&;mfGp~p{&fjcTY4%|QRr5A|X+N@(YL7@%7jA39mhIkph#*3lk2u=k_yOyMgWLe zki?U#oQUtVjKj1red}df7+i7eC?9X(*WTC;7h67u>r|0mdwerPyt+d*G-oKr`#fb% zn^WWuOU}7ASN$K9;Ww(Nv3~YFGHb@<<%`D|H%636#NI|lFKE?Dy1m>LmeEs}Nf8x% zxO(Pa&RC{SB%A;C8w|?wc7L(`sk&kmDV1k;9C|bGE?kEI68lckG)q%MC#@hy^Qh^l z7ulH<)HIWxts0f)`Z(i}d7BV~2`ru~Zkh!S3<`Du4Xs;ZB-VZRTY`8)-2N)K`K9$C zCq5G_U#6R86)$Gt2%huEQ9DElzrVhG|6?)WKv+-1SI1McD>dO13#^O>S#wC9-Kn!m zlO%vJvSlbH<5asQPDtSt^rYpU^g8#F2}D@7cwo9yHQ^IjeRE&yVlgIvCD(7OAuhp;!;=9#Oo1 zP>uFTM@5x^hOx3A7ICb4^x;U|8tfLMQH-cJD0B0R^@&LKq9@Q6Ai8hVrP$jd$D z46#@CtrZEIhMesEq{TcoY`r(y(g$7paT@-0#{7f}=`6n-W2Le+bKQlCASyt=pYiu`7M9AJ(M* zOpOjdj{D`URg=8F^GgMq^;F|jZ0x%tnxC|X%>){(tdW46@9qW+Ws4%6TV1D7Z4)Bp zRtuKY6uV=~oXtwB)ONp)uu17{0RyqtSp?U)9bWFJxndbFkg2Q4|2&qgr_YO5{BMdf zhS%6^^qF+)yb_B<%J=eMZf0LRr3RY%lW?J)>V!NR_0G!M6u~*DTlv2a2ahu(Yz>l> z{=8{va&*5TmKE*oJyxKZNTq-C=IlCWslD3}Lsr1wrwxLRsJYFw-IS_Pl-y`{oU-)q+}*o$j5}O&cHS%? ziko70?J$eWUsNEen`D04LTdSX5tdHI+K-H&ws^Bff!vGHrE|D{`e00_2TiAe<}lg> zx4FGZ8sbanJj=y-E8=I^Q(5hHUh7TVbF=@veZkA2gBDl?j2<+8XT-*MdF&1yjIgj; zA{JGE!FziTY#tvasmQ&kc9ZtAV<>~4?~5Mj(~tp6(n4TqSe5&0TW(Kv?w4$&K^^ZP zHpAIUCW2%TO$bGC7C5&ivq)bFy6Jk~r3cGUG&v?+__fIGgE9OAnt zR)7vSu%jLUz0ZDl=|9Sp8s=5Y<5<)$5#H&-fSKe?d_Yyi` z0sQ&d*{vL0>u2NsV6aEz3jct5$2umAU z-~Vpp_!HY~loTQILnG(-`%);*+as>fot;lY4`;PX$9_iSgqJLabsy??qjn6fR{*Fo*M&IM?kGE_}H%ls9YS97(mu@LiVni9;> zlb2+gpR4E@c*M(2rnk;6nHEB2#_Y{rjvo+Hp>y%FEAw@f>r=5K@+S1@a1&2Za3?KI zx!177hHb723sxh8U=YiMYdpOqZ2tP}TE-u1(5+y>R=V{;c5K2kg9ks!2xvT)I@YwZ z$?L3rAo-?EL@&siPYTy_s-c78M%H1y!(ZI6KGq={P729E-vqa39`>y|+yDJ3YpRoK z$~J?QT~w?BeHlUDmrC}}@>PHV0gJZG;~#hn8{(~bWPHy6i_5`>&j~wRMjpKi0NVJU zq3o8~ojbbjb!LEnvJetj8R6S09f$`@_Q5v_``Ge(?cWtWdOSE<=lQ$1O`8tEvee`l z39ltHgg@>ONzQTjDSn+b;HI$r9QnfFm!wuRJBFP1idgnwb{v`$y4k1I4KEs9z6kN| zb+tVq6VbR*xlm0$c#~EQrP;zXSd^?B6}!fFb&L?C2S=Zlkt%u{y{38+8pX{(K#I>&5C&hap^I!3%dt!1YqP0w7RQ+GnX)seUk-#`$lUS`M!m$H9bIWs!r zVXQ&w1N)vv^k79uyZn z5YDI(?ITU2K%T0;>#D}L&UhlM5w~ab95g}fMWY(s@tn~hGTCUVm4+`*jAb@vbmrrT z!v~kh_KUxCqNB(N)nKtdJwc{o8s^#SdB}r#OIPoOhlU}0EqkchEh)W&m*(mYzv5!8 ze4ZSE&y5FaXwCx?l=4r8edR$) z(#zkLMOnqyTT=PZv!EQWrKD~=yVxukghFqi+i}w-!caiJl;lS zlmqBd0DcT0OZio2dSA01Y~({KO`9r*Wr@kDK5pXmJ{skYENXahr8%~;Y*$tdSN`yR zCRv`2_PYt(OD~uvUMSTI88YDl3UIr-D)4Xnn*Nauy2_(2d{ia@bx@Julx**jYjY%t zrBh}APHg(z1ro*6$;t8**_$TsauvUl>WpbVXDTau%wMsaKcjtRn;kjMUk^|Y8EMr&3 z!Vi0@cIt!vAneSgd6Dd*$vU;x2J#npnV>@gZ94k30)-N z8#+X@LM$tgyd_N!`Q?FaT}^Xi%Z8jslM0%~+X34PUTb?Nx25P!OONPNVJuG;cp&n_gE2Jb3(MgUb>2^2rg#vYF0AL zDDrQ9y~GEh9T(Q3-?%)z;tV(P2yxR#)H-_ocPp%<^g8ZvNefW}_^@dITPNh0E@8+} zVPckqDA;Pj$w z&iI<&dAO3&5oLQ|0K19jcL`jk?fTIG9>y};)Yatr$}&|~0;7Csbj?oy(HM=J?O?2W zm;8Xt59(kBS}%A^(xINO&>F|D3Bs*-kKQ$Jqn;;ZaqnURTUmPv$kyl0N#(r?SVR2NusjL%mnuSRrB ztJ8|hgJ|PECk&uaZ*P*Dz35-Q#C}C$*Pn&tg8258Cu0kAcVbgN-g681^lHI>ffm>v zm2?)6)k9LwN(M3HdWMC^OX7j(pC5I4hWkgVKp54sv_$uCp`{9~O4mdkqsO|2un!-E zzYX)$+FN7PbToMIC=d@&(B32=KD<8Rj&P@DCID0VIOQGJc2iF-s%7xX zT(rj5He*7r|LH;MFyW?TD}&$?D=yVQ)zg^A-sN6s=Rnjk7j?{18pbrS9R9wuUK=qJwPONmXFLU5(LXmFU6> z-QG9L52N0g6UU9d#>6k%89kTyuZo%N5OBA`2&(>p4sKpHNXd6Syz%Rd%^ssGZ zZXt`AuFusso9;9bjTIwUbJ4`w$^2lj$XFa&>+Unuz9>{5WHaz6bX}#3sctBybD-4y z=8n<5a%o(WleOuXrPL z$^I(N3DM|o(WNmlks|JNY9p>0sprsf*;0G5=*hskv)1eIB8x}F`zAyoV0gkC zCc}V~Z0^p^Sy*GcH_=}#tuxf1m)TX@DLyvQ;z}7+ptL;f#M?bVg~u%GkLzz8q8~Bv z*v^;nQEv=syh2|R121ZWTx*zu<f`#3;ba zv6K*4_dgwew4b(Jnj*Z42gCl6GX~OLDpwkM(KB00snv!0t?x_ljV3ee6)YU6oWfiO zgVS4jrz*x%>JlZJL)a}{S-KAg5!vh+?`DR5TZ9ha2~hfkQF9H_e~fybOLM4)YxOz| zt#7;o_Dq~WLv9`B3!P^Af<|+;aV~K88$f`-8W+;s{z}=z$ueJBG4j{8{!!B>@BBS{ ztgj&Hq0(z^{j|MhT1$B~^+zmhvI{ehI=T&+w|X7&5Ht2xy(RnZ_lI3Qlq1bmf_|L_ zXGmI4_vB`$Y~ZIB%i|j4n_Wc$0l^m^;AkervT>#4vNGq~YLHeoP>lh*itUq6{moxJ z3FU5EAcnV{jqm`=)yLHhr1nJMHb24sX9NXGZhg?Oy<-I2NybV^T8X`2sE^0}yQY@5 zQ-tj=9fHPo$NQR_mPPvWBT(51rsejzr>=W{;maugg05$5mQ;&%H$_peCsq`J9mXJcni>ZJ4;)B$FKRyz zPjd;R`X^Q~Gu3nJRL^`nVcgM34g5YzQ0PgfHf=l!%6OF-p%(C}WKmxtqr2508Hy>L z{Z>beNvEge@lFoUwfFY$XiT_e_%T%GVvswB^DMeaLf)D_bwH0A=FV z_zL-rBieO5Q1t;aH%+RsJCxlwYYHuV@eq<~lU8|>RHtA?Z)VYDzaQT%lAiMKv8%)y z9WXXz`e2%+^Kpe@=G~9F5Rb-LqYP*M9HFKQVlQHHpQW!Am6}?a?{NqI!j$|7!lF(S zDlGNVgsSox`VyBY-c#87aSB&8MZjrGgR->$W=3Y|>pWavcM$>&R;m-(8{*FxoWdUU z0(--ygtqyfm$>@2R1irL;L&)#j2EM}8AI-;hT_fAZCNCS8y3-M%OqF96X-PrrvD|`@w37p2VIv&q$PMppAYO z=h=9^!vUK_v}T{!Wlb}*{0{4|j2}$qm*Oi&@C4C5*lpbF`@#9bsziJQ!pnIn*?4d|TO3or3$y-FD>Wi)}SvI&@hb@;g^&pa$OY3$VB&XMJCsuW)T7ei1sumuJn-O`rd~8B zV^V0xH<{ABB9kMqtvrMK0_BZ5E@bvghU8=}3o?Q7HcX?+B;*sa!G(Ygn)ZePnj#3t zw~a}m8*1EL%)k-lBz+3?XZR61{DoglyTZ5d`eoqr?i-o|oB83`T~y`bdxAXM+75p0 zojLvP8W;QNZ>(h)7OSPC^=H)u8D!GSz?c+IH=kQ+HNfmqB#rg63SV?ok7S=@-iDw~ zf&o{&kBQlTo`PSD-5%tKLtMEw7)s0xAAM<+V29@LsNu8Ni4Z{Qmg~*y{QW>O8-!Dw zQ_v;;!K7S5gjoc;`a(!QXdOEHO-M4?xSGQ^?4k zQ3@pZqG_u}a)mt@KFKU(rG3GuD;$AapEn9@NNJisvL__1oG_;Q-APM6c1JwH$|P@i zJ-5#6h$3$bbM1SGj*ig5v!(+9!(>>U-v<>RHp`kz{Zk5TppLwT`$ zrPyymNwlzJA|f;JTvEv>-lt_j(OC3F6b~j?m-#W{V3?>FMp;RIvq^y-J=yppNfc22 zDvZT9`j=C2SNVpm)Or7T*zfI{8cYhk>7(Gy-Z?Q)EbtFw;- zAEfU+u2}emAYLdLi$um<$PY%=7pEsmOU@S4SB@NnUrkLNFQVR3O{qq*5?8v*=F}lg z%^WW>e)@e@;)mJ`cv_?3%HCQE_0%wgLY}Rw_ZEkz^@o(kcKLcz0zX4d0$LtBGt!vu zmfuJ2-u%?NM#G9;N&3)GABXK7MM3)=+m^{si`EP<{c$%dtv^`BykCXQH@H2kE42^^ z`TFghXSP(h%YcY?N1AQw=-Z7~{$}U)NL{4PUf_fYnj2RsTW0P4VB=7p$MQxKo6UwkEfUj!4MXmu+Ro0H5{ z&C$0@9tw8$UXnQKpvhBrID}>ttCw`wdaFr|eZJQ(7`2`J3mS?+`y$W)0l7(NoDx6f z*3-9L2L2x%S1$hA+G6&_ZS?K>@uiKH`MznQ!$}}3I$gtby(&TALMWe*QAb2YbkBPe z^#T2MM|Qll7y-kv3Oe-lFvE}&USYRrd54B`F z?BRrm5v(jY5{>Sky7cq0)Xq}Qez{`s+HQ*f6zFX)ZHu=pcbZ?MoEBaGx1r8Q+E&b0 z)gH|fqj~82?9N@SoT;kPA-LOP^hYhV4ndX*8{5{`#YDcm*eSBUq)0{Mi}f$Wq6iI^ zqVX9+HNLkcLE^2~jHDX5PG0cdhvbOyWsP{1F0blIo*>8qhj`h|j*%k;G0K&=lF0^3 zu2+LaC23raH>8Lz`4g=hqx*1TWN)D<=)0>eJ6>=vg+-Wzx2nN9Awk|im%3N%7dgBB zFPS1?Vi3y)I&wtk4`KMsL?{h)l9XEd?YpQwF_D!*a8`jpG1*^EAA5Z$>hBNeNfn~o z&@oLE3d`=Mlu~WmJ&dwAFPt&T={mGsvJv^w}7V}zz0+v0mOP7zWhd=YjxA&VYwuz=eTj za-sX89D2r1_=xFX&`kNTKHue3?^%vcIz7DTn)@raRc&|bJX1w;;d?Gtte7lv;8}s( zP6A0VW9`9HV+37-fxa4v;)NY*+Dj!1vhEtfC(!ow>)KhJWD&xj3k>W5KY{1`5YhiF zWpYKswet=CJ$F3EiH!pq@W==m5he566p~^I-rzm2*Rx{*Le0+BU374tkGJ@?I}H~= zFf4fT0Kj=ol$~c>|3K#7)ffpP7^^! zO!})fT5^>WuI{^>bkt37w8REi<9%W-Ns@4vK>38Re7;}eskbhZUZHc7hgm_VnszF_uPOvC{5%w&_9vqO9zVoiEsKTD2gQS4Whd?g$UfFpQ_!%%bk5v{p2q* z$i#fgnY2j#ospI1;C1zr9x|Bfr9^9|$zTXG9a*y}>#U@YIytt~GO@AL;>D#&?*AgA zu3e~L-Eqde1TNUYJt$huiPLG8qZr>D{qq~QbnCIj{u+^rzkb(?d+%!K#{AhnGu%7> zB`JPRfg%t|K?i@u^8=msdp&WJg_iE;_~rd8GxD*c)>6iWykKR8R}?m)b^p609L!Qu z@LEdKEw|L%e&`z$m>?Xz^hG#x1vvk#q6z9$^$k?h+U(gjFSL!J+Uj!rFUNV#W6lQd z4?cDsA8xFTF4fJFreMbZCRE9a=_@*<9VSGd@0eyb;K1hpDEdt<2GEwn0oeM2M;CzL z8+Eb7n$uIxh?s;t%{$e!A=LlMEJyIz`8hkt&`~- zwT@~6_&-%O-EU@OP2pz53r3R zFQvYO8cvK0vt0@f!_mcd#*;Juc&-;Ige)MCVnt%|VOjOAq7P~nD<9Jh;MB@>0vQ@VwOhV zz%n#deO|@ymYY_;Mnv*n0quFHLb&dIB@rR%ttedYZgGqBUt(m^kqek71T_G(-cFfdz3p;dUu_`!NzE^*k0_e9Ia#*>b zts2DfW+2>w`eyG%R*+QJ(vBj(mBgsKx8qZTRuTh69P_y0_ju+u1#Us>+s#x{Uy6hI& zqd`Ig1HKb!&>uXt3OxbzOKAa5(2528Cg|k#Qg@rPtoiIwB%9?Hsgs5=m;4u??-oz(O4p{-7Ip3I~7HaCoJMCbmcc=9(2WiW+LM*?D1ubKqF)jCU zjr}eFn;yjP?I>C$_L7wCt6aI+@{wiJ@tB?0io~rtTHjSM2r@iNLjpIUoci-I% zR5e-e03gdX+zGy|HB>4wCSt0ddYUb3(Mt{#zSI$ld$Udr33BF{!*Nd(^k~h->v{D1 zhHx&M)JZ}6Z<#^q#go)%svA?b*9$B6V1MJFWZo{v>?aiofBhPuR8`v5B0DE&)I7h8 zhA#a<@%);bCaDlRoc#|7U7<^6po8`9qM3g7w<$lx0Dsmh0*8@8^K`!P3oq~5O|`K% z(IbV1?~PLf%=TYE0UA}JkXTgefO}G-ev0cUq)VuWRYS=IhNlf!HoxR!ZjBgM96~hc z)wFkPu{d4T_UoVPp6u;Je3+Xa>JBl!cpc7W2@!-ZG0u`lo6((V2CkcrBXgGM%#aiF zj*h=#I$aQyD*AI{&5S^RIgsiTWFue%00%E~4Di^A@DhWl9;CPx)a zJnGNk3Rh$Tm?kfh-BA3%Abm0SwXthI`d`fg)((y3zGe$_ z4H#F))2T^|;QnUT!p1txrL;)R@zF~^5q1{2vuI?P*^P^zBf}?C zA`#X%{3bX5@(M)8Dt%=!F`umuuodi_>>NRbpR9f#L~VRTZYQKN1-!Ds68Y}y7wW1R zYxYTvZt52%Cpa>rrb&U;OMh9O=+|MkE*o2hv6~+s%gj~hs}#i?o?*2^Yd1e?SRfJa z`;E-Tlxx%v^`(^-nuXJZhrc+y6QukNDy!(>#A+lz@CJCD5sbTzhX1~b^^>IM(Ny3V zM_!bM1PWXSitB;gB{iT1hfJUwFz{lK=QfHygM$G)i14?${@4>Xk4taPZA?5iHZjpZ zM_pb7F_p7fz7*@HCa2PV)FzrcTKvb{pt(}CUy@WeljW?o45G|#phnnXrC0`Zl8-82 zvz=AIEDWD8KI`x|h}R}BcGz+kEity{5X}rdF4P0H5;`9gO9dRncrH(gvCUl7k~t^_ z(@p>YgImFkpPpiuh1DnMQdvD~C}!p4!EeCu=scD~h~(Py@s^{C&0LHpj9mKgJ#)kK z&PA<0*>?7&5Z15=cWGo>k??rNmphU*L}qL6fpZ4GrXRM&y1M{{s)$1I70 zhL)!w6lF{my{;#jmUJOa&`6IOA$5)L3hS!nYw>Z^`E9^!l*0;y=A8R)ReV4O0HqvPbe& zHN>@4E5jhlzm!Z!L3(JdGj&AG9qzaoEahEPy(*SR+*s$7qRSIXQ(ma+a0ITPAOSAY zCF@&9Yk>#ZZZYc`V`yS6NFUT-x-&@jX?3ymBEZjzp*l{nm?9wdSGP9m%71S}0Nt1~ zBl(->Gjp();NyKXw)`YM*6Zd39EDHHUaM(u3NY;;?YC zc4dU&nC@VVj$k@2hM2(Lsp76{XRgF=_wMydgXJx{9B>zo36|afY7KuRa+lO2&veqRei-r zMYeXM)WVY=m}=+#H3m8t#O%=o%b+!=ThJ<`fhJ}&=m#L-p;E~_7Vxt*G}Y$X1Iw38 z;gO;gmP%YfweMo7Kjqx7{^Bml+6%Lf{eZ{t4jA`kfY@xQKmEGk+XsZ|*hq-n zf5On0i=J*1_mTKoDa+M~Qfuc)nb=!I-L)U}xVTx?WdTh?$=PAk?~FxS$>y;LpMRI) z1C@`<-RXQ1X)Z%xCo@20)LG;dw-w?-j_sI(1j7~0Kn-uA83?LfCEJ?*x2-IB<}jk8 zG=!T<)FLhn&TUx>DeHOuk0PZ?$`imf-T6 z{N!*uj?ovJO%(P$)G+=OZKJ2b!J2B$R-gYi$vJJVEJ$(MwRADDV+~Qx-tRUm`FBpi zvw^;+L4R`S4IDdu3qkA-7>06vz=y?sH+lE(Cl0BeMlHmp9ujo!gjArBu7-Q%TPd7z zKV}$FQn-H|JNUM>(h^o5?%a~~8|xPKcGiis;6veXd0&RnCjE>U68TmHL;TEGe{Yrk zT8zCE1oHbJF@#G@he994=>8r8OnNCwwf5$^t%aE;yMHUOL_ej7KO`P(!xRRNo0&MJvA@V7VEL3#?@%bD>l=$# z^}{5yl+Ch);Gx|)3wl_Fx)jqIDjqQc&hD-a?3daOaf`2002(flJ+!^pHMo-`M=W%~ zui|&l6OMteXMP^%X{5UIFU>W@kX-kbVcuX~#`ER41D%7r^zeT#KXgn!q?A*oBX!$& zt9#vt2zK3elKJ*zGI0tjUhIAY9CXk!fy{RYt-$Q~DzkF4==kcP~P zX_9Sg$T3g};(Rq91t@i^KPaDoFaBpM_^_ggqVZ*!ksj`3elJ;U*Rs_gQ-bde#_q*`VT))aJGbgP~PWW?jmo4k^jTL;!R3^U~Cd}Pn7M<-f({Y zj@lc8o&$Y4#IX#@)_%1U2`J@{YU@X?I)#`|=|Mkb19lnn;+xLor=ThaALy<)Tj{Ik zpf8$vKp4fS8f%VJEi(Xo9aytY42#Ojf^OYQr>Hs)VmJqg{>cwa}RH@+Wm z;9_5-{m<8%-j%AdUY_Vp-k%`H-a8aV>B^pA_# z!0)m>5_!HO1+#_9MmI)Q9^DVKBiMhpe_&+hcYf3L`J6V;`wfm!##imz@j_ffz@rHB z(x)X}O|w)iE4i}bU9eGyVF=Ic79p2gqkRVBMC)$_mf?Ud4CHny+XEwA1EUg=`RIn~T!qXKbSwhoctnwN@TFj+pAH z2ic^Zzms_wI37F^GNh_shen@y85~O*OcS%Anaup_9}0P ztApCYTg+W4ny&O8QS6bI-2`h_F+FV?xZvLJ5K1^;o57W8x8pw#z%SzMqQ?VFD8*J6 zC%qY93~uE;R)B;1~vbF2R-Zc+V_lv=z9IxXO;z`4t5-yWy({$SNRlqN@B`A zK)L-S6lZzJE0!8-B^-YZ#DrMPvaNEbyYbSo7uN8m0Y@76Y!$X*Z>6(zT#aJx5zMb-7iz#k2O<#`<*WQ0@3(& zui|m4JiqF`GN168BQ^X@7vZkgOK=4t9uk*vFny)&W07L%5xbX9P5ME?sNMI*W(J;a zS=)_i+q7n^GBdw%|&19Nb^lWS+;&HgHkX1@xK^u+=GAG zpIKeT$=ZKcQUc!P-AmQUv0p)UP8;?@4|?K4WPllmOR$-_V{aa_6z8HP}_#9_^y5l%3Rsf zxYFz?GMXf5@qs9fb;h^{7`Dq{uuGf?VR(CG3W%<)p@fq$?AX{&5H^5Tp76H_B1ZrV z(KaGo-l?P*KrnYnFON zoL3_zv!|t29!t>JiHeu6n#X4TL~4K2JMHD?Z(s(BqU#?}eeC+(RU+!hLP@dg+&0cf ztaLO*{-%5`RVJe+vK3b4$Hq!hLw|5^0%`@uJ#zo1JsACK0ZfGfw8+6VWk&!1c311j z5CWjUW`WghtZmdS1-sC=Yc0smt-SBF{WDY>+*A{m2>$azeqp2fRU`=KWLzBNi)VI280wJB5B%f3r8 zHzQRiRz6jO(EQXqWAf^Uk_@fy;cutsa#4-?hb^TzT6X1{eNfy6X{#bMzkXLHs*UCc zvrU29m>COnBRKt=C#>;?{rbENbuMk?(P{5Zqp8I*(5kqQ7PtGhT{Q`Y>&Xdw!1wbm zCGjWJT08@dTjfdO@-2X#RiZiCIA&_YhM$SNI)AvDEv<6p+Ar{6$_8jI!?gRG)NZ|` zaAAKo3k?vb!OJ#C$kyP_RQjf+_RC&81E-4fM*>w~#@QBo2HE+}F0e?|Q=%WX=Jh|4 zi_MxuVk9s-;ezWea3YI;MM-rr7E<8gkA}Y!GdF2NjXo-nl}>ku!ovGenow3kD( z%yk0%Mz?{I^6|WM0bgijXw*s~o?8tVO658Fp?dh}S_%l%-W#OG!^@J%R9-9jKbT=( z_Y3q+=#PCJzY{PakFsny!}{%xx_oKc=wm)id%Uml^jZ_nM`3AYVk&*SI7=Sx?^@A_E1v;*><@EW+ih{D->2y44N z`~!vA8t9IKm@fTRZg_l3z%o4@Lc&2R)=VP<*EJ=u86yKaysw@cxub5`s+Hf9b#|Y2 z877fOWY#E5NE;Ypt)Sd`GdaNW{v3S$$JBoFlw)XQO)FO$2_h8`1O$HkBU zle!xR;Tt>Spqi$V&_+i!$Y)|avzO9@k61qFfrAVTglF~o%&k;39tE4#4BAOR8x{U6 zksoFi*QSt57`?vqPlmoF70hc0pqt`km$MbP$V4p~{A9?8;BI-P?f`EaB2{9TL>^9VTv?@4td>*jvVKZ6-BenG0b3TiC>H!+g`m)@DE9TOZse#6>p-j z7}c`gG8^rqaHm-FRdcc*o))uV0spiA_{4cc zIO^wGEPkaIaWwy3Qa~hTl-hv>++F3cjb7?!P><7pDNzxQ;Hr-~kt!n#>v-?AQy*f$ zWu*=eBM&Z&%>f(gf!ZAh-Z{KB?>JvR-#G~^<_GN@OFiX5Ee9kJ^nKdIkg@RN@ZTNG z*DrK>5eR9Qu0*7L8)~b2F8Q(gfKSalXOke0V2D2YTQSYae{KzS&`nl(MElteTkx`qv(4Gin{%%1cP#Q8#)+Ysd=j!*G@R5f_!q?w= zz*llDLaN$csc||%3nbF=i*k-?wbbMA4Hl^+hnD^eDN~`K@+I=G45StKa_v^m_GH-m ze~p?$IyJnl9m<)CN*JlG{x{}1`)vPtBOFDimjB&qw}}F@XvfuWn1jk~DiLd}%Weg} zoH^S>v$a2eCmwAt>a*k`fPj6kk0+5nSWc@rAFlFQ3KZZtnUnjeH+LbkQi1u|>Lx93 za{A0l^9ve0eFdDVtQo_+Cs`Z;L#~y?{>@}e0?6F^RtQq?1E*1yr&ckG8Q}Xw%UJY( z9h`SK99XC+Dy1gnHa)QA?n_im%E z&Nuu0Irq7HXXcsNx#zs+{T-tx+<&Ozr<_pVS9+*W!Mx(~;;{Xq>@@Yjwc7e5Qby12 z8MS{aP0K^8Zp22o+D17vz7Y#^p{K4uA5URa0iKLN`0^!WUsWLD3>G_37aei{IuruEd#d6F>UEopX5R_TlTTt~Gkqxm~ zHKJj6{$Bxwt#AA!`6tU7G;B6tScB|n_$>MCqbF|-T)~J1xDfz_fY9{|7CktEh!-6m z|4&UJ^P5qJ?DWMFDrx#TzcIvo{$H)51!Z1Yq+ z78CYI7cO(P-rYM;7*S>MT4%>1mv~7sovPL93_;zU`n1+yfxiPWacLyKC9TA+ol8 zaF(Jq1jVJC9|b-ptzY8W(Sf9-Uga)XYwML>vg7MH_PW3-g3*mZvBMClm?HhzW&zQe zju3tlW^vjC(H}G;%)hODua}f`CH=C$i;fTZY@OA}Er3`@LcN$r^EP~vyLYgmy{d%qJjkdNxzjW?{Q^z^xx7!&F$*ArPkMjtRqs= zT$oK#=S*qsfl+q?%o4DqV8QHH4H1%x{W^yKl=R9VyGAMrCsLUhSz`)B>)@RDb1b%3uM~K0H zoPBCBp6!ncuF6~$sU`F6p}YcG3Z2)N&mKTM!I$F|AMh}@kBGZYzNK8-UqEw(mjQx{ z78KbAv9`PwoI?DSqZcSw7JL)R@#Pg$Y+l-DU+_o;O!kSH;;ln-g@vo6uH7k0sN(f0wfq!#%thqlzO*Pp$lU>JC!wM&j*TnOcW7GNhGgN zr!|@!XX6}axDT+e(L1(@&peld!8bFD-sn~CN^i77{2Kqv>PK6{=^q(W_Qk+r1PH&A z-ssBxE@Gz#78du+T``_3q-Lt|=TO(2q=&>1^Wc>p7O#k}vm_@9j_Iv-%ns;dZq4`T z_>AuShD>-tMjv!eDe>~phT|iCp?`_a!~=h%WeE*h04>|oTSh~Rei=JjU?LvDty#Wa z?h$&sBml+0cE5ymx5W6T}dL>QoC!d+a`HoZ?_5-IFO3w*1kgS)V>bB^`N{k0t5pqqMA4UsaK2opKcSkK8q?(JztHLYYdNzn7hi zoRwNDC+1Ie<4arynx4mXy7B*jqT^*H+J)@Co7rMm|K#ANIA|>t*hVKWncZ_o7ph4L z>e9Wx+jwD^y;9J&KCc3V_8TbLo|daZ8U3C{M% zLp!v=$ak`XwaDAm`}_vO7M*^J8IR-e5W=@H+vgS?m!S7ZikUFM+PkTzZA^c}5Kzci zsQ$DL(q>XzQd)d#0zUTw%zrFwp5$siKyjN&c})w<4CO==q0+W%PgHelXkH{x%wLk{XFK9*qn)76M-t90Q2aJ@3Rg=7Ow|{XXkJOkQGIypH4FENlqPw zcxZCN-!Cw|LN#e_3#jmA-#5?w-SR$xZ4l}ZKL%!F;)rk-qXy zWYq*;C;bJIqpC4AhbXftBYg#o>IPH#J&g?5@WCAQmg8s;Wf8$03!Z;)H`o-}dY1WY z$BVOYt`8mx2;zwJuQDuZi=P$Zl_+X3>HvoQz6=mXpoI8q^!o3rv`*(Zc0 zyo!rxbVdms8mu0>YBJ^H0HlYwIrzUh6M2#(E0fv}b%`z9lW2?zC=g-aUpV4@y_~t* zrDFaP$NP9#$RwlfA9F^~rNu!9xo*7KSPWXik{CNi=fdekGpzvNC$oK-<%4>5V;~#Q z?j{)tn4RG<`x;)FrEg$4jG*#ytkJUp>jX~Xq<7#SyXE>BeP55KvY}yo4;G9h175!? zx894~$5~0WM*FO}2WFd*M(s(*Q}T-mPh<5fbmQT>r5bL+R^zWOE+@ERcl6y<4-5wm z@>qqH&VglU8)Qjcv|Q$!Qwl97uj|@?Am*a6-Y$jbX-KBY*e6&-!moKUdXulVZO0xh zRc|0GcWG}^<9${J@Eez713lEkVo!{uM%i+<)ifzFj>)kx`SQZU<>23hgh#Tt;2fa) zQb6uJ_9S-^TQfR!`uY4HV8>(uu_KLFIlB~?Jmucw2RFh80LdmpS`w<}jFFRmT7#X`lW9hqs;<9)%j_ z`Gqls3p2^EyVHLt(jD^Rp)K)64WjBLzsfQH?odD=Z1q1hg>Wj+-=&zW4zJB;ea)mf zdKvY@9Q$>aJ6wnKaVVSeOFsu3GYDTkCl}r0GSeV1CqA34xY&^Gz(*lJH-6;7uCOiI z<9rW8tJYPy_kDByUrutJ!3CJ3P>Vum6x3Wy-ZBstM_TNE70cdd}Ia=_xS4Lj5xbSAU|-RC|Bt zd)|(37|`+n=?}Cf%Dp?zTAka|%$FSgN~ZzbPE;;UPTKXE?VQwE1Op7TdgOV3)-F3$ z+4d5X#?J!%VZC)7 zL2gV*pOWg2Ac1Vo46`ro8%aJp1mL0;;PFZKqFV>p*Rf_|-4_M(SR(frZ4+@Hahks( zt3b#eLJ?ouTTjP-qxcN$<9h^vH-f$Bf{g;ved26&iL{lvLT6q&M4!x~^)b)6)#hI_ zw2+QNQ)#z^n2qG-Zwr80H_qbz4f*43uHiZOwAeo#u-W%reSAe~qa;RJa5$rPb{8Zl zl3rYpQ>@``2D8QX2m6)??eo z_pQXQPQYTSJ&!*E)~4|Sb+GKX8$Bd)pTw{Q*L`K6fwiW}a*Zm+Qo86inXwgEEF?2- zsJ@r7;~qlS@LX8-#a4+U6m6Wk+a**2Uq14{{C`aQRyX7%s{QAl!5(Q{$pc==lCa=# z>*c?aauP8t(9-mv^NEp?%wEC4%{oe+qYV==0x@Z7A%=T@bw8HUJ;^P1B_@HWrx;}AsiJ$)9Q9;4|wf;z*ML^YM%+9VPwyq|DV<_Rx#&T3g<58 zJl>4M?Z6UPXL}Dq&G5lLj@ALEzz9`J=~0J{;Mp`F4g9~2XT@-xeeyIc}8zZg=a46XjPAYCzT!_f4BD<~qCh2H9=BFev7f^EF`HA#AQa z^m4NK=l{}B0}$Ioyy?>f?0G}3bngdy1p=w7+SE?W86TWYvH{hI&*c*Mc-FAvgvn2^ zu$}`2TKbNbL_>NPlcU?~DU3k`2<ZDVdI%K96fyXOkC^rI6Aw^TZa-_Eqednr$~iom-}seij02zd zP>SK47~>RO3k%sPhOJlrZN~9qIdA#lWPpXtS*@gE*Xu1!bo+jkvrjVZ`(X1@MDJx~ z%q^yqn6;$i0Z%`9z`BpF$sS+%LM6}^-S~>xcdp`?>A@g)g03Zn{i_wsY8}>gF z&R~Y%BpY0GM~k6Wi#h1_?PwloWSxBp2z=HFBQjIbd9niaR4D988wH@)@PZU`CWO1Lpd)<3*B${F;h>Em`6 z-AE#(*B4!NxwzYE&#Wb(95>`7vohUfP_$cxS@GhAMNr=bIejXnCY#RCYj_|dN_K?S zB=Joz-xFF@68K;D)ri4h@#Q2De>Aszm;q}~*Vn?mJBwqu#6r2X(6MocY269WC(dsb z@Q}89@k4AoyzMthyyYD_Jy!czq3w!DVLw02+@35IaLg|mdM^@UG2!*x{6??rHAJeK zgn3^s?L3R1ajI3ZSqZMXZ$JYngUEJOu)s}C7fkxU1>1=qL1Fmoez&vMWt;qkmlbaA zr=57Zy5!M?XZ$Fu-)p%4g^Q>T95+P^MCJG=LaQW^MLq17uQih*fOs*Y zonqf^%VnI6YmsIK_eQ|xjA#tKcMf*KY(~pdf#*Gx2O$?m&_X+^1aQ983)B7B#p=A1 z7#jyKi10shD$iu2kR7Se`Pw*OgGlacOqXf0jx41V>4&r)lcuC7Z+rHpi=FZs2;+?+ z7wNt{I%AUTx~BzU*AxtBcaatAc>?`Wm0gNR-52URHFKN$|DsejFC#V<@^&Y^%6V`e zzb!HH<)8vf$HSS0n~hKn$n6 zO#t#3L!|RqgMYA@QZRx*KWBT36NnF(hyn<@@KMhvLuP4h0w4?Ws+OzmTG7geZ9=Lr z_*40EXwbCvr&$;lKRC~wNpBi}37r|@XSqFKwK)Dzje+eXPOTwUJwl3tndu#K)>C;5 z^fKG~VFFafT*Z{Qez&?VBUq(X0A{#k#6>{H@vtrs>m##(jK81dpY-!NppFubxZO0w z^?RBBOmR{p?e;cTr?+gV%Xn#KV&yaZd$gH(u_@iqH zOVx{ZO1wF0m#k3n17Z=3fXw$yewS2%20uoHeQfV&FXp_L$_V;^>-Zs|E)$W&Q4-5L zw85n+7pchoP{4Oj3CL~Kl3Ulh)Mun~LJPH90aF;9zDA!~eo4+8oiMiwNa2$J7`fg| zOGD5BNBD;2DbqIR+5!+DIZM&QC?jnuc?HFSL!DwB@AVnj*oD1XJ6>Jj(pBL?D9gLB z#AZC2sq{>E*-l4F@O=PVL@;(X&^O8kB#O1G+%kv-K6R8dlxXkbiiuw800BuGlDTy% z*?|;|M2}zpfEIq5dBsyeS?vzjS5|XTr=j6SU-W1S=#kXIz57YLNa-^=DxvV_GnEC~{zH~{ExFCgDi3ctlH@Jbp?V0}go$~$cUGo8p z_Orq%-PX!=5I>_c+3Tk?PtM>MT^yQc`SY()3|A(m%5fmjs5^PTRzXzoC*}JSCju8A O@Qe|o^-q%UZv6);CCOF* literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.dssp new file mode 100644 index 00000000000..302e3184d72 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.dssp @@ -0,0 +1 @@ +-HHHHHHHHHHHHHHHHHHHHHHH----EE---HHHHHHHHHH---EEEEEEE---HHHHH-HHHHHHHHHHH------EEEEEE----HHHHHHHH-----------EEEEEE--EE-EEE-HHH-----HHHHHHHHHHHHHHH- 3fhkA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3fhkA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..8e8c9a91225d0dc1a29f6716b4bb4fb2fe05aa03 GIT binary patch literal 19442 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.dssp new file mode 100644 index 00000000000..42f0f0a4486 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.dssp @@ -0,0 +1 @@ +-EEEE-------HHHHHHHHHHHH---EEEE------------HHHH--HHHHHHHHHHHH--EEEEEEEE----E-HHHHHHHH---HHHH---EEEEEEE-------HHHHHHHHHHHHH---EE---EEEE-HHHEE----EE-HHHHHHHHHHHHHHHHHHH- 3gfsA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3gfsA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..4de47eb4748d057c672b4767a03236627b43aeeb GIT binary patch literal 22295 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.dssp new file mode 100644 index 00000000000..b548cf6be2a --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.dssp @@ -0,0 +1 @@ +---------HHHHH--EE-----EE--HHH----EEEEE------HHHHHHHHHHHHHHHHHHH---EEEEEE---HHHHHHHHHHH----EEEE----HHHHH---EEEEEE--EEEEEE--EEEEE-----E-EEE-------HHHHHHHHHHHH-- 3gknA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3gknA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..78e780147ad14fdf1b6fbeb68d8a053c42d74347 GIT binary patch literal 21372 zcmXV1cOYEd(~bzDCehiIAbKY{A$nPDb+L#RCCXw$h+Y%Di|CfC%H!gB~a2u;TF@BSYtYWc?7yg}R zK}pn&Npb7C>B6s{mww-#5dmG@MDSqmJZ<^V&T`J$P@qmj*NB~mUmoXJ++4NYOl=$) z-R#ZE-W;6A+^F6hbd5nTH#BASZtR%+Q|K?6uO-R64g=mbqHeB^0{o@0mm5b5wc7AH z@YmWhizRyoK0k&$zBzvm^w7;IIO~lCXEm8oQ>1nvaRu$%If=htV3|dpVN3PqI|MK9 zoIfY}+ROiPLBiyO%B>AFic8-88Zfs2GRz2c0mJon_s8@t(V4!F6O zR=NSNyIF2cIx6dNL|^Az?j2CT`b*j|_zs_(%=yB?-!$%AAFMRrSs6@mZn8v-pNtau zC1bwrOtoHYlNmL?%r8{67#D;^dpA=K>@~fQ5b{0Q&!Jt2hiFGhJ zZ3C4DGP-tpRPOBtwnq+Az4{IXe)mGR)WUO|3P#rAVx{DY-j3sXVV`AS*Omszyf3gt}R-YDER(3tj-Sn3Da~9>ny&%Zzzpb z&wB=HT7Pt=4^E9?cI~9#8`|34K7lRzc~Q3ip;)Xyx1Tj75+VgimnW~OnnP#ctU7LZ=;WM@11e&Jj|pZzHD<)$rLPdBQDZr`g5n%vc-ve8Okj zFs6HdWasL86lCuDN%=grM+^wn3s~eB%=yY936XEIjYLf~wkTIN4uYjtS>L}k{^xbo zL>!({xKs93TST&Q#r%psd=wNsXOh_Y98ls>kTzJ5egWl~V#-RlcVZ6QK>R43;vPp%{d<0lTWFz?`qVQI+VJ;BGC|%cWjnQJHmjnSdKY1JMVpG zcX6~v0%C=btdp%Y5jn>jZR4BZ!!*l^RNB=5+gLLL-F=2_)lKJyC92&2#(GqSX*83i zu~I)wrAdCA)sedm_ah{Wa5ZASsA8gbp%ju{J@<{}8)C75HfCRw#*OOQqb1L5wsjzG zyEZ*maRjn*lQF|=Ih&yycGNe`rki22kw;6YCI;TL{T}?OvZEL|yPEe>h`JL{As?;_ z{eY&-IN_M)n{p>FMN9pMm%Z*rps-B+rKFM`>T~|1p4X9F%JnxSF6x8_x@aJDr$^cS z-eqsnYw;?5JkW)~W7#0GonLqR>`deMenYSWg@KyG0k3^r*VcN%xpNo2Iq_l5GLJg9 zsgqBszQ0V(?}rGoZFE?z?>JeiisU1OKf2Ggn~$BQIGXFjzTvgh}pCwkatugOfRZ{wcq*$_y{qdb4)`eEZoYoA6HY3 zYUk-6ZIQWmNIBi#oDZ|LF^uEW$Q!{?0kP~mZ?3-0cU>W6s-Q2@DK#f@mpFGOxrlAd zE|e|9CN@?DT;GFP2t575?DTH$&1xkA)M5h(%aC-&O|onKrpTgEf1bbL8rOw zQ(eVYxHCIsE<{~oXCsmOOx%4vr3!zSeZzu14hN3K+6}Y<#G_({Zw+OtRG36ne^HZ~ zz09vV@JF*;y9d**3-u&@u!w#JkEZ!hVhcJZo|~m#F^R`Ufl|O2dWIG2p5}P8+q5gC zSN|CiURt+i-mb<%v8Twp$?Z=ERP10@9ByT=a9ffy6R(aQZ?Cmb>oHAKF9xNB2usTRks;>H)c4g3qAPw=|K^HF%C@wZ~wsiFJo(y&gF*G zb=#U&;+m}96daeCFu|v^;O7-_FdblvoX=HQ#nQ7ozf@k6R2 z5`q^3H~49v&-x)!5nqXK15WDvsON!oepG3IRL-#_9nEc+Dr_b_R`!wl`OIYde(LRp z3t&k1oZqEvVdyIy;+9(B#-GaIaIl(%&Si*32AQn2-3IgbN(=1j&n@l^k^~}PmQKQz zPZ7Z!)>wttyFIT4S3yfJi9&6=*`HFx*SHDO+F&%rB4r19gyc{;2JZ8I7HdnZBTZ5M z^-wMJ^?QK_Jyu1~8vk%o5Nr6FG8FEc&OXDTxMQj-EDXzZNv0S$5etqXiicmeVzQ^3 zq8#d>BdhMz>_mokDJ?rL2=CkLxvpS_PdGGb(i}f4ZCUnjXyDruUILdMvQ>ESYC4x> zV-@Cr@QpO7SLYrv2vb~Bxa_zn`I#4*@+?Ei7{||)pRkRHkKt*8Z2Mc}-JGWVf;D9m z7whWEp5LSoKIvcpa)6MP4JxvdfS zu2LzSpuRX`V+|xBnPFgB%I{6VmyKI6{6DMLTVQ$PQkqws;{Ezd8p`rt!K|X7+xLsnGBky&ydB6Jxfy3YI7Tb|Z7jaWx3>fVOv@ zHG$v=KOtBifzU&d-|*QK;aM;1N_j$NYeOrYaUJ(NRj^qv+yRf|2;JqytD&Z6$#29L zYexONc$IP)AF&obv%qog5&H}GaG8vwP2SD@KyzoF{EP-aWHWVA2Ftd>xT}>K~q%i z&c1!lWf&~iCS0JpMEW;*YTfM=zRRa(3Zh||UhVDT?vwNL-c)dp%Prldhu7zW zK?e5y*^;VXDgH572~~EvAfp*~_aU@PsN{rvRjJtQcAmwOv*U0k=XfK*ed`ZMSBi`S zKl4Nr_J-!8y8M#<4Z}kSj=sv?5tDyO5J7IPxJ+~RW03E{#GKr3xS#EVJo}b>mM@sZ zk*{f1ySXm#X;^3(>=U^f%l#<7YA?OQ9i-A;vir35Diq|ZluTSoS3K*# zShEB7b4R3miNiD)Q1p>uSKZFCDl}vgRNaI4H3l`vB%Ya^nj$ zE2#~Y>0^di-35)SUmoNis;irKE{iAq+mtjiE4}+wK0>Sw+tsLd2#r>&nu-&Huzv+P zswt5!7iU`n@Wno%jHvK`MP7-W7xz{yG%}@j6B*oG9T&7N%bKga#Mw<6J04BE7*%;s zFe246|6IkWTO~I|sUY7i+mqPnlfp6BjJK_=Xb|EOnHP-HDzR^ugM_@Z`$J>St}Xn! zulCI!JSvoq^lZB3V54;!cka@mdbMvl^YG58J-MLpQ z)h2_x-qSk__>{rms*fi6X9sle;QQA$P4SDf;6l5MaaK}U59#>^)1=xHeDGanE!`tp z*6~fzLKfTBh^vwWu0EcrPMcST=K@wbH+P}WqF=bqdU5EUIK3V2<-?AY+<%JyHsq(gTqK)+S$4_3i!~b`dOYwGoF`ReSK!Fc`g^Xw%-wKrtd1pU$iRyyXndq z#3UT>Ar+j}g~NXM?(2OMf-(7i%i+vUJdGcAF4Io-a?)#-rb=3tp~`b{(@2Nj0D(c zt}DE-PoapzRUu-?Jt3XvRH~b6yg+sd@ICh&a(N$Rey7zW+GNDpLSE9bGS~Fsd!}cE zR%Qk$Bhls`@v-z~xws1aFXsw(!xy6m+d|I22IRAGO`ZNyY!W>`bQ2Ej05r)`R zJSV>3KMPfqB3n&ay8yTRSZ&j-i35G+HseH~(tNOi3tJ{K$gfj0H(3sH5mkRQu<3yy zm|E~hf_=L$D?`oW1`d?H{iWdIYsz_lg7oXK{xfwyEZ^I67y|*=Io3x~r{cw&XNy+6RjvYps z)b)LzbWbL2o!8N}%w}&Ju9%@seyU1h_k9Yul+h4X1G5TL3Gp7-&}(t&@4%ZTS+3Q~ z>yI_9Anj^l>j#r^Q*m?o-*nR^f^HoE2qi4jo7VcU46HcO2BqE^WCxGlgR2sQI#XPz zj8pS943;e8%haa$cUL*UtIgcndUiFvfZFl~TwgTn+VAl-HPAE#&`ToXsXOoLv<}UZ zgh)O~4)=eKeOU6!fv+R(YbRx>D*DS&CT)pp&$rMEB&fwtUEFW5JaiYA);jvaRb-{PhSoojz;<;Q-1y|+Q z%5|o{WCA$FWuHf{PktveshwkT))Ef!BjEyD0>jW;>JO3N%1`c-s%@nad!ZERi)3kw zlhuV|NbK;TKq)53>x4csTelA~7lPQkwNUaG>cx-IQlGM|ZiD|Ijq zI#pEbN4%rK8>J>@vQfsa!=)xlDo|)C@5ziO+)C~_R)}ks{K7`R#POAHZpT7b1cm`z z&SII=l49!O(9b2#Pd!2!t3Ny^I9zOe%?v_#2h$L*%SbwYZV7&?6)DDBKhYY6cN7Zw zc$C`$51*f!aen~3$?H(!@;4fVhcR_kojP=+cxvmdyP*m=w5z^!vqJo3vch2R$$)_1 zkSeXqhF==B)$Y~d87Zz-;zptdU+j0O9-;-TYGba-eLdRVW)u)EJaw;lAzbi2f!wfH zjEK)?xt|*CIZZFnEzXQM1yTV8y+fk$``X1cM*~L?07&B4GrQFv`I%6{c?$iQ`hhV6 zgy6BcqxPEQ7JY8e>!l0|K4QPRi`VF|b}=(DVc4f+*OArO?np@HlPF!>=8z~o372Sg zaQ36&PkWV=_s#_U>uIp8mW9$FhnY!e!#i_3o|hJPtlvm`s>ZkB1w zvmip~ej;B>dw`trY9qT87|#n>`4qX4I_lzsaOUcIj^)^#x+i*PU|5}{!@BhPLt4C+ z%)d^lTr!MttyOI$l&4q80+lEvaBx6Hqx&LUE5F*u3{w$5i$;v)0zIesK$vta;?QIXtE zFgl(~E9bG^rbqREIaUo2M!6#w8F@;AMfERYgsgPL(7n=L>c!OI5PW(E+P9P1;!cyb z9DJA10BDPB?CL}B+4w!GWZpl`6g_T(*ruh6-2VE_53S$94xx^%=O@sZfWD$tGhfA)RJrQ0Z!N3d85{9QMU=3&yQJ^okrhL4LrZE7EJra7R( zuSwSXm;jwq!UT<=Z03g1ey8^MizGg17tfFSI7(t)sledwjaOXQ?dDHQ0J|iT7ge-R z5B<*j*G>!YnNv&xNAKf{LkuMD=>+%%9>9z>Kk}wK8UKPF>L#CA>L*cEViP)xjn8d- z5O4iy`O#CSSxV|58jm4E_v@UG1k971<=*Ao7u4tD8gES*4_06J`l!8Pmul{Ge4x+f z#{`FMO)e!^{$z*4XM#X1X56nq$W(_NHp`K1LTs+3WW1j%Jmn;p1@91u)DT6OZ#Rtg zmd5D5CSDJPOa&xJ3QEXOVdA?ZQo|-Vh{$RPAB{YheIC*2&0mFAn0i-;yF<#;y_;k$ zPDg7ABoLF>FgL_r`aUvf34FDmH40kNZ>npTW8Hf0m^Uv5eSEd0wUj}}*WFHweizFE zPSuVJF6$a;TMh*&YBCp8k*k@Z$|pDsZbR1UF_EATafB{%X&iN%RE8FRw13aEw)C>C zt-N)}{05y>K%)-TKs+4o&icd|6sT{3WSBFqBH6z`V})U#U;Zn`F!`T6#y}X-CkQ(6|>nEWq9UVH=z4!dp?LuTEK;4HU6$g9JtbuQ=z8 zgp2u+>)0`h*u)|BterW%@4h`FqApz>>Y7h^Ja#qZV_!T<>S9d3--+9)&H!gTsB)fC z4D+7WRMq_Nh*Mxr`F9$t@bbgC6Sl2G{W(@zrF#bYnKjgvCGoH}sdipMl5(z*Q_bUp z-0Sr6MQ)ka9%W7*>_ZZf9i2SAa(z4+8(XNYT6He|mDH4cWQtFl1nSH;3MP~ug}<*! zTjxwj@C8zePae9%Z2?VXU_NXD`FD~KSP95R^9ab%FI^OVxFu5xfhU@U28rwdukN^| z5t!OHv}Oqfxu*Es0i0;8(Nq(I?F{$aODxE?LJg%t^9B7qn0uF-gZgcw@ya{ber2C* z{VC(tJlVm9O!>{!n7ilkk)RxSc0;1>pFbUTq9FIl5h_E9wBgQCEw%p6wzU}%$Ob>2 z5!?JQA$y^LV(Sslc^awH>bsGTXhfTud3n1WUe=6BNCtVF=%X|(G~=n?nocPtqq?%!F5Bi!ci2Cn_4T=e2{Lf>mtrM7MPA5>!OnnXHbD|j_M4EQH9F-WUGWYxmu}}%p zH1_$#U^K2|4hUABda>F9z9^~T;ZBojqs_{F`gvp<3) z$yH9oIK0tEIKV!K48weNHD`owqnF&Yia4e!|W55e}cnthNvB zquuU&j>btZX8@;d^s$WVP-0*J5^9((!bJbTlK;PAc=%Wh73TI5RPb zb$-pHjDG_&eHlrNQUe#>Ka!$t8xs8QcaysZX6PH9?ChV~_;+iLx$!e?CT5eBQj6@= zKK(&9oKew$Srle8^T(%&1Xdlp;0N6J;FLm!z&?0({eeqyP8ipxV{TN8JSe2MwQk(u zZ25cy{&vPo;VgXJ=akhtA7(3yD zKRZtvFwe=bHeOnN`JX3_$Y}pbZ8V9PQgT!A!>$*uACa@i3@8D)SU#>1BOP&{Cv9|E*6H->qIFy#4mxyG&$@d%P_tC!@?aB2rthOBy zEU)&JGk&7$rl`QeJzqaH1V2q$(KNAkpLy<;lc$+RcjOI^P(5J!_w{&aq2nxVm(eF>5`0wHF;vEfy3_aP?OZMWG5ghGfGmK z5M4g4(yxU(MPPrVM*YsUm>|zoBjIT+n^(x|&Bn=syX*=uev`M^D)B4Ld@4XLQ#f43$;0$D}B= zWcJG9D)uMNIsYQ)9$Fmm#Jc1M*gr=UM^MC9HWgq2;UL^2W9vvgZrdW{AK8Yle2t9 zq*!Dj_Fk`*zO#DlN-cMuntfCm50W)D_&*j*zBH$YT|7sGFVC;mTrVuF>hP$LtJ##D zwk?57(c+_DiZOY8I5tPjKd2MsO7XXIOEocY1O1Q!*WP-GgvVz7YZHLhUiFwLYr21! zH1&M^!_@K46YS?t(%+^iauRvLhq>8soQYxqu0(rZ<7lE@=duY(JQe0wr)%D`cn~(n z#TwRv6qTlYw=*$kN>~mHMe~H0BPb3?VyKLNVOa8+@oPI=J5eARQjon2LUhBCKU@!Y z06^OoL=}?X=8Rg$0>>+^1E-bUz*9{>v7ok8!9v!q5-9 z@M=?%;t`a1F~_qQmi2b-9{v!53TvU;vOaO_Vrcp3e(XYJk2aoy={EyiS|FBdS2*YK zGrx>-X=cbY{~q8OkWA8&H30@%$(~x=2m)TG<5{xL-m)^$e0v^O)Xq;OZ6Gw-?PuN~ zi=?myWzX!D3lweWH>grY?H<)=xBz?S4jAGg(Vnhp*X&%Ei+aU6+*m-*@-vo)Ty1T$ z_9{@p`QIvze3A&fdwAUS0)It<9MT`xL7mJRn>gS<`2hXY9aV(qU(+|NiGe^@BA}Wz zLUz>8c^#0n<$;Lf$);A;zeK(ge3$z*-!$fLH*h~VlBOr)I}}SYBkJyO4iL*>suQJx zuek73a-YkhBLMEvv+F=R5ZxvJ-akjTrVJZB{;oX;GtqVB<@DqixnHm6tfV*+NV(amHaTNtk%?{`nEkfZP2W*203t$NZ3s5mC>1Bi}%Z z^e2De2VcyW2tz zPw5JOjhum55%D{>I=)TNB!?Zg>L1#DIp;1Lx>;`$Imfnf5E@n9pqd{bNGM|O>i1=i zeM7JHd%V^>zGpI}@L{wTa<=A!Myi~J)|IIn<~4FBNZ?RrC_}k>iH@|c-#BOg(qOaSK)Ff{_y1osJ#LiMbD=}b>@gLpU^7&HNIeDZ;rr=ynl3)xVU*Y~_Avw7akrG2$mO({y4O#P*$#DO09*?VB~)3*WrBlobEEGCWs zw#UQM%2lvcW(*FxMIv(dq7#RM4yxY#Rwoq`mU#?+VtcV)3qDl%3d_d6Xn%eyxtGy^5Po3l$}i5R7#+i{%f4;>?AHET*tv8jb#ldm|7X!?uQL~uAnsd+7!;#BmBT>2u%L0t+`+r^vgv@GYO0!Kd=_&r{ z-bUO~=Kwm%r$m!K3FPOnTeV67o*g@wI9!Qsc4*R)BO7uXoqVd+#|dW|y0qU-#xbtI zyK(6kE?w_rtcvCvOuYy^u&@uDD;T3rS)ebt4+QJgrDt*U7eBF3OVS@_!spHq#CKRF z&80hQY%;*WKRU(%8B4rlqU0g7P>C!c>Np$%0g~5}Q|hzl^j@#pl>Q2chO`-GBY_WW z*DkjR#Y@})^5SSBj7pVfOJL}yno>0tSfzt#V@^(}=av48q{|a+c)7o+#2xvPgQcnp z02YiI!X>_&8GWnV2K787O)DxsCQJ*<5^>Z6i}g&jrJS)g975k&#~+xVC0Y!hjfg(J zMGib|8|I1|&k5#gxF?s>HtDmHt_;JqIxFW4T1f#U0%om2lce=j#Ih=SPQJ5GoW+I; ztSFBrr0G?HvT`gciBZbgJm>cxma|Gc1Mb?jR`U8KC3j2Db<~vC``XI?_PNEj?yKJz zr?s5Qtn%ANBSp;pM#}qL@t?!76|}ea%`E#ucO{Ip3QhTHjGG&%joBn=P`gPBd6Vdd z-aaTkC2H4<2S(eVPPiOXtzR{VG?rZK<|*-vhi0EET2W8|NXX9>7~r}> zcI*>L`?@uL1IJ6<;N&mlNg=Db37bLE@R-a{lyOe!_H%3_Of^@a4y6V6*0g3WJM*!ZZ{xBv@cVI>J_!YIsP8BwxF<-l)}0 zXUa|YTXO^EVM#aTKmF04j+~{9*BpB9W7@_TU|FT_wb9)S6(6;@kO$$aN{_E)rjZ`qGw2URrRa;hC4x0aDA&mudL>)K8zhe zF{l3sd-LD4r&dH$M4$Gl`=rx@L2oBz|FM^)@ja+v>C9LB!vR{aIRMVN)&wVx;h)Jx zDL_tn9e-P?9B^|XC@t7O+GVOu|N)nX~Mf>{#GbC+*6GB3AV9+p656?mS z8_3M!D&S_%0iko+25OCc@lu)Vus4?Hu^!U~t3il3TOprHzUA5BY6^o%BM9vM{4rdW z{)OPQ(0D@U`<6WRJ7M~6J$l)H;eO!>oeiycGG$L~37vi0d-Gi`p5!QtDSkyes9b$9 zHjd#NIHG#{F!Vw>L4y*Z%ki|jptiX1gNI)yq1QLLzpmClstR-K@@7R#AM3Yh#*kI` z4w=SV2-n&;IH2pAyz15LE4y3l)NZzw#m0;{#Nl0V zo@;MQn*rf?Bir-T>kP1RqA%R&#ChWA8B}MNAwBd}Y4WBae-0 z%E~j6kTiGWJRngy_rgmGBa)=64qr|>oq_fGMtBVGJ+z%${6fpMk5RnfPZpYGCsw%> zvF|szjAoeXCo4~riKMt@2(I0hV!dA-bFeoI=#hMtUZgt_A*nOuDm~AnbXu9-Do%=f zgo@H9GrDJw2eD@kDXWP}RF-6sl*)PACqCHlco^CsyK&b4S1;G2dgrhFDZqYQ904alD9KN@q%^S(|mM6o9Y+Ar^nBM9HLO zBB}6*V!m*Ky`gy4`GP{Et$heL}`crSApp+4jfw;IE*L+)9i6=C7B@=Fv5j?#5v=QHiwRA zag%M$YkFZ_+&RWGEhgWPY^mVZUUylnkX{Jm_nbRpJlfhlNlPf@H11|9rNi9(yrNfp zwv|((t1mEj>@qwiH~y}y$EQe|Y_r3#{x&~Y@)K*=`qwbO1&c-HOOmW1bg(FNOYdlZN2M%_u5!@_HH44pt7~GM`F{0kyQ@ zws|n)7m&slTXdXMrmU26en1$_=nqm@UcfcL&15GLf(*WX^yP!@_ZJojBWy^VlYjA> z2skac-?uwH+lsWgXFO8`59)Yrn*h-}0z_)}?xCSrv`x655qh@f=5VW0pCRbaAAXLI zZkA!qNRx5p_{_?8zTI5UJ7@fmCueEF6a$+Ku|jv}e<%b)4Zo-(5 zm&2wby_IZrH{U9o_Iul!*%^dF#zKD7=NDAVX=u0M#y3UJ@&S7Ge@&0bzblzsUHEy0 zyBEZz;!w4Q_Jm&qNhFU{iu~;A?!rEEI1rKL8`&52<9+Q)TtSIOQl$J?v8huFwrdhx zJUkv0&1P3p(?crQP$Nq3qpiLD)>A4d&c1N2do8|#QenTnMOyu=bY`B-gohk52Gw3~ z{ry!AP@~B~Odhnze7uP=HD-QVu}K1Z-p;|&jwH&=i@W3WLa7Owq_o1S@p*}W3>R5@ zDv;nhV$*u4K&5Iu$`}F-%4YyP;2I<{;yeq5*>1#XZ2K|io{Tj4Zsn_TbR1|~Kx8^K z;~um5PMNJHHUoJy{dzX$7QwM^eYxAf?ho(vgg}9w0KyfM?O=}h1Z|~f9XtOWrNrg; z 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.dssp new file mode 100644 index 00000000000..f860477fd42 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.dssp @@ -0,0 +1 @@ +-EEEE----------------EEEE-----HHHHHHHHHHHHHHHH-------HHHHHHHHHHHH--EE-------E-EE-HHHHHHHHH------HHHHHHHHHHHHHH----------HHH----------EE------ 3hklA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3hklA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..cb3242dde6b12489bf838c7eff64ab5b106ce8de GIT binary patch literal 19129 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 N{|`sB)}(Py0RXbUg!TXc literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.dssp new file mode 100644 index 00000000000..27ef17d682b --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.dssp @@ -0,0 +1 @@ +-EE---HHHH----EE----EE--HHHHHHHHHH--HHHHHH---HHHHHHHHHHH---HHHHHHHHHHHHH---EEEE----EEEE------------EEEEEEE------HHHHHHHHHHHHH---EEEEEEE-----EEEEEE------ 3ieyB.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3ieyB.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..0bbbe4c15087282c287bb64bc479e7526b5f5435 GIT binary patch literal 22911 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 Q!@o33gX2*>J5(qB2QC929RL6T literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.dssp new file mode 100644 index 00000000000..0156c9d2860 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.dssp @@ -0,0 +1 @@ +-----HHHH-EE-EE-EEEE--HHH--------EEE-EEEEE--EEEEEEEEE----EEEEEEEEEE-----EEEEE---EEEEEE-EEE---EEEEEEEEEE--EEEEEEEEEE--HHH----HHHHHHHHHHH---HHHEEE------- 3l4rA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3l4rA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..34e14832efec9ce4de26cdb2e9f1432222329209 GIT binary patch literal 21305 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

`RbzvrxbqQ8Wiy4SZrgJGsX86szY zPrXQOJPT<1a8L}w?C>#du25qNT0t9UPYDt z)5Sf2aE;x(NvA~&c^ps#64lF5%|ruFFXfQK74` zN*_;7^m)badnXmDO4Xe8WWjFefBrfF0i{3P=k|M{5^w+ZX=+K-iq8TVq(t_4TvEP< z0*d`C2ywgA^9$b)HssK|?Y!Wnbo;+9CIa;ZzOK)$TB8QE0S$2Z3VFw6do|l6o8qH-lY-QCFy_^zt!<_1V zM_Vv3IlZjZpeT(o4`jSIu}lS2q6~t``duN#zm%`f?o%{&3pH3|;FcqJHo4lYYda`b zx^K97iw>X+?5F9a5!3TDEW$PTmctrFMCN)r&F5~ZnYbEU5HsG{0mSH4SS4(mUF+4o z>7XFFpM>76r6uDNB(gxt8@i2{%La38yjx})xlOE`A0v%k|22b=%Z!b?wWWA*m-d~H zODYyfw*V8h{#GiHfzlN$`q1vf!N$B^7O{2ac8X4$rEXCAeMa-YR(pEwk&f)O9wEYL zTyR~-vubGi9J3&oC8C8_am9GKBzvz-@YZbaBxEZqP!^Z&b?i|0nT7`eMDoKlpYt9kOI zfiHH_c}-1%J6n#R`Bl~J+zyZ(jcx+(`srXp?SzW3aYw@-@?*{w-r}6|*Ln{F(^K5e z`DtFc!zRET%!3P))6Sy~39*|BpZ2uXNbfgN!xBdg*>ic$`h1UK` zT8ikb(dKTWBBN6%=JDU40mT3h;~#XGTN&2$%zyj@XtC$wwbeG=A`Fh4sZ1fsJA3>!|Qt2k>)M6nQS9o#Wt<1f_e9``aP949#c(VM6_RXylYlw}pmH;HRUEd)3QsLk{YIp(5RY=KgP z$gO$Q?`g0y(lV>s!|&~SsXnyIL9@Oxs@hmadjW1~W13TILmyO20|YJsrq6LXC8hr1 zexoO`1~fsoPpBa?u)q14_0EreUv}|*m1USWul_=;{^TBmjt%pxxt2-lVc?DkjNM%2 zR~B_&KFmv)|Nck2mUS<5Qixf}AGU3v!%ff0Q;RS;KdpLVTQx-k@IONiYTsXM9&P(J;<49I^W~2a|mF6 zsj#%83O@UoVOvw|ok};{oi#Ul9Q7_tyQ;DRp8AG=xCu;cU_TqAb)$PsqV3G5{{Z%Q zZp%b5v@C~)^fh|6oR8=6eY7_0xl{x=-0j8=>yiWb4b_fMe|5anJ-TS)Ymg~(H**okIw7ZcStcYXQ;(Lt33k zl)KetsM`sJ>iP%)Zw**)o8e=zy}p`N)h}{aKOBFE<{ppuff026au-@#Bog>k4g+6p z2-G~XHRuektO2o9_%`>RQYqiW7H+iX7ijUOq&mhYKQ1R0>1%Oy{g|NoX#>3n3)}j^ zKVQ#K^2JntjCyudATi$JOTQ!W+T6C`|$ah$5cMgt&G|AG%5q;F{= zAVWpVyNlQ7@?1AP;W8ExBbwin#K!%G%a*=DhHy{#V)JW0dqB$p8-TwQVfJ`oKp^A0 z-P^%5tlfv>ql*KXF^U15W?nk&tY;?XZ=JB0gh0Y-1!)koF zN$a!b)%0U|3q+-0-|a#>FgNVbPlz!G-`nKn@@S~^m=3B1TDvuIIc5_H*Zo+#tl;50 zRR+}d-md{hm%1DB5k=9Ym%u`GsrycNg0({Q2bZ@30UyZk4i3`muwRqS1`h3?Lzv^%h2x#dUh#U!`vVC9cy18){q zIPFhfbX)2Lq_=A9-~nnuP7!@8ypy2Qp#1$)RGyfc{0-ip7y_&yq>gaJb_0^FQ}mQh zMzorVUJKXDkofQ%9rhx^0^LY9sA#D=xl@v_LRozOdj&%4{8Z=-4UqX5RD)~VHA_OX zWX|e2CB97h?i^kuk~pp+ sXScM{AXXOV literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.dssp new file mode 100644 index 00000000000..e22ad715ac1 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.dssp @@ -0,0 +1 @@ +--HHHEEEEEE----HHHHHHHHH--HHHHHHHHH-----EEEEEEEE---EE--EEEEEEEE--EEEEEEE-------HHH-EE-E--EE---HHHHHH------EEEE-HHH--HHHH--EE-EEEEEEE---------EE-EEEEE-- 3lqcA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3lqcA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..8238a06452f3e3ba3319d8d717574d96f368169d GIT binary patch literal 20483 zcmW(+bwCtP8AqEw|;-l>^rl&v$JnJ&od9AiHSj&0=s*7V$SZiio$T1&ArM1tvC*uxb;9?EFXOH zubI6Xp(yD9g_|Lo4C41UB<4~*UEiKpO1PPkJwot;F)=d#GT>%!$?EUzr@to;9<=v8 z_lBn#}7)uPorltGInQF-uk|)sJy-vJ%=~+?^Y_NPBX;TU5r(}g z@V7Sntgh&u^z16(et0me!pW+&*ZTACl6Zw^kj!t6=Dsf9)v}ugWc6iB!`;v8k(w(~SZy5qm&=>rjTh z#rX9HdxQ<=2-h<8OTV_cdFSX;%Q9A%J1@1PWi3s!fs@+34@=3t>c1tgxbQY0TMm8~nex zQrTX$arc>^-1Dv3w7ge|H(@6ZyI;_gm6zQLY+=K;UUMG_uUc)rWKJ)V$WioILaDWp z6Mf(2a9b~z>qJNC`KasdDc`2P>a{1r7M+jwkx-=$$7kPCw!DQz8Jbc1f$Gz6k zVf#3iZ{$BmTpM6b0)>Pmo*@N0xXq<+>6Sxbcp<}Wc{8-$RD)=HqU$OaU zHs?+eVqlMo(J~Gvf%yt>Ekr4F<3V#vc*!yNsm>8zKO<`p0{(+{SA%XU)F^k-f$Rbc zMgGr*L1I6_FosEe9RzOQaBViUyg!ld zi%ERiA=lGe*p~Gg+$03Xxit_-@|#x&oiMEH{^ho;m4y~wO9`8mw>BG+{YrzS)E}`^ z_`HMG#-L+|8OR%h<97NFuvqYGkYd0*WQ}@2Cq`C zLs@lc7Z68d_V1%KAW@14cCzbr+C zd|Zt7`7$3GNiX}`HbtXfHzipXq_mi4A$=R79hy8D6gja|LjhezHModY8A-+hlCf%_ z8LMaI=QZh-_G{8?xvPAhZ=QMS?X2Q)VC4tXR;#3se;i2Ug5}hWpCX(|+3bJVF@`4kzXy%& z_h$bP$;o63`UEk1m^6BnxT<`%a1Yn2AA}-oK>71R!CZ|ixKh9q2xW#_t6sndEO!Yn zPy>~yYKkw{K_Nk8O~V!hMgJcahTL_DALVM6mfR6)%zt|BZ~#y753Oky_L2M$;!&M_ zI|u9$K4}LEye=GxQoTeY9`GW&ntq-ZreKHy0+-z z(H|-hI%xOc4{I-mjvXWLhjAZh62t8rQ+7<)-a@? z5X7bOom`iWot0#Weyk1zUad?(OAL3bW2+xfB3U0ZrAPBb1;pY`$}65``nYF(|4AD2 zVQ$|$@Tkl8pr#sGma0_R>hcaGk-81xXJgs$&ul@W;*rreW4zs2d+z_$(YjvVt?eb( z@QboKdSMDC;Ew;*@v&*|;1K=gGPu`6h2Ho3XEYCbPt|XKw3yiRrm5~!Z(CLti}=-} z4;iZMYCGwKJAAOzGwzyDwAl^IW(!CAX{jR{&tSk$WnqwkCYPQBj~`3F*;%z)% z`1P|zlD2%dpcJxC7iTZf5$5v}lVq?Oy1j?#1PyfWoI4vP`>1s!Rd^_Qh3&B26_gO6 zN%1(_TKX41ct1bLI6K|JtD5i>U;g&TMEXb|@Ot*|Jy%3txSu*96N%=R!sQ=3`Zl}0 z)u^t?LEetuvGj|!vj+6w`y+vUc-9pAD)=Wg6MPIV(0WOKF{xeTS+OhTl}Vi5!B-0k9rU$fTZt+ZMM|-4 zUHWY+7x0h*Cd2;i<-M48qTx!8c&I|mne^NXZ%a-;(xA5(!=^;pwT6!$fizGU{(jS5IQk4LSCg^wh)D4aj3{j=Ik-I|PPKL-@=hXxF8uP*+)u#VRhNu%HHsPc zf1-2)`TH8wTv^MRFv`764yw<%<_)dZGp_ahdzXaeR+0?N(%HkVQq3O8#kDaP#U+|Igye4|ynez&FY=ff=lj!H-?~W^jTDQx zd_iU$0>(W3VEouNQtVsBGA-5TE)05OkeuF{4{T&9s`3py58)jux)*VcxVm(mJkhzQ zJP&i1n;ovJjH*I@ErAHa=g-rrrI-66S1>7g8r(_^|JAXKJ!bxdCrnA+#j96NL;B5G zGVI?V+(G7aIbs%ljkT8k2p<&{zb-POL@hqf$`0$z2CtVhmFkX>$87LvKGIz)h-wFf zarxz|d^smC6jFJqiEYGBG-rrrT_3pvyQ1%p>1X3r!CgOeaI)!SNEjM-y$LD1oplS!m{fVRTENkiWHCujY5Qehmq0l2L8rUz zm`kdg!ManO8CRW&^kbR6z6O%s`9`%oEVt-~a8GV<`gZJp+zn*K-oTK6I+ApsNJh#O zNM`5Em}41&f~NhUK*vera7yn_mxBuVsGB@w9;Gx0r6I{v1KKP`r%+mwR~i$2*Z2df z%>)b5lG|kN7yvztn-gO6!jX8*Uiqi`^?*@8hrTpq-Hhh(?|88kOAIMe45;kg{iPw2f!B&F( zo*oEfuKp640w?lQekmzQ-fFeNQYrC>@Ct~BjiX|l1Vn_ro*tM;Co_^MlGJt8vg|uM zPW!b7%FaM0EIw@;jz7li44wm{^cZgC)=cQC`j)~E>DlJQ+Lv3cO!`xuePbe(%ls@P ztFbo*rOfu=?^@;lOf@MIAQsQXwJOcF70@hqS^iR} zX8h|HB^?4r$f8njrN2O;N&sL0#qyVc%Zl^sJfxmsjGE)B;C6Bm>=`QBaWv%^vQl}o zckF+Nq+gVZ@zkTf^t(w!A>KY{hP>>|i+8A?V2~|)sjL&0)3iszSEIN6smuNm+rS?) zt&4D=OCWOtv?wTYFBsDoi`E~RKWDFUC=*vAioNDlKw`W2eQ1Rv0vKg#G`FWG_I^9K zUQ-ZJA|#_P*}dAC=Yg!_J9PrGJs$wzVVE%Os^Po9i(0pQI#zKAXyu zWM=%0)Ow3I{o4k~qu#E5b3QG%25@VQmPgX5zIB_(TuF%#J;Zhbkfan0HTW}_yzKt& zSmy{_M@6_vRp@Rh_WAfdi)t-gn6almET(}rw`?-`#~bF_L5mjXpvuf!kmF7H{N`jI zB07>6Dc%`yu|8du+w^PZy1aO5qYeJOVq+qq%x8_s_WjsS6I2_wLs!M7P`8KMrFV*C z0{=yM>tL3TmdEd)hi8N63FxBeawA%F8{BG@D8?du*f<<3OPI6{3ouO-BZ96(#S5lG zoKTW8tje~?wHU<1QEf@h-?AB)532V*@up~Dt{j{j#BF^yF7iy^@803oA z-Fv!dz;ZLPvS5;m!l_6qOj7(!9!#@ViRy~gqBmo0>Eex-VuHb0)D;)7TrnV!GLd7% zlQ+p6{{dl1GKQp$KE)Zv&oTE!$w_*vx8ZcFYDaDJZ2QO(w(8w2TE4Ubxnwk z+07gfp!|lV&02N0T3n@W_qJEY@55IE=zrw?o}<1e(=PzExG^K>cXhWu<_yLZFVyFr z_U0I6gw1KQJ@~v{ZPvrow5O0A$2Gtco$aP3wkEKADDcs^lESV)8NwyG5DT|HazJk% zZfWe(v^T1Uw089Z!{NlV6BgLsCw1V9xyIXrk6n^+4m>hCc#$-#bBzIE z(Z_9)oEi~$V;nwpZr2nhVzPPzshmT$PZ%AR&eQpvO`}d#8-#_bp@fs(zQ9T=7gs*7XLn%i^_1T^>G5 z;+Jow4gKehHy#~!B0Z<_njddW!}Xn$G4}dU9Tpx>)z?-t)!5gHy+n!{PkNf)Ig_J= z_QDVa7DpGW+qfqQ^p5v1!&!(Bg0uRkg+oa*MG&T636Z!G!|@6^x(s1cFhg;TQkL5O zH~mu#Gb1KsITdvV8~c=wCLgB3e{2-9gosp_en-KcPdB{QwXF51$<;-H=${7)zNK>$ z85rsfHXx^#p6eN8Hn;S1>roVGX~;F?1sw>e_(<#hF7FKHXC&1;D^7@iekBa|D0Zv7 z=T*B7%!(99!6x)R9R81$j_#`AqkJWWSHxPq)T67~`8lq@-T*Ip5Pv|vIZa#;Hc@}g zLPYV6;^%vA8an$Gc3v*l!4nz1jjTS6Pe?u&t>1GOphv_xh>;kiaQB5}UBCv4bDd4X z@+6?2>%$$~&n@J^JU(8PAy1cSNC{nj)X{!-09NoVdom)#k`aZU7z0w?k`gWiDI-Tk zvldZxVX<@0Z|W%|D%C_}ner#T#=7xknv1m0Du#WXEl7haX76046L^n*&owdm0kpF- z)WCLzKRGbr3;-$+zY^-1jZHvv|8%hol84fCQmeGMfa^G2%gN zr-3uru%gV~`x(>L$;qXfkqmpc=xtVxW^dXfoo^-Y9z(K;dl0sb!`B)P;1cRwDXZY1 z0NJRAjR8v)t+37Xh^e-t=H_%vTZevSgYTTpQqx{{=_&h0gB$z_qn}r=r;f^#nd2b) z7uPU86@!Cmp=|QkggdlNd+i7CnW=uqSA2XejJD*n#<8L&^mLwyHr4#QLKZ}Z(e73f zLnO0B2qH6`h?>seZC5mykIk8uzq#zjVTlFE9jjT^*S@&NMw1ED*R0wXONs1TqrtSo zp2Py6M`V_g%2=8-Nz}lZLeNX*Pm4W0UxqZbs!ATPmzzk>a2n9p!~K1=488$vfq8LW ze%U?4eCx>L(*k9$u%uv_WTCoP8nSwO>vI>aJbRCg?b?|Ss*b!OhsUA+ex(9$acgrW zE4|nHWEvJCy9ST>VW8uz4cN({<&JYT&HKOKgi981QGc5QPj&KcY}q3Y>~-=aD|{P`RI z1-|^Ai#;~r@b8d_D@e$N+0Tq1x{5Z3YzzyNTnXlEY=WMDFuy^_pQZ*QqxIc8r~@8` z(|K$J)&jWTyYF|trj~2x7BqDI0WlvW4ajF13s!=(Zbmn^a8eo0%vzH=b7u^h>9;X8 zs*WSSlmcQ2U&_93XQICX2aA6W`qWc5cDP4VnYF0I*J=Vnf}ZDp$A6c0ak99 z^`cdF>`!Y~QEw@b+pjCR3rvPzQ6__!GcPtz48AAW&!+_^L2>8wFJ$hkhPcE8HJ6)1 z;Lv0CbarwN2P#{u)bcPqSK=t?d%5TWC&g|pgyeNK5voR}zl|wB+E57f%uJ{+pv)YC z9R8ej5gaJmud&sL{*-i60ZhYY$=!Dsk>q00u9W3`sD%#xCHU28;Cpu^Jo9xx7%Ay9 ze}kIwu`eGI7gt-q>nG>pTZ^H(oBBwE-eBG72A|(hO7=X6M=IB`6~*MvcS|L=vj{&v zJtTtCWS|1Q#aDb^hOw%{=%2NkTZZ60m9#*KHM2nFq+dndzY7}f?p+OHRkDB(5YkhH z^6a%e75CTg&{6jqZU9+zpHb>ie(azxPEztHo?9{#U8KuU{7PNhLC~4}-_Fh0J|;AI zzBgs`d1u~LdfHXNH)iK>-qL~yfs9YV%CamXO}wso)r7d`OeT_e1mO<{==88j3oVZ{ z_g9AO;T_~PvD&FIwfrlUKWhuO(3Q@FM47fnDv^X%wE=EX@^iI^!o|$+hj9eLZHn4K zs*%pL7FRF;QtRe{$v^C0jD0ug?vZGP#T`dJpOc%eE5oA*gCsW_~1M;%1wp39(-~ryrvX>&X&h>*BNM&5ivRl&YkDSG)*gHNLpd9se(8 zg?BB_hbFJeMtKT>z37ukHqyS4WYGW4a4~>XS5*dc!Q1Kvm60bSFZIcjG`Kbz07%z; zzO%zc=@XJ^akB}Yfw$?MxrDRSP^wAh?(X2gZm z-Sq2ZuRDIWY=J&ZU2oht=KK5^^OQL@f~PbW`<=^x_g%i5nusUn0?ql^3QWs`thLqw)}IalVpSmx6})ib%lE+BwOfSN*z<5jzKbn(zE{gz29Wa zpQJr8Ca58A_D*`Uv@j0*u- zrv-W=)UzTil7O*u=#YH8f@XCauyJL0IX&deaDH2Ti*vrb%3BUu z9-r@m03I;r&JZ7AZ8xDI`GmF4JT)fBoPE={e3b_Jo{7BP{_t7b{pC$5wq=%i+hY#$ zbIUydim0SmeNw*aeVB)PPQdNtHQ@61sQ#%b1RWhDYA3G#A)woS48^n;oR8jBQR@P>AfX;_)|~HDtka*Xu?;>4?XUbW_$d$Xas$ zQnXjQ6CFKwf8By#F~<=*Yw_v|&gJ`1BsWu`zB(!1*kR%s$_e;Yq~E+iKK$Uv@Sv?q zxRPZ(G^9+~M*Em?NQ#zghG)kQ2$-1#N!-7ku3EbjmwZ|rQMFFVv=nk8+&-s%kqHYl zQ~C1^Kft(Z)6=!I^a)LUUHSU&EqX7>lvlTyDQ!9NBz~gmC#H&fO?zV>-7^H!ZoAXX zbrglk{{c#@VL2g}j=cAu;<^$t72{Tc_pb5LA!MEdpI*4Mt!Qn$nVs9~+oiv1{i!M9QiDpq)&$iWbwon+fNXw( z`PWZYj~J57HO&~lOo$|zCv|Mqi)SuOyZHO}*Y9uC;WJ*v_N3jB)T%aa#an^)OD|Df zpXkZwC#bK+GkPvdFHNy5@!DMN!F06GR4}|=1RD!0_aDGlxmh0&Y{xvhsN2IB+w8_i z#nV@L=+;2Yj8aTDTh7vN^ntPvelV4+={}9EvWnZ+0E~|`3^z)9kSD|LZGaQ14fdR#tsE!vxUnYp)MZ&Y@@N;+ z_EEN;jmlF3!0q&VFx$aaqPYNq)jUqqgmIC3HpT_!6l8{cpEFOlrqEYuu0v#((yb)o z7$I%1boRDrT(BXIW3o%ZcLb6&y)HOJL5uA_;zJ6Vd5^@mO|0SB)LcCN2U{m zy&hP{An?$Y5q@Q)5O^9)=QQuz{IhF&w_uuK1IFBC(Sos_H?ec@B^jv zc(?VN`?d)_Kk{=8EYsRN6x!J3HneAcI}^<8O&1WT+(ZdLv5{0}ZyuK>3__mcCLQ;$ zZd1h#h6RY#g2x8Hd?v7YwXUn)* z?6#~>C@MOtj^!|Y#WUavnIH87B8_|5Jt=J$4@|_{z6prMs+Z{7{_*v;8DUMoX zNbIi_Vm5e6_&X|hQwI@Y3`h#Vc--+RP(9x4lV1lbe^TZcB3Jz|cZ6z27wk(EAA^$z z;I+Mv)elJthWd+O>ED<2rx^EW*or^}7}i&rbbo=Gs)mOJ1WhphjRAs~!ch4q`BgJG4DkajU?zC2nRrZEnK7M&RhwRD18A$*|l=wk9WSiNbl< zmgfG@kue7Yq^qVmDLF(ex0Le3t#`kLdzfdWpPw||wl=N1fegSuv6V{^W+sJ}ONoyc z0a3Wi$km4H2S++@DDGLKn@N1*O7qj-m!)h5^sotuHsW+uQsJ?|Lp(niaT%U|xq?IF7T#vLR{Q7n8wHQg zzxbaqLk@MMYv-((R?`RS?jS9>v^33j((dm<)D4KY(Xk#KlTMcyYc|4InmJL$H%&Xy zvH6n26^cgY6vt9)#ZF%TCJFJ0bz_`c#C$O-ODZyqtktJL9qqu9sJc_N^TrWo>%hjJ zR@GP2$BP#E8oEVc5uCDjY+QJPnXHD8K4WpmEx`ils^wzTyNW9D-=es(ETj50r9s|) z0=${9_%bP#ss9!rZ83sfvv|QIe6AHRjUBV*6(uW8JIcFxo0QDp zL54~s-KCuwtE}>ahpverAvU-!OGhmkPN8XOXE5M2rwCt-LHHL(#P7dw&p)>_q(BJrC=oLRjnku@kV*+xXbKkhU8{L7Iyed`Zf-cdvRJz9?R2zD@Reun7dVV zlgRv4@?^wi2@7#nhNs)+bauF90*E*$Ri;B#s3_a$xzE9;Mc|D9`3tXzOyI2sfpd=ytM&jV^yDY5XE;}aj9Mh8I}+bkT*Je>BHst<4n_fOMey*NkIQjR0C+}~F^d8Z- zcTtrMq|P@4ua=aY?C6pI#X!mvTeMuSe^%i4lGYq+od2{TfO=qvpli%z_$GdJ?r)Db zlPoY}z+RC{XkUL>;h93oJPyLS{V^v+87F(7SV5b4dOz-DE+$zA zd~0{!Q-o?xbfcx<`ND{c6_$n3FXb}Q49w(c`(!}f*yyH8Q+k5&zK=22#f!ZCg~L67 zVBI5$yJkw_J{H69S7*d(-RuWxWikqIyUkmDCVyBe=7FJvf9|KE!=~ZfMy+Gkc>;Yp z?7lQ6$|!vrQw&k%RM71`m}yil(S8I4YqQv~UP2nVsz1+tjYl^Ls#K+m9bCr=1=PNU zod*>}2>Pfpf=&%MdLY3WCoJjDmT}`N9;GXnC;Lg&PlP=FyMr@!QmDgE#cT8&iD~ZN zh7Gf%1F-KRpLG8pGi_v`^X&k;rR&HR{WD?yb``cxyjh*;m zSv6mc!dvWhXi;v?{Yb@tcND`D_Rp+D+s_0}^-s^X(&0L5Rfn&=#es#-=OK(~VbQ!k~#!PJ+gGL3m&{A+$ z^E{!X`_AF~Xza{>`f88YD(D)2T{7jfCK*4=G5vDm&HK>qo^BjW#&grZ za%iM1xbp_E8S|`E8|Ag(CoxkT;7!ckDoLCgi{$@&Apwj!ZDZ(Y;uz(|Oavn`0tr%$zB8K>i@vIc zKM=BeNmg@@D!=@y1yA?)m;vmE*nAu3N_cQaU@w8N`wgta+FpDiYESD!X%ssR)S0u7KNC)j zVbB8fF6+vaem^pVG9&rZ#q@hS97AJrSdJ?sNwa%#!Y@UbVVKJ-fDL{>aDt+;Ixv9|kbXX+L($(~#Ys6gm~WLAaM#9l1d z9_!+mK(h*;84-pn(vTM7CfL5)y>0DEL3`xDPe1t6Mc{CVo#{5>T0kuJH|#|gf}S>j z#1svcgY!Zg%=b6+4-*{tGv8i*ctVyVI0EDZNVy9p$3{fEg*}LivI@A76rj{?%nzc= za}U20$g~o=@bn_r(M}=CifM0g$u;Q?^-;@F13aBniHM%c~-PX2CyJz4Z+t2@d+DzbQ;Bki42E70O z*@~{$uKktYwM_e7FO9YVbz8!~I5$UDK)uUtmiYpJGgMO)u$0BnJ$g7q%!FTb`PUNl zt*y>M@Nfq3S5a31)**tdauncM46HFRYc0 z;K_Pk{Q?wyc`2nS)twKv2nV;xd!+660AOUh;{n7UI z60?_1E&=!^m(NaKLh6qf3(ITdo~1S30>ws=SSBrQNq|@+BKkqIkO4bEn)u6&KQPZ% za{`&BkiWMlOF^=O)DxsB2wul|2IfZWbFaaFyPv40XbV-Q?%a`k@UO`@KviIU{z*%` zd_5}*P{}}79vO?PG8ZLmW$e~8|AV}(*pFvs4!_EDeyf)HflQh|r`L@_I&yqiqak3SCQm1LD6V=_+_&H2$06L>tFurcQ zTO#_`0PY^ppeJo;Kx1M4`!34qb?|fQBfw9P%M^TkWKgKx97jg}x)gf*J`_(!^wFPJ zDg~{>>}g@Abk4(a#$`-P4L4?%Uf5|Ik$UfyG`dU}p1?rJcU%d_fa9N<0ZNHGU%Gk? z14Eh+Cq!TO(+wBBri^;V^oKPQLpR2kLYXwlGQgfO3H>PO(H5-hjhsJgL?S_H@RaEL zo3J9O-mc-78?Ae?&;+y*_KQ1$@Eb725*BV9kyBDDf+36fnzG@dP+cX$lUjdnMjYAc zm{;5XA3J>cCyqdwVG#>cYQoo-bE|k&HE-2s;D-X+4vP&XTch_S>SobLGxc*3(})b` zKi+DiyYz8euFhxuiE9RkrZ19z(S#3WN+dAE!t-%#y>1g_( z`SXK#IE*^R=*P$}Uxkmx-QRgWR7ghKB>YS#Pc1HUQNCoUdOWvEqJ~IwDB!xB6TESC znjLQ4lW#KUO)Co5ce20u1LEmR^}`TlYP)l4mDl9%BJE}dU;TD@E8X1wdTW(y76wj3 z0tTdP?ew{3d1*7o1YnW25sdsYS4(#doKnSHs&YBqkn z6Is5w5fL5OjO!a@nQ7I3danH#y;*$lIxt*QvEC?%V;PGPVAxwg#zn@&e206v#^KclXi|~mNpx=6yY^)`h9&LF^A>Yf#9oY1!sl; zIXZ*0n=#etMgS6U@Rc@8&`jjj*ey2YpWhyFImseWe74N57m;gy&g8I@mb$x_I12nw zRYyf#QZRz=R#{(K0LR?rMIn>`%7t^F@X2)nvdU^1tfV+j{D;0UZQzMm3{Rt!&DLxFh(WiT4Tk&6kHhq<+4uKiu^$gia`W48>kVqK5{NSxA5BT_v7p6olXLsGW z2anycwX;GQ_F4D3E6m{i0F0D$&(r>#TpUi%Nt!b0tA@vL<&dDJr-xA0P&}cf{mp9A zY=PVL-5xHHKpoXzA7y=o#g!zJ>(Hb~X-Ar`3Cd32aEB(XYPxvj z^^YIpveGYhgi$`NPBO8mrU>EP^cLU8#386>ynZ*x2;v#@$e4{p@wy9}Rp0=q>iju@ z>!ysfex!8$TGm2T&C{rKOkhxf1DFSkJ};Kcd-{*y|2S4wuC~jn~u7E-|zI{Y7!#35_EaPz%qV%4BA5E1Q~vyBI;l0%zwKirx5N zV`=#3{NMm1$a=CYXLbLk+*32|R=yI9IJL;F|6s3mu2t|%Tv zhi^Xtz+RETPYHNPaAfO7UuKUaP`_bxYsn6tGKC}(AGWXYi_swh&{UJSY7q|XWvAfupBeGcQJG_K%7&M6 z1Lg5f7#7OVgkgaJ03iVC&mVSfO2Qn!6@%kDLHA^Tngt_G!qq71;-udslkuQNg(Lv( z`SrqsjNTVCnJ~sKCOYbxWZNpH6F=Ncg zLKG}-^JhL8B`D<$SeL6+_-`W9TCx8XEbtWKKKRpUcE*?kzf4xqaS~!H= zaM`B&SzR6?8Zb!`D=jT#sqKOHK1rmPul~`uvHe{Bg^JZCd2Tj%xN*3-0#rjQGk4!~ zKW#)NroFvi9`g_WI}FxmMHwnHc1y=d{-4Cw;l^hyWcf9b_Y24!+MYg%r@HpQ^54MJ zpVa>Y;k}C2i(RGCPqN7;eygJAi9n9jC@C1_CIM+Ce{&aY8v^i*rXJcllY=WG6^gQtShV5y)YnUiI=gRL95a}Kl*n7`aIIt4v2X1GI6b?!2 zBV!HgWr}A9NP7Z_fAJjm5A}?}ugk3({P&nlpduTtn28Kvrk=YR?NKH-Nj>eyQCt7u zKbSzs38Kam;NHA2`Zk5s^l&zAeE=v&cpFX|Ez0rqPya-J*GW?xW|JMlCI`+&k~mg*=&qND~LnFV808n0GngJhbENklxiJVZpNi&}{PnJGwJE1D(%BjRYkJ?1BMT(HsaHsC6Kn(ssoQ+7? z(%isyFVqwR>KPQv9z<1chdx9E_6xE+@#1Q{{I5%5)VK)C#@k9W2qVf2lOTR5uG>&f zD|`~F%%T`;q*5gtXkqCM40HN~d<9k>z#-Pwx%94G`<3Zz#6t1eY-Os8=VWOHpjLC| z%5|l;pZ#|0R~*U%HNc**=n9s$-<>?}7^MnaQ{u`0qZlaYIXs;4&m*%_h%>?hf@?WF zpDpg_M*!%;$-Is(d;;9tqp|oeu?_co^x{phQHopN9DmdQ&#sj^r?cZ!eN1f1twsW9 z11L2e6t|q4D_WP-mR<2=35o@^@Bu?gO5o@ptZe^OhMjrW{NqjZ%6Ec<%rcb!q|@c703^326cM7JNNH>TzU&!i4FGFInJRU6N_Gw!BkJA&T&+SJq&&4$ zQk71$kt}J8A^YVyuMhgM^(J1`le`ySbQK?Gk-4eqchew@;c2D`JjwB#AVhdg9}ijO z@`RC0T(Cp4{$2%kuF8=_86cf|*1~vVm!h1SU_k8+Od?!!1ft=Jx6mgGcoyr4!CHHz zO$2x9Qt-7nbfV#2B+4ID2=RpdhsfxDf?bC3^9YKBtltpKJ`y!_MZiEzFtN$x)6sMh6t9a-_3SD0W;Gp zDh7XAmdl8~K2q2Q1IN-#Py@X;JnCxiU@S4S=s|!UEQngXCoO(&I_o=AozU9`Kl1Pi zC2G>e4YzImQ~d$pd?4Oi!asGNq*@NDCy>ZteS9B(*-$(pXcmi|#mAEPd?B^GWeDm8 zA8U`_QnBFK_LT=65nD<;ulErZcL~3Lw>^-lUvD>$?BFa!xh+jlmKLO)G(3=G{qLAb zppK=r%Jn~bYXbyXfEpu3NLJc!2SD!`mtWnu67=w(Ir3z&W-j2|v>Gr1QK(Rf->F5= zWaNP!5c~v=R`)o*SP~xQdAnq~e+B+wkp~doXC#j&^xDr|yo@fA{!on-GH^aUP8x~FKqnjCu!5BS~iV0rU}7H#eKD;=xx z)ZirG^_4x6`*i&paL;X%&$a;_+}$38=EZah@kve%%yu4PAk(s3>7b5!B45))b#ajnP zD2K*fmw;*kc!XK@F;7LltDmlRy%HR*Yj#CDy&)2L!UGW)HqhbcH^=l4F9I z^;H|*KRN_4rcQL>%$kbOgUWcl^T}Rrij*3JF;Jj5IX;<$Kd0J~owh%*X$pTgz@D>< za_*8mXq13y#{4_n5#DubFc(j7P_YhkfSu#=y~``|;KMUB#HhX{pJf=n4PtHVsF^>4 zB_8SkIqNEO`hPB8u%%szb-oO&MF3SsFI*d39_QdPImtATDGPvJAA^-0Rf{-9Jm?UG z9H75OIDP6?g6h8-|7ODIU4LYjHTEK*rOlMvvyR9OG)1#}@Z0g0-PP*rpCHIs;ZK-e0abXpPnP}pp}3D+%EaLB^lie0IMN5qPN zDU}QveQYep7S=J!UkNKk1EF|&A{1laqW$aC$jOh)3x~bQh2<;!lcyZo?vg%D1Lw>U zMGt%-e{*)?zm5ne>-Dyr>|(4a-*FCp7~TVT@#X=7!%xli+M%^;61>dI3>oLoWw~O~ zA3R$U3HT(q(UM>v{RZMxkZMEuiC#mQpB1Aw}&TP4&EY@nK2;hv7h@BlIQ06yS5l{E@o zGY8lyAiRcqG9_gB;<6KrHtyFrk%C;77sPdlQ^_bY1^MnKK=NF zw&%k;YFO-2Z%;Y%dYHFT2rbsGJmOAJ12#?9j&@ z5G-M;YDP35u;z`TGkje|>2T#8pwSYR{=X8=JP@ky{o^0`*vAsd(jbYEEhOKOWDOJ5 z3|Y!j%9fZJ62`vGhb)sATO^dNNh(>&lAW0_Sti*VW|Wa#WGTNh{r*-^ z&+~e}4;Jo}b-bo_JRTSbAhUaPLK3;=51xDQt8RJbtRxY70b{$Mt@+tuete1`PGc)} z=4o7rt2Y0nf47G;b?0bS459&a%Up7waq}AdFhVO)TnuXQK*vF+HDbML1*dy&JT1iR zS~pbCm`C}zsjO}y*K z=bTH%7tjUOZ~0=VTMGwYT5a)Yw|RGHdC!L42Pd7uHle)pg%TKiE2AP?ayVX0)L*4l z+<26F>k7>2q?U5b(|O~ZR?Vr=-e6s{#TV~-D~L~9jeHm3o5S&1RDRKTWCB0+38Ixu4gsOCJ#zHG`m2q6c4@!Mj z*bSk%v3iEjeatUE$L_GVsV2Yc4p)61(^PVqP5-8CmfCyfQW~QqPdi_o8s#LYl^=aP zU=rzZKLXIfs?LnBA?ZHqvEwZLruVgt)%*ngwY*o}$opxn&SvP{a4+HdmcB;d|0nCT*6+Qb4Zl59a#9x z7=Sq)K2Rq4fTm}CPo7(J)vM0K?l11#hH`u5H4~*dty8fdKK{ZHxkVF~*WqCLi0Ebm z@sms@eThc zcKJs^`^6`|yU4p!r=jh<`;x66g1169#tOi-bMM|F^4x=Y6K*)=cK+R|%k?ec$l+gO zj>w&`%`Xjr;F9*AN%3*eAQzUpxeZU)9#qjPSg)ib#i8V*LJ<>oBSXrL=&b{SK zy3#oEG~|EaNa2tWDeL2zj&Yd6)$mMEK>gdJ|F*4a)2$5HhmkAn5W{eNDJzlIRe4B4 z70k&nFgbH4==(M_Ha6Lm^2gw}*4Ia}y+U0FS_CD8UzY{EGFeg(zlH?rSp337vdM3Q zhfIy8426)58+##+GOKH5I+=m=IG^R8%Ce8YUk`@g{1mUH)hIg& z`X%LCvK7Bp3=V(QVyr`ZUowS$E*@9*UZMIg%sPfkEG%wA^>h-j6B;tK5d5wK%c4kL1TokJPxkHaQ5HfVpjqf9BQqGN@)(&gQ zG)+M@TryZ$e*Mq#3>!pHsa_pWe7bRjuQ%(td3)u&TEYdI_q!H~l~E~5^$@bRXcC}O$UL>jbp_I`%3 zs>tTG<y5xbq5m^rE1{Lsg_ZR>$_EGh!~Go*!1)o(BD0#fMQXf_e3C3QUvo zyKXg(q~Q)7B$+i|bD_MzujZ$XdS7+f{5X`s=oW!pauipiD0}c=0GL}-AJpW(0vG) zFMuC?TZV8VO5w=O<55{~3Y(t7xn8``TXep8)P8B04Aw+_=nTS)1u^m65~KmR+3{=_ zr^YLBBjSf#`dICf?PK5j$=&5&O}@ANmuHyMzINJj2_zEgW@m1vxAHcGi$?N8xO8|a z?4!F_EpBEv#dyle6pjVSNR?28_-*B2DUXaP^1()sjGV+`6ZG$vC~fwQ?Miwq|79=V zYnCeD1qcdp-HFWrXSL5>T`d1M{i3YbYG~T{x%m>I`mTViL}5w<^wyRueJ`Ojdl369 zCy{aJ_{@FIqg7bC>5!ES)`n!M5`6&8C~cH54(VnW7`gLrMPzFmPNR=p`-GkU8`Nf$ ze!%v3`n&ItY~Q(By#EPyNA*O&BX1W+B&+rhkmIq7G>BQjJ{%_e5P9Y&P(erB>yfp+ zDWF6Z$*Ej_Ngp#gd9Q_QjwwY_O`PQ#S0qIgHCd_6+j2>sv{n<7>kuOpkE&>9J_-isdWNzrS7na6N67NDgnBt50ouCSV zcefupMxRH5^kY`&+vvDFw_8r?pS-^3PN1EL2rK&f>Af`(n>i#mDJpL|%^uPH$lyiu z@{XiQu~3bmt}}F0zryF!Wn+t&KGE(J`FlFMV8J}El6n?a!Urn8fBUA$*1U=r4?xvs zO%q^;JaC}%zLaO*P;)MG0^C>4cOR=LJ+@kR>g}D7E1$i`f5n@&iVF5*VK)kX0m;mD zsnbI#5jGZqU7om74~DTm1~xwAvzCwT3AaH=d;aReSn6$fuKTQ61E{(--(yhq;!SNc zTihF6=or&f=RoDrr|_ji%Qh&>pgU52DXvC4mnr69{5 z>$3Aoeqd_eb_hH$Fj{-w4;?+(yGB?P5*et2&V< zfV0O->}uh24!Yq~(v}k)EI=|s)e^|&UZ#3jmm(-ey;0%f!JBOqxwAf@d{tAM59R+7 zcYwPcC7UQ*SXu*SB&4|ObPU#1z?P*ekfB+LCIMC%^wQKwHrSq@A}((Z@h+3|Pv>8M zgs{>7m&=a-oebV;v8jJ@m(7vIR6M%y!HRe#o$d~fVEhuf!70Dag=KlqHZ-rZIZe}1 zZPalD;##Pe;9BGyc&)ir;r`Aj0)-O1FvLD{5&k{SsnJ8U!C;Mkvss2Qn5!a`t1PTR zevaV%$VUl zJ6AStOl^)@7k_PYR}lP>f!`vi3l|9Zt!2hUeTI3;XHh4qicECqQG8Ks*8*<;k z;V`e)l>0v`J)rz7v?yFR6Ws|qoZ6PpsH36cA>3ELoqLn}Ap|c#0+SYrBz&1Gk#BRd zE>Mo_e6nw3qe&HsJVbcVK`M@=SLyDJmt{dnx11OtLgaLB|`LPAI->Kxy7` ze4^G_*ahsk5Q~zxi7gCXW)pr&;hkyrkLLFXf7g<0N=+aYY77b_FOf{qUgK!j3_eaf19iuB_+etnDMO9cMEb}G@6-iD&dIcJAG8G*q_%2g^ z^+uT29;iq=B=8Rn;`rg2+)~=8zn{o`v2B|Fs5Z^mPs(z*G6!_9p`EF~Wr&j$jb5o; z&3O)|aD0o0zX(W{YLzA^s;KMH*sO|fSd|r2s zkor77FeHWH+PEAD_vj(kNzyXPZ|~0tCsga1ep;*MYqL52X*LN$29kFoB+$|2hxNJ` zgwGBVW20xzC4mrdpxOqs+OA%p&{5*W0V&c#)BWV*r7IW3K>E79Ps}{#<>$`v&;J2S CW&r>I literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.dssp new file mode 100644 index 00000000000..0aa476d4fdb --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.dssp @@ -0,0 +1 @@ +---EEEEEE------HHHHHHHHHHHHH--EEEEEEE----------HHHHHHHHHH-------EEEEEE---HHHHHHH----EEEEEE-----HHHHHHHHHHHHHHH--EEEEEE--HHH----HHHHHHHHH-----HHH--HHHHHHHHHHH- 3nbkA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3nbkA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..461d1b5f98382523c239fe88e15facc5b4ae4a7e GIT binary patch literal 25387 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 WV&|&<@#r1>!wGM!EUIF}x%WSr+DmN! literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.dssp new file mode 100644 index 00000000000..717697c682f --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.dssp @@ -0,0 +1 @@ +------EE---EEEE---EEEEHHHHHH-----EEEEE----EEEEEEE-EEEE--EEE-EEEEE----EEEE----EEEE----EEEHHHHHHH--EEEEE----------------EEHHHH--EEEEEE-EEEE--EEEEEEEEE-----EEE----EE- 3nzmA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3nzmA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..dfee8baa7a8983e6f4256d14f0ea3fbc0543f6f8 GIT binary patch literal 22316 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 Hp*!|JLH*iP literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.dssp new file mode 100644 index 00000000000..d1aff0dd020 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.dssp @@ -0,0 +1 @@ +----EEEEEEEEE-------EEE---EEEEE---EEEEEEEE-----E-EEEEEEE--EEEEEEEE------------EEEEEEEE-----EEE------------EEEEEEE-----EEEEEEEEE-----HHH-EEEEEE------------------ 3on9A.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3on9A.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..96a9884e31023be89e52d4314d27c8c865bc2b6e GIT binary patch literal 22010 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 pt&y2k=R(xGVOk%QfI+0W9 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 YMEPI`#1$EIv-aw*WAXk4B$b%xf4Rig=Kufz literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.dssp new file mode 100644 index 00000000000..c96bc74e4db --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.dssp @@ -0,0 +1 @@ +---HHHHHHHHHHHHHHHHHHHHHHHHHHHH--HHHHHHHHHHHHHHHHHHHHHHH-----------------HHHHHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH-----HHHHHHHHHHHHHHHHHHHHHHHHHHH-----------HHHHHHHH----- 3q4oA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3q4oA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..485f79a314e19fd6f53dc8974d7c12acd559955a GIT binary patch literal 27005 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 J#zE6g0RVQ@sv`gZ literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.dssp new file mode 100644 index 00000000000..39901f2873a --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.dssp @@ -0,0 +1 @@ +-HHHHHHHHH-EEE-EEEEEE-----E-EEE---------EEEEEE-HHHHH--EEEEEEEEEE---E--EEEEEEEEE--EE-EEEEEE-E-E---EEEEEEEEEE---HHH---HHHH---EEEEEEEEE--EE-EEEEEEEEE- 3t5gB.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/3t5gB.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..74caee64a05d2db1cd743a8e66de95953d55bdbf GIT binary patch literal 21071 zcmX6^bwCtv6P9k2Zs`z^7EVAqq(k6D4oT@aNCb+%{zvGe>>TpPIv$I?p93xZ8c!2he z`v>E&kT_Zmh)xb)-an55jXcg@E@sjoM*dsCjf44-C`%yj&K9S(PlgmR?I|cG8 zvpN8|I&7`6o^^d}{rc+Tk9VR*{VRW6B1ZCl9$Te+hi@KRFLkz&Bd^9yI#yPvt*i0M z)q*rd{V1sjq3hE3=X(se(w+2HA-##K9qpm#g>|Sv`s$Clxh?_eQHf_|{>;o3#+0i$heNqe0Qs0ll2PXS z@m-E*UMXGgg7SmbHm@g|y!H zi|Mri<9$%{9Fe*D_kZ^-0dC|!MLNTjpyzd4Hi6}sRKJ|kHHCbwZk~Qce|`9>`$c+- z^xx|MG;sXb#h@pQiZT_ZkM{0Bd}NtoJfTH3Yfs+M2Uqn#!m%Qr1(e=$yNg~rhBnX4 z^jBCR1ew%)ucKbI@Dm1U&~D4;?1yj&PnA8;CfdG5Zc=8M5^?1UdzCRbFgA+D_^ zx!fIAoKfK%rLE%r?dwlIGh|Ceb91AJm9q%eFS8<#=kO=X?F-TQpx%RYjvpP8`Npq4 z7Eq^3*fRJGRYBL;dxpXbbl%E(TL%`c-|o#b@SWr^WNC!0L?3uI$n{Ja9bYmywL*Si z@Xff%(e@q2%k{*u-<^LCz{n_cfSoqP4CPC)E=NoE5RE5@1#j|E&3S$+%Ev*=_>VbKZ+D9Yfu3PcZe)6Nj;`UEG zB9Jt-k0EYRtLUf`FCM}}-eMQ zcoEZ!g7f82ISywDYJm! zK6$D*zK=+9gooOXQ8)ESMY;A$}R_4+=`Kqrg3Fy&mIn39Mp1L(Le!@1lD< zmOV8Z`6biV@z@lJebtSfNhYf_e97HU&5^M82~vyQ8Gnc~j`qV%c$Pr(%Q`k7A0Gc} zPfoS>6M<@BjuwZWOK*E#1QRsClN{F`fhDtI_~>Gzd7b+L?oX*utrhW-eb{uxdUKwB zdx6}7d?yBw)qX_cVlej^tNg+61)?&StsmEtcEglWRNqKeWVRwuUI5^O}`1YLKXdY%t|=`S3O zN8GU1F5V0YV?YDt_e33rt0{?-O!b-Y_RFG%11)gsn|e80Jl@nJUqtc!Lb7JA+9 zOw)`i-i(_#8;Hf?wpLqseBBzXCc+lvh}gT`w~~M~qbb*7UL&G@BunTvMe_XuZ(W&H zBsr!zMfpwR$hse6gUOT!kCKyE?MTRVso1!j;|n8BhnRz&g?pyc-&L>l5LHFJQa0cu zP=`@dklX9P1ZgVJGq`qT-fNl4?jWvmk|k;n(j0v|brfQ?M6ALc(>>GO3v1)fcelZ) z2_c6v%0}2iKYkVH0%mWvP#c$M+q4(sD7m_AM(A7k%B_CD&_KDc+F>2Tsg)$|r(pKS z+b;49MTy@N%YA*NKfwapB^07R%(Z&CE`W7N2VYH%Ro+a?DO zIx&Nc*snp3>lDCox13Ls{e2xOFJSp*(Durwu2~Y&+Py;D5Q5o{T1#R+xyO!=oezd@ zj;>~E6DlcEb*u&a-SGUV^z&3ZgOIER0&^r(^=skt@1t;X(B(4>0pYawXl3oMfsw1t z){U=~=B~oWlKb}7z>rnafE#9}z8`UaQkb2PfZta0g|fYC9F(vh1iK#t9I^{jX8c&5%_v+ z(3w|!6bpJ2{x#pz-pQ!vWjh60bXly#U4>4oksAUB>2*%m@i*6Z77Yy3N(g@tWv?%A z=5QG*VvHB&|6d1)$vFcgomB+qGma@!J|2LfE=6x1C>RG4IiZyR7`_dp({LI*eAB)s^EBFsvKzT1sbcADmtn?qA4W+}QzCh(2b>D`UQHtj|i1x-E z=gn%);%$l3{V1)u3$vQ+7jC#mbo@hyNQe@=WJOSy7a=bWk^wia`?iLk(YK+Jsv7fN zsNk`(pc?`VYSwFQR?UjFoRy0B09=0sOeNewf!o+uPy@@-cNKfMydRQ+n zrX#-CZ{aazw4r$i1S`i@?hS74Cc0c0Gu26Vww>fs;Vt1of($={JX&pX z_%jQ{CpmxQAC$}E=GA(#?Z{WyFEE5n|EC2>PDXS)xnz6Ce1}J2d6+Pi={&m#9lM#Z znc~`@{Cj)pS-!5De|$E%n&2tw9fD*AZg_e3t-$LPJ%3or2aj?r3brgE(SZY(%`=>5 zCACI5=`HYJaTIcajR3z;qTXA6iAb|&-p^w_vno^ms(?-BAUuP&nld$*N0!@Xh@>;e zk63=4SsM_HkiP3I>$fUm#tu`jtIeNna7)YER}FI3#S8CEpD4#FM)_>YY0UCYk5E2` z0!y(y&|Lg<{cAV@Wn-;ZEHgc{-OXDzm^wkCmBNDEvx)ENI-0US78R~F*Cm^Wj+XKi zWx{bFPvK$7ug_XA=hHgcDtUe}Rc7d{@R~ZB4KY{xUTm>!l$-yPX!) zR;2|?ML_!wv$Sxuud=ZYJK@LZZYKf6{CiGvFz`Z#K0mJ$KSCGFeLCO@-u^h*W5XpJ zn09_o$>*+#!a3#{o+Fub6)VSZ&N@$%C*V7(EHMgEudd>^74snXwWe!ujCJ06E=98m z(_hl4jOTfET(a`YKX;WY?W79rGe6kR3G>(54cDBmFV6ILj9}XntB6cte?m`Yv6hCoyD1$3@ zG0O@5ipFj#!dD9!Sg;Df%HWUi^_7s`%obe z_Kyq<&~-}ks%}rkyG4h{(TksZue)5hg5C$f;_3=8sh*Ky^8CA_LhZVczt-2S6gAFv zvA$e(+U06SMoZA!uiO|u5^FDDcS3Fg;41tSbE_>5@gzV0X71G-)RpH~XViSi7yRg1 zCkwP2t_=gE*vLKk2gz3q%=b22Q%B_V*MECD3>hvbDCdTM+)oZyoISkXP&!D`0c_Mm z8-tH-7af|S_ftKQ>E(`urQ`rd0eX1hlK5f3v&N!i-=HF!kLDqSQwFXwL}oPZ^S;Yq z_tzk^d>ld0{ixmK!Fi~T`qR+*eydZra)MY; z+8}s^uV5jZTrb17a?|oQc~BaKoaEBaW#S*&u~ugCYG6Czq_<5T%ptI0QAyqN7WGC4 z;^qNVqf9sAD*03jwKT^$12t3GD2F$V@*8r>s_aCt;1W?~aNluBhyTgp@+{HX!S*J# z;CJq$;B&jg88S9IUxZC5depxE70m-#Jwb16z$)iK5MvX8)46@IBHrFQxX`%H6Ec+H zwv=(-VZxT{mq`(;zi9kaicv&Q{c!cS=ghL5XS>i5kuc0KVa%0 zJ)5`#9}_PjfROUYY~x@~d9qjCTwn0;*JCI;KPVRNjFO4j^%mK*k@fX?fXi^6WvDtSLz zP0?`nq-rqLXCX{NHcLC_dqZ|lLB1$oEHJCG6^3yY7i@TaclzPYm8>TAQM03x$kSGH z6rFC>HyEL*oH2&)R5=x%5snkSDQvxBIZ=%CN!hX}xm{tNOdooog4ND2j_sT~eYg|C zA)3?zzzZ!s6vUJTR9c0S*pzXB?fYWo<)q9hh$kbDoub1>)Ockooi6y%De=M?vPsu7 z5$QGR*{{&!mFc6%JxP1#|VuE^vesvy` zSUKI|Z#Bt3A*v?f?jnT}017J(DQkA_m&r&PJ1UH!Z}^R+V^#w%C;;rxu8~%56okB> zfzEIunuw_UD9J^H$VY=Z<*|m=7oSX#ijBEUWr&2n!c%?uE1F{bvE!(xs48~7gQLa$ zetg3k{=kF?)<_fiv~%Cvo;3E?RiZIp3@3M7jx`qNPHbc!_QW?!f#zq*EE5|1!`?3+ z8&p7bH8-R7dVWyj^cd;HH<*VNf$(Q46iPRb5$I-E;DiUOP5Yx$Pq~={MN&}5db310 z^z2288#^pq+tj|H1ZvG<+&<6DM0r8co#>}*{V(`--eYC3Yhllof$;u3)r5UxUoJ;Q zr=AvQge<+_-L3o0zWk|E=e>b%ZNImWwT*f3eZ_Pet)}|Z8l0(J!r~RQrhVyOUF?yL zAAA^h_XOEaWV^mkx7~1+ZBXk-tvD3uk$R^cyh2%(HoVm?xR<&3j{0I0qGYWj9Z^6g zQ8;x!NmIE|RcWk@AD<$aWLQ@6Zn9GV=imO`{;q4X+*ohcdH9lI{VO0l%kw||0ee*S zcT&IVzYS#Z6&eFjiZC_JwLz_Nqn3DbdK~d!a=Pi?M03`_lDLt>S5iTT>=F36Y!M8| zNGszmCXdr-Fjdl=+ny3}Hth%eGv_fC@*|?g8&Rm0DB-lDyP9+b7eelv_ zK#MaDwGU5nz4E)-XU4T&{|*}hNFlBRR&Ul*6g9KVk0?jl)F=<}IoVRq_DS;`7Ac!{ z$5a6U_^UUYz(0m!d05*sTFqLoOZX2p<(-C3*;7Xw*}MwNR zmc&)f_CtUhxp&_4@5{+kQ142u|9QB}iWE_`jppmVwDbvXrtx;*L2T8gqX7w|*%I+< z-5Coob!)Y%5H}|DLqP!V!H8!gle-ntk*4uv{n)bD86Zu~o8)E1H~C?Yi^A>I=-G2B zWFy6&gxLT7c;q)~Ofam2^RwF{-lLuNO?JecJoP(2iNkbIbg&u}Ka_y+=D@HhKkMk0 zSozP$_8A4KOZ}uYqJJtvpDwRL*7Q4VmZEE}dhY)2Y{RJwyq^tH<;=yBzf7u-~=@uWY0PJ>TZ@75WM$r3$2o8UbjiKgL11X6faY3kqAPQXPhFnKcbx{zaK?CATb(3oU%Oorr# zHa=)%e+S?Fi9&Rqik4M^GtxoBXc?b14=Jv-R7q)fb)Hn~x{wnoD<83>NT65IxW0NV zRth{CdF{K+Ofp(uw2AmfT$g(Eid|hKj2(={IJ3HM&|-pmuO|MHd$qv=SyxUlU=kfoE=hnpqzp}NvSlYI4fm7lUK8ieITi{L(dAs_lO%` zeTXDo=ko7ks7iXFa6`=OTSn^J-}TUs~|<EQQL#CB=4>aFZz!XhXW0L?hKn!k5zGG*XO(m&W;2LxUfF%W8v};1PX^ne;!Uk-m zJ56#ko@eOv!c5PcQ1c|9H3Y+m!Z1%)#p%B+m%e{{MjTfim%U zzi~8QaDHHY*Q$LDJp&Z2aZ}}1`Ef-z+@>+Jy0NQiG+lxgDr4FZGNUYbO3~nqQ40buNg0Km;>{zatPM zG}iT(CM3Yk+%nJyD`{)1kf)o~eRb7;T(ZQg^*7nhcQ}$3H%d06)JF!stKE4XEr}hn zeNM=H2XaHq^hq>*NW925VlI|7qw5A|IQ)iHL*0{otN4Y=QFU;3T{WkV| zIa+G5UHouscM=O@#5j4%sEig%dElE|siA*t_BqQEwcZPb42LJFyBXSL!5C>$LkzE8 zrrrw9CNi5<%9Y|kEWY2fuf*=Y;Z0hk&CuRO18~T;zp9k6 zrPU#$6)$3jaHp1`5}S)n*^TYj%tU6fn96`_?Q&_`Dy*L;OTI$Xaub0wD9e4*$3hg> z(;8pqvB) zgQBf@n4IZ4Q}aatLLuuz3g^+OMnktb9}AEf7^;qXUk3No?FXQU^*9MMPgYjCncwbs zfk-}_6T*c^n)Xc&F|ib1V-PEvhy->|W|4NO{JoR_xxWl}O_^CJ6+WF0dO5_2ba+Y4 z8Pim^q3{Fir*)W~x#Y{CYH06SpC~@=`)~3$UbT)C>tw`1k97~?>0HVRa9K1pPk4~f z+{rohcuw%Da!k9t(=FqnK?Zt+E`wvTswj+H#m-~7+T6DrKFsXZ9Y7-^+j`;h%ilNu1BO&hGAWqsZuG@8!(}L_Uq{#}>Fwy0 zG-g~qHNn6DP@Pb44;fqC@;MlajKkT-9dE^;+uD9A4J2?UI-&gSmv3@{ak71VzSJ!@ zasQ;PcX92;@rc+9Vy!c+WZ7EQE=+s#qP?Ju60`lnFuVxkVR5@&Q;&qic`5n2ts-qbu=hBQIA)?_M#*!E?}C&Diz52li4Gy^nr9HSCx%+aE5VLe&! zpWWpaSQHV$|0<-W*vj+vhn@>7|KK>N&X=%fQho$4@`q`a(I$4bl3Jsl$yt52Au2Pv zcgXwmTnF80`~Itu8JBC{(Z!({G%lv}*#KAA&N6C(BX8dN7Q&Dmc(za9LGj7;O*un^?fG9VOI>bqwpktfGgaw7+&nuu)ILMrER0o;cs4D{my{vQlU?OY`p2e)c^F z=&zrRBID<#Nb(=pG}sc%>klM2u72-6C(RBqBnm+Q~OR z;GavxDe|kzV^&4NfDPp-&QHfYnq{=0Tz=OSp7xvu$=KC3a5nU{{`e$17K)da9dZ|) zavh#?*&o)WM`dctr1IbIs65}HdMW%D)TD&AuE{2=gOZk@v-TM)B6iwm@9(1VGQ9NW zD>kE~HFUw8bo~B(csRdN;LXw`g>@ThSk_u!^=GKU@kqY|I$)pKq+pfLKP=cjdvGA% zK}3+|Ps`^FNyA(=g=ure_m4}!_m6XgRb$sTh+8{7tVF-kY;N#qCj>Gt$LNMu-|qg7 zbxq6?C%&Ui7Jdd}*ZPJseL00|I?byGbhTD&1#^)>4bB5IpNF11K@2{8o=@T6Y{K+8 z9UAGu>UuAZ#gHYVr7ZYxW@Y*GQC;R!lojeJDR=l(#e@1>=TV+>+NHkVu+GLnbB9V4~S0{9XSeC)zI0ok$Ngc zaoB|$COJT{udE8Z#bHyRP&Tvm(s-zXDl$}dB2%WAH94fIK#e7=seX%mg!xifs46$P9s6HvNQ({<7#Dhf%ZrOMZyT(@vY~g zs(fl?kjkpAmT%(gy?8hnajbu=)40Lq7FA)r{#fU0hNFGRbil@ZUok70glpl*WN)gg ziS8zu6D~HRqU8!95efEI4yHyikZ-IVV|QhuZ>V4Qc1>33ZsGvV?qPbyk`9TI=3G>F zGEgVuQKndng>8Q$Jom(F+85TZ0%u%T$}D2_$q~^6iM$*to-WB|Q>d&(dg$b(FEak; zS>nP5WQXSV$>E=fi@y!2_y-l~H60}~4>)G$KD-!;`2Gdg$6SpF{|ca8Knlu3GbLcW zMG8+W{sR4|MYx)VdQwL*vsQTQ$R%ClkLF&^7+kFOO*cdRGJ8vdYT_|g4JAv}r1SON zxxtFy(`o(qK>o0^7G@j0d0@?>PkT4CNpy|#R|0GPL1C|(D$riz@Q;DENVbX6Lh8`3 z6J&s9w&2~`+{#Y;MtO=&=u;R^w(qy3Eov;ujqyqBc+uIz z2I%LzFp^HBer^MWlj^}21*;WDSdW8(ZXzuUAw6TMisc1LxHH|?(+ zK+_z}zUUuZjW_Sl6vY>+%}-HO9aq2Mc_yw`XNyj4r_iy|2`@@Z{d8P{>_nZr?}#_| z6hG_N0ZjaYz0YxHSO!2syQNNVli?qUGsirPTKMi{p!{Q2pX11~{-g1atHiC{A2biA zA+5vcGlUW<^! zQ#N~b*{_xPHjRzpl;a!KtCQk-TB!pMjr zoRe-2MStwMfyULj!tbXRECF}QbqNe>nOFp%nr$h^{ zr$~%VMc*~no9+j61ZAbn@=SbW^<kdK+70MF&N1S=q7W)!p zaszwZIC@_v@H10;K<+y0VF$!4E3`ew8azSs?)IeE*{F-T;WhbfP4@JWHIcdRg8^>v z3Ym1+*4459WK_6>xZWyQ&okR02A$LG(?$7=xvzUk6*T_&x%LO-`{aero*|%`mY^5P zO>KCjg>Nk0qb3U6S=M>3pAhHhj!Tw?j`@GLDzEq|y29JzQ-@sj!M3(BswClijq9Zx zehROss-(CcxUt_uYnJ5s^RcNX%Cc%%g?IYp7=HYlUQZfMIpz-4u_GTOBRQpVld|&5 zo0OYR_k@C*Z!oIFT#m&@auBo>s_t~C$Z*|*81(GR#H`Su=j^gSKH7YY#GN!jO z`$vSEf54)L8oEmA45#Nz_DM4+8dn5j@D1gsFoj0Fw+fQ%`q_sMLa~6UlTL|Q$o_@6 z&b!W2@t^{ED){h-!~W)23rbcJpThomd6IkGmuiDtpJxt16#m1jCCkhM!Y;?)Wl=}F z#+tWic6Cngv~zEH)rWJ;`G*0kmYR>72EsaWgfXR1UZpoJ;zdhQwxe7q=3-j!Pvokx zZtr&w0hsuVm7L*%D&eDmO)4b)M&f5P+akHPX>z-87rgkdX4i4q7eY^Bb&tPn{Y}r$ zJ?-j{!}Bj$71iCs?Y6UTbpt#*Ng4=SKK>C*9y5PparRK7oyu{-frb%gG2P9O5WwC4 z>KdaVM27D*(*7gi<30EE@!-N5o_;63vzCWiBZXI4C(^qQ$>RSWyb+nK+yG8g7^|=j z{Y0n5^;^MIp8V-+rM*w+SxO9WSN|MOrG%dJOY^sX3<6q&cZ4WWKAcNP3tEn04zp^+u zsu3bv6EyLhDs(CZ**$6Oe;ZMQy8MWN!`(M;^*QIJ#O{j7AT;0?R(}LG+ zX;liNyR4cX+RMv20)5Wp&YTMmjpTrikQj6I{E#>$Psd6vp!-qF{oFHd1^o0GX#f-R zG}QK4xo+^r+zN-8QQD88b(uIB>QV6*<9{wa}G?Ywa*rnz|RLchn-GjY9O@- z=|1G=`^iXr(1u>9g^NrQLTXQkJUay!D;hPZ0c*8HK5$K$7>xDJNf+b z*p!*Sf3EjCvt*W?Na4ROQ*1#UH+4W2j;p+HTfn7wj!89FaY*jZZi>b^50Sj}F~sFJwNYgT0719sPBWXKOOU=9zRN>=-y18OpT zh4hOrPh+jp&k1-zZRFC7I8MUJg~2u){-VsUyX!f}E;d_ZNMzq&IQlSO7l?4n9lkx6)x8&rLT{P;x*wGvuJ&BYo6G&iDqGRHAH=n{zbY%!M||74?-vW7B8 zPks7zK&k$mR^8s@4sw`pA*<~LkCS=oWBP#zLTsGZ9)h-4?>hb!4figUbML4A3m zrts`@-I*iRxMPGE)HL@d->6GTabbyzme1|(0Dr!*@n*B}9k%V05Ncu0>lU~fa^fw+ zdl6M*Ct-BjDp%C{*zR`D{bw>4de3d??xcqMEeTL+#uU4J)pxa{6FjF%HfQdE*Z8|3 zpf^oWr@TS1CuR0VM_Y)z@VxRGe5!H~yNCs#6mhZ}pD~JHK~S*qmT)7Up%?VFi3vYc zINQ7s2ai3hXWps!cj`2?_E~_1{!oXFU{&~ObY(u$B1g$vp0nog#}m+ zz4*wX=^F|dp`efUlMXE;&=1w?;Dk`%s;{e zK1Vn4LusHTo(a+}2HcH*D3$ZaBx#Z=^y#rmY)V%>Bn*Jq_J>Lt6;&}NuZ1M_|IO!>E}*htQpiwh<>eHn&yq)FD^QSD~(W<3af7h(3AP&2*!O?lAR zqlE9SfW|O^6!)nunMVjSZwL$7CN4cRbAZIx-M_2Eb|x`fR#)yNIzF-c5GIa)D%1Kz zE^28FP{GSANm!le_U$hgMn?P2j+*xyWM!80Td~+$JUf^$`sUBx-#1n>ia+mtf&|72 zQ=>ZwIka8^Q*-6=HfYXa>zd)_P|RT+;ZMd4({1(QJNb)rb*iyI9KwAr0-t9cW@rdP zXGC06+#nc|7AfL?J5Y57eGJ3ZB;5JsI*xe18p)HGx6kd^^huKy=q@MDp=E%ikCU#N zI5>w%2|!zpCSb7HXuLD7vZ=#d=Np}IZ^XQF#E*E!)Pv3LCacen3?3vYii-CUHfC#c zLSKhRUOL}4i^o2>w$Y7N)7Zt1)4eC17Dt6%2N_U#d3;c_DO~ODUY#5F4GYncje1UO z@XgUMjdUH@g|Cbkj=neJNo;GV6qWj)fHiROv*NzE@-jber2GONbYqD~u5~yMl;=5(5TVyaE_8+^ zIHai>K841A|3(Cg^-!1`gpv;e*;=`u$CmVjx>(*vdO-!~gn#hve8Kmcu{_4L)^E?T zJO#kjhPz{ObTh5Fonz`oK3;9jjbC};R#PGx%0a?{(AdJO*EB)3duKsJ?JFOdnF=D=iYWIEWwFl%~(HW1=)oY@h zzQ#RwNd*KZz{^~}teZ6Pl2>%j%-#TlCcfJ9PlTBNXx`HE1_bkCqI}k}DES+k1_g0D z4}hg0j!^hJQpc?HVKlq|@52KRQ{tS3(S}+o2nWl1Fmb4srEa2u-wH&QuDH2!(D@_~ zEIX&w>Xl<;-dH{%7VoL;JKJ_}?oIl)A?1Yp0gwlFpQ5)%Da`jmNuhxI8NO z6b?vA!n<N0o*6b{H^UTlp=qNf(BD6I@{n{8 z^SkKXNvQwOJ_Xg0ySjAVGK{5*ZV&C-Bq26dK3=Ze=H(idPuFnJ-~RUZ=61Qk&8>#a zK$$XilWW`H&d-QpkxQtSfXHgxE#Ypzo#u68u#Uk_P>Rk=-DgPW(JdTB0vun(GTI_ zX=1BY*_sPc!ZTA5*mlNoL^e&wMc*`FXTCRvkP-sn3sVxF_=4~Lm)KfK3X!dffI7$r zw)N-ns=7vay%CYOiU6;2*RHT$DVNw41;u{_cH9b?l;`9V?WCVUE_hRrG*j)B@t)7m zh3*pGsu0m)HSKpeE6avNB@N~=TxZgeFs{z=z6ZC)gncUL+}Pj3lZMo8UvE;vY0 z?U3mC=_ntX+|p=uOiu4f$8N^V5IwAItGE88FALg>ztdPqr5fQQLxhJdS$LCN>OB8e zCfmJD5krCzLgP0CjMzcYqjcj?8ev~vR2jBnR1G)8$lj(OKwd30k%{3xQYnsyL`(VF6D4x7J3l8?LX%0t6E-qF+DRbH~JdM={Cw zmJ?}^UhjK_mOres&*YfH_MXLC8yXuyB>if0KVg2h3KKtl4$WvV=YVlwC}i|k50`%B z6dccJkn2)(Qd298dw$Ae*WOCON&ovy+no9J_cBGgtr4T7cxSPZbZ-L@nx7M|&|jGR zif(FNZ58{rQKqZ(4(9qD?CH%z4%vF!;z`;q23=)c|GpAUHZGxQW40jPk4A&Z4(zCt zr?}H%%G|*2b%;!a`+D=7?S3{RZZONPsk@@MJ~050HB&B&#NjX3p_9!@5IEw|lj|SG zK8X!sU+}9M+4X;&qHQIzT&~qyi#p};83Mx-blI)dlA0p-PfE32!T*g)BvLYBC20M9 zmRh#Dmdq`UVi`c+K0j1Z-`^q*2cGbj&S-D?7R{yttB7w;>)`LzKSI&m+#6Aq>U4SMW&V01i zoALS9A3LPkQvZbF5?;_3T^Joi_rB+1N2eU<4e{=R%X@BBX^UNFtd@RL!-vd&T^P<* zC&(?7O+E@wV!`Gt3;VF(l=p0;;4>)|O}BPni@5+*mYy$i6>26xuT+Bje78=eZ-646 z*7?fdsG(?Rm$I>y5TOs%8CG6=Wh*`E4Gy0Ey0(rl#z$p%Y#dB1w5%5nDCJ9^~3+XI6TY>-EoB;Xu*q5*CA$R_j-^Qf8vrMJ9a-p*X5` z?i}ki*!oE1ic2biPRRkD%Q=<=AYG^Jg+BTP6UVTE@7fSjOa~f6% z?g1uxBjj^qx#QW&j0ss8OdY#`?~1&CE6WDQFz8q_ZOYhD8+6_yk{&CG)>63=$FNTJ zA^hEHh3vl(#Dwp#@99sN9-R(E`Wc4T6ff#KaY5uh^t=p_?U9{WwJbL7G3WaTkdECX zMOLWc1j7V#6fvg6_@xo3Mn?Cifmw&BL+N=3MYcPG@hY2;;H^#9(=+;z?#^L1>>j*~ z&-p35Ui^Y+@=@3eCKEJ-w8ZBm^^3y?E+S{Rfi!p7UHPktNk!gXK-X&sB`BKlA`0aD z_QvE-_FtyB=|yX@^J5ADKvMT@Pe*9=6VgBsW$K|XH-pP^tQ0Va&^+&AnCtKgY zkF`5~`*NYFLo&zL#Y!yr$JT%LKbk8$MbJ85rvEP5I&Ru(<${8*u3bJfeaIuHfT(rs zVW?!y&L$Oilj^cn`a3TID2tpazr6_FoMts;B2iYGQepA$CMoFsvz3H|6;M6Sy;fmq zr&rv_7Ja8O)FGf}0Lw(=(r!A;KcZvv7#)Nb-XqDMbNTuCXmZOf^eouvx8ycMMKgFWOyergaO^{MGKyN<^7$K?)9`sv(4u6prJFTytM+o)$vR zV0jtM)*!~>F>hdo-zk*(@cDLgOcV?Ttid4soRcU~ntwBdiYCC8_D-GLQ58_l>#Ruw zKklZiQ-I!FKbD@IXD#cT+z&4URpyU7Q?b+I4shM2a)UWX{1B^SRwTJ{pAy##abu_l zN=B|*vyu#5-!zgF`BIqn`0;Jo>omt7Ks96EvcXk;RX~jd;6VOpzcO@H8>Cj)C%!B*lBn@Xr#>4CAg+_xqpee#Wpd<%m1@juo#2<_)H$pUu2Iv6rA zUtDndJM>OLBS-t`Ag0`)FNS>3_s9dD)^C5IS;Gtb_fe)K9mG5TUxx9b^32-1`BjyBZ5`6V1Zg0Q+_fpPCLbTz!&@U6Gf5!oO2!~Liu&3UJ93rLRzX0Ht=NC&0FxE`3H?p-}%r=SP zp8^t2WZ?1Lexq*_p4k@J!-T_PuL84gdtFHf2c7rrIJe-qhsQ5Y2qo#3OJQ26-Isz^ zEH*7*ELvHAGCQ@@Wyzbe@xKv=)~~PLnp%S9QmCmK#1F};hM(uh)4=q*Md?cnz<0Z? zc~FO^l*Eo$nGW~vwd~tcN{3b^2}iQbWrHfT4V&pYoJMRWE@1@IG@n1$2E})GGDN;B z1^6_J1~#ZAr7#welHyQvf=-X1r-7;FbMfd(tYR&L6X3fMd`;K>oP7yk&?Ebj1sMbe zalVk8R#tL~Hv3IzGc_TlL^SZ!oc1Q(udb2Ez^?Hxkg0I!DPlq6w4TR2tpy8Da<;5< z2~{v(;^&r;d@d)Y?a$XKoA(wX!m-jRbb5U!5WY{&<3avnTXGSY!$LdbF(#}%k$;&N z9wV;xZME~u@vib)s7YbLMioa6r^ISI?`Y(`&ITegSm|N3#UzJNoH_m%U$zqBNqe|`Gj|%I?ERk@Zz=q*gG0eW?i&pc z%%~fZUS07%Y)^Ok0{CK75TMwhTqfVJYdWE~JB_sCdu4iUhL&&Mi?nBHeO$RO*l+^q zQWRH#%mJ;V!8hT7=P!fb8~c`)&5~8QTyrf)cS6&Jru!d;+=dl;`AZl3Z45$8fPqh) zw6fLTC47@TA&Ncuhg>dx2F1D1Fz23fH|j(O3!o^ZJ$RyezvUd5bx)CsrU5cMvPjae zsjSd5M_N%HVn;O9@#9nCDJBQm7yQiZGg=ML-&p*xh@5w- zQee~~G%8Aa*U`gEsZ)5Q>!fY73QRRu^!dZ-x|oa+U1kd@zWwF?tj<~EQ$>&gRj1Ng zQy$5bVu;Svj1M`P6ZPMCqitDAS!UmufrV2aa?b3OkC2ZE2x|n)e!GZkPbYh2oZwz2 zEoJ%g+csR^7<09)H*UywKnIjtpvw0v-BOoPaYpe8C;iwB3hrW<7hB*1F`id^LQ7mP z#Tbvnr3;TW%XZ9b+P}3j^B@Lc25X0&W=HJ;9pf<8r(C~{N9F8cd7mo4RPH39;XU+d zOBEK%`855}h4+WN!ILY*AM|?POo5&)5DvFZwC|V3&HNBouf;wuBbRsZs|AKN-d6_V zDOdZOQ9>r*1n|ywBtU305dSNFJkfSAb!xe%+}QjMjjZZ~I{k5BMJcXJ-~MiWemxu? z)WPs&6I!c}4yBacDW?!vB^ARXD~MWO!cXm$&fx`s)+)S~ z7lH72jwm<@L-{7jRLlDPXJPp3Dx)y(8wdQ|hhW(QvSkrF|FcFBlb?MGtIkrS+zj~z zCN}tT#sC_cXgo&aZ2yNtw6t0R`|#Hx?-b_!mv=h#jrQO#YJB`-3vz*1h<-mHvvqq{ z5m4`v_5F6YCc=YD0c6fwpi(AuFT^ms{k09`04zsZ6 zHoSbwQWXvuwA;jwVTZ~|p?7vmT(`v79<}Zy6S93HyD~{4rlj)>5su&U!;6fL_wIEP zH=kZ9$_Jmnqzn|SdUr4`!|&D@rWGqtv~dPIGa53kC`W353SG`XhFl!l9EO<1m9C!M z%->({lF9cMMWq%Ev=8S5vtEV{{v9OvibftDWR6Q?*OUbfqjQdj>*&|7nklSYFdm{N zrPX$4+|u%k$Jr*IK6%OYUMz+YS&sZuGYyr}Fj~o7|t{Z`#Mh;a6^bdS$7<#F~eiLtdb5d0%u# zc*SE>ITHzakY^xaz~~fdXDDt2%RfKX_;<_f4St>a-^z;%@V0&Ej<7G%rQ8t6C7fiA zm(kqhTlp5$84l7vwQ~MEe5E;QhcYa}G|--UlDYp7RZi(mSH^NQ99XV_(XiJ!8$1Em^V?8e`IAXDrDw zDaJbFi);o^bYZT=kZ zCb(|;K&S_tt}gDK&ebVYMQU-?$~Qqu#S}L0JkvIs9bLgB#sJ)6L2NxoCxt&TFBLIq zEqO6pze4J77~Jq~j8x;&+n#g(Et32Knv~)O-b5=HIBf`!Qfl|uW}Pio>Y_Lh^byaL z5scdy0lRnY!&%pcB4C$jwB8$f=;49aDuj+$wivUif1fA^PP#kC&2Vk51)fZrw`zR9 zDq?swww+dUd$TSv=0kn;$jA(GO=$#`Sd^fD&_u})F?GklnO9h2-Uad1W@dfp%36Ce zo)VpQD@wSZvGZH>U3ELa?JHbsyTm5Yx98F@*)H@E2h_1@R%UO<jL2^ zCYNBTlEzzJKTOxVKW$a+1h(62pFb%k!;skL&64deS@m`4d0Jdex@hJ%1R#abp&XfJ zy;9kHqA@?ELoLg+@*mNVXKsP!2?IP;R5e!?ubNhq7%FhDMH!mwFSTO@=-t+rC6HfX zV$k->pJs}?uDdBFHogXDFpW3&z6?>j#fg9HyH*0{7q;R4WQrZ&Gvvx#lG@&r{|k0yrrX9J?;T;5oTj@vq>SW3pbU z?KHTVemV9W(R2X6cDRx}S}H0*iXRZr;hh^1^#|q8*5K+u+CIWrYvbPvj`E-2E6suu z6H2!0gfeI~d!XV1&)dPyWogRPW_$8b6Zey+pGCU}4VB zXYQy$X;vW5SWANZ0dJhMladsX{X<1Q;wE7#8@%LPp1HR+X$jNq?5oIYGh+psKDLHe zl+v;mI?3{?o+7m_+)(NX%!-D812^3yqG+T08%dOnzsE~r&!w#hLOSWx_Oezt31>gBum<6W?sVMWQ zZa9N>gbG?^xZ4dJ}El>isf94|@znBqS0{!+3Ut(pvu*E9!zST$V=- z%GT?gxn^dnKW912lU5*j}pUPD0^7snduRdU%a03N3G|(t3p7mY^27w{dSqDcz;q; zaAaijt(?5z#>JQ*2+R2$1#6a=2%ozqf+8JQRJ66{0;a8uP@Cz-6~XQpqH}1^jXg&O z_cc;$FZ+N%o8TEB`S@4MDNfR>ZTWkf?_ol%cg$FuU!}_Z7bH+aQ&s()9GWF1=Iu1N|R>M#EPhBn0dB>R} zrXePUS`H zmBK1P^Fw2l`$tC(^f$eGdrH*xuRyjK?pRmXV0TjUP_Gkt z573j5SBy!|l05vrvX3O0) zOIEdf97y>84>-9|k=E=;fSC*kFqdA>#&fcwpv5m#l-Aj6240*{P@T_ys9rI`!FI7p zwr8!QOcGp|04nN?!thmd{sn1n@!b(;-G@V}cPcNyL`EsqCZwVC)R$ zTw{B<_omyX=@#og4*dpPscvpI$_-Jy!vk%{Cz<{8yosmZQH!S%^K8y zIRo-%FEH)B>crN9iqbxx)->824Z|!kvQOVO@+!}WLwJ?;ud?|u#Ot_U))n#xtuoro zmPT`-}z+ptG|rKqJT= z<4tl6LB4_4DwSs6bjF?W=1$?<9AH?y2%*u~Os<4VW}G8%Oy9oTXCBF$34% zrAy#qXl$}r7qm->?MRd}NJe~6G49-Qu^$E3TbT4h*1&mn^dig@RsLzZO42Lm>|+Sl zZx~Xpj#&X@Uh4it3Qr9oYbt0GfQD6G{>U3vN6ygASR1AzEDqZ@#W=p8o$zST;oWQX z&GJQLyZ+nP{sXs-MxW=eZm4|w+ej)ex&;;7g>B2KB>8Nfo+^t^^0|5e`^>nvwl{93 zn{;f3deYTHb6)7VL3q-UgK9k@m;o09(rNg7*hsDjT5_H4GB>h%Phqw=ngQij37BB9 zW(u-=&m>0&nc_0Y_jz$tEvascZ^wl5G80;u*R0!ClX*xmjW=7(Vyn=IYe+8oSYKr^ zkd(cfiC=aLzvC%JOsG<7;ffn{UWYVti)6|4-@oaML#TiyS zt+dtC1QIYT8FC#@JQ!&{`AZDsqqz$nc-whqk+*6h@0v&+T$n|XBbxuH#1RDi4tAV<&pj+U9VIrR z=(6uOI*E7ZB43KDt2y(o(|bHcub6K7Hw&6Gec+EeOSXna*D|<6N*pm3Upn4i-p*6~ z-n~36X5*N!%-PHygN))Ar}L)N+HK6L-+_19XF=E{BI9qqILAaK{a1?9SZtW>9~tfj zFdiR_ehSw*Kae1L6RTZx-|f-C_fJR6KxSz+;TRo`iy2N1>=7cCVziyF^<3Dud@UHu z-Oen>c^7@-y|DtXs_6x;HCI56EE2~oJs)ZNM_*mG;e$#H`H5DR2cII`TOUEaq1}~3 zE@_v;Gge$(3jhF-1Tmkx@7@u1DJg{39UP$>{2CT%nou}IO&H3n@p+k8TZA7zcYCof=i8V7=gdcT4Srj&uH;=GxmUlXq za>Zg@$sFj5avX0($%6hNU@>Ot{wze%`t`PW^PWvo`MmXsjE7@&d5 zZjze0`xBZ0=P!u`0yJTDWo9EHq9aU`sSsnXcJ% zHK7i3+LxKIH|V?hx{`Gu!=-uu z*nT&_FO*sB$}hs3f)up#6Z10oSL%K=f#{iGA&R(2mhBN>>&45Ip)S{5e6fzUu21u4 z!GI3?``qm3(%MTsn%~oo2|b}&Xk}Vb_P!#FZ_d46`V1^UYBQ%1_r)|IB%XQyo_2&3 zD* z;d@PfwK4Sp_gwZNOha|ZMEms9rFz_G+Th7he3aH}`Q8@)dJ6N`r3JzB!lEA@HN0!k zrBO7xa>GW;$CJvg8@Scuy64)eZ&?0cM>FR$w!9bZYm&fGAH9BC#wz;I z!bes{-Pm4V2sQFHQN-%&?Cr}?=)DEGzk@qt%HMRET@u^^pJo%a-fUj^%N#tpJv?-{ zKHQYOy*Zpa|9Nm4+zBkHhUwdLU80!D6@D2`Xj^Pse7q1GA(8u$s(c`<1N+d0g(^{ zwuO5BJpIWnrgQz-KAr*X7otq{h3^ejiBJ6Jmj_Z~ah4!%fsD$pW(oJ?+oK;G?Ref= zx|6jE85s8xzPx^C@po5b{+!GI`mr-oUf^xwkA@Bu3c`TxA-Xs`ZfRgaG*75T7a)yH z$$!(2#NOUaj~b$O&ONMZ`Yqfc^ah*j2G^sbxA#U!GH-d>Eo!>OG9C9Nq3*m*^AWt6 zSD^Zzs=gOv#!)+a3EXmruDp9lNcH?w()SsRX;x^WiA&hv$+LL6pHokiAI)j$OqL(G z@qGXEmXTv_N2pXcqxu~`7gX5HWkZ}dJ-mgDKDt8%rPt7iyf>-3i4 zrOpvG*AD--@Q0K}UU*zxzJF~GL$`^RDE{3wlck2?qHnSmm->?HH<{%5kUm$>TaR(~ zw%QSf?y0QHNmPN!VVFNo>eg8ElZ+7`Dtk|=ZEL)R2-yy5=eJa5AVkUe0-9ovJ@}u=~Oa~eNJf(SLrX!k;8nzh0J1^iaB`XabubR;zBQ#E`TLDeC zGKC)okR>A&=lmpnsg4Zh#Y}!H^v1h2gq@r~2Vs3CF0v6ytg2k_i-aQE@3^cB5f*X_ zhN+ZJ9`GBbrIFZgcAmTqKp>0GmYQXuHSLqSCYf?_mRQ< zc?=l_bwc(#m^;#rhrLs#ixHIMe)!UJC(p>C(`2G*4NcVVYfcPA$|^eGe^%${nLgeVYN!_(EIg*lR=gvIp83+ z!|X5lV9=K-T8yqnyaM#D2bJ6N?CfxbDl6D@Q#;1PPPr9~-@ z@5XLb*<);sjpMUM5z?`>HyW$@2Uam#UA%9$>28+MuqE*egF;z3O2 zS6OK$sVl;#@O5Di=>$tR`vL=cI3Zd%#tl-tZt^SvW$awu1oNS^oCe^;) zB23NHvYlkk7>^kJ7ln-yEvAby(x8}s_UG2O|IFIlFFca@zb%VIf`!Q(;6%EAe|~ zt?!Yi_N5i&a@0TWY>^+k{tfOMxIDCUw|c*37H#sVFM(C8Xjc@qEH$`5;9ML)^`XYG zU`=fK1&60~Z`{18p<%b{lkZu=xK50%KT!pBmQY+nXt-C*RQs#K|29Q4^0m+$9{77G zE8ork4CJ6=*iqf{Pea|jaE8(6o!uj!Vw3n$8G^TNdyz@S^&7 zeEUV1fXvxRrj;LV<({l1N)fnRp6eOnvwvQgr$Z&|vsN^Z)r*FT~w zmnz0lA_ie}Z=X{3RW}GYt?t;8^e+U+f8ZSWc!jK9?6zlIYGF?QFDKy{+k2O*T@m;f z^x^KDxSw5CSw;6|UB}Ozza;3x)4BRCgBKNlPTl0QhZ?IRT%@oElTnCNR@tbl)IX_# zC=?wprYn$Qi~DQZm8gD&HoDwWYPqLBAt27z5PI+k{h%Op2SulisbaXaT}?Rcf;qL4 zVYmg)oT*odfklYmnb&^`^$lKjB%+dwridBGH>}h$%z+auJrp0< z#OEdU)uQ6({_T>By%DI6E_oN4FL@G$sQGYdy+cs~#ZKsK$Pq_;tdSs_PEiS&bu25B zF|okJk_j@Y@085U#PyE~S4E^X~kbw9(fbQ;-fDYyxE6;+({NH|ywi|!8HwoWtysZ82Z8p{{Xv!O<- zHT}1yLO5i1+~YF!U!X|q>ToAvPwQ@gy0Xx--?i7|a0F)xrLOMh(J?+3U@70rtscRK zc%np>ntJ^QXZl=$TLq#WJNHZOcL7-4@9aOm=10s(fqK09e!@ZK`d!&K?L~bo<$;%t zRRg;wc@TQnIXgcCW<|9GuJ@W{0h>QEzA={ofy77!CrqDoe&*18c?u3?5XxEL@w}m; zs@~bM&V%(xHb&R;)(`q6OC~?sVrmU?lA5$zB^m@&JX3P;kae@6fbx6^lRin#st>kL7WFkPqvSEJSm;&D*FO-Up~jJa9jfUR@)>u zQj(7=P*}Z9I{7+c+Bv1a$H~OaIpN!x5LhA)bME|^$YFMvbGyPpVi$gv$A z6+Nn{mP+!Xw|L}ULTbP0UYk4&S9S7@guf-J>SJij>8Plr@0b3k(@rpfpbGUMoklOBWoC}@BFUy;ZLJKbAT{>L z0iA>m2h*sChvb-)i{B+wLr*^NsEC1_(oz(3_!d%)o#Ep40 zNp!xo>o|S}b?nn3<9B9DJRXTV@#y$NE{}$vDRtv0uMgsGp3kj2wP{vD`0fmO1Qn)k zA>9~+sg!$lpHmKC6C=ItSs$bZ2Ev8#=i}yNqCvGYtVMB}e1C1hEpqnK{R_8OyU*H& zUm!LJKU*-?K{oQmz{Q;LGraH>AsHUk&Z#F1oOEjys@7*9WsbPaz2OimoRK3(vGAcc z%h!gnaDg!YcuO1_u2R6GW#&zNSt&~}Lw&)ry?dY21E3@-(Cv$vqW&Pl0r{qZu&IJTg-F<6Qao{#R&}q!?qS z2@uwqNpZAH2Co!%N#EWc+8X?W9FrH_ETTZ=M|UF{d|QqMZhB&gd`f6iWOGQa;KgW? z$Du8U_$hY%fx({s_TBvm;s-~W=*j|se=`-=!0pcPU003!}fT%Sk#AMQ3digNsp z6Ah+$c^|dzS5e{SM^~>j*ZiAm66sP>a(`E9rcYa2BVVSj-igDLh5tD<(Y(%fwB|1P z-{9?NvTfnDqOUL8Lpq$*RLW%d>zz)j?w%<`Od^7w9T8f`I$88}C4d+H3MY|EUasiK zu|8}pTojXGe+M=CyR#AL6Z0p9NHPt_D;I4r@}@#uxp^*e7MS|Affvz zzK*QY+dZMX(Z5kGCp$Y=q^6h9SJ^h6bpnQTlsm2Zedh85A=RNuvriuO7zgQNoi@8@ zd6bK|+C)tq2B{Dedf@ZH9*by$S(!P&aOPF$FRhq>yvH0v^JoRy)$6LEbkBU}hkv0a zQ4zpmbuODREXABMyKl&b*>v2cyilc*rUv{VKG$bkZ16WLJ)jYUh zp!Q?CKl0v))A=;(jj8EM4^iexgTIb@3Y~Q*-@8{w0~nKK@0q?_<>~{y_V=zx0fuoSRgU-QaFDG#%iODv~XE` z0PR(*cp@xLxder&>A1o(Jx_PBY)_rxRWp`VFxw^cJExT8? zcK2o5I4hV)eBq|IW3{vIYMLarVas9Th;Ad(>X|y8R$G%-rQv|eop3YmZt;K zuIj?=^lzWxUa*!Ln3R)eFnZD!9emcKD;uSl{$@9E4YeJ8y8gKSKLG?Hgkm+}*SF1J z`G(ZVZ&2KYqm!g28EGzfFtxx(*%}4<9PGg5Nte8iD<$vK_bMo-nTsU4)CL*p_wH^~ z#3=cLl(i8Zf7-FS^6YHN5q-aYEP-yr^usN(qDt*p31f>(OGE~fZjhYl`#JyXQ?s_= zrx!XnF=8fiL?*1vH@j=)m^PT*d8q z2JmI6x}#6FYMA*178;$MiQ@_^Qkh%GP}_ga3ac>qAM zj;m+zx&E03wKh-#UnlAPZ7|e*5^8fYo@TW9Xylpn{%aiy**O^4=qH*C-WkI2mWt!- zLfnfsL%|a_(OkOUG*W$RDQP>dKX{D@<7b z{oBDm35Kxk9CuRE4vB;xE%yv~zio1U8h8i-nxml^4yzPgeI!t_0Dm z{7_s`%N`n}Bqv?>3w#5e`ExOnj|^7fBEu1r!hc?BNkS`Bk!E(abgIsjJ`sZch3VsWEg0KYAmGihYbCF=( z)iw4UBv917H3N;}8|ZjB#BtYWWUd)Pd;JJz`r?-&fJY(`(XZi4hHw|9(*I&jJN14wR960482GB%$g9`%* z9&H3MpC556Cs-QF6GL>}d2C9sFL+cJV~q~FUntVmnCPYuWm47W)5hw*5IN9myJx_y zPCzRxHYy%Y5bTtk@&<_U727tZjR>I{spa=AmN4F6_b2G3Wc|z>&Dg%3GGyFY&SwuI zSG{vL)w(EsMjRS*9cy5cWI`fEs%$_SDH{aA?y+G805X)J0Ydj(i{4={ zlW`@(fz@GHp|FDG4C#&{V5V|%78?!D_#bm<`&XUoMWK!t9zX3jr*`XUMBv607xupx ze}W%5e;AI(Yq6QruW(i@QD?mkIEDvGW;>DY9Av*riw&GeQTT_$g~~5eTYkN3O{e}) z-HhUb2)?F+OTgdmL%A5&UTgweNa!_bW0CxZOCkDiAb}rAtl%>0B#7DB^@yz>U82PXX{r2=K#ApQJLp$ZmfK%Xd-%&i+htQq z$+%3o6)7cz1}Y*R?+Dy0$bC6aY(G?({`iq(sS;qI!v$AmTJQgl{enIe{$LZ`i7Gf4 zGU%R!A8Ou~g_=m}9n*{15zFq5!SMsisCK& z%Y9F`KD5lFX}86r_%Sm5n?ZbF$2x;2lmWNdcUMOmi!1w+s-##WUXTBoF~BVN-{RBy z$;g*z-rxC8T9rx4TOtC20Q&c1Mmb?0<|m5ZKf3^4AVW-e_`KDqay;L7_ucOmuHsWh z%%h#W2&MnF3gYTkx^3mYDIZb-U^B;0RASvqi}CsW9L?8d>_-3G`T_Fc@6;#vi}#pr z0n0@0-B1|eiNSm;bN)<@9nAlE5;os8M*}Fu?6pR@94TdHzDMi5h5puQ?ttaN+ib_B zG?lBGtr@f=^!AZmmO)eDfu)50qV+!t`HrLBCC*m~lIYSkQI9@g>xnH+TE|iT5$$7F zWiMeYZ%m!dn_R7jl-rW8*NNdPwL49Ro9d=ejz~W41_h4vU5@DBZl0(c)|Y zOa%xH%UevtbsppO^GuB{`;Ng^q|7F1{6!4cr?9^BCu?-$_s+_q6KVI_c;Obde)vB0 zkPL%q8MmO;H>TD>q}f&nKEEF?Uxqm!OrwJ2I4hV1nVlW_sF*I%w|-t!U^9>T0VZ~` zzxOv&34yfaSQx|AOi|lnK@LtUPx_eo6Nfg~Nk+cF&GwIfLk$aLuPV^Wd21*rBK*OC z&LCc|dVMbuQ|%HV8piYYzFVhC7}e3rV_wW2U4<)Gjs%bkyl&C&cdYPYD~5a=5_*6RAsS-%tc(Wi|g?-yc-L~;9P zn*foqzG{0}@w+u^!6&hwyU^U~9G>IPRNIL+IpS}{fBVj6&?QMk(4`b&akzFF@M2cM zSyp+mNEcPmW28kH(%vbopHkY!4GJDIElcE7PB@OHpnXH z04=|AHs70Q3Zww28gte9A`c^VJGLnZs#NrmdOq{vCoZnfMzUFaK%?bP5C(I}5&A+c zTt~|Dw34}W8w_936X*FTFEl*YQ_PdRH|1*hpXi8Cct8F9Ox+j~I~(U-+wm*a2W_k3nOfn#~w z7ieS!i%FPXn|zIC4XpOPc%lB-*B1u~vnK(^cR!KASH_uPT;yoL@A!CJ`&Hf&F|rz?hGxa3`?Y_AiQl2_&IUrT5D@C zBYKug(1$~mXIqrJczJtb_bax~{!-zWQIiv1iSvrr+;Yf#tXF95RSs%etOek1k|7aCYYhaBy2A{pDfE30RIe)hA3H?pV z&IS5qhi&+)jH&*7h%;?-;_Vdr8lX3Dt4;xkE6ydXQe|tyKe%rsVwodC%>I2oq<~G<| zSWzEYbhH?fp-3EYMcylaFMRy_3!Sq&N(XSsjGu`jHcw|Bt!j7&%XzNQlI;yhiQO9Pp?AFcpG8(-%~t04r3fb zj~0JH18%gFWzM)ZVbQg?qp4(isU9nw#Dz%j%NE=-hn=8`N4%yI}GB43b3p z@R$ZXfGsahe;f2qf!-~)oFlzZg;cfXmMQ_k2*r`PsIu$ZpQN6xlcy23eH zju|Pp4Z}5bSmyY6=3Q-Or9%W~8hyS5iVEyKFeRC106M;rk|7mlGK?=}Vki*rojV-C zl;)kh@su$F;9QFf&C`?DRujA`LLv8k^s?1%*?auT0kS9*plZPpCDM*ooeBfvL^@U(=R<+KH!0wJ-{y#!26jz4ueTK6z%4dcjio1=J;T#W-l%sXF|J zItG-Cd580Z7T=Bz94h{k-P03FRW?CqQyg%3LdRKRw}!rBvMG;vNozN!E}XavWsFPG zn>!CDTiU8dq1?ndSoS*Kuui52V;bUZ;&`osL+tv2CVCd$D`!6-`+u^V-t?O$(E$ z#L5d!9kl_VBb-#yNz}oZe$uy*CzKO;hgZ@E+uNc{#ag1w7ZKEu_X}L%E|&hH^tvhL z_PVfaJm+HVBqLQiWRvyB2zD~sRB&wIPOeKXehVehiTKMDJ7<%KmTkUvYE+^TlBCkP za{r_b&?$wmZDd3YA1Ung`Oe2?Bm;&5%JpGO2v0~Jf2!jK&}DwcdG*nHb8=kfZDDKH zd<5+hr0VjI5TY^7fXlC&nVkPP@k`{u1u33~&?fo@HIKpK2AV2V^XQ2l^J<6E#JYHUErqK6e3&|42H(682-|~hA+ryyd zBwqLkEm>9|9c~d1@9B0E@?%`TX17@AiE_5@+$(~i7nPeD_mbmToimq)cnm!~&YYH( z|9g52)C8Jcw_ayJHe#ZU@c~UC;&7;9k-k%&T*qW$qXb_!AM-qA?8#bJcW&&#BgeB0 zmo7fE?L;RV`!=dOUj>k8C}^ZeZWyv>v^1`vso_b>E1z?8oafq#)1TGv0%U6qEGGXw zPPo|j;Z1dClk%9~5GGGhLaw7Q%-h|;*`(d2SupyZvrly>apgtAoI%EEcFr!jzX3zX zqKuFwY{f#hL=DsGZnAMpd9r%4F|+g&~)VfHy_dML%IHi}~P4)Pt} zG85&|fvF-w?A`5s(NnhV!t&3l0oHVWs^8UlZV8L4-N|gpWc^0F7Jt4?wIX}>ea)6p z8`!*JN-I>iFREoXr_x|Lqz}L9uen1WQFpN)dUWcrMiWm<2+P+bh15N*DK`oVZV^J<)fWvSBu{YhOW!l={j47OZDqRg-|vgJRVw*KlD5-IE(L?EQF6p=z}4IrWsl z2#ri-1duI18DF%$A9A((z0>a$4S;MqY|)6Y&jkAN2sUd5AfIw$ATX!t`l|wZ%mK{1 zh~mQis6b^Sah8?DaF9ygLgJiIA83I|uD4&+d{5H9aB@{*R{VR{6-ScFbE_8zw53e4 z!Hw=ZV9R`kQWEgbN&!r-G$b65emvDbZ+@@1pY5Vr3E>aF#v3`*`RK+RzU~amk$x8L zLqJ3l@s7tQS+AbOXl4*-n2~ALn#wFy0XJLhWQM5<|AMdLsKlq_!uwarxk-;Lliw;HCViRvhjs&?5a}so><8{3gMH)nfts?Rd{c% z)CpfR;(I?sPOP7$W8&EF%N+*If66!nB$dgD!EX(UoCixq=Kn}Ev`tk$4fkoP{7fKa zR=r|7J?`ZGSueoh(<^0rhoh~j;fjK}I(Y{YCfqaL28%Lqgm`}?rm{j5Eh7l>yRY`# z8Xq(>-s;y97}>GdQ9FAYeL0DY?mqXUB3~MLPasZVk}@@Ja`>&a{WQ zgfgt1yQWgU)$ZuC1p^{3HLwv;=GhM0G@?qA=l_JnY>I?-oi* zb#^>oFdvcr;>22St}2Fyn#|m-+C<2XAMDPJ5Xa(DvL__;*0IS5b!L${-C3kEpgEdK zoUrAu>)=b>#e8gBU7l#(fE({ZoE83hF%RIvG@Tch>&7A?c(9bmqm^8z0o8F;EvSuq zxND*|)!*|ysSXTS;@hy%eM0~35knyB`~WFScaIokpsyMA#byJ|p}%;|0)G06i-NUH z&so7I0nmN;0Xd0D??kkP`if=r5zKH%r{X_Ow04MnM^e|pWFJXoN4 zAC>>9YP8%Jh-KDBFiOyoT^?XwoX$_HbtHOBP2Ac2d(I_N-8Nz2TLA`{@B~TEeEvfs zhJgL?hoc`2BwY2cnX72c-Op{~gH&RXH7l!x%9CU{PoEcQhKl*%Y=a@0Yee%Hct|Vr z(iFQee~v+_jL1zJj-gy%_!I$W>pQ~i2-jtHGc2xWqdTXmgUOXvXL5+&i+1;um0_MO zOV`E0HTKjm5gr@7Y2^_ZFKMk`0G*T4h)$~eA)FC7@;u);z*Kogs`IBXu-B0|R*CjC ziAU4AfhKo5Fy?v0!SFb=9&9Yg4UJFYuTW^p$(G=N>T+UOx?z=0nHevh39TKn{_m5PU*3(~%36!Z= zpfg>d0b}fkMGs6ntS+N7%cffa=1h_aP~lFY2Y9&7Zd8xC3l2g*DfFABFP@RbSZe1? zjv8GUK;`MVS>t8jltJ>%GO!g7T+ysu{FcUGZuc| zYV%1x%Q!N-frlN+-lk^N!Z+=l+ESb*f1O%hnpQJRt9yKvg=>*=b%vk4x=Na#`tb&E z88?UMGJ|LZc2U3|c=IehuoI@Rx06Rm+$n(89rW%W8BXc>Wv4usJY?eoH#L1W6UMja`_8q6Vqx+h-xZF;F?~7L-AG!Z}~I&&hgUE)j0kMA78Ey5zfBu<1DrL z*ZuX3RQ}_T#hN;eu@1WGo_qfnBOOC1kLqAR#;dD@bpw&ATnLit_@pdXK;#plr14?| zC!j`+*(jtc)|LVB5cu!?18edXUu{QN>5`um>Wl__BB%of?IBsJ>vjv-g-lp$?tX{; z=%~Y;aoeu@&vg)tf!xVend`Gh*5rQ}t0xg1qy1apSyq^*om_tvBp4tnwL?zsFp5%v zDi=F41_D59a7akYKK(O&nFJ9+K>oa@(jW|`n!}2CzunFT2o+n+$}3b7B{DrHdP0wE z+^GMZAGb)1CZ>W*vy2J;5P80X9-?n8{Z>UONy+Iwjdb$o|3b1Sz`aeoj7*1&{uJ73 z>#2^~ip7u_LBz+9PS}Sw7JAKNZ_IT(8AgAS!yGm3O2XTUSOFZ%Sr!HF{4|Uur#*xx)_*R2Fr*b_0i*DLy=Sz5Ar zW3vs2w2o@ncLUhIKC8mjf$T31MH$=y0mcBS@Dd!*`HGZi5|=hLL4;sB!A?0h@}py4 z;wQB?C8K^{WdrAD44^Ryq;IrOys=4;7hZ*xS@IB?4!f$5r#yf-+QYs_b3TlIL8%?u0jOU**d@fW|U7wJqPzFHu9e z0vsXaDc))LYfz~ATwht}apa{GmKC=VzgKapUF2zFVB+<@A&NK4aFdCMH;Cm&z<_?T z$4==S|MNDM1I_fm<#?rC&_a$~k2XbxuKN`R+`|8b+D!I`HWe;VWqLXiPXRKogSog zMFIDv>PYYiE8vr8rXG@-NE`ZhCo*a^V%Am<5=~*U64Yau+M;F6!W&_Gql|oWKA+(~ z67UQBXV4JiLUque;P$SW7cq{CeDXy_x&4AkT-!jLet|ST0;F}6sInO_NKv9f;rCU^ zAqey|-mq56mjW8i`{W#48u!`cOGrE6*LPl=O!ig^UKG;_@ws%m%E`gMdwty}M}xlE zLHFaeJ(eo+03dPjecSl`cW+EnlrrBwosiovC|!r4GF*F=6n%v!jRj{;V z?XSWBQs+9?+A1{zrb#-e?{%_N?+lqzf@KM-j8KK=kXH5zyeDMRomGOBL%8LA376H% zfu6f)N=bZqt72kX$Cl=^%uFs!_l*-(ZNtzusd_jbFYl22Va%oe`((;*!LYW(97E|9r4YJZ%~;Wo#}d8239_#Bt27sZpmg+q8~mbbkeyEGGKIuJ zo(yx{s)s!E`$mII6hlSL$IKmhv)E7v^>jJex#!+1ZqHtCmdp(c7*MS`>!p7RjErk+ z(^LH+A>Zu6@60WnhJ2ZO{99ZKPtKk&TKD>{;_!NF0g?}jvAC}$qM?naT)-o&li?n{ ztfQytgA-~kqEuKS6ofajnoiiy?!CB>!64*by)`ETs3rSp9^=wAZAr@SyC^ze@d-n* zxQVPjpa)b93w%f$?z9~{*H8`FgvO`VBUh>#YI_?^ySz+ON8jm=`zrd%hhvpl1dDm+ zF-OTeu(q=B82-Wjvm$e?a)@21RZQ$qqFVNvGl0x>9&RU${ciqB?LFlej+lW6uhM*|bQ-+ zz+H62&ni3$-b}0&dHl;GTyFRuXyY3+0v^6HKSrtlKL-wbar2RZP*9w*pmQqSWV(57 zoKPtZ>(Y#EU(>WWB18Mv=#zq%!+g}u>EWH1XjAzoiqj11!6e|zmwp}t3+Qx(^1El+ zp{PYj0bfPX)?I@cMjWE^mvth1kjr(IEyDq&1!>1Xg-P5kPG=haq`NI4H0rnnriJOc ziPYQBy|Cs_PBwo51%wN!t)+Sf4IS{3VV!Z4^u%j&L-D*9Y{krfojm1#i)}k-N4s`V z(|>;jCA}ZPF3$witrrF#JkbtGZ6WHKuhr&$rRiHr-HD-ti7SiGb5T#kEzf+aO&zG3 z8<;i}cE}C-%==D%0Bv>Uh<-ga`-os#=q?(#?Bpnm*)S4u6s0Ew=l7nS^ryw|2PKYA zd=7Hn1Z#9WP{zq_|H&n}EcJQ=CQm5y_rUg~{>=h#>HypEhwE6eC2JjAebz6M`Hk*g zbZ0IUB={9^nk5rKAM|>8%VLPH2i(}Uoy}jo0UTZ++B7hbLfIpHuwR z(=MD|BaGz#;l6l=8}=Kc`qhEd$uZ4r{Fm1pSLUjcp~h@fb%PykB@i(c!F5xk6%`@< zzBUxEw|8*r)4MN9U57t^lEKfNvg(@4DukJis0C`t>MXPB%42c$$8r+)YnsCWB~az> zA`v(Z&r6MWEEp$~!cdYgGY_Sj0wNu!^W>kujQSh(dwXQW3s@(1g7*aF2KcFDhmE3} z0OrGa99T zwsd?#X2GT4)q!b~$Nj$m2j~}Pyd6r7oBfSMd(2m&thdl7;v0KNs%{Z}idW{Na$JLT ziQ>6We?})Yh&Xz z&z;4weDXSHQ=cxa`{y3hOy10K&|8O1> zSD~s<$7>Uc6$vg(vSk7YVxX@0LHw3`zN7>2Zv7E?|GXiOfSg;T!OZ{#p@sepV}S02`QnB*x>d9s}Xoa&J$5O*IdWF1&Q_75af z0-wM+_sOG|VcN)3@%DSMaAjI;OblTrj$yaxqG;k<%y%VPE~e;K?C{C~8*Qm<=kS{* z*_j=2`SaodTu&Q2-#RiP9zjSAEh2=?%VGJ1X_e2z7dj*K@eqPkcrnyvAr}QA*(LbW z1u%#N8|3Wu@=2QuadaF#HfJjfVv&f=`b}T(Uu$BYfW+$uw=3YZ&f%J4Dtk<`;-18G z0l?EMk;d7!bL;@Qfxs|pPxF%`*AgT`)Wencj98xotPdQQgs&x-sFnR<2My%TqnfBa zF){IcF@vdALeHJh4DJY^ieOSAo#y2&M)PkQ2I_VPdRIyO=Q+93J0R_(ZBPmEFJ4Td zjKSEX?NfH$S}z%w-CIM)E>blc+dlmIMKOjzPaftkzjU?_D4T6>zAhHm8%N3k3|FY^ zjy|=YInPU@RVuaGu6ck3Glb%E{VvZH3yO+x5_-+tefP$S^-^H#zuJ8?8Tqz+O`!}N zAlZYgXlLh1{F^^J1=l-RgcmR&<$W!YM6gL@oR1lz%#bz}8WGwlyyo?Vx@U%=;}bu> zOA=m8#|SeL%oZ(jukE37d(*CPjL`Cn^8N2KFGf|}5Ip_Q;l?X~xP&g8w0;%iA`+J%DYQ`5aNi!oIPCoel{roIqW^SDR3F>*ndj=o+1uJ2MJ!1b<=(J?9F z@wqbea&hSy)_Uvr7~kjmpOOxbR`*gp&jJbnj9Nd%UXO0k7@3f>5487%l(L6eW`Tnx7MGhF+zMCDfHyxnMn2AzYV!kNCB}&c(RqHO!r?gJvrpz>RjRM6K*kr2<6T-#fTu;*H zQuOL`9Q6t2h2k3fK&6a;80GFfP%^QEp!9Gg<>{Z5(>vrSbv>bd@-dRoA3ZvMMqNQ% zr~I#@uP5!iTDs3P2RL!D-9{;VL*jZ!`sRUdhaEBG{=+pe_QS;XLl$)e6OJ#{9Rd_K zBl#rcZ^%rU>IeFj9@<3hW;%^E#Sy(9xYf^Dp^xcO5d|h^q zX^S>t;Uml~4u2VSgORWh#&oi*{u_@$q>_bS$IPF>0#VBeR)qJ_^Cbn#Gm}b>uld@g zm%%n&eEM%W*$X<_PC^(9J3jgK$dn``c;)7Hs?;MGS(D~3s)O;UnQZBPrb$C_hr5y^ zs#U4UrLdRhWSnDi?Gpj0(2}7K4*_wXMedVwp=#Gk6Tx4u)6)pU2hh0DM`0;aQBDp8 z#RvdEdWI|>St+<5V};{9=b9_}Kc%Be^n*`w>r(+Fp)J`mcM#O4aC2FT9dU`7T@|9! z-Cr$E8bS9mS6#iLvJ$4~Uy}Il&dDr;P59nuTL&xH=1eON>(-MxqA1hY#`}MMI@qb#vJ{6*8Gf5pl{TpL>N2Ul}{rfS~ zl{e|UC9y47p*>1WM2LucbXfi$?K__Jn0d6fHz$1MsdxyU^juGWo03{)-{4Q-ImOD{XMn4l@6bRWei3_<&v!#rgI6V*-m|16B@n*NL z^)gBPhv0owduRXGkPD^GqKRWO4?eiJ$7%k4zbGnJa`hDU z_}v56$Z&}|p&Z90gF$e8#xbzP(_gLSSX#bnu{60XkA2w$?BVbA+AOS`yloHJ_W{{iVnrn+kGXENWtTRiTfw0}fE?qPtMc-8pnub^W8ATh zb-i$PRN-v#z5PSnOdc%F%HggKT!kn1TiE?{nHewn@AbCB=ZuNYp)cl-{Ui$GvB~U$5s&SZ$6< zqW5#y9G*%qT_^ddAy25m+3uhaUtgO2Lo-S@bDjA%x7cEJWDRY)f*9_YoV~?F-oPTn znCTtqT|;@aYzrncbaNDHwTdh+&P8&4=T(R5BF;qDF>6MdPcex6XjFf%r1RS#gYXh7 zz(S|-pch|LZg!f5l{njkSII2F@R@Y{dZt)kQLaI8Ad+rdKq331>{4<&*p5E_c zfoy|QFvL*hf>r-F2VCwm3vANjix>|;JZMC0W_i!sYsYY_=onQ#?oin^NuPJ5FYVb* zp|UIi9eUTBdQsLJn2wy~OWV{Kq-R9Y#Xu=#ZwvZkjDynJnk*jQgZM0#6tQPO)skZ6 zCLf%em6R-Fg=-pQp?tco<>!~7sLDwdMW~@WcBqdi+1~p5mhAi1^*0hyl+@%b#}TQZ ztBb5l9PP~p3yunaBZ4w%dt_3Dqj&+~;nfl1Y zzo^SjG32(3DFd&?c0;1B0A+gl2JWi8haTKNrfS90+COm<&hRYQEy2?ACp8TJKs?*Z zHpnmJqynG(VVhRWsjb4LNd~s)Qq;(C%48q&PLbQWiCe!5g;>$3!Lv!Bev@(GoOijKW&CZvm30E9X^Nu_9Z%8L!`KvJ7I^t73Ze>MPk zF#sdsO|BXu@{3h*-BMpj^wJyUBP4!>N8eLaHh=L4rSx#_Y40;Id`T_fd7u*M7I)wg z;?@7?W1b+04KnQ6^;ObiHHi<@t#-s6a$9h0f*=M9BfS~_ob(w+;iM|69sm^vxRie zx7)z8nLi$v59-isUk1cC5dCio4SjZ{HDxpWwI9IJW!(d%QWt-GY0iA>IT#ybdW3X$ zV=Ki8RB34*60mh~Y?A^tzJ3C_n-WYs89}Ap#|~jQftsValh1uBp=;vCflV*fz8P6M zJ7-e%a#jddV}?yVKxxdZT_mSy8a-UP1_rR`1)!-2z;6oT!7)-8Y5nxd5&MGp=S{mi zm=`2H@nX&&CL$hAvXTnc`*RG6)`aZ@jV_Xg0ALJDw@bQJnEbIt!S=VpN^1i0FGkmN z_f=Ef&}9xwn~F~Rl)56L)Toe`MavuOrAu~(HibW`9sYLb{= zRoKzj4ixzHWG`rjn!F<@L9xpmiwW3HkhhigjPD_Axp6K$?L{lxI}FSSIdiFg`TD4k zXVtfGJ%YpnSTi>)m-fqwQ*dtr&j}P5r(E&UD|hw6zr{9Ai6m~>6)smMF+Z9{y8(D! zW_Iyn!j-tqx0VoajNN*Rboc5p&d$4AR!<_6VNK*{?3WFbwQUE03|x6B)G8$e(&4ar zLxKcK7W<=Ckd<>*p>B|_goA1v2135Fp`#&032wfer=Mhgf8ZyQPHvJ6b@#<;pHKY_ z41nJ!B<)G_EHLI(ne*c(B?bvZRnf7Rglw3aBO$~^exIWjJrLOIT+8XejDpqId$LSc zfvY$Q5H}3D^g7|OUd?3I*0Sn$jO|WX!T+)zrR2p~R}B30c=18*oFbjZ;{Cp=|44DK zX5zsWJ^7^g6&?X9<}|`0>z>P!qOq}dUn-4$%EaB}z@o*p9hYiS+!oEf9Slq%PhkLLv4G z;ET!Al)q!@hEWAhyNheU3~`C0naNirHlYUhslw)lE)A^BfeLE|#*u~T1>kuq9+KM9 zj?h*bpK6lFmf?T^_wPEF<9IOBYc|7m5wI|cicd9~R8}q55LH%o% z3$Ci%g1O@&Lao}(y(_mtB(7E^HA+U}mV*7#v-BzhD`B~iIQJ~Em56LvR)c#35mg2Y z1f&o~Ux`rqtTcOZ`U&`@8L7|etQVecxN!kPMAzo12E>v@%is3eF2ejyB9K?v~Q z^YEGJe~0b$tEK8uqf%=ph_(XKJ^7Ka}Hx~<||g8?OdE?Nv6&-QM=Ry!nZ{Cgph8E2(_cDx9I;CqZInlx9(Kz zZ6iMpjhn;wsOIw<%=%(ZJ{v)Zk<2YZ#<4EEoTED9i$rJ$5IN*S{p9F6gYqlH1_8+6qJa@AZ~{lY6>Bw$BFsW z@DQLQJ7jY}2;yb11*#}WMyeZNCA{>Vd|y+s zX(-u-XaJ=^>o*QzR_lsf&$$Kz{x#sW2(|P_MeSRpqXx;JO1p8iY>lRVm!m}&{=?H4 z3*f4PuRv>)558lMO}pZ`3ST zaIO7Qf;z=dDWo4AvV+S%kNs@2)!l>wzUJqYGu&MbfuSQoxwyF-B~7q^4wF8Kb_=_Rgdyn+bg$=mJMlp+OOlLRQ}X)*Nh*P*_adDZ z{l*mqWFzov2zzKx+-?_}T8L4yP~ejOkCW_uE8kp}zxG^8k8T#}0%t+F@Kw!AGT@ve z4WJz4$f;o&wWC)#k{%XTW)UE?nL?Jjw|dfr8QoG)3zIc~{0qO#h(#J{!Vi|62}<^Q zv|d2y#7DV2*;C?dfwO;O_st?>AK-Aw4mkvq&xx1c)FGgI6iLoJ*f4A{6;Z#-z@HYI zXaL1L$Rh|^r!_~UZM>!*JSSQ4O!s)lcGs*X9qM8TMRK zGU#CDsg}Iz^G1&G+Sh7h$$)K7=;&}r2J}&9OP|iL zr;r)hpmH>NH0a-#vIXf~r}+HTTn{i;I3ICg5IsEEWtt4Gh|7T11@O|(u4N-9yXL0V zJ5+%2y_6Qg-2;7Jw43`K!r1Ux9f0F&dQcUL>k{aiL%WR{ zI0$83NKw&pkIR7Kh*1bMA~a&8XJ2NzaU{=66mP}eSoT`S`HIw3`v|ZC$z8nus&(Kp zP(JF4tsluF=3X(oOvbi;2m)BtVf&h@`HH86pazp*Tm821(ib^fqdV z=wl#21vYrcFyF6Vug;kF26o-51!^4!k+sCHKH_1l7=Y!r>~O9rYgb?la<1A=mx9i& z1AApyocrWMvO|HibS}wLk__bil=fHMGuBN8z$Rtjjx_91e!$D|Wg_P^SL_Jr9$8#g zdiR%H`R6zVhl#-&$!qnYv1WFJ5&hdA#)VGqaLO$cnFY)d6Ad$8V){G1s1r7E??try zyG;vAS8>jzTa07o)vBY#04Qw1@X6Blj?D9-PY!_QsfwL4oR4Y@vlT^^MPYtBy1waz&wTj2*;y-CTRfLd+XnL@|YJx$I zVtv%E8g`9inI?+Qk>7aUCw_0b zwsirhPkMjTxCToVbAYf64uQkhDZZgVCIh95dYgvZBoC8I8E!!7i{SGckQShh&6Rzh zY-cr7Y+qd52aG}VT{loA@aEm-|8uXVDb}5ivecG$y)n!m({`RowshJoI6D6$%9RsHMTqxs-qtL-6j|a zJ77OiWgl}I96L3@ehc)oftde3LOZ@vMoK*N?)KJ7Jhs<_jd-8*t`et12av_VX@j22 zZrR1N@?&pX`Fb4E-$9mDY2_!h__KOcIL^RY_m6=46t}~jQ2K2N8=oMEIn> zLr_q)@MWiN1vS`l>-4>*j4_<@Yf!JPu$TQW!OcSo;k;QtDyG1mz8ppVMIO8vPJ>Qu zBUws;thWZxrHKnx)cJvUKcMI`3LU+Oqn8{_OA9xWK>}SK^7>kdiq=qfHEEJOsUS?f zT$#XFFK&)O6fM!-#&XcXS=zyDYm$IWxIYV zXJD8uyy>xOWMQ-bkZpAu=9ljaE%^S;lJk;-j70a{Kc}9453HhX);x;gi4=hSMdM)& zqe#l}jstg_lJITX-Q4C+-mE%2RHg4mAN&ye)O52QP9S+5=w-O>OA7y(C?csXU>H0* zeM~u9p&hR`0r0s?d5BE@BTnqr28zo&-!}=U)9fKaS>w6SH8b6SaJAI{F%cfeyn?J7 zPt?EUBt@vt)(`GYHB!u1b+g^)#gPD61s`H+|+@uxj^;`*f@$igpot5mz# z@FBFjOuKU~zpby>X-laQ21y)o88hK|OO5uEx*U!E4LSvDt2D&bhsrjGuFZ`u zwkCkW+3VcWV5$obHt!@iLzlNOVtX537EFFS)lB=shV3-*bNA-KB{k{&B3J4n> ztHebzq{7<1_jk$%s<8_H0<66cY6tbzEPo6GIukK95_Q4JW>DPVuV9Qb{rg0> zybD132^{4dxC~EUT#;?67j9zZDLtO><(<7ZTc&YLB&L2w)R@gt!TAWrE}P=DB(~c>@2OOa@vTJGmR5nWEOt%99=g@XH z#J;c(J{rFQogVSpLj5*F#5H&H4qukhw;%c52RMRtfL`GFYMDyaRw;o@0_V*m;ML*!nl+G literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.dssp new file mode 100644 index 00000000000..db880de3659 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.dssp @@ -0,0 +1 @@ +-HHHHHHHHHHHH--HHHHHHHH---------EEE-HHH---HHHHHHHH-----HHHHHHHHHHHHHHHHHHHH---------HHHHHHHHHHHHHHHH--------HHHHHHHHHH-------EEE-HHHHHHHHHHHHHHHHHHHH-----HHH---- 4dkcA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/4dkcA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..1b8ac16fd6195c18d800351bbe8a26e788135862 GIT binary patch literal 23213 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/README.md b/testsuite/MDAnalysisTests/data/dssp/README.md new file mode 100644 index 00000000000..a826b22c243 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/README.md @@ -0,0 +1 @@ +Files that match glob pattern '????.pdb.gz' and matching '????.pdb.dssp' files, containing the secondary structure assignment string, will be tested automatically. diff --git a/testsuite/MDAnalysisTests/data/gms/__init__.py b/testsuite/MDAnalysisTests/data/gms/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/gromacs/__init__.py b/testsuite/MDAnalysisTests/data/gromacs/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/gromacs/gromos54a7_edited.ff/__init__.py b/testsuite/MDAnalysisTests/data/gromacs/gromos54a7_edited.ff/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/gromos11/__init__.py b/testsuite/MDAnalysisTests/data/gromos11/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/lammps/__init__.py b/testsuite/MDAnalysisTests/data/lammps/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/lammps/additional_columns.data b/testsuite/MDAnalysisTests/data/lammps/additional_columns.data new file mode 100644 index 00000000000..80b9a57bb7d --- /dev/null +++ b/testsuite/MDAnalysisTests/data/lammps/additional_columns.data @@ -0,0 +1,29 @@ +LAMMPS data file via write_data, version 24 Mar 2022, timestep = 500 + +10 atoms +1 atom types + +0 42.6 xlo xhi +0 44.2712 ylo yhi +-25.1 25.1 zlo zhi + +Masses + +1 12.011 + +Pair Coeffs # lj/cut/coul/long/omp + +1 0.0663 3.5812 + +Atoms # full + +1 2 1 -0.00706800004577013 2.84 8.17 -25 0 0 0 +2 2 1 0.004078816788554217 7.1 8.17 -25 0 0 0 +3 2 1 -0.005824512619752745 2.13 6.94 -25 0 0 0 +4 2 1 0.002812345167059992 6.39 6.94 -25 0 0 0 +5 2 1 -0.004070019151543417 2.84 5.71 -25 0 0 0 +6 2 1 0.004796116641855679 7.1 5.71 -25 0 0 0 +7 2 1 -0.003217742434809291 2.13 4.48 -25 0 0 0 +8 2 1 0.0008273956785370801 6.39 4.48 -25 0 0 0 +9 2 1 -0.0003942558636157474 2.84 3.25 -25 0 0 0 +10 2 1 0.001288716009147968 7.1 3.25 -25 0 0 0 diff --git a/testsuite/MDAnalysisTests/data/lammps/additional_columns.lammpstrj b/testsuite/MDAnalysisTests/data/lammps/additional_columns.lammpstrj new file mode 100644 index 00000000000..79ad9a6fb74 --- /dev/null +++ b/testsuite/MDAnalysisTests/data/lammps/additional_columns.lammpstrj @@ -0,0 +1,19 @@ +ITEM: TIMESTEP +0 +ITEM: NUMBER OF ATOMS +10 +ITEM: BOX BOUNDS pp pp ff +0.0000000000000000e+00 4.2600000000000001e+01 +0.0000000000000000e+00 4.4271200000000000e+01 +-2.5100000000000001e+01 2.5100000000000001e+01 +ITEM: ATOMS id x y z q p +1 2.84 8.17 -25 0.00258855 1.1 +2 7.1 8.17 -25 6.91952e-05 1.2 +3 2.13 6.94 -25 0.0105548 1.1 +4 6.39 6.94 -25 0.00420319 1.2 +5 2.84 5.71 -25 0.00919172 1.1 +6 7.1 5.71 -25 0.00479777 1.2 +7 2.13 4.48 -25 0.000636864 1.1 +8 6.39 4.48 -25 0.00587125 1.2 +9 2.84 3.25 -25 -0.00218125 1.1 +10 7.1 3.25 -25 0.0068891 1.2 diff --git a/testsuite/MDAnalysisTests/data/merge/2zmm/__init__.py b/testsuite/MDAnalysisTests/data/merge/2zmm/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/merge/__init__.py b/testsuite/MDAnalysisTests/data/merge/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/mol2/__init__.py b/testsuite/MDAnalysisTests/data/mol2/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/tprs/2lyz_gmx_2024.tpr b/testsuite/MDAnalysisTests/data/tprs/2lyz_gmx_2024.tpr new file mode 100644 index 0000000000000000000000000000000000000000..d983c5db8d936918f04bf05f3b0d6637385498d2 GIT binary patch literal 515488 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ⓈW%kOl)Qmn_0xV4r}5Wy|dQH>|Jx%yDMXj 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 z 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/tprs/virtual_sites/__init__.py b/testsuite/MDAnalysisTests/data/tprs/virtual_sites/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/testsuite/MDAnalysisTests/data/tprs/virtual_sites/extra-interactions-2024.tpr b/testsuite/MDAnalysisTests/data/tprs/virtual_sites/extra-interactions-2024.tpr new file mode 100644 index 0000000000000000000000000000000000000000..605d959c22d824e4b6e2a48b807f072ce46c2908 GIT binary patch literal 16088 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 "2.0.0": + if module_name in {"rdkit", "parmed"}: + return True try: test = importlib.import_module(module_name) except ImportError: diff --git a/testsuite/MDAnalysisTests/utils/test_duecredit.py b/testsuite/MDAnalysisTests/utils/test_duecredit.py index d9a6a8a7f96..adb32a5f50d 100644 --- a/testsuite/MDAnalysisTests/utils/test_duecredit.py +++ b/testsuite/MDAnalysisTests/utils/test_duecredit.py @@ -64,15 +64,6 @@ def test_duecredit_collector_primary(self, module, path, citekey): ("MDAnalysis.analysis.leaflet", "MDAnalysis.analysis.leaflet", "10.1002/jcc.21787"), - ("MDAnalysis.analysis.hole2", - "MDAnalysis.analysis.hole2", - "10.1016/s0006-3495(93)81293-1"), - ("MDAnalysis.analysis.hole2", - "MDAnalysis.analysis.hole2", - "10.1016/s0263-7855(97)00009-x"), - ("MDAnalysis.analysis.hole2", - "MDAnalysis.analysis.hole2", - "10.1016/j.jmb.2013.10.024"), ("MDAnalysis.lib.qcprot", "MDAnalysis.lib.qcprot", "10.1107/s0108767305015266"), @@ -81,7 +72,10 @@ def test_duecredit_collector_primary(self, module, path, citekey): "qcprot2"), ("MDAnalysis.analysis.encore", "MDAnalysis.analysis.encore", - "10.1371/journal.pcbi.1004415") + "10.1371/journal.pcbi.1004415"), + ("MDAnalysis.analysis.dssp", + "MDAnalysis.analysis.dssp", + "10.1002/bip.360221211") ]) def test_duecredit_collector_analysis_modules(self, module, path, citekey): importlib.import_module(module) diff --git a/testsuite/MDAnalysisTests/utils/test_pickleio.py b/testsuite/MDAnalysisTests/utils/test_pickleio.py index d26de0aa258..824261ed218 100644 --- a/testsuite/MDAnalysisTests/utils/test_pickleio.py +++ b/testsuite/MDAnalysisTests/utils/test_pickleio.py @@ -90,10 +90,10 @@ def test_iopickle_text(f_text): assert_equal(f_text.readlines(), f_text_pickled.readlines()) -def test_offset_text_to_0(f_text): +def test_offset_text_same(f_text): f_text.readline() f_text_pickled = pickle.loads(pickle.dumps(f_text)) - assert_equal(f_text_pickled.tell(), 0) + assert_equal(f_text_pickled.tell(), f_text.tell()) @pytest.fixture(params=[ diff --git a/testsuite/pyproject.toml b/testsuite/pyproject.toml new file mode 100644 index 00000000000..4af3b1d85c2 --- /dev/null +++ b/testsuite/pyproject.toml @@ -0,0 +1,153 @@ +[build-system] +requires = [ + "setuptools >= 40.9.0", +] +build-backend = "setuptools.build_meta" + +[project] +name = "MDAnalysisTests" +description = "MDAnalysis testsuite" +license = {file = "LICENSE" } +authors = [ + {name = "MDAnalysis", email = "mdanalysis@numfocus.org"}, +] +maintainers = [ + {name = "MDAnalysis", email = "mdanalysis@numfocus.org"}, +] +classifiers = [ + "Development Status :: 6 - Mature", + "Environment :: Console", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Operating System :: POSIX", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows ", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: C", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Chemistry", + "Topic :: Software Development :: Libraries :: Python Modules", +] +readme = {file = "README", content-type = "text/x-rst"} +requires-python = ">=3.10" +dynamic = ["version", "dependencies"] + +[project.urls] +Homepage = "https://www.mdanalysis.org" +Download = "https://github.com/MDAnalysis/mdanalysis/releases" +Documentation = "https://docs.mdanalysis.org/" +"User Guide" = "https://userguide.mdanalysis.org/" +"Issue Tracker" = "https://github.com/mdanalysis/mdanalysis/issues" +"Github Discussions" = "https://github.com/MDAnalysis/mdanalysis/discussions" +Discord = "https://discord.com/channels/807348386012987462/" +Blog = "https://www.mdanalysis.org/blog/" +Source = "https://github.com/mdanalysis/mdanalysis" + +[tool.setuptools] +zip-safe = false +include-package-data = true + +[tool.setuptools.packages.find] +namespaces = false + +[tool.setuptools.package-data] +MDAnalysisTests = [ + "data/*.psf", + "data/*.dcd", + "data/*.pdb", + "data/tprs/*.tpr", + "data/tprs/all_bonded/*.gro", + "data/tprs/all_bonded/*.top", + "data/tprs/all_bonded/*.mdp", + "data/tprs/virtual_sites/*.mdp", + "data/tprs/virtual_sites/*.top", + "data/tprs/virtual_sites/*.gro", + "data/*.tpr", + "data/tprs/*/*.tpr", + "data/*.gro", + "data/*.xtc", + "data/*.trr", + "data/*npy", + "data/*.crd", + "data/*.xyz", + "data/Amber/*.bz2", + "data/Amber/*.prmtop", + "data/Amber/*.top", + "data/Amber/*.parm7", + "data/Amber/*.rst7", + "data/Amber/*.trj", + "data/Amber/*.mdcrd", + "data/Amber/*.ncdf", + "data/Amber/*.nc", + "data/Amber/*.inpcrd", + "data/gromos11/*.gz", + "data/gromos11/*.trc", + "data/*.pqr", + "data/*.pdbqt", + "data/*.bz2", + "data/*.gz", + "data/*.ent", + "data/*.fasta", + "data/*.dat", + "data/*.dms", + "data/merge/2zmm/*.pdb", + "data/*.trz", + "data/mol2/*.mol2", + "data/contacts/*.gro.bz2", + "data/contacts/*.dat", + "data/capping/*.gro", + "data/capping/*.pdb", + "data/lammps/*", + "data/gms/*.xyz", + "data/gms/*.gms", + "data/gms/*.gms.gz", + "data/*.inpcrd", + "data/dlpoly/CONFIG*", + "data/dlpoly/HISTORY*", + "data/*.xml", + "data/coordinates/*", + "data/*xvg", + "data/*.mmtf", + "data/*.mmtf.gz", + "data/analysis/*", + "data/*.gsd", + "data/windows/*", + "data/*.itp", + "data/gromacs/gromos54a7_edited.ff/*", + "data/*.coor", + "data/*.h5md", + "data/*.in", + "data/*.top", + "data/*.sdf", + "data/*.edr", + "data/*.tng", + "data/*.pdbx", + "data/*.txt", + "data/dssp/*.pdb.gz", + "data/dssp/*.pdb.dssp", +] + +[tool.pytest.ini_options] +filterwarnings = [ + "always", + "error:`np.*` is a deprecated alias for the builtin:DeprecationWarning", + # don't enforce for third party packages though: + "ignore:`np.*` is a deprecated alias for the builtin:DeprecationWarning:networkx.*:", + "error:Creating an ndarray from ragged nested sequences", + "error:invalid escape sequence \\\\:DeprecationWarning", + # Ignore frequent errors popping up in our tests + # Elements + "ignore:Element information:UserWarning", + # Mass + "ignore:Failed to guess the mass:UserWarning", + # Coordinates + "ignore:No coordinate reader found:UserWarning", + "ignore:Reader has no dt information, set to 1.0 ps", + # NamedStream warnings + "ignore:Constructed NamedStream:RuntimeWarning", +] diff --git a/testsuite/setup.cfg b/testsuite/setup.cfg deleted file mode 100644 index a11a82aa358..00000000000 --- a/testsuite/setup.cfg +++ /dev/null @@ -1,26 +0,0 @@ -# "encountered in " Runtimewarnings come from numpy for unit cell conversions. -# They should be activated again once we fixed the occurrence in the code. -[tool:pytest] -filterwarnings= - always - error:`np.*` is a deprecated alias for the builtin:DeprecationWarning - # don't enforce for third party packages though: - ignore:`np.*` is a deprecated alias for the builtin:DeprecationWarning:networkx.*: - error:Creating an ndarray from ragged nested sequences - error:invalid escape sequence \\:DeprecationWarning - # Ignore frequent errors popping up in our tests - # Elements - ignore:Element information:UserWarning - # Mass - ignore:Failed to guess the mass:UserWarning - # Coordinates - ignore:No coordinate reader found:UserWarning - ignore:Reader has no dt information, set to 1.0 ps - # NamedStream warnings - ignore:Constructed NamedStream:RuntimeWarning - -# Settings to test for warnings we throw -# [tool:pytest] -# Filterwarnings= always -# ignore::UserWarning -# ignore:invalid value encountered in.*:RuntimeWarning diff --git a/testsuite/setup.py b/testsuite/setup.py index 7e40bcbe96a..887546fd385 100755 --- a/testsuite/setup.py +++ b/testsuite/setup.py @@ -23,32 +23,27 @@ # """Setuptools-based setup script for tests of MDAnalysis. -A working installation of NumPy is required. +A working installation of MDAnalysis of the same version is required. For a basic installation just type the command:: - python setup.py install + pip install . -For more in-depth instructions, see the installation section at the -MDAnalysis Wiki: +For more in-depth instructions, see the installation section in the +MDAnalysis User Guide: - https://github.com/MDAnalysis/mdanalysis/wiki/INSTALL + https://userguide.mdanalysis.org/stable/installation.html Also free to ask on GitHub Discussions for help: https://github.com/MDAnalysis/mdanalysis/discussions -(Note that the group really is called `mdnalysis-discussion' because -Google groups forbids any name that contains the string `anal'.) """ -from setuptools import setup, find_packages +from setuptools import setup from setuptools.command import sdist import os import shutil -import codecs -import sys -import warnings class MDA_SDist(sdist.sdist): @@ -77,122 +72,16 @@ def run(self): os.remove(os.path.join(here, 'AUTHORS')) -# Make sure I have the right Python version. -if sys.version_info[:2] < (3, 9): - print("MDAnalysis requires Python 3.9 or better. " - "Python {0:d}.{1:d} detected".format(*sys.version_info[:2])) - print("Please upgrade your version of Python.") - sys.exit(-1) - - if __name__ == '__main__': # this must be in-sync with MDAnalysis RELEASE = "2.8.0-dev0" - with open("README") as summary: - LONG_DESCRIPTION = summary.read() - - CLASSIFIERS = [ - 'Development Status :: 6 - Mature', - 'Environment :: Console', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', - 'Operating System :: POSIX', - 'Operating System :: MacOS :: MacOS X', - 'Operating System :: Microsoft :: Windows ', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: C', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Bio-Informatics', - 'Topic :: Scientific/Engineering :: Chemistry', - 'Topic :: Software Development :: Libraries :: Python Modules', - ] - setup(name='MDAnalysisTests', - version=RELEASE, - description='MDAnalysis testsuite', - long_description=LONG_DESCRIPTION, - long_description_content_type='text/x-rst', - author='MDAnalysis Development Team', - author_email='mdanalysis@numfocus.org', - maintainer='MDAnalysis Core Developers', - maintainer_email='mdanalysis@numfocus.org', - url='https://www.mdanalysis.org', - download_url='https://github.com/MDAnalysis/mdanalysis/releases', - project_urls={'Documentation': 'https://userguide.mdanalysis.org/stable/testing.html', - 'CI Coverage': 'https://codecov.io/gh/MDAnalysis/mdanalysis', - 'Developer Group': 'https://groups.google.com/g/mdnalysis-devel', - 'Issue Tracker': 'https://github.com/mdanalysis/mdanalysis/issues', - 'Source': 'https://github.com/mdanalysis/mdanalysis', - }, - license='GPL-3.0-or-later', - classifiers=CLASSIFIERS, - packages=find_packages(), - package_dir={'MDAnalysisTests': 'MDAnalysisTests', - 'MDAnalysisTests.plugins': 'MDAnalysisTests/plugins'}, - package_data={'MDAnalysisTests': - ['data/*.psf', 'data/*.dcd', 'data/*.pdb', - 'data/tprs/*.tpr', - 'data/tprs/all_bonded/*.gro', - 'data/tprs/all_bonded/*.top', - 'data/tprs/all_bonded/*.mdp', 'data/*.tpr', - 'data/tprs/*/*.tpr', - 'data/*.gro', 'data/*.xtc', 'data/*.trr', 'data/*npy', - 'data/*.crd', 'data/*.xyz', - 'data/Amber/*.bz2', - 'data/Amber/*.prmtop', 'data/Amber/*.top', - 'data/Amber/*.parm7', - 'data/Amber/*.rst7', - 'data/Amber/*.trj', 'data/Amber/*.mdcrd', - 'data/Amber/*.ncdf', 'data/Amber/*.nc', - 'data/Amber/*.inpcrd', - 'data/gromos11/*.gz', 'data/gromos11/*.trc', - 'data/*.pqr', 'data/*.pdbqt', 'data/*.bz2', 'data/*.gz', - 'data/*.ent', - 'data/*.fasta', - 'data/*.dat', - 'data/*.dms', - 'data/merge/2zmm/*.pdb', - 'data/*.trz', - 'data/mol2/*.mol2', - 'data/contacts/*.gro.bz2', 'data/contacts/*.dat', - 'data/capping/*.gro', 'data/capping/*.pdb', - 'data/lammps/*', - 'data/gms/*.xyz', 'data/gms/*.gms', - 'data/gms/*.gms.gz', - 'data/*.inpcrd', - 'data/dlpoly/CONFIG*', - 'data/dlpoly/HISTORY*', - 'data/*.xml', - 'data/coordinates/*', - 'data/*xvg', - 'data/*.mmtf', 'data/*.mmtf.gz', - 'data/analysis/*', - 'data/*.gsd', - 'data/windows/*', - 'data/*.itp', "data/gromacs/gromos54a7_edited.ff/*", - 'data/*.coor', - 'data/*.h5md', - 'data/*.in', - 'data/*.top', - 'data/*.sdf', - 'data/*.edr', - 'data/*.tng', - 'data/*.pdbx', - 'data/*.txt', - ], - }, - python_requires='>=3.9', - install_requires=[ - 'MDAnalysis=={0!s}'.format(RELEASE), # same as this release! - 'pytest>=3.3.0', # Raised to 3.3.0 due to Issue 2329 - 'hypothesis', - ], - # had 'KeyError' as zipped egg (2MB savings are not worth the - # trouble) - zip_safe=False, - cmdclass={'sdist': MDA_SDist}, - ) + setup( + version=RELEASE, + install_requires=[ + 'MDAnalysis=={0!s}'.format(RELEASE), # same as this release! + 'pytest>=3.3.0', # Raised to 3.3.0 due to Issue 2329 + 'hypothesis', + ], + cmdclass={'sdist': MDA_SDist}, + ) From cb94b512af5d986214739a203387a5cdeda59650 Mon Sep 17 00:00:00 2001 From: Jure Cerar Date: Wed, 10 Jul 2024 00:44:24 +0200 Subject: [PATCH 17/18] Changed to iterate over `resindices` rather than `resids` --- package/MDAnalysis/analysis/sasa.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/package/MDAnalysis/analysis/sasa.py b/package/MDAnalysis/analysis/sasa.py index 485797035e3..a6cb8db64fe 100644 --- a/package/MDAnalysis/analysis/sasa.py +++ b/package/MDAnalysis/analysis/sasa.py @@ -556,14 +556,18 @@ def _single_frame(self): result[atom.resid] += area[i] # Calculate surface of each isolated "tripeptide" - for resid in self.ag.residues.resids: + for resindex in self.ag.residues.resindices: tripep = self.ag.select_atoms( - f"(byres (bonded resid {resid})) and ({self._subsele})") + f"(byres (bonded resindex {resindex})) and ({self._subsele})") + if len(tripep) == 0: + continue tripep_area = self._get_sasa(tripep) - exposed_area = sum( - [a for a, id in zip(tripep_area, tripep.resids)if id == resid]) + exposed_area = sum([ + a for a, id in zip(tripep_area, tripep.resindices) + if id == resindex + ]) if exposed_area != 0.0: - result[resid] /= exposed_area + result[resindex] /= exposed_area # Update the result and account for residues that # might have empty selection From dfcc8b828df59e05a1424be1dc7b286a3f37a234 Mon Sep 17 00:00:00 2001 From: Jure Cerar Date: Wed, 10 Jul 2024 00:52:22 +0200 Subject: [PATCH 18/18] Corrected the changelog and authors --- package/AUTHORS | 2 +- package/CHANGELOG | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/package/AUTHORS b/package/AUTHORS index db72bf2e286..e831d330b41 100644 --- a/package/AUTHORS +++ b/package/AUTHORS @@ -241,7 +241,7 @@ Chronological list of authors - Leon Wehrhan - Valerij Talagayev - Kurt McKee - + - Jure Cerar External code diff --git a/package/CHANGELOG b/package/CHANGELOG index 48e43d9b936..5f5b5d57d83 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -59,6 +59,8 @@ Enhancements `n_initial_contacts` attribute, with documentation. (Issue #2604, PR #4415) * Implement average structures with iterative algorithm from DOI 10.1021/acs.jpcb.7b11988. (Issue #2039, PR #4524) + * Add calculation for the accessible surface area, and relative accessible + surface area using Shrake-Rupley algorithm (PR #2439) Changes * MDAnalysis now builds against numpy 2.0 rather than the @@ -91,13 +93,6 @@ Deprecations richardjgowers, lilyminium, ALescoulie, hmacdope, HeetVekariya, JoStoe, jennaswa, ljwoods2 - - * 2.8.0 - -Enhancements - * Add calculation for the accessible surface area, and relative accessible - surface area using Shrake-Rupley algorithm (PR #2439) - * 2.7.0 Fixes

fY5C4dW`d^pp$Ea96N#lGG|Aak#U*m#$ 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 F`yWG|{%`;Q literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.dssp new file mode 100644 index 00000000000..e7a7869083a --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.dssp @@ -0,0 +1 @@ +--------------HHHHHHHHH-------EEEEE--E------HHHHHHHHHHHHHHHHHH---HHHHHHHHHHHHHHHHHHH-----------EEEEEHHHHHHHHHHHHHHHH--------HHH----E-- 1eteA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1eteA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..1a2749a1cc52c342735d89f2b5af97878db1f738 GIT binary patch literal 19225 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.dssp new file mode 100644 index 00000000000..5326cbf72bf --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.dssp @@ -0,0 +1 @@ +-EEE----EEEEEEE--E--HHHEEE-----HHHHHHHHHH--------EEEEE-----EEEE------HHH-E-----EEEEEEEE-- 1i8nA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1i8nA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..2af1b729ad7e442a82b4a9732deb9838cce8d982 GIT binary patch literal 12685 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.dssp b/testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.dssp new file mode 100644 index 00000000000..313ce7f605f --- /dev/null +++ b/testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.dssp @@ -0,0 +1 @@ +-----E-E--E---HHHE----EE--------EE---E----EEE------EE----E---EEEE----HHHHH----EEEEEE- 1lpbA.pdb diff --git a/testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1lpbA.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..71ca46a6a97d67e97530e0efd763d5c33874556c GIT binary patch literal 13756 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 literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/dssp/1mr1D_failing.pdb.gz b/testsuite/MDAnalysisTests/data/dssp/1mr1D_failing.pdb.gz new file mode 100644 index 0000000000000000000000000000000000000000..25bd55a047a4dd9372d3dd9257b5005ae335c3d2 GIT binary patch literal 13905 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